A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ns3::PacketMetadata Class Reference

Handle packet metadata about packet headers and trailers. More...

#include <packet-metadata.h>

+ Collaboration diagram for ns3::PacketMetadata:

Classes

struct  Data
 Data structure. More...
 
class  DataFreeList
 Class to hold all the metadata. More...
 
struct  ExtraItem
 ExtraItem structure. More...
 
struct  Item
 structure describing a packet metadata item More...
 
class  ItemIterator
 Iterator class for metadata items. More...
 
struct  SmallItem
 SmallItem structure. More...
 

Public Member Functions

 PacketMetadata (uint64_t uid, uint32_t size)
 Constructor. More...
 
 PacketMetadata (PacketMetadata const &o)
 Copy constructor. More...
 
 ~PacketMetadata ()
 
void AddAtEnd (PacketMetadata const &o)
 Add a metadata at the metadata start. More...
 
void AddHeader (Header const &header, uint32_t size)
 Add an header. More...
 
void AddPaddingAtEnd (uint32_t end)
 Add some padding at the end. More...
 
void AddTrailer (Trailer const &trailer, uint32_t size)
 Add a trailer. More...
 
ItemIterator BeginItem (Buffer buffer) const
 Initialize the item iterator to the buffer begin. More...
 
PacketMetadata CreateFragment (uint32_t start, uint32_t end) const
 Creates a fragment. More...
 
uint32_t Deserialize (const uint8_t *buffer, uint32_t size)
 Deserialization from raw uint8_t*. More...
 
uint32_t GetSerializedSize (void) const
 Get the metadata serialized size. More...
 
uint64_t GetUid (void) const
 Get the packet Uid. More...
 
PacketMetadataoperator= (PacketMetadata const &o)
 Basic assignment. More...
 
void RemoveAtEnd (uint32_t end)
 Remove a chunk of metadata at the metadata end. More...
 
void RemoveAtStart (uint32_t start)
 Remove a chunk of metadata at the metadata start. More...
 
void RemoveHeader (Header const &header, uint32_t size)
 Remove an header. More...
 
void RemoveTrailer (Trailer const &trailer, uint32_t size)
 Remove a trailer. More...
 
uint32_t Serialize (uint8_t *buffer, uint32_t maxSize) const
 Serialization to raw uint8_t*. More...
 

Static Public Member Functions

static void Enable (void)
 Enable the packet metadata. More...
 
static void EnableChecking (void)
 Enable the packet metadata checking. More...
 

Private Member Functions

 PacketMetadata ()
 
friend DataFreeList::~DataFreeList ()
 
uint16_t AddBig (uint32_t head, uint32_t tail, const PacketMetadata::SmallItem *item, const PacketMetadata::ExtraItem *extraItem)
 Add a "Big" Item (a SmallItem plus an ExtraItem) More...
 
uint16_t AddSmall (const PacketMetadata::SmallItem *item)
 Add a SmallItem. More...
 
void Append16 (uint16_t value, uint8_t *buffer)
 Append a 16-bit value to the buffer. More...
 
void Append32 (uint32_t value, uint8_t *buffer)
 Append a 32-bit value to the buffer. More...
 
void AppendValue (uint32_t value, uint8_t *buffer)
 Append a value to the buffer. More...
 
void AppendValueExtra (uint32_t value, uint8_t *buffer)
 Append a value to the buffer - extra. More...
 
void DoAddHeader (uint32_t uid, uint32_t size)
 Add an header. More...
 
uint32_t GetTotalSize (void) const
 Get the total size used by the metadata. More...
 
uint32_t GetUleb128Size (uint32_t value) const
 Get the ULEB128 (Unsigned Little Endian Base 128) size. More...
 
bool IsPointerOk (uint16_t pointer) const
 Check if the position is valid. More...
 
bool IsSharedPointerOk (uint16_t pointer) const
 Check if the position is valid. More...
 
bool IsStateOk (void) const
 Check if the metadata state is ok. More...
 
uint32_t ReadItems (uint16_t current, struct PacketMetadata::SmallItem *item, struct PacketMetadata::ExtraItem *extraItem) const
 Read items. More...
 
uint32_t ReadUleb128 (const uint8_t **pBuffer) const
 Read a ULEB128 (Unsigned Little Endian Base 128) coded number. More...
 
