artdaq  v3_11_01
RoutingPacket.hh
1 #ifndef artdaq_DAQrate_detail_RoutingPacket_hh
2 #define artdaq_DAQrate_detail_RoutingPacket_hh
3 
4 #include "artdaq-core/Data/Fragment.hh"
5 
6 namespace artdaq {
7 namespace detail {
8 struct RoutingPacketEntry;
14 using RoutingPacket = std::vector<RoutingPacketEntry>;
15 struct RoutingPacketHeader;
16 struct RoutingConnectHeader;
17 struct RoutingRequest;
18 struct RoutingToken;
19 
23 enum class RoutingManagerMode : uint8_t
24 {
27  DataFlow,
28  INVALID
29 };
34 {
35 public:
41  static RoutingManagerMode stringToRoutingManagerMode(std::string const& modeString)
42  {
43  if (modeString == "EventBuilding" || modeString == "eventbuilding") return RoutingManagerMode::EventBuilding;
44  if (modeString == "RequestBasedEventBuilding" || modeString == "requestbasedeventbuilding" || modeString == "RequestBased" || modeString == "requestbased") return RoutingManagerMode::RequestBasedEventBuilding;
45  if (modeString == "DataFlow" || modeString == "dataflow") return RoutingManagerMode::DataFlow;
46  return RoutingManagerMode::INVALID;
47  }
54  {
55  switch (mode)
56  {
58  return "EventBuilding";
60  return "RequestBasedEventBuilding";
62  return "DataFlow";
63  case RoutingManagerMode::INVALID:
64  return "INVALID";
65  }
66  return "Unknown Mode";
67  }
68 };
69 } // namespace detail
70 } // namespace artdaq
75 {
85  RoutingPacketEntry(Fragment::sequence_id_t seq, int rank)
86  : sequence_id(seq), destination_rank(rank) {}
87 
88  Fragment::sequence_id_t sequence_id{Fragment::InvalidSequenceID};
89  int32_t destination_rank{-1};
90 };
91 
95 #define ROUTING_MAGIC 0x1337beef
96 
101 {
102  uint32_t header{0};
103  uint64_t nEntries{0};
104 
109  explicit RoutingPacketHeader(size_t n)
110  : header(ROUTING_MAGIC), nEntries(n) {}
115 };
116 
121 {
125  enum class RequestMode : uint8_t
126  {
127  Connect = 0,
128  Disconnect = 1,
129  Request = 2,
130  Invalid = 255,
131  };
132 
138  static std::string RequestModeToString(RequestMode m)
139  {
140  switch (m)
141  {
142  case RequestMode::Connect:
143  return "Connect";
144  case RequestMode::Disconnect:
145  return "Disconnect";
146  case RequestMode::Request:
147  return "Request";
148  case RequestMode::Invalid:
149  return "Invalid";
150  }
151  return "UNKNOWN";
152  }
153 
154  uint32_t header{0};
155  int32_t rank{-1};
156  Fragment::sequence_id_t sequence_id{artdaq::Fragment::InvalidSequenceID};
157  RequestMode mode{RequestMode::Invalid};
158 
166  RoutingRequest(int r, RequestMode m = RequestMode::Connect)
167  : header(ROUTING_MAGIC), rank(r), mode(m) {}
168 
174  RoutingRequest(int r, Fragment::sequence_id_t seq)
175  : header(ROUTING_MAGIC), rank(r), sequence_id(seq), mode(RequestMode::Request) {}
176 
178 };
179 
183 #define TOKEN_MAGIC 0xbeefcafe
184 
190 {
191  uint32_t header;
192  int rank;
193  unsigned new_slots_free;
194  unsigned run_number;
195 };
196 
197 #endif //artdaq_Application_Routing_RoutingPacket_hh
RequestMode mode
Mode of the request.
A row of the Routing Table.
static std::string RequestModeToString(RequestMode m)
Convert a RequestMode enumeration value to string.
Convert RoutingManagerMode to/from strings.
unsigned new_slots_free
The number of slots free in the token sender (usually 1)
RoutingManagerMode
Mode indicating whether the RoutingManager is routing events by Sequence ID or by Send Count...
The RoutingToken contains the magic bytes, the rank of the token sender, and the number of slots free...
RoutingPacketEntry(Fragment::sequence_id_t seq, int rank)
Construct a RoutingPacketEntry with the given sequence ID and destination rank.
The header of the Routing Table, containing the magic bytes and the number of entries.
uint64_t nEntries
The number of RoutingPacketEntries in the RoutingPacket.
uint32_t header
Magic bytes to make sure the packet wasn&#39;t garbled.
Multiple sources sending to a single destination. RoutingManager pushes table updates to all senders...
std::vector< RoutingPacketEntry > RoutingPacket
A RoutingPacket is simply a vector of RoutingPacketEntry objects. It is not suitable for network tran...
int rank
The rank from which the RoutingToken came.
Fragment::sequence_id_t sequence_id
The sequence ID of the RoutingPacketEntry.
static RoutingManagerMode stringToRoutingManagerMode(std::string const &modeString)
Convert String to RoutingManagerMode.
Fragment::sequence_id_t sequence_id
The sequence ID being requested in Request mode.
RoutingPacketHeader(size_t n)
Construct a RoutingPacketHeader declaring a given number of entries.
RoutingRequest(int r, RequestMode m=RequestMode::Connect)
Create a request using the given rank and mode.
Multiple sources sending to a single destination. Table updates are triggered by senders requesting r...
RoutingPacketHeader()
Default Constructor.
RoutingRequest()
Default constructor.
unsigned run_number
The Run with which this token should be associated.
RequestMode
The mode of this request, whether Request or Connect/Disconnect control messages. ...
int32_t destination_rank
The destination rank for this sequence ID.
int32_t rank
The rank of the request sender.
static std::string routingManagerModeToString(RoutingManagerMode mode)
Convert RoutingManagerMode to string.
Represents a request sent to the RoutingManager for routing information.
One source sending to one destination (i.e. moving around completed events). Uses request-based routi...
uint32_t header
Magic bytes for identifying message type on wire.
RoutingPacketEntry()
Default Constructor.
RoutingRequest(int r, Fragment::sequence_id_t seq)
Create a RoutingRequest using the given rank and sequence ID.
uint32_t header
The magic bytes that help validate the RoutingToken.