$treeview $search $mathjax $extrastylesheet
artdaq
v3_04_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #ifndef artdaq_DAQrate_detail_RoutingPacket_hh 00002 #define artdaq_DAQrate_detail_RoutingPacket_hh 00003 00004 #include "artdaq-core/Data/Fragment.hh" 00005 #define MAX_ROUTING_TABLE_SIZE 65000 00006 00007 namespace artdaq 00008 { 00009 namespace detail 00010 { 00011 struct RoutingPacketEntry; 00017 using RoutingPacket = std::vector<RoutingPacketEntry>; 00018 struct RoutingPacketHeader; 00019 struct RoutingAckPacket; 00020 struct RoutingToken; 00021 00025 enum class RoutingMasterMode : uint8_t 00026 { 00027 RouteBySequenceID, 00028 RouteBySendCount, 00029 INVALID 00030 }; 00031 } 00032 } 00036 struct artdaq::detail::RoutingPacketEntry 00037 { 00041 RoutingPacketEntry() : sequence_id(Fragment::InvalidSequenceID), destination_rank(-1) {} 00047 RoutingPacketEntry(Fragment::sequence_id_t seq, int rank) : sequence_id(seq), destination_rank(rank) {} 00048 Fragment::sequence_id_t sequence_id; 00049 int destination_rank; 00050 }; 00051 00052 00056 #define ROUTING_MAGIC 0x1337beef 00057 00061 struct artdaq::detail::RoutingPacketHeader 00062 { 00063 uint32_t header; 00064 RoutingMasterMode mode; 00065 size_t nEntries; 00066 00072 explicit RoutingPacketHeader(RoutingMasterMode m, size_t n) : header(ROUTING_MAGIC), mode(m), nEntries(n) {} 00076 RoutingPacketHeader() : header(0), mode(RoutingMasterMode::INVALID), nEntries(0) {} 00077 }; 00078 00082 struct artdaq::detail::RoutingAckPacket 00083 { 00084 int rank; 00085 Fragment::sequence_id_t first_sequence_id; 00086 Fragment::sequence_id_t last_sequence_id; 00087 }; 00088 00089 00093 #define TOKEN_MAGIC 0xbeefcafe 00094 00099 struct artdaq::detail::RoutingToken 00100 { 00101 uint32_t header; 00102 int rank; 00103 unsigned new_slots_free; 00104 unsigned run_number; 00105 }; 00106 00107 #endif //artdaq_Application_Routing_RoutingPacket_hh