21 #include "ns3/assert.h" 
   23 #include "ns3/simulator.h" 
  116                               (uint8_t*)m_data->data
 
  140     m_metadata (static_cast<uint64_t> (
Simulator::GetSystemId ()) << 32 | m_globalUid, 0),
 
  147   : m_buffer (o.m_buffer),
 
  148     m_byteTagList (o.m_byteTagList),
 
  149     m_packetTagList (o.m_packetTagList),
 
  150     m_metadata (o.m_metadata)
 
  182     m_metadata (static_cast<uint64_t> (
Simulator::GetSystemId ()) << 32 | m_globalUid, size),
 
  188   : m_buffer (0, false),
 
  208     m_metadata (static_cast<uint64_t> (
Simulator::GetSystemId ()) << 32 | m_globalUid, size),
 
  214   i.
Write (buffer, size);
 
  220     m_byteTagList (byteTagList),
 
  221     m_packetTagList (packetTagList),
 
  222     m_metadata (metadata),
 
  233   byteTagList.
Adjust (-start);
 
  382       if (constructor.
IsNull ())
 
  390       Tag *tag = 
dynamic_cast<Tag *
> (constructor ());
 
  406   std::ostringstream oss;
 
  447                 Chunk *chunk = 
dynamic_cast<Chunk *
> (instance);
 
  500                 Chunk *chunk = 
dynamic_cast<Chunk *
> (instance);
 
  505                     std::string attrName = item.
tid.GetAttributeName (j);
 
  509                     os << attrName << 
"=" << value;
 
  593   uint32_t* p = 
reinterpret_cast<uint32_t *
> (buffer);
 
  600       if (size + nixSize <= maxSize)
 
  609           uint32_t serialized = 
 
  615               p += ((nixSize+3) & (~3)) / 4;
 
  632       if (size + 4 <= maxSize)
 
  648   if (size + metaSize <= maxSize)
 
  657       uint32_t serialized = 
 
  663           p += ((metaSize+3) & (~3)) / 4;
 
  677   if (size + bufSize <= maxSize)
 
  686       uint32_t serialized = 
 
  692           p += ((bufSize+3) & (~3)) / 4;
 
  713   const uint32_t* p = 
reinterpret_cast<const uint32_t *
> (buffer);
 
  717   uint32_t nixSize = *p++;
 
  728       uint32_t nixDeserialized = nix->
Deserialize (p, nixSize);
 
  729       if (!nixDeserialized)
 
  738       p += ((((nixSize - 4) + 3) & (~3)) / 4);
 
  747   uint32_t metaSize = *p++;
 
  755   uint32_t metadataDeserialized = 
 
  757   if (!metadataDeserialized)
 
  765   p += ((((metaSize - 4) + 3) & (~3)) / 4);
 
  768   uint32_t bufSize = *p++;
 
  776   uint32_t bufferDeserialized =
 
  778   if (!bufferDeserialized)
 
  869       Tag *tag = 
