4#include <boost/tuple/tuple.hpp>
5#include "portable_endian.h"
9 using EventNum_t = u_int64_t;
10 using UnixTimeNano_t = u_int64_t;
11 using UnixTimeMicro_t = u_int64_t;
12 using EventRate_t = u_int32_t;
14 constexpr u_int8_t rehdrVersion = 1;
15 constexpr u_int8_t rehdrVersionNibble = rehdrVersion << 4;
23 const u_int8_t preamble[2] {rehdrVersionNibble, 0};
25 u_int32_t bufferOffset{0};
26 u_int32_t bufferLength{0};
27 EventNum_t eventNum{0};
32 inline void set(u_int16_t data_id, u_int32_t buff_off, u_int32_t buff_len, EventNum_t event_num)
34 dataId = htobe16(data_id);
35 bufferOffset = htobe32(buff_off);
36 bufferLength = htobe32(buff_len);
37 eventNum = htobe64(event_num);
45 return be64toh(eventNum);
53 return be32toh(bufferLength);
61 return be32toh(bufferOffset);
69 return be16toh(dataId);
81 const inline boost::tuple<u_int16_t, u_int32_t, u_int32_t, EventNum_t>
get_Fields()
const
91 return preamble[0] >> 4;
100 return (preamble[0] == rehdrVersionNibble) && (preamble[1] == 0);
102 } __attribute__((__packed__));
104 constexpr u_int8_t lbhdrVersion2 = 2;
105 constexpr u_int8_t lbhdrVersion3 = 3;
113 const char preamble[2] {
'L',
'B'};
114 u_int8_t version{lbhdrVersion2};
115 u_int8_t nextProto{rehdrVersion};
117 u_int16_t entropy{0};
118 EventNum_t eventNum{0L};
123 inline void set(u_int16_t ent, EventNum_t event_num)
125 entropy = htobe16(ent);
126 eventNum = htobe64(event_num);
142 return version == lbhdrVersion2;
158 return be16toh(entropy);
166 return be64toh(eventNum);
180 const inline boost::tuple<u_int8_t, u_int8_t, u_int16_t, EventNum_t>
get_Fields()
const
184 } __attribute__((__packed__));
193 const char preamble[2] {
'L',
'B'};
194 u_int8_t version{lbhdrVersion3};
195 u_int8_t nextProto{rehdrVersion};
196 u_int16_t slotSelect{0};
197 u_int16_t portSelect{0};
203 inline void set(u_int16_t slt, u_int16_t prt, EventNum_t tk)
205 slotSelect = htobe16(slt);
206 portSelect = htobe16(prt);
223 return version == lbhdrVersion3;
239 return be16toh(slotSelect);
247 return be16toh(portSelect);
255 return be64toh(tick);
270 const inline boost::tuple<u_int8_t, u_int8_t, u_int16_t, u_int16_t, EventNum_t>
get_Fields()
const
274 } __attribute__((__packed__));
299 } __attribute__((__packed__));
315 } __attribute__((__packed__));
317 constexpr u_int8_t synchdrVersion2 = 2;
325 const char preamble[2] {
'L',
'C'};
326 u_int8_t version{synchdrVersion2};
328 u_int32_t eventSrcId{0};
329 EventNum_t eventNumber{0LL};
330 EventRate_t avgEventRateHz{0};
331 UnixTimeNano_t unixTimeNano{0LL};
336 inline void set(u_int32_t esid, EventNum_t event_num, EventRate_t avg_rate, UnixTimeNano_t ut)
338 eventSrcId = htobe32(esid);
339 eventNumber = htobe64(event_num);
340 avgEventRateHz = htobe32(avg_rate);
341 unixTimeNano = htobe64(ut);
357 return version == synchdrVersion2;
365 return be32toh(eventSrcId);
372 return be64toh(eventNumber);
379 return be32toh(avgEventRateHz);
386 return be64toh(unixTimeNano);
399 const boost::tuple<u_int32_t, EventNum_t, u_int32_t, UnixTimeNano_t>
get_Fields()
const
403 } __attribute__((__packed__));
406 constexpr size_t IPV4_HDRLEN = 20;
407 constexpr size_t IPV6_HDRLEN = 40;
408 constexpr size_t UDP_HDRLEN = 8;
411 constexpr size_t IP_HDRLEN = IPV4_HDRLEN;
412 constexpr size_t TOTAL_HDR_LEN{IP_HDRLEN + UDP_HDRLEN +
sizeof(LBHdrV2) +
sizeof(REHdr)};
415 inline constexpr size_t getIPHeaderLength(
bool useIPv6) {
416 return useIPv6 ? IPV6_HDRLEN : IPV4_HDRLEN;
419 inline constexpr size_t getTotalHeaderLength(
bool useIPv6) {
420 return getIPHeaderLength(useIPv6) + UDP_HDRLEN +
sizeof(LBHdrV2) +
sizeof(REHdr);
Definition e2sarHeaders.hpp:112
u_int8_t get_version() const
Definition e2sarHeaders.hpp:132
u_int16_t get_entropy() const
Definition e2sarHeaders.hpp:156
void set(u_int16_t ent, EventNum_t event_num)
Definition e2sarHeaders.hpp:123
u_int8_t get_nextProto() const
Definition e2sarHeaders.hpp:148
EventNum_t get_eventNum() const
Definition e2sarHeaders.hpp:164
const boost::tuple< u_int8_t, u_int8_t, u_int16_t, EventNum_t > get_Fields() const
Definition e2sarHeaders.hpp:180
bool check_version() const
Definition e2sarHeaders.hpp:140
Definition e2sarHeaders.hpp:192
bool check_version() const
Definition e2sarHeaders.hpp:221
u_int16_t get_portSelect() const
Definition e2sarHeaders.hpp:245
void set(u_int16_t slt, u_int16_t prt, EventNum_t tk)
Definition e2sarHeaders.hpp:203
EventNum_t get_tick() const
Definition e2sarHeaders.hpp:253
u_int16_t get_slotSelect() const
Definition e2sarHeaders.hpp:237
const boost::tuple< u_int8_t, u_int8_t, u_int16_t, u_int16_t, EventNum_t > get_Fields() const
Definition e2sarHeaders.hpp:270
u_int8_t get_version() const
Definition e2sarHeaders.hpp:213
u_int8_t get_nextProto() const
Definition e2sarHeaders.hpp:229
Definition e2sarHeaders.hpp:302
Definition e2sarHeaders.hpp:22
EventNum_t get_eventNum() const
Definition e2sarHeaders.hpp:43
u_int16_t get_dataId() const
Definition e2sarHeaders.hpp:67
bool validate() const
Definition e2sarHeaders.hpp:98
const boost::tuple< u_int16_t, u_int32_t, u_int32_t, EventNum_t > get_Fields() const
Definition e2sarHeaders.hpp:81
u_int8_t get_HeaderVersion() const
Definition e2sarHeaders.hpp:89
u_int32_t get_bufferLength() const
Definition e2sarHeaders.hpp:51
u_int32_t get_bufferOffset() const
Definition e2sarHeaders.hpp:59
void set(u_int16_t data_id, u_int32_t buff_off, u_int32_t buff_len, EventNum_t event_num)
Definition e2sarHeaders.hpp:32
Definition e2sarHeaders.hpp:324
EventNum_t get_eventNumber() const
Definition e2sarHeaders.hpp:370
u_int8_t get_version() const
Definition e2sarHeaders.hpp:347
u_int32_t get_eventSrcId() const
Definition e2sarHeaders.hpp:363
u_int32_t get_avgEventRateHz() const
Definition e2sarHeaders.hpp:377
void set(u_int32_t esid, EventNum_t event_num, EventRate_t avg_rate, UnixTimeNano_t ut)
Definition e2sarHeaders.hpp:336
const boost::tuple< u_int32_t, EventNum_t, u_int32_t, UnixTimeNano_t > get_Fields() const
Definition e2sarHeaders.hpp:399
UnixTimeNano_t get_unixTimeNano() const
Definition e2sarHeaders.hpp:384
bool check_version() const
Definition e2sarHeaders.hpp:355
Definition e2sarHeaders.hpp:278