9 #ifndef FAIR_MQ_OFI_CONTEXT_H 10 #define FAIR_MQ_OFI_CONTEXT_H 12 #include <boost/asio.hpp> 14 #include <netinet/in.h> 16 #include <rdma/fabric.h> 29 enum class ConnectionType : bool { Bind, Connect };
30 enum class Direction : bool { Receive, Transmit };
41 Context(
int numberIoThreads = 2);
44 auto CreateOfiEndpoint() -> fid_ep*;
45 auto CreateOfiCompletionQueue(Direction dir) -> fid_cq*;
46 auto GetZmqVersion()
const -> std::string;
47 auto GetOfiApiVersion()
const -> std::string;
48 auto GetPbVersion()
const -> std::string;
49 auto GetBoostVersion()
const -> std::string;
50 auto GetZmqContext()
const ->
void* {
return fZmqContext; }
51 auto GetIoContext() -> boost::asio::io_service& {
return fIoContext; }
52 auto InsertAddressVector(sockaddr_in address) -> fi_addr_t;
53 auto AddressVectorLookup(fi_addr_t address) -> sockaddr_in;
58 friend auto operator<<(std::ostream& os,
const Address& a) -> std::ostream& {
return os << a.Protocol <<
"://" << a.Ip <<
":" << a.Port; }
60 auto InitOfi(ConnectionType type,
Address address) -> void;
61 static auto ConvertAddress(std::string address) ->
Address;
62 static auto ConvertAddress(
Address address) -> sockaddr_in;
63 static auto ConvertAddress(sockaddr_in address) ->
Address;
64 static auto VerifyAddress(
const std::string& address) ->
Address;
69 fid_fabric* fOfiFabric;
70 fid_domain* fOfiDomain;
71 fid_av* fOfiAddressVector;
72 fid_eq* fOfiEventQueue;
73 boost::asio::io_service fIoContext;
74 boost::asio::io_service::work fIoWork;
75 std::vector<std::thread> fThreadPool;
77 auto OpenOfiFabric() -> void;
78 auto OpenOfiEventQueue() -> void;
79 auto OpenOfiDomain() -> void;
80 auto OpenOfiAddressVector() -> void;
81 auto InitThreadPool(
int numberIoThreads) -> void;
84 struct ContextError : std::runtime_error {
using std::runtime_error::runtime_error; };
Transport-wide context.
Definition: Context.h:38
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23