void ReplaceTail (PacketMetadata::SmallItem *item, PacketMetadata::ExtraItem *extraItem, uint32_t available)
 Replace the tail. More...
 
void Reserve (uint32_t n)
 Reserve space. More...
 
void ReserveCopy (uint32_t n)
 Reserve space and make a metadata copy. More...
 
void UpdateHead (uint16_t written)
 Update the head. More...
 
void UpdateTail (uint16_t written)
 Update the tail. More...
 

Static Private Member Functions

static uint8_t * AddToRaw (const uint8_t *data, uint32_t dataSize, uint8_t *start, uint8_t *current, uint32_t maxSize)
 Helper for the raw serialization. More...
 
static uint8_t * AddToRawU16 (const uint16_t &data, uint8_t *start, uint8_t *current, uint32_t maxSize)
 Helper for the raw serialization. More...
 
static uint8_t * AddToRawU32 (const uint32_t &data, uint8_t *start, uint8_t *current, uint32_t maxSize)
 Helper for the raw serialization. More...
 
static uint8_t * AddToRawU64 (const uint64_t &data, uint8_t *start, uint8_t *current, uint32_t maxSize)
 Helper for the raw serialization. More...
 
static uint8_t * AddToRawU8 (const uint8_t &data, uint8_t *start, uint8_t *current, uint32_t maxSize)
 Helper for the raw serialization. More...
 
static struct
PacketMetadata::Data
Allocate (uint32_t n)
 Allocate a buffer data storage. More...
 
static struct
PacketMetadata::Data
Create (uint32_t size)
 Create a buffer data storage. More...
 
static void Deallocate (struct PacketMetadata::Data *data)
 Deallocate the buffer memory. More...
 
static uint8_t * ReadFromRawU16 (uint16_t &data, const uint8_t *start, const uint8_t *current, uint32_t maxSize)
 Helper for the raw deserialization. More...
 
static uint8_t * ReadFromRawU32 (uint32_t &data, const uint8_t *start, const uint8_t *current, uint32_t maxSize)
 Helper for the raw deserialization. More...
 
static uint8_t * ReadFromRawU64 (uint64_t &data, const uint8_t *start, const uint8_t *current, uint32_t maxSize)
 Helper for the raw deserialization. More...
 
static uint8_t * ReadFromRawU8 (uint8_t &data, const uint8_t *start, const uint8_t *current, uint32_t maxSize)
 Helper for the raw deserialization. More...
 
static void Recycle (struct PacketMetadata::Data *data)
 Recycle the buffer memory. More...
 

Private Attributes

struct Datam_data
 Metadata storage. More...
 
uint16_t m_head
 list head More...
 
uint64_t m_packetUid
 packet Uid More...
 
uint16_t m_tail
 list tail More...
 
uint16_t m_used
 used portion More...
 

Static Private Attributes

static uint16_t m_chunkUid = 0
 Chunk Uid. More...
 
static bool m_enable = false
 Enable the packet metadata. More...
 
static bool m_enableChecking = false
 Enable the packet metadata checking. More...
 
static DataFreeList m_freeList
 the metadata data storage More...
 
static uint32_t m_maxSize = 0
 maximum metadata size More...
 
static bool m_metadataSkipped = false
 Set to true when adding metadata to a packet is skipped because m_enable is false; used to detect enabling of metadata in the middle of a simulation, which isn't allowed. More...
 

Friends

class ItemIterator
 

Detailed Description

Handle packet metadata about packet headers and trailers.

Internal:

This class is used by the Packet class to record every operation performed on the packet's buffer. This class also provides an implementation of the Packet::Print methods which uses the metadata to analyse the content of the packet's buffer.

To achieve this, this class maintains a linked list of so-called "items", each of which represents a header or a trailer, or payload, or a fragment of any of these. Each item contains a "next" and a "prev" field which point to the next and previous entries in the linked list. The PacketMetadata class maintains a pair of pointers to the head and the tail of the linked list.

Each entry in the list also maintains:

  • its native size (the size it had when it was first added to the packet)
  • its type: identifies what kind of header, what kind of trailer, if it is payload or not
  • the uid of the packet to which it was first added
  • the start and end of the area represented by a fragment if it is one.

