A Discrete-Event Network Simulator
API
packet-metadata.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2006,2007 INRIA
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  */
20 #ifndef PACKET_METADATA_H
21 #define PACKET_METADATA_H
22 
23 #include <stdint.h>
24 #include <vector>
25 #include <limits>
26 #include "ns3/callback.h"
27 #include "ns3/assert.h"
28 #include "ns3/type-id.h"
29 #include "buffer.h"
30 
31 namespace ns3 {
32 
33 class Chunk;
34 class Buffer;
35 class Header;
36 class Trailer;
37 
79 {
80 public:
81 
85  struct Item
86  {
88  enum ItemType {
91  TRAILER
92  } type;
93 
97  bool isFragment;
107  uint32_t currentSize;
123  };
124 
129  {
130 public:
136  ItemIterator (const PacketMetadata *metadata, Buffer buffer);
141  bool HasNext (void) const;
146  Item Next (void);
147 private:
150  uint16_t m_current;
151  uint32_t m_offset;
153  };
154 
158  static void Enable (void);
162  static void EnableChecking (void);
163 
169  inline PacketMetadata (uint64_t uid, uint32_t size);
174  inline PacketMetadata (PacketMetadata const &o);
180  inline PacketMetadata &operator = (PacketMetadata const& o);
181  inline ~PacketMetadata ();
182 
188  void AddHeader (Header const &header, uint32_t size);
194  void RemoveHeader (Header const &header, uint32_t size);
195 
201  void AddTrailer (Trailer const &trailer, uint32_t size);
207  void RemoveTrailer (Trailer const &trailer, uint32_t size);
208 
219  PacketMetadata CreateFragment (uint32_t start, uint32_t end) const;
220 
225  void AddAtEnd (PacketMetadata const&o);
230  void AddPaddingAtEnd (uint32_t end);
235  void RemoveAtStart (uint32_t start);
240  void RemoveAtEnd (uint32_t end);
241 
246  uint64_t GetUid (void) const;
247 
252  uint32_t GetSerializedSize (void) const;
253 
259  ItemIterator BeginItem (Buffer buffer) const;
260 
267  uint32_t Serialize (uint8_t* buffer, uint32_t maxSize) const;
274  uint32_t Deserialize (const uint8_t* buffer, uint32_t size);
275 
276 private:
286  static uint8_t* AddToRawU8 (const uint8_t& data,
287  uint8_t* start,
288  uint8_t* current,
289  uint32_t maxSize);
290 
300  static uint8_t* AddToRawU16 (const uint16_t& data,
301  uint8_t* start,
302  uint8_t* current,
303  uint32_t maxSize);
304 
314  static uint8_t* AddToRawU32 (const uint32_t& data,
315  uint8_t* start,
316  uint8_t* current,
317  uint32_t maxSize);
318 
328  static uint8_t* AddToRawU64 (const uint64_t& data,
329  uint8_t* start,
330  uint8_t* current,
331  uint32_t maxSize);
332 
343  static uint8_t* AddToRaw (const uint8_t* data,
344  uint32_t dataSize,
345  uint8_t* start,
346  uint8_t* current,
347  uint32_t maxSize);
348 
358  static uint8_t* ReadFromRawU8 (uint8_t& data,
359  const uint8_t* start,
360  const uint8_t* current,
361  uint32_t maxSize);
362 
372  static uint8_t* ReadFromRawU16 (uint16_t& data,
373  const uint8_t* start,
374  const uint8_t* current,
375  uint32_t maxSize);
376 
386  static uint8_t* ReadFromRawU32 (uint32_t& data,
387  const uint8_t* start,
388  const uint8_t* current,
389  uint32_t maxSize);
390 
400  static uint8_t* ReadFromRawU64 (uint64_t& data,
401  const uint8_t* start,
402  const uint8_t* current,
403  uint32_t maxSize);
404 
409 #define PACKET_METADATA_DATA_M_DATA_SIZE 8
410 
414  struct Data {
416  uint32_t m_count;
418  uint16_t m_size;
421  uint16_t m_dirtyEnd;
424  };
425  /* Note that since the next and prev fields are 16 bit integers
426  and since the value 0xffff is reserved to identify the
427  fact that the end or the start of the list is reached,
428  only a limited number of elements can be stored in
429  a m_data byte buffer.
430  */
434  struct SmallItem {
440  uint16_t next;
446  uint16_t prev;
454  uint32_t typeUid;
459  uint32_t size;
472  uint16_t chunkUid;
473  };
474 
478  struct ExtraItem {
483  uint32_t fragmentStart;
488  uint32_t fragmentEnd;
494  uint64_t packetUid;
495  };
496 
500  class DataFreeList : public std::vector<struct Data *>
501  {
502 public:
503  ~DataFreeList ();
504  };
505 
508  friend class ItemIterator;
509 
511 
517  inline uint16_t AddSmall (const PacketMetadata::SmallItem *item);
526  uint16_t AddBig (uint32_t head, uint32_t tail,
527  const PacketMetadata::SmallItem *item,
528  const PacketMetadata::ExtraItem *extraItem);
537  PacketMetadata::ExtraItem *extraItem,
538  uint32_t available);
543  inline void UpdateHead (uint16_t written);
548  inline void UpdateTail (uint16_t written);
549 
555  inline uint32_t GetUleb128Size (uint32_t value) const;
561  uint32_t ReadUleb128 (const uint8_t **pBuffer) const;
567  inline void Append16 (uint16_t value, uint8_t *buffer);
573  inline void Append32 (uint32_t value, uint8_t *buffer);
579  inline void AppendValue (uint32_t value, uint8_t *buffer);
588  void AppendValueExtra (uint32_t value, uint8_t *buffer);
589 
594  inline void Reserve (uint32_t n);
599  void ReserveCopy (uint32_t n);
600 
605  uint32_t GetTotalSize (void) const;
606 
614  uint32_t ReadItems (uint16_t current,
615  struct PacketMetadata::SmallItem *item,
616  struct PacketMetadata::ExtraItem *extraItem) const;
622  void DoAddHeader (uint32_t uid, uint32_t size);
627  bool IsStateOk (void) const;
633  bool IsPointerOk (uint16_t pointer) const;
639  bool IsSharedPointerOk (uint16_t pointer) const;
640 
645  static void Recycle (struct PacketMetadata::Data *data);
651  static struct PacketMetadata::Data *Create (uint32_t size);
657  static struct PacketMetadata::Data *Allocate (uint32_t n);
662  static void Deallocate (struct PacketMetadata::Data *data);
663 
665  static bool m_enable;
666  static bool m_enableChecking;
667 
673  static bool m_metadataSkipped;
674 
675  static uint32_t m_maxSize;
676  static uint16_t m_chunkUid;
677 
678  struct Data *m_data;
679  /*
680  head -(next)-> tail
681  ^ |
682  \---(prev)---|
683  */
684  uint16_t m_head;
685  uint16_t m_tail;
686  uint16_t m_used;
687  uint64_t m_packetUid;
688 };
689 
690 } // namespace ns3
691 
692 namespace ns3 {
693 
694 PacketMetadata::PacketMetadata (uint64_t uid, uint32_t size)
695  : m_data (PacketMetadata::Create (10)),
696  m_head (0xffff),
697  m_tail (0xffff),
698  m_used (0),
699  m_packetUid (uid)
700 {
701  memset (m_data->m_data, 0xff, 4);
702  if (size > 0)
703  {
704  DoAddHeader (0, size);
705  }
706 }
708  : m_data (o.m_data),
709  m_head (o.m_head),
710  m_tail (o.m_tail),
711  m_used (o.m_used),
712  m_packetUid (o.m_packetUid)
713 {
714  NS_ASSERT (m_data != 0);
716  m_data->m_count++;
717 }
720 {
721  if (m_data != o.m_data)
722  {
723  // not self assignment
724  NS_ASSERT (m_data != 0);
725  m_data->m_count--;
726  if (m_data->m_count == 0)
727  {
729  }
730  m_data = o.m_data;
731  NS_ASSERT (m_data != 0);
732  m_data->m_count++;
733  }
734  m_head = o.m_head;
735  m_tail = o.m_tail;
736  m_used = o.m_used;
738  return *this;
739 }
741 {
742  NS_ASSERT (m_data != 0);
743  m_data->m_count--;
744  if (m_data->m_count == 0)
745  {
747  }
748 }
749 
750 } // namespace ns3
751 
752 
753 #endif /* PACKET_METADATA_H */
ns3::TypeId
a unique identifier for an interface.
Definition: type-id.h:59
ns3::PacketMetadata::AppendValue
void AppendValue(uint32_t value, uint8_t *buffer)
Append a value to the buffer.
Definition: packet-metadata.cc:301
ns3::PacketMetadata::m_head
uint16_t m_head
list head
Definition: packet-metadata.h:684
ns3::PacketMetadata::Item::currentSize
uint32_t currentSize
size of item.
Definition: packet-metadata.h:107
ns3::PacketMetadata::Serialize
uint32_t Serialize(uint8_t *buffer, uint32_t maxSize) const
Serialization to raw uint8_t*.
Definition: packet-metadata.cc:1178
ns3::PacketMetadata::Reserve
void Reserve(uint32_t n)
Reserve space.
Definition: packet-metadata.cc:99
NS_ASSERT
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition: assert.h:67
ns3::PacketMetadata::AddTrailer
void AddTrailer(Trailer const &trailer, uint32_t size)
Add a trailer.
Definition: packet-metadata.cc:731
ns3::PacketMetadata::AddToRawU8
static uint8_t * AddToRawU8(const uint8_t &data, uint8_t *start, uint8_t *current, uint32_t maxSize)
Helper for the raw serialization.
Definition: packet-metadata.cc:1340
ns3::PacketMetadata::AddPaddingAtEnd
void AddPaddingAtEnd(uint32_t end)
Add some padding at the end.
Definition: packet-metadata.cc:879
ns3::PacketMetadata::m_enable
static bool m_enable
Enable the packet metadata.
Definition: packet-metadata.h:665
ns3::PacketMetadata::Item::PAYLOAD
@ PAYLOAD
Payload.
Definition: packet-metadata.h:89
ns3::PacketMetadata::Data
Data structure.
Definition: packet-metadata.h:414
ns3::PacketMetadata::ReserveCopy
void ReserveCopy(uint32_t n)
Reserve space and make a metadata copy.
Definition: packet-metadata.cc:74
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::PacketMetadata::ReplaceTail
void ReplaceTail(PacketMetadata::SmallItem *item, PacketMetadata::ExtraItem *extraItem, uint32_t available)
Replace the tail.
Definition: packet-metadata.cc:450
ns3::PacketMetadata::Item::type
enum ns3::PacketMetadata::Item::ItemType type
metadata type
ns3::PacketMetadata::Data::m_dirtyEnd
uint16_t m_dirtyEnd
max of the m_used field over all objects which reference this struct Data instance
Definition: packet-metadata.h:421
ns3::PacketMetadata::ItemIterator::m_hasReadTail
bool m_hasReadTail
true if the metadata tail has been read
Definition: packet-metadata.h:152
ns3::PacketMetadata::UpdateTail
void UpdateTail(uint16_t written)
Update the tail.
Definition: packet-metadata.cc:321
ns3::PacketMetadata::ItemIterator::Next
Item Next(void)
Retrieve the next metadata item.
Definition: packet-metadata.cc:1075
ns3::PacketMetadata::ExtraItem::fragmentStart
uint32_t fragmentStart
offset (in bytes) from start of original header to the start of the fragment still present.
Definition: packet-metadata.h:483
ns3::PacketMetadata::GetTotalSize
uint32_t GetTotalSize(void) const
Get the total size used by the metadata.
Definition: packet-metadata.cc:1017
ns3::PacketMetadata::ItemIterator::m_metadata
const PacketMetadata * m_metadata
pointer to the metadata
Definition: packet-metadata.h:148
ns3::PacketMetadata::m_freeList
static DataFreeList m_freeList
the metadata data storage
Definition: packet-metadata.h:664
ns3::PacketMetadata::m_chunkUid
static uint16_t m_chunkUid
Chunk Uid.
Definition: packet-metadata.h:676
ns3::PacketMetadata::m_tail
uint16_t m_tail
list tail
Definition: packet-metadata.h:685
ns3::PacketMetadata::DataFreeList::~DataFreeList
~DataFreeList()
Definition: packet-metadata.cc:41
ns3::PacketMetadata::Item::current
Buffer::Iterator current
an iterator which can be fed to Deserialize.
Definition: packet-metadata.h:122
ns3::PacketMetadata::Recycle
static void Recycle(struct PacketMetadata::Data *data)
Recycle the buffer memory.
Definition: packet-metadata.cc:596
ns3::PacketMetadata::ItemIterator::ItemIterator
ItemIterator(const PacketMetadata *metadata, Buffer buffer)
Constructor.
Definition: packet-metadata.cc:1051
ns3::PacketMetadata::ReadFromRawU16
static uint8_t * ReadFromRawU16(uint16_t &data, const uint8_t *start, const uint8_t *current, uint32_t maxSize)
Helper for the raw deserialization.
Definition: packet-metadata.cc:1437
ns3::PacketMetadata::UpdateHead
void UpdateHead(uint16_t written)
Update the head.
Definition: packet-metadata.cc:348
ns3::PacketMetadata::AddSmall
uint16_t AddSmall(const PacketMetadata::SmallItem *item)
Add a SmallItem.
Definition: packet-metadata.cc:374
ns3::Create
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition: ptr.h:409
ns3::PacketMetadata::SmallItem::prev
uint16_t prev
offset (in bytes) from start of m_data buffer to previous element in linked list.
Definition: packet-metadata.h:446
ns3::PacketMetadata::RemoveAtStart
void RemoveAtStart(uint32_t start)
Remove a chunk of metadata at the metadata start.
Definition: packet-metadata.cc:889
ns3::PacketMetadata::Data::m_data
uint8_t m_data[PACKET_METADATA_DATA_M_DATA_SIZE]
variable-sized buffer of bytes
Definition: packet-metadata.h:423
ns3::PacketMetadata::ItemIterator::m_buffer
Buffer m_buffer
buffer the metadata refers to
Definition: packet-metadata.h:149
ns3::PacketMetadata::RemoveHeader
void RemoveHeader(Header const &header, uint32_t size)
Remove an header.
Definition: packet-metadata.cc:683
ns3::PacketMetadata::Deallocate
static void Deallocate(struct PacketMetadata::Data *data)
Deallocate the buffer memory.
Definition: packet-metadata.cc:635
ns3::PacketMetadata::m_enableChecking
static bool m_enableChecking
Enable the packet metadata checking.
Definition: packet-metadata.h:666
ns3::PacketMetadata::Allocate
static struct PacketMetadata::Data * Allocate(uint32_t n)
Allocate a buffer data storage.
Definition: packet-metadata.cc:618
ns3::PacketMetadata::AppendValueExtra
void AppendValueExtra(uint32_t value, uint8_t *buffer)
Append a value to the buffer - extra.
Definition: packet-metadata.cc:255
ns3::PacketMetadata::m_packetUid
uint64_t m_packetUid
packet Uid
Definition: packet-metadata.h:687
ns3::PacketMetadata::m_data
struct Data * m_data
Metadata storage.
Definition: packet-metadata.h:678
ns3::PacketMetadata::ItemIterator
Iterator class for metadata items.
Definition: packet-metadata.h:129
ns3::PacketMetadata::Item
structure describing a packet metadata item
Definition: packet-metadata.h:86
ns3::PacketMetadata::Item::currentTrimedFromStart
uint32_t currentTrimedFromStart
how many bytes were trimmed from the start of a fragment.
Definition: packet-metadata.h:112
visualizer.core.start
def start()
Definition: core.py:1855
ns3::PacketMetadata::IsStateOk
bool IsStateOk(void) const
Check if the metadata state is ok.
Definition: packet-metadata.cc:133
ns3::PacketMetadata::Data::m_size
uint16_t m_size
size (in bytes) of m_data buffer below
Definition: packet-metadata.h:418
ns3::PacketMetadata::ExtraItem::packetUid
uint64_t packetUid
the packetUid of the packet in which this header or trailer was first added.
Definition: packet-metadata.h:494
ns3::PacketMetadata::Item::currentTrimedFromEnd
uint32_t currentTrimedFromEnd
how many bytes were trimmed from the end of a fragment.
Definition: packet-metadata.h:117
ns3::PacketMetadata::SmallItem::next
uint16_t next
offset (in bytes) from start of m_data buffer to next element in linked list.
Definition: packet-metadata.h:440
ns3::PacketMetadata::SmallItem::size
uint32_t size
the size (in bytes) of the header or trailer represented by this element.
Definition: packet-metadata.h:459
ns3::PacketMetadata::AddAtEnd
void AddAtEnd(PacketMetadata const &o)
Add a metadata at the metadata start.
Definition: packet-metadata.cc:801
ns3::PacketMetadata::ReadUleb128
uint32_t ReadUleb128(const uint8_t **pBuffer) const
Read a ULEB128 (Unsigned Little Endian Base 128) coded number.
Definition: packet-metadata.cc:187
max
#define max(a, b)
Definition: 80211b.c:43
data
uint8_t data[writeSize]
Definition: socket-bound-tcp-static-routing.cc:53
PACKET_METADATA_DATA_M_DATA_SIZE
#define PACKET_METADATA_DATA_M_DATA_SIZE
the size of PacketMetadata::Data::m_data such that the total size of PacketMetadata::Data is 16 bytes
Definition: packet-metadata.h:409
ns3::PacketMetadata::SmallItem
SmallItem structure.
Definition: packet-metadata.h:434
ns3::PacketMetadata::m_used
uint16_t m_used
used portion
Definition: packet-metadata.h:686
ns3::Buffer
automatically resized byte buffer
Definition: buffer.h:93
ns3::PacketMetadata::AddToRaw
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.
Definition: packet-metadata.cc:1404
ns3::PacketMetadata::GetSerializedSize
uint32_t GetSerializedSize(void) const
Get the metadata serialized size.
Definition: packet-metadata.cc:1133
ns3::PacketMetadata::Item::tid
TypeId tid
TypeId of Header or Trailer.
Definition: packet-metadata.h:102
ns3::Header
Protocol header serialization and deserialization.
Definition: header.h:43
ns3::PacketMetadata::SmallItem::chunkUid
uint16_t chunkUid
this field tries to uniquely identify each header or trailer instance while the typeUid field uniquel...
Definition: packet-metadata.h:472
ns3::PacketMetadata::AddToRawU16
static uint8_t * AddToRawU16(const uint16_t &data, uint8_t *start, uint8_t *current, uint32_t maxSize)
Helper for the raw serialization.
Definition: packet-metadata.cc:1356
ns3::PacketMetadata::ReadFromRawU32
static uint8_t * ReadFromRawU32(uint32_t &data, const uint8_t *start, const uint8_t *current, uint32_t maxSize)
Helper for the raw deserialization.
Definition: packet-metadata.cc:1453
ns3::PacketMetadata::Deserialize
uint32_t Deserialize(const uint8_t *buffer, uint32_t size)
Deserialization from raw uint8_t*.
Definition: packet-metadata.cc:1279
ns3::PacketMetadata::PacketMetadata
PacketMetadata()
ns3::PacketMetadata::RemoveTrailer
void RemoveTrailer(Trailer const &trailer, uint32_t size)
Remove a trailer.
Definition: packet-metadata.cc:753
ns3::PacketMetadata::AddHeader
void AddHeader(Header const &header, uint32_t size)
Add an header.
Definition: packet-metadata.cc:654
ns3::PacketMetadata::AddToRawU32
static uint8_t * AddToRawU32(const uint32_t &data, uint8_t *start, uint8_t *current, uint32_t maxSize)
Helper for the raw serialization.
Definition: packet-metadata.cc:1372
ns3::PacketMetadata::ItemIterator::HasNext
bool HasNext(void) const
Checks if there is another metadata item.
Definition: packet-metadata.cc:1061
ns3::PacketMetadata::operator=
PacketMetadata & operator=(PacketMetadata const &o)
Basic assignment.
Definition: packet-metadata.h:719
buffer.h
ns3::PacketMetadata::GetUleb128Size
uint32_t GetUleb128Size(uint32_t value) const
Get the ULEB128 (Unsigned Little Endian Base 128) size.
Definition: packet-metadata.cc:165
ns3::PacketMetadata::Create
static struct PacketMetadata::Data * Create(uint32_t size)
Create a buffer data storage.
Definition: packet-metadata.cc:570
ns3::Buffer::Iterator
iterator in a Buffer instance
Definition: buffer.h:99
ns3::PacketMetadata::ExtraItem
ExtraItem structure.
Definition: packet-metadata.h:478
ns3::PacketMetadata
Handle packet metadata about packet headers and trailers.
Definition: packet-metadata.h:79
ns3::PacketMetadata::SmallItem::typeUid
uint32_t typeUid
the high 31 bits of this field identify the type of the header or trailer represented by this item: t...
Definition: packet-metadata.h:454
ns3::PacketMetadata::IsPointerOk
bool IsPointerOk(uint16_t pointer) const
Check if the position is valid.
Definition: packet-metadata.cc:125
ns3::PacketMetadata::m_metadataSkipped
static bool m_metadataSkipped
Set to true when adding metadata to a packet is skipped because m_enable is false; used to detect ena...
Definition: packet-metadata.h:673
ns3::PacketMetadata::Data::m_count
uint32_t m_count
number of references to this struct Data instance.
Definition: packet-metadata.h:416
ns3::PacketMetadata::BeginItem
ItemIterator BeginItem(Buffer buffer) const
Initialize the item iterator to the buffer begin.
Definition: packet-metadata.cc:1046
ns3::PacketMetadata::CreateFragment
PacketMetadata CreateFragment(uint32_t start, uint32_t end) const
Creates a fragment.
Definition: packet-metadata.cc:644
ns3::PacketMetadata::Append16
void Append16(uint16_t value, uint8_t *buffer)
Append a 16-bit value to the buffer.
Definition: packet-metadata.cc:237
ns3::PacketMetadata::DataFreeList
Class to hold all the metadata.
Definition: packet-metadata.h:501
ns3::PacketMetadata::EnableChecking
static void EnableChecking(void)
Enable the packet metadata checking.
Definition: packet-metadata.cc:66
ns3::PacketMetadata::~PacketMetadata
~PacketMetadata()
Definition: packet-metadata.h:740
ns3::PacketMetadata::AddToRawU64
static uint8_t * AddToRawU64(const uint64_t &data, uint8_t *start, uint8_t *current, uint32_t maxSize)
Helper for the raw serialization.
Definition: packet-metadata.cc:1388
ns3::PacketMetadata::DoAddHeader
void DoAddHeader(uint32_t uid, uint32_t size)
Add an header.
Definition: packet-metadata.cc:663
ns3::PacketMetadata::Item::TRAILER
@ TRAILER
Trailer.
Definition: packet-metadata.h:91
ns3::PacketMetadata::ReadFromRawU64
static uint8_t * ReadFromRawU64(uint64_t &data, const uint8_t *start, const uint8_t *current, uint32_t maxSize)
Helper for the raw deserialization.
Definition: packet-metadata.cc:1469
ns3::PacketMetadata::Enable
static void Enable(void)
Enable the packet metadata.
Definition: packet-metadata.cc:52
ns3::PacketMetadata::AddBig
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)
Definition: packet-metadata.cc:403
ns3::PacketMetadata::IsSharedPointerOk
bool IsSharedPointerOk(uint16_t pointer) const
Check if the position is valid.
Definition: packet-metadata.cc:118
ns3::PacketMetadata::Item::HEADER
@ HEADER
Header.
Definition: packet-metadata.h:90
ns3::PacketMetadata::ReadFromRawU8
static uint8_t * ReadFromRawU8(uint8_t &data, const uint8_t *start, const uint8_t *current, uint32_t maxSize)
Helper for the raw deserialization.
Definition: packet-metadata.cc:1421
ns3::PacketMetadata::ReadItems
uint32_t ReadItems(uint16_t current, struct PacketMetadata::SmallItem *item, struct PacketMetadata::ExtraItem *extraItem) const
Read items.
Definition: packet-metadata.cc:528
ns3::PacketMetadata::Item::ItemType
ItemType
Type of data in the packet.
Definition: packet-metadata.h:88
ns3::PacketMetadata::Append32
void Append32(uint32_t value, uint8_t *buffer)
Append a 32-bit value to the buffer.
Definition: packet-metadata.cc:245
ns3::PacketMetadata::ExtraItem::fragmentEnd
uint32_t fragmentEnd
offset (in bytes) from start of original header to the end of the fragment still present.
Definition: packet-metadata.h:488
ns3::PacketMetadata::GetUid
uint64_t GetUid(void) const
Get the packet Uid.
Definition: packet-metadata.cc:1040
sample-rng-plot.n
n
Definition: sample-rng-plot.py:37
ns3::PacketMetadata::m_maxSize
static uint32_t m_maxSize
maximum metadata size
Definition: packet-metadata.h:675
ns3::PacketMetadata::RemoveAtEnd
void RemoveAtEnd(uint32_t end)
Remove a chunk of metadata at the metadata end.
Definition: packet-metadata.cc:952
ns3::PacketMetadata::ItemIterator::m_offset
uint32_t m_offset
offset
Definition: packet-metadata.h:151
ns3::PacketMetadata::ItemIterator::m_current
uint16_t m_current
current position
Definition: packet-metadata.h:150
ns3::Trailer
Protocol trailer serialization and deserialization.
Definition: trailer.h:41
ns3::PacketMetadata::Item::isFragment
bool isFragment
true: this is a fragmented header, trailer, or, payload.
Definition: packet-metadata.h:97