20 #ifndef PACKET_METADATA_H
21 #define PACKET_METADATA_H
26 #include "ns3/callback.h"
27 #include "ns3/assert.h"
28 #include "ns3/type-id.h"
100 uint32_t currentSize;
104 uint32_t currentTrimedFromStart;
108 uint32_t currentTrimedFromEnd;
118 bool HasNext (
void)
const;
128 static void Enable (
void);
129 static void EnableChecking (
void);
136 void AddHeader (
Header const &header, uint32_t size);
137 void RemoveHeader (
Header const &header, uint32_t size);
139 void AddTrailer (
Trailer const &trailer, uint32_t size);
140 void RemoveTrailer (
Trailer const &trailer, uint32_t size);
151 void AddPaddingAtEnd (uint32_t end);
152 void RemoveAtStart (uint32_t start);
153 void RemoveAtEnd (uint32_t end);
155 uint64_t GetUid (
void)
const;
157 uint32_t GetSerializedSize (
void)
const;
162 uint32_t Serialize (uint8_t* buffer, uint32_t maxSize)
const;
163 uint32_t Deserialize (
const uint8_t* buffer, uint32_t size);
167 static uint8_t* AddToRawU8 (
const uint8_t& data,
172 static uint8_t* AddToRawU16 (
const uint16_t& data,
177 static uint8_t* AddToRawU32 (
const uint32_t& data,
182 static uint8_t* AddToRawU64 (
const uint64_t& data,
187 static uint8_t* AddToRaw (
const uint8_t* data,
193 static uint8_t* ReadFromRawU8 (uint8_t& data,
194 const uint8_t* start,
195 const uint8_t* current,
198 static uint8_t* ReadFromRawU16 (uint16_t& data,
199 const uint8_t* start,
200 const uint8_t* current,
203 static uint8_t* ReadFromRawU32 (uint32_t& data,
204 const uint8_t* start,
205 const uint8_t* current,
208 static uint8_t* ReadFromRawU64 (uint64_t& data,
209 const uint8_t* start,
210 const uint8_t* current,
217 #define PACKET_METADATA_DATA_M_DATA_SIZE 8
228 uint8_t m_data[PACKET_METADATA_DATA_M_DATA_SIZE];
281 uint32_t fragmentStart;
286 uint32_t fragmentEnd;
301 friend DataFreeList::~DataFreeList ();
307 uint16_t AddBig (uint32_t head, uint32_t tail,
313 inline void UpdateHead (uint16_t written);
314 inline void UpdateTail (uint16_t written);
315 inline uint32_t GetUleb128Size (uint32_t value)
const;
316 uint32_t ReadUleb128 (
const uint8_t **pBuffer)
const;
317 inline void Append16 (uint16_t value, uint8_t *buffer);
318 inline void Append32 (uint32_t value, uint8_t *buffer);
319 inline void AppendValue (uint32_t value, uint8_t *buffer);
320 void AppendValueExtra (uint32_t value, uint8_t *buffer);
321 inline void Reserve (uint32_t n);
322 void ReserveCopy (uint32_t n);
323 uint32_t GetTotalSize (
void)
const;
327 void DoAddHeader (uint32_t uid, uint32_t size);
328 bool IsStateOk (
void)
const;
329 bool IsPointerOk (uint16_t pointer)
const;
330 bool IsSharedPointerOk (uint16_t pointer)
const;
339 static bool m_enable;
340 static bool m_enableChecking;
345 static bool m_metadataSkipped;
347 static uint32_t m_maxSize;
348 static uint16_t m_chunkUid;
359 uint64_t m_packetUid;
366 PacketMetadata::PacketMetadata (uint64_t uid, uint32_t size)
367 : m_data (PacketMetadata::Create (10)),
373 memset (m_data->m_data, 0xff, 4);
376 DoAddHeader (0, size);
379 PacketMetadata::PacketMetadata (PacketMetadata
const &o)
384 m_packetUid (o.m_packetUid)
387 NS_ASSERT (m_data->m_count < std::numeric_limits<uint32_t>::max());
391 PacketMetadata::operator = (PacketMetadata
const& o)
393 if (m_data != o.m_data)
398 if (m_data->m_count == 0)
400 PacketMetadata::Recycle (m_data);
409 m_packetUid = o.m_packetUid;
412 PacketMetadata::~PacketMetadata ()
416 if (m_data->m_count == 0)
418 PacketMetadata::Recycle (m_data);
automatically resized byte buffer
#define NS_ASSERT(condition)
iterator in a Buffer instance
Protocol trailer serialization and deserialization.
a unique identifier for an interface.