This linked list is flattened in a byte buffer stored in struct PacketMetadata::Data. Each entry of the linked list is identified by an offset which identifies the first byte of the entry from the start of the data buffer. The size of this data buffer is 2^16-1 bytes maximum which somewhat limits the number of entries which can be stored in this linked list but it is quite unlikely to hit this limit in practice.

Each item of the linked list is a variable-sized byte buffer made of a number of fields. Some of these fields are stored as fixed-size 32 bit integers, others as fixed-size 16 bit integers, and some others as variable-size 32-bit integers. The variable-size 32 bit integers are stored using the uleb128 encoding.

Definition at line 79 of file packet-metadata.h.

Constructor & Destructor Documentation

ns3::PacketMetadata::PacketMetadata ( uint64_t  uid,
uint32_t  size 
)
inline

Constructor.

Parameters
uidpacket uid
sizesize of the header

Definition at line 690 of file packet-metadata.h.

References DoAddHeader(), ns3::PacketMetadata::Data::m_data, and m_data.

+ Here is the call graph for this function:

ns3::PacketMetadata::PacketMetadata ( PacketMetadata const &  o)
inline

Copy constructor.

Parameters
othe object to copy

Definition at line 703 of file packet-metadata.h.

References ns3::PacketMetadata::Data::m_count, m_data, and NS_ASSERT.

ns3::PacketMetadata::~PacketMetadata ( )
inline

Definition at line 736 of file packet-metadata.h.

References ns3::PacketMetadata::Data::m_count, m_data, NS_ASSERT, and Recycle().

+ Here is the call graph for this function:

ns3::PacketMetadata::PacketMetadata ( )
private

Member Function Documentation

void ns3::PacketMetadata::AddAtEnd ( PacketMetadata const &  o)

Add a metadata at the metadata start.

Parameters
othe metadata to add

Definition at line 802 of file packet-metadata.cc.

References AddBig(), ns3::PacketMetadata::SmallItem::chunkUid, current, IsStateOk(), m_enable, m_head, m_metadataSkipped, m_tail, ns3::PacketMetadata::SmallItem::next, NS_ASSERT, NS_LOG_FUNCTION, ReadItems(), ReplaceTail(), ns3::PacketMetadata::SmallItem::size, ns3::PacketMetadata::SmallItem::typeUid, and UpdateTail().

Referenced by ns3::Packet::AddAtEnd().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::PacketMetadata::AddHeader ( Header const &  header,
uint32_t  size 
)

Add an header.

Parameters
headerheader to add
sizeheader serialized size

Definition at line 655 of file packet-metadata.cc.

References DoAddHeader(), ns3::ObjectBase::GetInstanceTypeId(), ns3::TypeId::GetUid(), IsStateOk(), NS_ASSERT, and NS_LOG_FUNCTION.

Referenced by ns3::Packet::AddHeader().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::PacketMetadata::AddPaddingAtEnd ( uint32_t  end)

Add some padding at the end.

Parameters
endsize of padding

Definition at line 880 of file packet-metadata.cc.

References m_enable, m_metadataSkipped, and NS_LOG_FUNCTION.

Referenced by ns3::Packet::AddPaddingAtEnd().

+ Here is the caller graph for this function:

uint8_t * ns3::PacketMetadata::AddToRaw ( const uint8_t *  data,
uint32_t  dataSize,
uint8_t *  start,
uint8_t *  current,
uint32_t  maxSize 
)
staticprivate

Helper for the raw serialization.

Parameters
datathe buffer to write to
dataSizethe data size to write to
startstart index
currentcurrent index
maxSizemaximum size
Returns
updated current index

Definition at line 1409 of file packet-metadata.cc.

References NS_LOG_FUNCTION.

Referenced by Serialize().

+ Here is the caller graph for this function:

uint8_t * ns3::PacketMetadata::AddToRawU16 ( const uint16_t &  data,
uint8_t *  start,
uint8_t *  current,
uint32_t  maxSize 
)
staticprivate

Helper for the raw serialization.

Parameters
datathe buffer to write to
startstart index
currentcurrent index
maxSizemaximum size
Returns
updated current index

Definition at line 1361 of file packet-metadata.cc.

References NS_LOG_FUNCTION.

Referenced by Serialize().

