Program Listing for File DomainManager.hpp
↰ Return to documentation for file (BackendLibfabric/DomainManager.hpp
)
#ifndef NETIO3BACKEND_BACKENDLIBFABRIC_DOMAINMANAGER_HPP
#define NETIO3BACKEND_BACKENDLIBFABRIC_DOMAINMANAGER_HPP
#include <cstdint>
#include <rdma/fabric.h>
#include "Helpers.hpp"
#include "netio3-backend/Netio3Backend.hpp"
namespace netio3::libfabric {
class DomainContext
{
public:
explicit DomainContext(fid_domain* domain) : domain_ptr{domain} {}
[[nodiscard]] const fid_domain* get_domain() const { return domain_ptr; }
[[nodiscard]] fid_domain* get_domain() { return domain_ptr; }
private:
fid_domain* domain_ptr{nullptr};
};
class DomainManager
{
public:
explicit DomainManager(NetworkMode mode, const EndPointAddress& address, std::uint64_t flags);
~DomainManager();
DomainManager(const DomainManager&) = delete;
DomainManager(DomainManager&&) = default;
DomainManager& operator=(const DomainManager&) = delete;
DomainManager& operator=(DomainManager&&) = default;
[[nodiscard]] const fid_fabric* get_fabric() const { return m_fabric; }
[[nodiscard]] fid_fabric* get_fabric() { return m_fabric; }
[[nodiscard]] const DomainContext& get_listen_domain() const { return m_listen_domain; }
[[nodiscard]] DomainContext& get_listen_domain() { return m_listen_domain; }
[[nodiscard]] const DomainContext& get_send_domain() const { return m_send_domain; }
[[nodiscard]] DomainContext& get_send_domain() { return m_send_domain; }
private:
[[nodiscard]] static FiInfoUniquePtr create_info(NetworkMode mode,
const EndPointAddress& address,
std::uint64_t flags);
[[nodiscard]] fid_fabric* create_fabric();
[[nodiscard]] DomainContext create_domain() const;
FiInfoUniquePtr m_info{nullptr};
fid_fabric* m_fabric{nullptr};
DomainContext m_send_domain;
DomainContext m_listen_domain;
};
} // namespace netio3::libfabric
#endif // NETIO3BACKEND_BACKENDLIBFABRIC_DOMAINMANAGER_HPP