9 #ifndef FAIR_MQ_OFI_CONTEXT_H
10 #define FAIR_MQ_OFI_CONTEXT_H
12 #include <FairMQLogger.h>
13 #include <FairMQTransportFactory.h>
15 #include <asiofi/domain.hpp>
16 #include <asiofi/fabric.hpp>
17 #include <asiofi/info.hpp>
18 #include <boost/asio/io_context.hpp>
20 #include <netinet/in.h>
27 namespace fair::mq::ofi
30 enum class ConnectionType : bool { Bind, Connect };
36 friend auto operator<<(std::ostream& os,
const Address& a) -> std::ostream&
38 return os << a.Protocol <<
"://" << a.Ip <<
":" << a.Port;
40 friend auto operator==(
const Address& lhs,
const Address& rhs) ->
bool
42 return (lhs.Protocol == rhs.Protocol) && (lhs.Ip == rhs.Ip) && (lhs.Port == rhs.Port);
57 int numberIoThreads = 1);
60 auto GetAsiofiVersion() const -> std::
string;
61 auto GetIoContext() -> boost::asio::io_context& {
return fIoContext; }
62 static auto ConvertAddress(std::string address) ->
Address;
63 static auto ConvertAddress(
Address address) -> sockaddr_in;
64 static auto ConvertAddress(sockaddr_in address) ->
Address;
65 static auto VerifyAddress(
const std::string& address) ->
Address;
66 auto Interrupt() ->
void { LOG(debug) <<
"OFI transport: Interrupted (NOOP - not implemented)."; }
67 auto Resume() ->
void { LOG(debug) <<
"OFI transport: Resumed (NOOP - not implemented)."; }
69 auto MakeReceiveMessage(
size_t size) -> MessagePtr;
70 auto MakeSendMessage(
size_t size) -> MessagePtr;
71 auto GetSizeHint() ->
size_t {
return fSizeHint; }
72 auto SetSizeHint(
size_t size) ->
void { fSizeHint = size; }
75 boost::asio::io_context fIoContext;
76 boost::asio::io_context::work fIoWork;
77 std::vector<std::thread> fThreadPool;
82 auto InitThreadPool(
int numberIoThreads) -> void;
85 struct ContextError : std::runtime_error {
using std::runtime_error::runtime_error; };