+ Here is the caller graph for this function:

uint8_t * ns3::PacketMetadata::AddToRawU32 ( const uint32_t &  data,
uint8_t *  start,
uint8_t *  current,
uint32_t  maxSize 
)
staticprivate

Helper for the raw serialization.

Parameters
datathe buffer to write to
startstart index
currentcurrent index
maxSizemaximum size
Returns
updated current index

Definition at line 1377 of file packet-metadata.cc.

References NS_LOG_FUNCTION.

Referenced by Serialize().

+ Here is the caller graph for this function:

uint8_t * ns3::PacketMetadata::AddToRawU64 ( const uint64_t &  data,
uint8_t *  start,
uint8_t *  current,
uint32_t  maxSize 
)
staticprivate

Helper for the raw serialization.

Parameters
datathe buffer to write to
startstart index
currentcurrent index
maxSizemaximum size
Returns
updated current index

Definition at line 1393 of file packet-metadata.cc.

References NS_LOG_FUNCTION.

Referenced by Serialize().

+ Here is the caller graph for this function:

uint8_t * ns3::PacketMetadata::AddToRawU8 ( const uint8_t &  data,
uint8_t *  start,
uint8_t *  current,
uint32_t  maxSize 
)
staticprivate

Helper for the raw serialization.

Parameters
datathe buffer to write to
startstart index
currentcurrent index
maxSizemaximum size
Returns
updated current index

Definition at line 1345 of file packet-metadata.cc.

References NS_LOG_FUNCTION.

Referenced by Serialize().

+ Here is the caller graph for this function:

void ns3::PacketMetadata::AddTrailer ( Trailer const &  trailer,
uint32_t  size 
)
struct PacketMetadata::Data * ns3::PacketMetadata::Allocate ( uint32_t  n)
staticprivate

Allocate a buffer data storage.

Parameters
nthe storage size to create
Returns
a pointer to the allocated buffer storage

Definition at line 619 of file packet-metadata.cc.

References data, ns3::PacketMetadata::Data::m_count, ns3::PacketMetadata::Data::m_dirtyEnd, ns3::PacketMetadata::Data::m_size, NS_LOG_FUNCTION, and PACKET_METADATA_DATA_M_DATA_SIZE.

Referenced by Create().

+ Here is the caller graph for this function:

void ns3::PacketMetadata::Append16 ( uint16_t  value,
uint8_t *  buffer 
)
inlineprivate

Append a 16-bit value to the buffer.

Parameters
valuethe value to add
bufferthe buffer to write to

Definition at line 237 of file packet-metadata.cc.

References NS_LOG_FUNCTION.

Referenced by AddBig(), AddSmall(), ReplaceTail(), ReserveCopy(), UpdateHead(), and UpdateTail().

+ Here is the caller graph for this function:

void ns3::PacketMetadata::Append32 ( uint32_t  value,
uint8_t *  buffer 
)
inlineprivate

Append a 32-bit value to the buffer.

Parameters
valuethe value to add
bufferthe buffer to write to

Definition at line 245 of file packet-metadata.cc.

References NS_LOG_FUNCTION.

Referenced by AddBig(), and ReplaceTail().

+ Here is the caller graph for this function:

void ns3::PacketMetadata::AppendValue ( uint32_t  value,
uint8_t *  buffer 
)
inlineprivate

Append a value to the buffer.

Parameters
valuethe value to add
bufferthe buffer to write to

Definition at line 302 of file packet-metadata.cc.

References AppendValueExtra(), and NS_LOG_FUNCTION.

Referenced by AddBig(), AddSmall(), and ReplaceTail().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::PacketMetadata::AppendValueExtra ( uint32_t  value,
uint8_t *  buffer 
)
private

Append a value to the buffer - extra.

This function is called by AppendValue

Parameters
valuethe value to add
bufferthe buffer to write to

Definition at line 255 of file packet-metadata.cc.

References NS_LOG_FUNCTION.

Referenced by AppendValue().

+ Here is the caller graph for this function:

PacketMetadata::ItemIterator ns3::PacketMetadata::BeginItem ( Buffer  buffer) const

Initialize the item iterator to the buffer begin.

Definition at line 1047 of file packet-metadata.cc.

References ItemIterator, and NS_LOG_FUNCTION.

