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 DomainManager
  {
  public:
    explicit DomainManager(const NetworkConfig& config,
                           const EndPointAddress& address,
                           std::uint64_t flags);

    [[nodiscard]] const fid_fabric* get_fabric() const { return m_fabric.get(); }
    [[nodiscard]] fid_fabric* get_fabric() { return m_fabric.get(); }

    [[nodiscard]] const fid_domain* get_domain() const { return m_domain.get(); }
    [[nodiscard]] fid_domain* get_domain() { return m_domain.get(); }

    [[nodiscard]] const fi_info* get_info() const { return m_info.get(); }

    [[nodiscard]] std::uint64_t get_next_mr_key();

  private:
    [[nodiscard]] static FiInfoUniquePtr create_info(NetworkMode mode,
                                                     const EndPointAddress& address,
                                                     std::uint64_t flags);

    [[nodiscard]] FiCloseUniquePtr<fid_fabric> create_fabric();

    [[nodiscard]] FiCloseUniquePtr<fid_domain> create_domain() const;

    FiInfoUniquePtr m_info{nullptr};
    FiCloseUniquePtr<fid_fabric> m_fabric{nullptr};
    FiCloseUniquePtr<fid_domain> m_domain{nullptr};
    std::uint64_t m_mr_key{0};
  };
}  // namespace netio3::libfabric

#endif  // NETIO3BACKEND_BACKENDLIBFABRIC_DOMAINMANAGER_HPP