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