Referenced by ns3::Packet::BeginItem(), and ns3::Packet::Print().

+ Here is the caller graph for this function:

struct PacketMetadata::Data * ns3::PacketMetadata::Create ( uint32_t  size)
staticprivate

Create a buffer data storage.

Parameters
sizethe storage size to create
Returns
a pointer to the created buffer storage

Definition at line 571 of file packet-metadata.cc.

References Allocate(), data, Deallocate(), ns3::PacketMetadata::Data::m_count, m_freeList, m_maxSize, ns3::PacketMetadata::Data::m_size, NS_LOG_FUNCTION, and NS_LOG_LOGIC.

Referenced by ReserveCopy().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

PacketMetadata ns3::PacketMetadata::CreateFragment ( uint32_t  start,
uint32_t  end 
) const

Creates a fragment.

Parameters
startthe amount of stuff to remove from the start
endthe amount of stuff to remove from the end
Returns
the fragment's metadata

Calling this method is equivalent to calling RemoveAtStart (start) and then, RemoveAtEnd (end).

Definition at line 645 of file packet-metadata.cc.

References NS_LOG_FUNCTION, RemoveAtEnd(), and RemoveAtStart().

Referenced by ns3::Packet::CreateFragment().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::PacketMetadata::Deallocate ( struct PacketMetadata::Data data)
staticprivate

Deallocate the buffer memory.

Parameters
datathe buffer data storage

Definition at line 636 of file packet-metadata.cc.

References NS_LOG_FUNCTION.

Referenced by Create(), Recycle(), and ns3::PacketMetadata::DataFreeList::~DataFreeList().

+ Here is the caller graph for this function:

uint32_t ns3::PacketMetadata::Deserialize ( const uint8_t *  buffer,
uint32_t  size 
)
void ns3::PacketMetadata::DoAddHeader ( uint32_t  uid,
uint32_t  size 
)
private

Add an header.

Parameters
uidheader's uid to add
sizeheader serialized size

Definition at line 664 of file packet-metadata.cc.

References AddSmall(), ns3::PacketMetadata::SmallItem::chunkUid, m_chunkUid, m_enable, m_head, m_metadataSkipped, ns3::PacketMetadata::SmallItem::next, NS_LOG_FUNCTION, ns3::PacketMetadata::SmallItem::prev, ns3::PacketMetadata::SmallItem::size, ns3::PacketMetadata::SmallItem::typeUid, and UpdateHead().

Referenced by AddHeader(), and PacketMetadata().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::PacketMetadata::Enable ( void  )
static

Enable the packet metadata.

Definition at line 52 of file packet-metadata.cc.

References m_enable, m_metadataSkipped, NS_ASSERT_MSG, and NS_LOG_FUNCTION_NOARGS.

Referenced by EpcTftClassifierTestCase::DoRun(), EnableChecking(), and ns3::Packet::EnablePrinting().

+ Here is the caller graph for this function:

void ns3::PacketMetadata::EnableChecking ( void  )
static

Enable the packet metadata checking.

Definition at line 66 of file packet-metadata.cc.

References Enable(), m_enableChecking, and NS_LOG_FUNCTION_NOARGS.

Referenced by ns3::Packet::EnableChecking().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uint32_t ns3::PacketMetadata::GetSerializedSize ( void  ) const

Get the metadata serialized size.

Returns
the seralized size

Definition at line 1138 of file packet-metadata.cc.

References current, ns3::TypeId::GetName(), m_enable, m_head, m_tail, ns3::PacketMetadata::SmallItem::next, NS_ASSERT, NS_LOG_FUNCTION, ReadItems(), ns3::TypeId::SetUid(), and ns3::PacketMetadata::SmallItem::typeUid.

Referenced by ns3::Packet::GetSerializedSize(), and ns3::Packet::Serialize().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uint32_t ns3::PacketMetadata::GetTotalSize ( void  ) const
private

Get the total size used by the metadata.

Definition at line 1018 of file packet-metadata.cc.

References current, m_head, m_tail, ns3::PacketMetadata::SmallItem::next, NS_ASSERT, NS_LOG_FUNCTION, and ReadItems().

+ Here is the call graph for this function:

uint64_t ns3::PacketMetadata::GetUid ( void  ) const