dynamic_cast<Tag *
> (instance);
 
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer. 
PacketMetadata m_metadata
the packet's metadata 
uint32_t GetAttributeN(void) const 
Get the number of attributes. 
bool FindFirstMatchingByteTag(Tag &tag) const 
Finds the first tag matching the parameter Tag type. 
bool Remove(Tag &tag)
Remove (the first instance of) tag from the list. 
Size of serialization buffer data. 
void AddAtStart(uint32_t start)
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
void PrintPacketTags(std::ostream &os) const 
Print the list of packet tags. 
Control the scheduling of simulation events. 
void RemoveAtEnd(uint32_t end)
struct TagData * next
Pointer to next in list. 
uint32_t Deserialize(uint8_t const *buffer, uint32_t size)
Deserializes a packet. 
void RemoveAtStart(uint32_t start)
virtual uint32_t GetSerializedSize(void) const =0
const struct PacketTagList::TagData * Head(void) const 
automatically resized byte buffer 
Ptr< NixVector > Copy(void) const 
void AddPacketTag(const Tag &tag) const 
Add a packet tag. 
List of the packet tags stored in a packet. 
uint64_t GetUid(void) const 
Returns the packet's Uid. 
uint32_t Serialize(uint8_t *buffer, uint32_t maxSize) const 
Serialize a packet, tags, and metadata into a byte buffer. 
keep track of the byte tags stored in a packet. 
bool IsNull(void) const 
Check for null implementation. 
static uint32_t m_globalUid
Global counter of packets Uid. 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
bool HasNext(void) const 
Used to determine if the iterator is at the end of the byteTagList. 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
TagBuffer Add(TypeId tid, uint32_t bufferSize, int32_t start, int32_t end)
uint32_t GetSize(void) const 
Returns the the size in bytes of the packet (including the zero-filled initial payload). 
uint32_t GetSerializedSize(void) const 
Return the number of bytes required for serialization. 
void Adjust(int32_t adjustment)
Adjust the offsets stored internally by the adjustment delta. 
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate. 
Buffer m_buffer
the packet buffer (it's actual contents) 
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function. 
Anchor the ns-3 type and attribute system. 
Ptr< NixVector > GetNixVector(void) const 
Get the packet nix-vector. 
Item(TypeId tid, uint32_t start, uint32_t end, TagBuffer buffer)
Constructor. 
void Print(std::ostream &os) const 
Print the packet contents. 
Packet & operator=(const Packet &o)
Basic assignment. 
virtual uint32_t Deserialize(Buffer::Iterator start)=0
Deserialize the object from a buffer iterator. 
bool Peek(Tag &tag) const 
Find a tag and return its value. 
PacketTagIterator GetPacketTagIterator(void) const 
Returns an object which can be used to iterate over the list of packet tags. 
iterator in a Buffer instance 
Callback< ObjectBase * > GetConstructor(void) const 
Get the constructor callback. 
ByteTagList::Iterator m_current
actual position over the set of byte tags in a packet 
Packet()
Create an empty packet with a new uid (as returned by getUid). 
void Add(Tag const &tag) const 
Add a tag to the head of this branch. 
bool HasConstructor(void) const 
Check if this TypeId has a constructor. 
void GetTag(Tag &tag) const 
Read the requested tag and store it in the user-provided tag instance. 
Ptr< Packet > CreateFragment(uint32_t start, uint32_t length) const 
Create a new packet which contains a fragment of the original packet. 
uint32_t PeekTrailer(Trailer &trailer)
Deserialize but does not remove a trailer from the internal buffer. 
void AddAtEnd(int32_t appendOffset)
Make sure that all offsets are smaller than appendOffset which represents the location where new byte...
void AddAtEnd(Ptr< const Packet > packet)
Concatenate the input packet at the end of the current packet. 
void RemoveAll(void)
Removes all of the tags from the ByteTagList. 
Tree node for sharing serialized tags. 
uint32_t Deserialize(const uint8_t *buffer, uint32_t size)
bool PeekPacketTag(Tag &tag) const 
Search a matching tag and call Tag::Deserialize if it is found. 
void RemoveAllPacketTags(void)
Remove all packet tags. 
Identifies a byte tag and a set of bytes within a packet to which the tag applies. 
void RemoveAtStart(uint32_t size)
Remove size bytes from the start of the current packet. 
bool Replace(Tag &tag)
Replace the value of a tag. 
std::string ToString(void) const 
Return a string representation of the packet. 
static void EnablePrinting(void)
Enable printing packets metadata. 
TypeId m_tid
the ns3::TypeId associated to this tag. 
void SetNixVector(Ptr< NixVector > nixVector)
Set the packet nix-vector. 
uint32_t Serialize(uint32_t *buffer, uint32_t maxSize) const 
virtual void Print(std::ostream &os) const =0
Print the object contents. 
ByteTagList m_byteTagList
the ByteTag list 
bool ReplacePacketTag(Tag &tag)
Replace the value of a packet tag. 
uint32_t GetSerializedSize(void) const 
Buffer::Iterator End(void) const 
static void EnableChecking(void)
Enable packets metadata checking. 
void AddPaddingAtEnd(uint32_t size)
Add a zero-filled padding to the packet. 
int32_t start
offset to the start of the tag from the virtual byte buffer 
ByteTagIterator GetByteTagIterator(void) const 
Returns an iterator over the set of byte tags included in this packet. 
void CopyData(std::ostream *os, uint32_t size) const 
Copy the specified amount of data from the buffer to the given output stream. 
virtual uint32_t Deserialize(Buffer::Iterator end)=0
uint32_t GetEnd(void) const 
The index is an offset from the start of the packet. 
Iterator over the set of packet tags in a packet. 
void PrintByteTags(std::ostream &os) const 
Iterate over the byte tags present in this packet, and invoke the Print method of each tag stored in ...
const struct PacketTagList::TagData * m_current
actual position over the set of tags in a packet 
Buffer::Iterator Begin(void) const 
struct ByteTagList::Iterator::Item Next(void)
Returns the next Item from the ByteTagList. 
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output 
void AddAtEnd(uint32_t end)
Ptr< Packet > Copy(void) const 
performs a COW copy of the packet. 
uint32_t PeekHeader(Header &header) const 
Deserialize but does not remove the header from the internal buffer. 
Protocol trailer serialization and deserialization. 
virtual void Serialize(TagBuffer i) const =0
tag a set of bytes in a packet 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
PacketMetadata::ItemIterator BeginItem(void) const 
Returns an iterator which points to the first 'item' stored in this buffer. 
PacketTagIterator(const struct PacketTagList::TagData *head)
Constructor. 
void AddTrailer(const Trailer &trailer)
Add trailer to this packet. 
void RemoveAtEnd(uint32_t size)
Remove size bytes from the end of the current packet. 
Iterator over the set of byte tags in a packet. 
virtual void Deserialize(TagBuffer i)=0
uint32_t RemoveTrailer(Trailer &trailer)
Remove a deserialized trailer from the internal buffer. 
std::string GetName(void) const 
Get the name. 
uint32_t GetOffsetStart(void) const 
Returns the offset from the start of the virtual byte buffer to the ByteTagList. 
PacketTagList m_packetTagList
the packet's Tag list 
int32_t end
offset to the end of the tag from the virtual byte buffer 
TypeId GetTypeId(void) const 
void GetAttribute(std::string name, AttributeValue &value) const 
Get the value of an attribute, raising fatal errors if unsuccessful. 
Identifies a packet tag within a packet. 
uint32_t GetSize(void) const 
TypeId GetTypeId(void) const 
TypeId tid
type of the tag 
Buffer CreateFragment(uint32_t start, uint32_t length) const 
Item(const struct PacketTagList::TagData *data)
Constructor. 
void GetTag(Tag &tag) const 
Read the requested tag and store it in the user-provided tag instance. 
uint32_t Serialize(uint8_t *buffer, uint32_t maxSize) const 
ByteTagList::Iterator Begin(int32_t offsetStart, int32_t offsetEnd) const 
TagBuffer buf
the data for the tag as generated by Tag::Serialize 
An iterator for iterating through a byte tag list. 
uint32_t GetStart(void) const 
The index is an offset from the start of the packet. 
uint32_t GetSerializedSize(void) const 
Returns number of bytes required for packet serialization. 
virtual TypeId GetInstanceTypeId(void) const =0
Get the most derived TypeId for this Object. 
bool RemovePacketTag(Tag &tag)
Remove a packet tag. 
void AddAtStart(int32_t prependOffset)
Make sure that all offsets are bigger than prependOffset which represents the location where new byte...
void RemoveAllByteTags(void)
Remove all byte tags stored in this packet. 
virtual uint32_t GetSerializedSize(void) const =0
Ptr< NixVector > m_nixVector
the packet's Nix vector 
uint32_t Deserialize(const uint32_t *buffer, uint32_t size)
void Write(uint8_t const *buffer, uint32_t size)
uint32_t CopyData(uint8_t *buffer, uint32_t size) const 
Copy the packet contents to a byte buffer. 
virtual void Serialize(Buffer::Iterator start) const =0
ByteTagIterator(ByteTagList::Iterator i)
Copy Constructor. 
void RemoveAll(void)
Remove all tags from this list (up to the first merge). 
a unique identifier for an interface. 
abstract base class for ns3::Header and ns3::Trailer 
void AddHeader(const Header &header)
Add header to this packet. 
virtual void Print(std::ostream &os) const =0
void AddByteTag(const Tag &tag) const 
Tag each byte included in this packet with a new byte tag. 
An item specifies an individual tag within a byte buffer.