31#include "ns3/address.h"
32#include "ns3/header.h"
33#include "ns3/buffer.h"
34#include "ns3/simple-ref-count.h"
59 typedef std::list< Ptr<PbbTlv> >::iterator
Iterator;
89 int Size (
void)
const;
94 bool Empty (
void)
const;
185 void Print (std::ostream &os)
const;
195 void Print (std::ostream &os,
int level)
const;
223 typedef std::list< Ptr<PbbAddressTlv> >::iterator
Iterator;
253 int Size (
void)
const;
258 bool Empty (
void)
const;
351 void Print (std::ostream &os)
const;
361 void Print (std::ostream &os,
int level)
const;
660 virtual void Print (std::ostream &os)
const;
1041 void Print (std::ostream &os)
const;
1052 void Print (std::ostream &os,
int level)
const;
1531 void Print (std::ostream &os)
const;
1542 void Print (std::ostream &os,
int level)
const;
1596 void GetHeadTail (uint8_t *head, uint8_t &headlen,
1597 uint8_t *tail, uint8_t &taillen)
const;
1605 bool HasZeroTail (
const uint8_t *tail, uint8_t taillen)
const;
1765 void Print (std::ostream &os)
const;
1775 void Print (std::ostream &os,
int level)
const;
a polymophic address class
iterator in a Buffer instance
automatically resized byte buffer
An Address Block and its associated Address TLV Blocks.
Ptr< PbbAddressTlv > TlvFront(void)
virtual uint8_t GetAddressLength(void) const =0
Returns address length.
std::list< uint8_t >::iterator PrefixIterator
Prefix iterator.
PrefixIterator PrefixEnd(void)
void PrefixPushFront(uint8_t prefix)
Prepends a prefix to the front of this block.
void Print(std::ostream &os) const
Pretty-prints the contents of this address block.
Address AddressBack(void) const
std::list< Address > m_addressList
Addresses container.
TlvIterator TlvInsert(TlvIterator position, const Ptr< PbbTlv > value)
Inserts an address TLV at the specified position in this block.
PrefixIterator PrefixBegin(void)
bool PrefixEmpty(void) const
bool operator!=(const PbbAddressBlock &other) const
Inequality operator for PbbAddressBlock.
uint8_t PrefixFront(void) const
void Serialize(Buffer::Iterator &start) const
Serializes this address block into the specified buffer.
void PrefixClear(void)
Removes all prefixes from this block.
PbbAddressTlvBlock::Iterator TlvIterator
tlvblock iterator
AddressIterator AddressBegin(void)
int PrefixSize(void) const
virtual void PrintAddress(std::ostream &os, ConstAddressIterator iter) const =0
Print one or more addresses.
void GetHeadTail(uint8_t *head, uint8_t &headlen, uint8_t *tail, uint8_t &taillen) const
Get head and tail.
AddressIterator AddressInsert(AddressIterator position, const Address value)
Inserts an address at the specified position in this block.
virtual void SerializeAddress(uint8_t *buffer, ConstAddressIterator iter) const =0
Serialize one or more addresses.
std::list< Address >::const_iterator ConstAddressIterator
Address const iterator.
Ptr< PbbAddressTlv > TlvBack(void)
void TlvPushBack(Ptr< PbbAddressTlv > address)
Appends an address TLV to the back of this message.
TlvIterator TlvBegin(void)
uint8_t PrefixBack(void) const
void AddressPopFront(void)
Removes an address from the front of this block.
Address AddressFront(void) const
void AddressPushBack(Address address)
Appends an address to the back of this block.
AddressIterator AddressErase(AddressIterator position)
Removes the address at the specified position.
int AddressSize(void) const
bool HasZeroTail(const uint8_t *tail, uint8_t taillen) const
Check if the tail is empty.
std::list< uint8_t > m_prefixList
Prefixes container.
void PrefixPushBack(uint8_t prefix)
Appends a prefix to the back of this block.
void PrefixPopFront(void)
Removes a prefix from the front of this block.
PrefixIterator PrefixErase(PrefixIterator position)
Removes the prefix at the specified position.
virtual Address DeserializeAddress(uint8_t *buffer) const =0
Deserialize one address.
PbbAddressTlvBlock::ConstIterator ConstTlvIterator
tlvblock const iterator
PrefixIterator PrefixInsert(PrefixIterator position, const uint8_t value)
Inserts a prefix at the specified position in this block.
void PrefixPopBack(void)
Removes a prefix from the back of this block.
void AddressClear(void)
Removes all addresses from this block.
void TlvPushFront(Ptr< PbbAddressTlv > address)
Prepends an address TLV to the front of this message.
bool TlvEmpty(void) const
uint32_t GetSerializedSize(void) const
virtual ~PbbAddressBlock()
void Deserialize(Buffer::Iterator &start)
Deserializes an address block from the specified buffer.
bool AddressEmpty(void) const
TlvIterator TlvErase(TlvIterator position)
Removes the address TLV at the specified position.
std::list< uint8_t >::const_iterator ConstPrefixIterator
Prefix const iterator.
AddressIterator AddressEnd(void)
void AddressPushFront(Address address)
Prepends an address to the front of this block.
std::list< Address >::iterator AddressIterator
Address iterator.
void TlvPopBack(void)
Removes an address TLV from the back of this message.
bool operator==(const PbbAddressBlock &other) const
Equality operator for PbbAddressBlock.
void TlvClear(void)
Removes all address TLVs from this block.
PbbAddressTlvBlock m_addressTlvList
PbbAddressTlv container.
void AddressPopBack(void)
Removes an address from the back of this block.
void TlvPopFront(void)
Removes an address TLV from the front of this message.
uint8_t GetPrefixFlags(void) const
Get the prefix flags.
Concrete IPv4 specific PbbAddressBlock.
virtual void SerializeAddress(uint8_t *buffer, ConstAddressIterator iter) const
Serialize one or more addresses.
virtual Address DeserializeAddress(uint8_t *buffer) const
Deserialize one address.
virtual void PrintAddress(std::ostream &os, ConstAddressIterator iter) const
Print one or more addresses.
virtual uint8_t GetAddressLength(void) const
Returns address length.
virtual ~PbbAddressBlockIpv4()
Concrete IPv6 specific PbbAddressBlock.
virtual ~PbbAddressBlockIpv6()
virtual void SerializeAddress(uint8_t *buffer, ConstAddressIterator iter) const
Serialize one or more addresses.
virtual void PrintAddress(std::ostream &os, ConstAddressIterator iter) const
Print one or more addresses.
virtual Address DeserializeAddress(uint8_t *buffer) const
Deserialize one address.
virtual uint8_t GetAddressLength(void) const
Returns address length.
A block of Address TLVs (PbbAddressTlv).
uint32_t GetSerializedSize(void) const
void Serialize(Buffer::Iterator &start) const
Serializes this block into the specified buffer.
void PushBack(Ptr< PbbAddressTlv > tlv)
Appends an Address TLV to the back of this block.
void Print(std::ostream &os) const
Pretty-prints the contents of this block.
Iterator Erase(Iterator position)
Removes the Address TLV at the specified position.
bool operator!=(const PbbAddressTlvBlock &other) const
Inequality operator for PbbAddressTlvBlock.
std::list< Ptr< PbbAddressTlv > >::const_iterator ConstIterator
PbbAddressTlv const iterator for PbbAddressTlvBlock.
std::list< Ptr< PbbAddressTlv > >::iterator Iterator
PbbAddressTlv iterator for PbbAddressTlvBlock.
std::list< Ptr< PbbAddressTlv > > m_tlvList
PbbAddressTlv container.
void Deserialize(Buffer::Iterator &start)
Deserializes a block from the specified buffer.
void PopBack(void)
Removes an Address TLV from the back of this block.
~PbbAddressTlvBlock(void)
Ptr< PbbAddressTlv > Back(void) const
void PopFront(void)
Removes an AddressTLV from the front of this block.
void Clear(void)
Removes all Address TLVs from this block.
Ptr< PbbAddressTlv > Front(void) const
Iterator Insert(Iterator position, const Ptr< PbbAddressTlv > tlv)
Inserts an Address TLV at the specified position in this block.
void PushFront(Ptr< PbbAddressTlv > tlv)
Prepends an Address TLV to the front of this block.
bool operator==(const PbbAddressTlvBlock &other) const
Equality operator for PbbAddressTlvBlock.
uint8_t GetIndexStop(void) const
bool IsMultivalue(void) const
Tests whether or not this address TLV is "multivalue".
void SetMultivalue(bool isMultivalue)
Sets whether or not this address TLV is "multivalue".
bool HasIndexStop(void) const
Tests whether or not this address TLV has a stop index.
void SetIndexStart(uint8_t index)
Sets the index of the first address in the associated address block that this address TLV applies to.
bool HasIndexStart(void) const
Tests whether or not this address TLV has a start index.
uint8_t GetIndexStart(void) const
void SetIndexStop(uint8_t index)
Sets the index of the last address in the associated address block that this address TLV applies to.
A message within a PbbPacket packet.
std::list< Ptr< PbbAddressBlock > > m_addressBlockList
PbbAddressBlock container.
void AddressBlockPushFront(Ptr< PbbAddressBlock > block)
Prepends an address block to the front of this message.
uint16_t m_sequenceNumber
Sequence number.
std::list< Ptr< PbbAddressBlock > >::iterator AddressBlockIterator
PbbAddressBlock iterator.
bool m_hasHopLimit
Hop limit present.
void TlvPushFront(Ptr< PbbTlv > tlv)
Prepends a message TLV to the front of this message.
int AddressBlockSize(void) const
Address m_originatorAddress
originator address
bool operator!=(const PbbMessage &other) const
Inequality operator for PbbMessage.
AddressBlockIterator AddressBlockBegin()
void Deserialize(Buffer::Iterator &start)
Deserializes a message from the specified buffer.
Ptr< PbbAddressBlock > AddressBlockFront(void)
uint8_t GetHopCount(void) const
std::list< Ptr< PbbTlv > >::const_iterator ConstTlvIterator
PbbTlv const iterator.
AddressBlockIterator AddressBlockEnd()
Ptr< PbbTlv > TlvBack(void)
void SetType(uint8_t type)
Sets the type for this message.
std::list< Ptr< PbbAddressBlock > >::const_iterator ConstAddressBlockIterator
PbbAddressBlock const iterator.
void Serialize(Buffer::Iterator &start) const
Serializes this message into the specified buffer.
TlvIterator TlvErase(TlvIterator position)
Removes the message TLV at the specified position.
void SetOriginatorAddress(Address address)
Sets the address for the node that created this packet.
void SetHopLimit(uint8_t hoplimit)
Sets the maximum number of hops this message should travel.
uint16_t GetSequenceNumber(void) const
bool HasHopLimit(void) const
Tests whether or not this message has a hop limit.
static Ptr< PbbMessage > DeserializeMessage(Buffer::Iterator &start)
Deserializes a message, returning the correct object depending on whether it is an IPv4 message or an...
Ptr< PbbAddressBlock > AddressBlockBack(void)
uint8_t m_hopLimit
Hop limit.
void AddressBlockPushBack(Ptr< PbbAddressBlock > block)
Appends an address block to the front of this message.
void AddressBlockPopFront(void)
Removes an address block from the front of this message.
bool m_hasOriginatorAddress
Originator address present.
virtual void PrintOriginatorAddress(std::ostream &os) const =0
Print the originator address.
bool HasOriginatorAddress(void) const
Tests whether or not this message has an originator address.
std::list< Ptr< PbbTlv > >::iterator TlvIterator
PbbTlv iterator.
virtual Address DeserializeOriginatorAddress(Buffer::Iterator &start) const =0
Deserialize the originator address.
void TlvPopFront(void)
Removes a message TLV from the front of this message.
void SetHopCount(uint8_t hopcount)
Sets the current number of hops this message has traveled.
void Print(std::ostream &os) const
Pretty-prints the contents of this message.
void SetSequenceNumber(uint16_t seqnum)
Sets the sequence number of this message.
void TlvPopBack(void)
Removes a message TLV from the back of this message.
bool m_hasHopCount
Hop count present.
virtual Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const =0
Deserialize an address block.
PbbTlvBlock m_tlvList
PbbTlvBlock.
bool TlvEmpty(void) const
void AddressBlockClear(void)
Removes all address blocks from this message.
bool HasSequenceNumber(void) const
Tests whether or not this message has a sequence number.
void TlvClear(void)
Removes all message TLVs from this block.
void TlvPushBack(Ptr< PbbTlv > tlv)
Appends a message TLV to the back of this message.
bool HasHopCount(void) const
Tests whether or not this message has a hop count.
virtual void SerializeOriginatorAddress(Buffer::Iterator &start) const =0
Serialize the originator address.
bool AddressBlockEmpty(void) const
uint8_t GetHopLimit(void) const
AddressBlockIterator AddressBlockErase(AddressBlockIterator position)
Removes the address block at the specified position.
virtual PbbAddressLength GetAddressLength(void) const =0
Returns address length (IPV4 3 or IPV6 15)
bool operator==(const PbbMessage &other) const
Equality operator for PbbMessage.
PbbAddressLength m_addrSize
the address size
uint8_t m_hopCount
Hop count.
uint8_t GetType(void) const
bool m_hasSequenceNumber
Sequence number present.
Ptr< PbbTlv > TlvFront(void)
Address GetOriginatorAddress(void) const
uint32_t GetSerializedSize(void) const
void AddressBlockPopBack(void)
Removes an address block from the back of this message.
uint8_t m_type
the type for this message
Concrete IPv4 specific PbbMessage.
virtual void SerializeOriginatorAddress(Buffer::Iterator &start) const
Serialize the originator address.
virtual Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const
Deserialize an address block.
virtual ~PbbMessageIpv4()
virtual void PrintOriginatorAddress(std::ostream &os) const
Print the originator address.
virtual Address DeserializeOriginatorAddress(Buffer::Iterator &start) const
Deserialize the originator address.
virtual PbbAddressLength GetAddressLength(void) const
Returns address length (IPV4 3 or IPV6 15)
Concrete IPv6 specific PbbMessage class.
virtual Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const
Deserialize an address block.
virtual void PrintOriginatorAddress(std::ostream &os) const
Print the originator address.
virtual Address DeserializeOriginatorAddress(Buffer::Iterator &start) const
Deserialize the originator address.
virtual void SerializeOriginatorAddress(Buffer::Iterator &start) const
Serialize the originator address.
virtual PbbAddressLength GetAddressLength(void) const
Returns address length (IPV4 3 or IPV6 15)
virtual ~PbbMessageIpv6()
Main PacketBB Packet object.
std::list< Ptr< PbbMessage > >::iterator MessageIterator
PbbMessage Iterator for PbbPacket.
void MessageClear(void)
Removes all messages from this packet.
bool MessageEmpty(void) const
std::list< Ptr< PbbMessage > >::const_iterator ConstMessageIterator
PbbMessage Const Iterator for PbbPacket.
virtual uint32_t GetSerializedSize(void) const
MessageIterator MessageEnd(void)
TlvIterator TlvBegin(void)
bool m_hasseqnum
Sequence number present.
void TlvPopBack(void)
Removes a packet TLV from the back of this block.
Ptr< PbbTlv > TlvFront(void)
int MessageSize(void) const
void TlvPushBack(Ptr< PbbTlv > tlv)
Appends a packet TLV to the back of this packet.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
std::list< Ptr< PbbMessage > > m_messageList
PbbTlvBlock container.
void MessagePushBack(Ptr< PbbMessage > message)
Appends a message to the back of this packet.
std::list< Ptr< PbbTlv > >::iterator TlvIterator
PbbTlv iterator for PbbPacket.
void TlvPopFront(void)
Removes a packet TLV from the front of this packet.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserializes a packet from the specified buffer.
MessageIterator MessageBegin(void)
bool HasSequenceNumber(void) const
Tests whether or not this packet has a sequence number.
void SetSequenceNumber(uint16_t number)
Sets the sequence number of this packet.
void TlvPushFront(Ptr< PbbTlv > tlv)
Prepends a packet TLV to the front of this packet.
uint16_t GetSequenceNumber(void) const
Ptr< PbbTlv > TlvBack(void)
void MessagePopFront(void)
Removes a message from the front of this packet.
Ptr< PbbMessage > MessageBack(void)
MessageIterator Erase(MessageIterator first, MessageIterator last)
Removes all messages from [first, last) (includes first, not includes last).
void MessagePopBack(void)
Removes a message from the back of this packet.
TlvIterator Erase(TlvIterator position)
Removes the packet TLV at the specified position.
MessageIterator Erase(MessageIterator position)
Removes the message at the specified position.
void MessagePushFront(Ptr< PbbMessage > message)
Prepends a message to the front of this packet.
static TypeId GetTypeId(void)
Get the type ID.
bool operator!=(const PbbPacket &other) const
Inequality operator for PbbPacket.
uint8_t GetVersion(void) const
uint16_t m_seqnum
Sequence number.
void TlvClear(void)
Removes all packet TLVs from this packet.
virtual void Serialize(Buffer::Iterator start) const
Serializes this packet into the specified buffer.
std::list< Ptr< PbbTlv > >::const_iterator ConstTlvIterator
PbbTlv const iterator for PbbPacket.
bool TlvEmpty(void) const
virtual void Print(std::ostream &os) const
Pretty-prints the contents of this block.
PbbTlvBlock m_tlvList
PbbTlv container.
Ptr< PbbMessage > MessageFront(void)
bool operator==(const PbbPacket &other) const
Equality operator for PbbPacket.
A block of packet or message TLVs (PbbTlv).
Iterator Erase(Iterator position)
Removes the TLV at the specified position.
std::list< Ptr< PbbTlv > > m_tlvList
PbbTlv container.
void PushBack(Ptr< PbbTlv > tlv)
Appends a TLV to the back of this block.
void PopBack(void)
Removes a TLV from the back of this block.
void Clear(void)
Removes all TLVs from this block.
bool operator==(const PbbTlvBlock &other) const
Equality operator for PbbTlvBlock.
void Serialize(Buffer::Iterator &start) const
Serializes this block into the specified buffer.
void PushFront(Ptr< PbbTlv > tlv)
Prepends a TLV to the front of this block.
void PopFront(void)
Removes a TLV from the front of this block.
std::list< Ptr< PbbTlv > >::iterator Iterator
PbbTlv container iterator.
Ptr< PbbTlv > Back(void) const
Iterator Insert(Iterator position, const Ptr< PbbTlv > tlv)
Inserts a TLV at the specified position in this block.
std::list< Ptr< PbbTlv > >::const_iterator ConstIterator
PbbTlv container const iterator.
Ptr< PbbTlv > Front(void) const
uint32_t GetSerializedSize(void) const
void Deserialize(Buffer::Iterator &start)
Deserializes a block from the specified buffer.
void Print(std::ostream &os) const
Pretty-prints the contents of this block.
bool operator!=(const PbbTlvBlock &other) const
Inequality operator for PbbTlvBlock.
bool m_isMultivalue
Is multivalue.
uint8_t m_indexStop
Stop index.
void SetValue(Buffer start)
Sets the value of this message to the specified buffer.
uint8_t GetTypeExt(void) const
bool operator!=(const PbbTlv &other) const
Inequality operator for PbbTlv.
bool HasValue(void) const
Tests whether or not this TLV has a value.
uint8_t GetIndexStop(void) const
Get the stop point index.
uint8_t m_indexStart
Start index.
uint8_t GetIndexStart(void) const
Get the starting point index.
uint8_t m_type
Type of this TLV.
bool m_hasIndexStart
Start index present.
bool operator==(const PbbTlv &other) const
Equality operator for PbbTlv.
void Serialize(Buffer::Iterator &start) const
Serializes this TLV into the specified buffer.
Buffer GetValue(void) const
bool HasIndexStart(void) const
Checks if there is a starting index.
void SetType(uint8_t type)
Sets the type of this TLV.
uint32_t GetSerializedSize(void) const
bool m_hasIndexStop
Stop index present.
void SetIndexStop(uint8_t index)
Set an index as stop point.
void SetMultivalue(bool isMultivalue)
Set the multivalue parameter.
bool IsMultivalue(void) const
Check the multivalue parameter.
void Print(std::ostream &os) const
Pretty-prints the contents of this TLV.
void SetIndexStart(uint8_t index)
Set an index as starting point.
uint8_t m_typeExt
Extended type.
bool m_hasTypeExt
Extended type present.
bool HasTypeExt(void) const
Tests whether or not this TLV has a type extension.
bool HasIndexStop(void) const
Checks if there is a stop index.
uint8_t GetType(void) const
void SetTypeExt(uint8_t type)
Sets the type extension of this TLV.
void Deserialize(Buffer::Iterator &start)
Deserializes a TLV from the specified buffer.
bool m_hasValue
Has value.
Smart pointer class similar to boost::intrusive_ptr.
A template-based reference counting class.
a unique identifier for an interface.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
PbbAddressLength
Used in Messages to determine whether it contains IPv4 or IPv6 addresses.