Get the packet Uid.

Returns
the packet Uid

Definition at line 1041 of file packet-metadata.cc.

References m_packetUid, and NS_LOG_FUNCTION.

Referenced by ns3::Packet::GetUid().

+ Here is the caller graph for this function:

uint32_t ns3::PacketMetadata::GetUleb128Size ( uint32_t  value) const
inlineprivate

Get the ULEB128 (Unsigned Little Endian Base 128) size.

Parameters
valuethe value
Returns
the value's ULEB128 size

Definition at line 165 of file packet-metadata.cc.

References NS_LOG_FUNCTION.

Referenced by AddBig(), AddSmall(), and ReplaceTail().

+ Here is the caller graph for this function:

bool ns3::PacketMetadata::IsPointerOk ( uint16_t  pointer) const
private

Check if the position is valid.

Parameters
pointerthe position to check
Returns
true if the position is valid

Definition at line 125 of file packet-metadata.cc.

References m_used, and NS_LOG_FUNCTION.

Referenced by IsStateOk().

+ Here is the caller graph for this function:

bool ns3::PacketMetadata::IsSharedPointerOk ( uint16_t  pointer) const
private

Check if the position is valid.

Parameters
pointerthe position to check
Returns
true if the position is valid

Definition at line 118 of file packet-metadata.cc.

References m_data, ns3::PacketMetadata::Data::m_size, and NS_LOG_FUNCTION.

Referenced by IsStateOk().

+ Here is the caller graph for this function:

bool ns3::PacketMetadata::IsStateOk ( void  ) const
private

Check if the metadata state is ok.

Returns
true if the internal state is ok

Definition at line 133 of file packet-metadata.cc.

References current, IsPointerOk(), IsSharedPointerOk(), m_data, m_head, ns3::PacketMetadata::Data::m_size, m_tail, m_used, ns3::PacketMetadata::SmallItem::next, NS_LOG_FUNCTION, ns3::PacketMetadata::SmallItem::prev, and ReadItems().

Referenced by AddAtEnd(), AddHeader(), AddTrailer(), RemoveAtEnd(), RemoveAtStart(), RemoveHeader(), and RemoveTrailer().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

PacketMetadata & ns3::PacketMetadata::operator= ( PacketMetadata const &  o)
inline

Basic assignment.

Parameters
othe object to copy
Returns
a copied object

Definition at line 715 of file packet-metadata.h.

References ns3::PacketMetadata::Data::m_count, m_data, m_head, m_packetUid, m_tail, m_used, NS_ASSERT, and Recycle().

+ Here is the call graph for this function:

uint8_t * ns3::PacketMetadata::ReadFromRawU16 ( uint16_t &  data,
const uint8_t *  start,
const uint8_t *  current,
uint32_t  maxSize 
)
staticprivate

Helper for the raw deserialization.

Parameters
datathe buffer to read from
startstart index
currentcurrent index
maxSizemaximum size
Returns
updated current index

Definition at line 1442 of file packet-metadata.cc.

References current, and NS_LOG_FUNCTION.

Referenced by Deserialize().

+ Here is the caller graph for this function:

uint8_t * ns3::PacketMetadata::ReadFromRawU32 ( uint32_t &  data,
const uint8_t *  start,
const uint8_t *  current,
uint32_t  maxSize 
)
staticprivate

Helper for the raw deserialization.

Parameters
datathe buffer to read from
startstart index
currentcurrent index
maxSizemaximum size
Returns
updated current index

Definition at line 1458 of file packet-metadata.cc.

References current, and NS_LOG_FUNCTION.

Referenced by Deserialize().

+ Here is the caller graph for this function:

uint8_t * ns3::PacketMetadata::ReadFromRawU64 ( uint64_t &  data,
const uint8_t *  start,
const uint8_t *  current,
uint32_t  maxSize 
)
staticprivate

Helper for the raw deserialization.

Parameters
datathe buffer to read from
startstart index
currentcurrent index
maxSizemaximum size
Returns
updated current index

Definition at line 1474 of file packet-metadata.cc.

References current, and NS_LOG_FUNCTION.

Referenced by Deserialize().

+ Here is the caller graph for this function:

