1#include <vanetza/geonet/basic_header.hpp>
2#include <vanetza/geonet/data_request.hpp>
3#include <vanetza/geonet/serialization.hpp>
10constexpr std::size_t BasicHeader::length_bytes;
12BasicHeader::BasicHeader() :
14 next_header(NextHeaderBasic::Any),
20BasicHeader::BasicHeader(
const MIB& mib) :
21 version(mib.itsGnProtocolVersion),
22 next_header(NextHeaderBasic::Any),
24 lifetime(mib.itsGnDefaultPacketLifetime),
25 hop_limit(mib.itsGnDefaultHopLimit)
29BasicHeader::BasicHeader(
const DataRequest& request,
const MIB& mib) :
32 if (mib.itsGnSecurity) {
33 next_header = NextHeaderBasic::Secured;
35 next_header = NextHeaderBasic::Common;
38 lifetime = request.maximum_lifetime;
39 hop_limit = request.max_hop_limit;
42BasicHeader::BasicHeader(
const ShbDataRequest& request,
const MIB& mib) :
43 BasicHeader(static_cast<const DataRequest&>(request), mib)
48void serialize(
const BasicHeader& hdr, OutputArchive& ar)
50 uint8_t versionAndNextHeader = hdr.version.raw();
51 versionAndNextHeader <<= 4;
52 versionAndNextHeader |=
static_cast<uint8_t
>(hdr.next_header) & 0x0f;
53 serialize(host_cast(versionAndNextHeader), ar);
54 serialize(host_cast(hdr.reserved), ar);
55 serialize(hdr.lifetime, ar);
56 serialize(host_cast(hdr.hop_limit), ar);
59void deserialize(BasicHeader& hdr, InputArchive& ar)
61 uint8_t versionAndNextHeader;
62 deserialize(versionAndNextHeader, ar);
63 hdr.version = versionAndNextHeader >> 4;
64 hdr.next_header =
static_cast<NextHeaderBasic
>(versionAndNextHeader & 0x0f);
65 deserialize(hdr.reserved, ar);
66 deserialize(hdr.lifetime, ar);
67 deserialize(hdr.hop_limit, ar);