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);
380 if (constructor.
IsNull ())
388 Tag *tag =
dynamic_cast<Tag *
> (constructor ());
404 std::ostringstream oss;
445 Chunk *chunk =
dynamic_cast<Chunk *
> (instance);
498 Chunk *chunk =
dynamic_cast<Chunk *
> (instance);
503 std::string attrName = item.
tid.GetAttributeName (j);
507 os << attrName <<
"=" << value;
591 uint32_t* p =
reinterpret_cast<uint32_t *
> (buffer);
598 if (size + nixSize <= maxSize)
607 uint32_t serialized =
613 p += ((nixSize+3) & (~3)) / 4;
630 if (size + 4 <= maxSize)
646 if (size + metaSize <= maxSize)
655 uint32_t serialized =
661 p += ((metaSize+3) & (~3)) / 4;
675 if (size + bufSize <= maxSize)
684 uint32_t serialized =
690 p += ((bufSize+3) & (~3)) / 4;
711 const uint32_t* p =
reinterpret_cast<const uint32_t *
> (buffer);
715 uint32_t nixSize = *p++;
726 uint32_t nixDeserialized = nix->
Deserialize (p, nixSize);
727 if (!nixDeserialized)
736 p += ((((nixSize - 4) + 3) & (~3)) / 4);
745 uint32_t metaSize = *p++;
753 uint32_t metadataDeserialized =
755 if (!metadataDeserialized)
763 p += ((((metaSize - 4) + 3) & (~3)) / 4);
766 uint32_t bufSize = *p++;
774 uint32_t bufferDeserialized =
776 if (!bufferDeserialized)
867 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)
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)
#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
Retiurns 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.