uint8_t * ns3::PacketMetadata::ReadFromRawU8 ( uint8_t &  data,
const uint8_t *  start,
const uint8_t *  current,
uint32_t  maxSize 
)
staticprivate

Helper for the raw deserialization.

Parameters
datathe buffer to read from
startstart index
currentcurrent index
maxSizemaximum size
Returns
updated current index

Definition at line 1426 of file packet-metadata.cc.

References current, and NS_LOG_FUNCTION.

Referenced by Deserialize().

+ Here is the caller graph for this function:

uint32_t ns3::PacketMetadata::ReadItems ( uint16_t  current,
struct PacketMetadata::SmallItem item,
struct PacketMetadata::ExtraItem extraItem 
) const
private

Read items.

Parameters
currentthe offset we should start reading the data from
itempointer to where we should store the data to return to the caller
extraItempointer to where we should store the data to return to the caller
Returns
the number of bytes read.

Definition at line 529 of file packet-metadata.cc.

References ns3::PacketMetadata::SmallItem::chunkUid, current, ns3::PacketMetadata::ExtraItem::fragmentEnd, ns3::PacketMetadata::ExtraItem::fragmentStart, ns3::PacketMetadata::Data::m_data, m_data, m_packetUid, ns3::PacketMetadata::Data::m_size, ns3::PacketMetadata::SmallItem::next, NS_ASSERT, NS_LOG_FUNCTION, ns3::PacketMetadata::ExtraItem::packetUid, ns3::PacketMetadata::SmallItem::prev, ReadUleb128(), ns3::PacketMetadata::SmallItem::size, and ns3::PacketMetadata::SmallItem::typeUid.

Referenced by AddAtEnd(), GetSerializedSize(), GetTotalSize(), IsStateOk(), RemoveAtEnd(), RemoveAtStart(), RemoveHeader(), RemoveTrailer(), ReplaceTail(), and Serialize().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uint32_t ns3::PacketMetadata::ReadUleb128 ( const uint8_t **  pBuffer) const
private

Read a ULEB128 (Unsigned Little Endian Base 128) coded number.

Parameters
pBufferthe buffer to read from
Returns
the value

Definition at line 187 of file packet-metadata.cc.

References NS_ASSERT, and NS_LOG_FUNCTION.

Referenced by ReadItems().

+ Here is the caller graph for this function:

void ns3::PacketMetadata::Recycle ( struct PacketMetadata::Data data)
staticprivate

Recycle the buffer memory.

Parameters
datathe buffer data storage

Definition at line 597 of file packet-metadata.cc.

References Deallocate(), ns3::PacketMetadata::Data::m_count, m_enable, m_freeList, m_maxSize, ns3::PacketMetadata::Data::m_size, NS_ASSERT, NS_LOG_FUNCTION, and NS_LOG_LOGIC.

Referenced by operator=(), ReserveCopy(), and ~PacketMetadata().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::PacketMetadata::RemoveAtEnd ( uint32_t  end)

Remove a chunk of metadata at the metadata end.

Parameters
endthe size of metadata to remove

Definition at line 953 of file packet-metadata.cc.

References AddBig(), current, IsStateOk(), m_data, m_enable, m_head, m_metadataSkipped, m_packetUid, m_tail, NS_ASSERT, NS_LOG_FUNCTION, ns3::PacketMetadata::SmallItem::prev, ReadItems(), ns3::PacketMetadata::SmallItem::size, and UpdateHead().

Referenced by CreateFragment(), and ns3::Packet::RemoveAtEnd().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::PacketMetadata::RemoveAtStart ( uint32_t  start)

Remove a chunk of metadata at the metadata start.

Parameters
startthe size of metadata to remove

Definition at line 890 of file packet-metadata.cc.

References AddBig(), current, IsStateOk(), m_data, m_enable, m_head, m_metadataSkipped, m_packetUid, m_tail, ns3::PacketMetadata::SmallItem::next, NS_ASSERT, NS_LOG_FUNCTION, ReadItems(), ns3::PacketMetadata::SmallItem::size, visualizer.core::start(), and UpdateTail().

