Program Listing for File BackendLibfabric.hpp

Return to documentation for file (BackendLibfabric/BackendLibfabric.hpp)

#ifndef NETIO3BACKEND_BACKENDLIBFABRIC_BACKENDLIBFABRIC_HPP
#define NETIO3BACKEND_BACKENDLIBFABRIC_BACKENDLIBFABRIC_HPP

#include "ConnectionManager.hpp"
#include "netio3-backend/NetworkBuffer.hpp"

namespace netio3::libfabric {
  class BackendLibfabric : public NetworkBackend
  {
  public:
    BackendLibfabric(const NetworkConfig& config, std::shared_ptr<BaseEventLoop> evloop);

    void open_send_endpoint(const EndPointAddress& address,
                            const ConnectionParameters& connection_params) override;

    [[nodiscard]] EndPointAddress open_listen_endpoint(
      const EndPointAddress& address,
      const ConnectionParametersRecv& connection_params) override;

    void close_send_endpoint(const EndPointAddress& address) override;

    void close_listen_endpoint(const EndPointAddress& address) override;

    [[nodiscard]] NetioStatus send_data(const EndPointAddress& address,
                                        std::span<std::uint8_t> data,
                                        std::span<const std::uint8_t> header_data,
                                        std::uint64_t key) override;

    [[nodiscard]] NetioStatus send_data(const EndPointAddress& address,
                                        std::span<const iovec> iov,
                                        std::span<const std::uint8_t> header_data,
                                        std::uint64_t key) override;

    [[nodiscard]] NetioStatus send_data_copy(const EndPointAddress& address,
                                             std::span<const std::uint8_t> data,
                                             std::span<const std::uint8_t> header_data,
                                             std::uint64_t key) override;

    [[nodiscard]] NetioStatus send_data_copy(const EndPointAddress& address,
                                             std::span<const iovec> iov,
                                             std::span<const std::uint8_t> header_data,
                                             std::uint64_t key) override;

    [[nodiscard]] NetworkBuffer* get_buffer(const EndPointAddress& address) override;

    [[nodiscard]] NetioStatus send_buffer(const EndPointAddress& address,
                                          NetworkBuffer* buffer) override;

    [[nodiscard]] std::size_t get_num_available_buffers(const EndPointAddress& address) override;

  private:
    static bool check_ip_address(const EndPointAddress& address);

    std::shared_ptr<libfabric::ConnectionManager> m_connection_manager;
  };
}  // namespace netio3::libfabric

#endif  // NETIO3BACKEND_BACKENDLIBFABRIC_BACKENDLIBFABRIC_HPP