Program Listing for File ActiveEndpoint.hpp
↰ Return to documentation for file (BackendLibfabric/ActiveEndpoint.hpp)
#ifndef NETIO3BACKEND_BACKENDLIBFABRIC_ACTIVEENDPOINT_HPP
#define NETIO3BACKEND_BACKENDLIBFABRIC_ACTIVEENDPOINT_HPP
#include <rdma/fabric.h>
#include <rdma/fi_domain.h>
#include "Helpers.hpp"
#include "netio3-backend/Netio3Backend.hpp"
namespace netio3::libfabric {
class ActiveEndpoint
{
public:
ActiveEndpoint(EndPointAddress address,
NetworkMode mode,
EndpointCapabilities capabilities,
fid_fabric* fabric,
fid_domain* domain,
FiInfoUniquePtr&& info,
fid_ep* shx_ctx = nullptr,
fid_av* av = nullptr);
ActiveEndpoint(EndPointAddress address,
NetworkMode mode,
EndpointCapabilities capabilities,
fid_fabric* fabric,
fid_domain* domain,
std::uint64_t info_flags,
fid_ep* shx_ctx = nullptr,
fid_av* av = nullptr);
enum class ConnectionMode {
Connect,
Accept
};
void complete_connection(ConnectionMode mode, fid_pep* pep = nullptr);
void update_addresses();
[[nodiscard]] const Endpoint& get_endpoint() const { return m_ep; }
[[nodiscard]] Endpoint& get_endpoint() { return m_ep; }
[[nodiscard]] const EndPointAddress& get_address() const { return m_address; }
[[nodiscard]] const EndPointAddress& get_local_address() const { return m_local_address; }
[[nodiscard]] const EndpointCapabilities& get_capabilities() const { return m_capabilities; }
[[nodiscard]] CqCmFds get_cq_cm_fds() const { return {m_ep.cqfd, m_ep.rcqfd, m_ep.eqfd}; }
void set_cq_ev_ctx(EventContext ctx) { m_cq_ev_ctx = std::move(ctx); }
void set_rcq_ev_ctx(EventContext ctx) { m_rcq_ev_ctx = std::move(ctx); }
void set_eq_ev_ctx(EventContext ctx) { m_eq_ev_ctx = std::move(ctx); }
[[nodiscard]] const EventContext& get_eq_ev_ctx() const { return m_eq_ev_ctx; }
[[nodiscard]] const EventContext& get_cq_ev_ctx() const { return m_cq_ev_ctx; }
[[nodiscard]] const EventContext& get_rcq_ev_ctx() const { return m_rcq_ev_ctx; }
private:
[[nodiscard]] Endpoint create_endpoint(fid_fabric* fabric,
fid_domain* domain,
NetworkMode mode,
FiInfoUniquePtr&& info,
std::uint64_t info_flags,
fid_ep* shx_ctx,
fid_av* av);
void open_endpoint(Endpoint& ep, fid_fabric* fabric, fid_domain* domain, fi_info* info);
void bind_av(Endpoint& ep, fid_av* av) const;
void enable_endpoint(Endpoint& ep);
[[nodiscard]] static fi_cq_attr prepare_cq_attr();
void open_cq(Endpoint& ep, fid_domain* domain);
void bind_srx_context(Endpoint& ep, fid_ep* shx_ctx) const;
[[nodiscard]] static FiInfoUniquePtr get_info(const EndPointAddress& address, NetworkMode mode, std::uint64_t info_flags);
EndPointAddress m_address{};
EndPointAddress m_local_address{};
EndpointCapabilities m_capabilities{};
Endpoint m_ep{};
EventContext m_eq_ev_ctx{};
EventContext m_cq_ev_ctx{};
EventContext m_rcq_ev_ctx{};
};
} // namespace netio3::libfabric
#endif // NETIO3BACKEND_BACKENDLIBFABRIC_ACTIVEENDPOINT_HPP