Referenced by CreateFragment(), and ns3::Packet::RemoveAtStart().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::PacketMetadata::RemoveHeader ( Header const &  header,
uint32_t  size 
)
void ns3::PacketMetadata::RemoveTrailer ( Trailer const &  trailer,
uint32_t  size 
)
void ns3::PacketMetadata::ReplaceTail ( PacketMetadata::SmallItem item,
PacketMetadata::ExtraItem extraItem,
uint32_t  available 
)
private
void ns3::PacketMetadata::Reserve ( uint32_t  n)
inlineprivate

Reserve space.

Parameters
nspace to reserve

Definition at line 99 of file packet-metadata.cc.

References ns3::PacketMetadata::Data::m_count, m_data, ns3::PacketMetadata::Data::m_dirtyEnd, m_head, ns3::PacketMetadata::Data::m_size, m_used, NS_ASSERT, NS_LOG_FUNCTION, and ReserveCopy().

+ Here is the call graph for this function:

void ns3::PacketMetadata::ReserveCopy ( uint32_t  n)
private

Reserve space and make a metadata copy.

Parameters
nspace to reserve

Definition at line 74 of file packet-metadata.cc.

References Append16(), Create(), ns3::PacketMetadata::Data::m_count, ns3::PacketMetadata::Data::m_data, m_data, ns3::PacketMetadata::Data::m_dirtyEnd, m_head, m_tail, m_used, NS_ASSERT, NS_LOG_FUNCTION, Recycle(), and visualizer.core::start().

Referenced by AddBig(), AddSmall(), and Reserve().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uint32_t ns3::PacketMetadata::Serialize ( uint8_t *  buffer,
uint32_t  maxSize 
) const
void ns3::PacketMetadata::UpdateHead ( uint16_t  written)
inlineprivate

Update the head.

Parameters
writtenthe used bytes

Definition at line 349 of file packet-metadata.cc.

References Append16(), ns3::PacketMetadata::Data::m_data, m_data, ns3::PacketMetadata::Data::m_dirtyEnd, m_head, m_tail, m_used, NS_ASSERT, and NS_LOG_FUNCTION.

Referenced by DoAddHeader(), and RemoveAtEnd().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ns3::PacketMetadata::UpdateTail ( uint16_t  written)
inlineprivate

Update the tail.

Parameters
writtenthe used bytes

Definition at line 322 of file packet-metadata.cc.

References Append16(), ns3::PacketMetadata::Data::m_data, m_data, ns3::PacketMetadata::Data::m_dirtyEnd, m_head, m_tail, m_used, NS_ASSERT, and NS_LOG_FUNCTION.

Referenced by AddAtEnd(), AddTrailer(), Deserialize(), RemoveAtStart(), and ReplaceTail().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Friends And Related Function Documentation

friend class ItemIterator
friend

Definition at line 505 of file packet-metadata.h.

Referenced by BeginItem().

Member Data Documentation

uint16_t ns3::PacketMetadata::m_chunkUid = 0
staticprivate

Chunk Uid.

Definition at line 672 of file packet-metadata.h.

Referenced by AddTrailer(), and DoAddHeader().

bool ns3::PacketMetadata::m_enable = false
staticprivate
bool ns3::PacketMetadata::m_enableChecking = false
staticprivate

Enable the packet metadata checking.

Definition at line 662 of file packet-metadata.h.

Referenced by EnableChecking(), RemoveHeader(), and RemoveTrailer().

PacketMetadata::DataFreeList ns3::PacketMetadata::m_freeList
staticprivate

the metadata data storage

Definition at line 660 of file packet-metadata.h.

Referenced by Create(), and Recycle().

uint32_t ns3::PacketMetadata::m_maxSize = 0
staticprivate

maximum metadata size

Definition at line 671 of file packet-metadata.h.

Referenced by Create(), and Recycle().

bool ns3::PacketMetadata::m_metadataSkipped = false
staticprivate

Set to true when adding metadata to a packet is skipped because m_enable is false; used to detect enabling of metadata in the middle of a simulation, which isn't allowed.

Definition at line 669 of file packet-metadata.h.

Referenced by AddAtEnd(), AddPaddingAtEnd(), AddTrailer(), DoAddHeader(), Enable(), RemoveAtEnd(), RemoveAtStart(), RemoveHeader(), and RemoveTrailer().

uint64_t ns3::PacketMetadata::m_packetUid
private
uint16_t ns3::PacketMetadata::m_used
private

The documentation for this class was generated from the following files: