31 #include "ns3/address.h"
32 #include "ns3/header.h"
33 #include "ns3/buffer.h"
34 #include "ns3/simple-ref-count.h"
40 class PbbAddressBlock;
58 typedef std::list< Ptr<PbbTlv> >::iterator
Iterator;
87 int Size (
void)
const;
92 bool Empty (
void)
const;
183 void Print (std::ostream &os)
const;
193 void Print (std::ostream &os,
int level)
const;
220 typedef std::list< Ptr<PbbAddressTlv> >::iterator
Iterator;
249 int Size (
void)
const;
254 bool Empty (
void)
const;
347 void Print (std::ostream &os)
const;
357 void Print (std::ostream &os,
int level)
const;
649 virtual void Print (std::ostream &os)
const;
1026 void Print (std::ostream &os)
const;
1037 void Print (std::ostream &os,
int level)
const;
1492 void Print (std::ostream &os)
const;
1503 void Print (std::ostream &os,
int level)
const;
1531 void GetHeadTail (uint8_t *head, uint8_t &headlen,
1532 uint8_t *tail, uint8_t &taillen)
const;
1533 bool HasZeroTail (
const uint8_t *tail, uint8_t taillen)
const;
1647 void SetValue (
const uint8_t * buffer, uint32_t size);
1693 void Print (std::ostream &os)
const;
1703 void Print (std::ostream &os,
int level)
const;
bool m_hasOriginatorAddress
PrefixIterator PrefixEnd(void)
AddressBlockIterator AddressBlockEnd()
void Print(std::ostream &os) const
Pretty-prints the contents of this message.
void TlvPushBack(Ptr< PbbTlv > tlv)
Appends a packet TLV to the back of this packet.
void AddressBlockPushBack(Ptr< PbbAddressBlock > block)
Appends an address block to the front of this message.
TlvIterator TlvBegin(void)
std::list< Ptr< PbbTlv > >::iterator Iterator
smart pointer class similar to boost::intrusive_ptr
void MessagePushFront(Ptr< PbbMessage > message)
Prepends a message to the front of this packet.
Ptr< PbbMessage > MessageBack(void)
std::list< Ptr< PbbMessage > >::const_iterator ConstMessageIterator
This is a PbbMessageIterator for PbbPacket.
void PushFront(Ptr< PbbTlv > tlv)
Prepends a TLV to the front of this block.
uint16_t GetSequenceNumber(void) const
Main PacketBB Packet object.
virtual Address DeserializeOriginatorAddress(Buffer::Iterator &start) const
bool HasIndexStart(void) const
void MessagePushBack(Ptr< PbbMessage > message)
Appends a message to the back of this packet.
void PopFront(void)
Removes an AddressTLV from the front of this block.
uint32_t GetSerializedSize(void) const
virtual ~PbbMessageIpv6()
bool IsMultivalue(void) const
virtual ~PbbAddressBlockIpv6()
Concrete IPv4 specific PbbAddressBlock.
void PushFront(Ptr< PbbAddressTlv > tlv)
Prepends an Address TLV to the front of this block.
void SetSequenceNumber(uint16_t number)
Sets the sequence number of this packet.
bool HasSequenceNumber(void) const
Tests whether or not this message has a sequence number.
void SetIndexStop(uint8_t index)
virtual Address DeserializeOriginatorAddress(Buffer::Iterator &start) const =0
automatically resized byte buffer
int PrefixSize(void) const
~PbbAddressTlvBlock(void)
void AddressBlockPopBack(void)
Removes an address block from the back of this message.
void SetIndexStop(uint8_t index)
Sets the index of the last address in the associated address block that this address TLV applies to...
bool TlvEmpty(void) const
void TlvPushFront(Ptr< PbbTlv > tlv)
Prepends a packet TLV to the front of this packet.
virtual void SerializeOriginatorAddress(Buffer::Iterator &start) const
PbbAddressLength
Used in Messages to determine whether it contains IPv4 or IPv6 addresses.
std::list< Address > m_addressList
Ptr< PbbAddressBlock > AddressBlockBack(void)
void PrefixPopBack(void)
Removes a prefix from the back of this block.
TlvIterator TlvInsert(TlvIterator position, const Ptr< PbbTlv > value)
Inserts an address TLV at the specified position in this block.
bool HasTypeExt(void) const
Tests whether or not this TLV has a type extension.
AddressIterator AddressEnd(void)
void SetMultivalue(bool isMultivalue)
Sets whether or not this address TLV is "multivalue".
A message within a PbbPacket packet.
void MessageClear(void)
Removes all messages from this packet.
void PushBack(Ptr< PbbTlv > tlv)
Appends a TLV to the back of this block.
std::list< Ptr< PbbTlv > >::const_iterator ConstIterator
this is an iterator
Ptr< PbbAddressTlv > Back(void) const
bool operator!=(const PbbAddressBlock &other) const
Inequality operator for PbbAddressBlock.
void Print(std::ostream &os) const
Pretty-prints the contents of this block.
bool HasIndexStart(void) const
Tests whether or not this address TLV has a start index.
bool HasIndexStop(void) const
Tests whether or not this address TLV has a stop index.
std::list< Ptr< PbbAddressBlock > >::const_iterator ConstAddressBlockIterator
This is a PbbAddressBlock iterator for PbbMessage.
uint8_t GetIndexStart(void) const
void SetMultivalue(bool isMultivalue)
void MessagePopFront(void)
Removes a message from the front of this packet.
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.
uint8_t GetIndexStart(void) const
std::list< Ptr< PbbMessage > >::iterator MessageIterator
This is a const PbbTlv iterator for PbbPacket.
Ptr< PbbAddressTlv > TlvFront(void)
std::list< uint8_t > m_prefixList
std::list< Ptr< PbbAddressBlock > >::iterator AddressBlockIterator
This is a const PbbTlv iterator for PbbMessage.
bool IsMultivalue(void) const
Tests whether or not this address TLV is "multivalue".
Ptr< PbbTlv > TlvBack(void)
iterator in a Buffer instance
a polymophic address class
PbbAddressTlvBlock(void)
This is a const PbbAddressTlv iterator for PbbAddressTlvBlock.
virtual void PrintAddress(std::ostream &os, ConstAddressIterator iter) const
MessageIterator MessageEnd(void)
uint16_t m_sequenceNumber
AddressBlockIterator AddressBlockBegin()
virtual Address DeserializeAddress(uint8_t *buffer) const =0
void SetType(uint8_t type)
Sets the type of this TLV.
void PopBack(void)
Removes an Address TLV from the back of this block.
bool TlvEmpty(void) const
bool AddressEmpty(void) const
void AddressBlockClear(void)
Removes all address blocks from this message.
Address GetOriginatorAddress(void) const
uint8_t GetTypeExt(void) const
virtual PbbAddressLength GetAddressLength(void) const
Returns address length (IPV4 3 or IPV6 15)
Concrete IPv4 specific PbbMessage.
void TlvPushFront(Ptr< PbbAddressTlv > address)
Prepends an address TLV to the front of this message.
std::list< Address >::const_iterator ConstAddressIterator
this is an address iterator for PbbAddressBlock
Iterator Erase(Iterator position)
Removes the Address TLV at the specified position.
virtual void SerializeAddress(uint8_t *buffer, ConstAddressIterator iter) const
bool operator!=(const PbbTlv &other) const
Inequality operator for PbbTlv.
void AddressPopFront(void)
Removes an address from the front of this block.
TlvIterator TlvBegin(void)
PbbTlvBlock(void)
this is a const iterator
std::list< Address >::iterator AddressIterator
TlvIterator Erase(TlvIterator position)
Removes the packet TLV at the specified position.
bool operator==(const PbbMessage &other) const
Equality operator for PbbMessage.
virtual void PrintAddress(std::ostream &os, ConstAddressIterator iter) const
void SetIndexStart(uint8_t index)
Sets the index of the first address in the associated address block that this address TLV applies to...
bool operator!=(const PbbPacket &other) const
Inequality operator for PbbPacket.
Ptr< PbbAddressTlv > TlvBack(void)
uint8_t GetVersion(void) const
virtual uint8_t GetAddressLength(void) const
Returns address length.
void PushBack(Ptr< PbbAddressTlv > tlv)
Appends an Address TLV to the back of this block.
void SetType(uint8_t type)
Sets the type for this message.
std::list< Ptr< PbbTlv > >::iterator TlvIterator
void Serialize(Buffer::Iterator &start) const
Serializes this message into the specified buffer.
void TlvPopBack(void)
Removes an address TLV from the back of this message.
virtual Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const
uint16_t GetSequenceNumber(void) const
int MessageSize(void) const
void AddressPushBack(Address address)
Appends an address to the back of this block.
Address AddressFront(void) const
void TlvClear(void)
Removes all message TLVs from this block.
Ptr< PbbAddressBlock > AddressBlockFront(void)
bool TlvEmpty(void) const
uint8_t PrefixBack(void) const
PbbAddressLength m_addrSize
Ptr< PbbTlv > Front(void) const
bool operator==(const PbbTlvBlock &other) const
Equality operator for PbbTlvBlock.
std::list< uint8_t >::const_iterator ConstPrefixIterator
this is a prefix iterator for PbbAddressBlock
bool HasHopCount(void) const
Tests whether or not this message has a hop count.
virtual void PrintAddress(std::ostream &os, ConstAddressIterator iter) const =0
uint8_t GetType(void) const
Ptr< PbbTlv > Back(void) const
void Deserialize(Buffer::Iterator &start)
Deserializes a block from the specified buffer.
std::list< Ptr< PbbTlv > >::iterator TlvIterator
uint32_t GetSerializedSize(void) const
int AddressBlockSize(void) const
void Deserialize(Buffer::Iterator &start)
Deserializes a block from the specified buffer.
virtual Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const =0
virtual uint32_t GetSerializedSize(void) const
virtual PbbAddressLength GetAddressLength(void) const
Returns address length (IPV4 3 or IPV6 15)
void Deserialize(Buffer::Iterator &start)
Deserializes a message from the specified buffer.
void TlvPopFront(void)
Removes a message TLV from the front of this message.
bool HasValue(void) const
Tests whether or not this TLV has a value.
virtual void SerializeOriginatorAddress(Buffer::Iterator &start) const
virtual void SerializeAddress(uint8_t *buffer, ConstAddressIterator iter) const =0
virtual ~PbbAddressBlock()
void Deserialize(Buffer::Iterator &start)
Deserializes a TLV from the specified buffer.
void TlvPopBack(void)
Removes a packet TLV from the back of this block.
void SetHopLimit(uint8_t hoplimit)
Sets the maximum number of hops this message should travel.
bool HasOriginatorAddress(void) const
Tests whether or not this message has an originator address.
Concrete IPv6 specific PbbAddressBlock.
uint8_t PrefixFront(void) const
void PrefixPushFront(uint8_t prefix)
Prepends a prefix to the front of this block.
std::list< Ptr< PbbAddressTlv > >::iterator Iterator
PbbAddressTlvBlock::Iterator TlvIterator
this is a const prefix iterator for PbbAddressBlock
bool HasHopLimit(void) const
Tests whether or not this message has a hop limit.
AddressBlockIterator AddressBlockErase(AddressBlockIterator position)
Removes the address block at the specified position.
void Serialize(Buffer::Iterator &start) const
Serializes this address block into the specified buffer.
void Print(std::ostream &os) const
Pretty-prints the contents of this TLV.
virtual void PrintOriginatorAddress(std::ostream &os) const
void Print(std::ostream &os) const
Pretty-prints the contents of this address block.
PbbAddressTlvBlock m_addressTlvList
virtual ~PbbMessageIpv4()
void TlvClear(void)
Removes all address TLVs from this block.
bool operator==(const PbbPacket &other) const
Equality operator for PbbPacket.
uint32_t GetSerializedSize(void) const
void PrefixPushBack(uint8_t prefix)
Appends a prefix to the back of this block.
PbbMessage()
This is a const PbbAddressBlock iterator for PbbMessage.
std::list< Ptr< PbbAddressTlv > > m_tlvList
PbbAddressBlock()
this is a const tlvblock iterator for PbbAddressBlock
void AddressBlockPopFront(void)
Removes an address block from the front of this message.
bool operator!=(const PbbTlvBlock &other) const
Inequality operator for PbbTlvBlock.
Address m_originatorAddress
A block of packet or message TLVs (PbbTlv).
uint8_t GetType(void) const
bool MessageEmpty(void) const
uint8_t GetIndexStop(void) const
std::list< Ptr< PbbMessage > > m_messageList
void Print(std::ostream &os) const
Pretty-prints the contents of this block.
void SetIndexStart(uint8_t index)
void TlvPushBack(Ptr< PbbAddressTlv > address)
Appends an address TLV to the back of this message.
std::list< Ptr< PbbTlv > > m_tlvList
int AddressSize(void) const
std::list< Ptr< PbbAddressBlock > > m_addressBlockList
bool operator!=(const PbbAddressTlvBlock &other) const
Inequality operator for PbbAddressTlvBlock.
A block of Address TLVs (PbbAddressTlv).
uint8_t GetHopCount(void) const
bool HasSequenceNumber(void) const
Tests whether or not this packet has a sequence number.
void PopBack(void)
Removes a TLV from the back of this block.
void TlvPopFront(void)
Removes a packet TLV from the front of this packet.
bool operator==(const PbbTlv &other) const
Equality operator for PbbTlv.
uint8_t GetHopLimit(void) const
PbbAddressTlvBlock::ConstIterator ConstTlvIterator
this is a tlvblock iterator for PbbAddressBlock
virtual ~PbbAddressBlockIpv4()
virtual void PrintOriginatorAddress(std::ostream &os) const =0
PrefixIterator PrefixInsert(PrefixIterator position, const uint8_t value)
Inserts a prefix at the specified position in this block.
Ptr< PbbTlv > TlvBack(void)
TlvIterator TlvErase(TlvIterator position)
Removes the message TLV at the specified position.
uint32_t GetSerializedSize(void) const
void AddressBlockPushFront(Ptr< PbbAddressBlock > block)
Prepends an address block to the front of this message.
void MessagePopBack(void)
Removes a message from the back of this packet.
Ptr< PbbTlv > TlvFront(void)
virtual void SerializeAddress(uint8_t *buffer, ConstAddressIterator iter) const
Iterator Insert(Iterator position, const Ptr< PbbAddressTlv > tlv)
Inserts an Address TLV at the specified position in this block.
virtual PbbAddressLength GetAddressLength(void) const =0
Returns address length (IPV4 3 or IPV6 15)
void SetTypeExt(uint8_t type)
Sets the type extension of this TLV.
AddressIterator AddressBegin(void)
void AddressClear(void)
Removes all addresses from this block.
virtual void SerializeOriginatorAddress(Buffer::Iterator &start) const =0
void SetHopCount(uint8_t hopcount)
Sets the current number of hops this message has traveled.
virtual uint8_t GetAddressLength(void) const =0
Returns address length.
Ptr< PbbTlv > TlvFront(void)
bool operator!=(const PbbMessage &other) const
Inequality operator for PbbMessage.
void PrefixPopFront(void)
Removes a prefix from the front of this block.
Address AddressBack(void) const
PrefixIterator PrefixErase(PrefixIterator position)
Removes the prefix at the specified position.
void Serialize(Buffer::Iterator &start) const
Serializes this block into the specified buffer.
void SetOriginatorAddress(Address address)
Sets the address for the node that created this packet.
std::list< Ptr< PbbAddressTlv > >::const_iterator ConstIterator
This is a PbbAddressTlv iterator for PbbAddressTlvBlock.
uint32_t GetSerializedSize(void) const
void Deserialize(Buffer::Iterator &start)
Deserializes an address block from the specified buffer.
Iterator Insert(Iterator position, const Ptr< PbbTlv > tlv)
Inserts a TLV at the specified position in this block.
void TlvPopFront(void)
Removes an address TLV from the front of this message.
virtual Address DeserializeOriginatorAddress(Buffer::Iterator &start) const
uint8_t GetPrefixFlags(void) const
bool HasZeroTail(const uint8_t *tail, uint8_t taillen) const
Buffer GetValue(void) const
uint8_t GetIndexStop(void) const
void Clear(void)
Removes all Address TLVs from this block.
void SetValue(Buffer start)
Sets the value of this message to the specified buffer.
PrefixIterator PrefixBegin(void)
virtual void Print(std::ostream &os) const
Pretty-prints the contents of this block.
Ptr< PbbMessage > MessageFront(void)
virtual Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const
void TlvPushFront(Ptr< PbbTlv > tlv)
Prepends a message TLV to the front of this message.
PbbPacket(void)
This is a const PbbMessageIterator for PbbPacket.
MessageIterator MessageBegin(void)
bool HasIndexStop(void) const
void Clear(void)
Removes all TLVs from this block.
std::list< uint8_t >::iterator PrefixIterator
this is an const address iterator for PbbAddressBlock
virtual Address DeserializeAddress(uint8_t *buffer) const
AddressIterator AddressErase(AddressIterator position)
Removes the address at the specified position.
void AddressPopBack(void)
Removes an address from the back of this block.
Concrete IPv6 specific PbbMessage class.
A template-based reference counting class.
void Serialize(Buffer::Iterator &start) const
Serializes this block into the specified buffer.
a unique identifier for an interface.
virtual void Serialize(Buffer::Iterator start) const
Serializes this packet into the specified buffer.
std::list< Ptr< PbbTlv > >::const_iterator ConstTlvIterator
This is a PbbTlv iterator for PbbPacket.
static Ptr< PbbMessage > DeserializeMessage(Buffer::Iterator &start)
Deserializes a message, returning the correct object depending on whether it is an IPv4 message or an...
bool AddressBlockEmpty(void) const
void GetHeadTail(uint8_t *head, uint8_t &headlen, uint8_t *tail, uint8_t &taillen) const
An Address Block and its associated Address TLV Blocks.
virtual void PrintOriginatorAddress(std::ostream &os) const
bool operator==(const PbbAddressTlvBlock &other) const
Equality operator for PbbAddressTlvBlock.
void Serialize(Buffer::Iterator &start) const
Serializes this TLV into the specified buffer.
void TlvPushBack(Ptr< PbbTlv > tlv)
Appends a message TLV to the back of this message.
virtual TypeId GetInstanceTypeId(void) const
bool operator==(const PbbAddressBlock &other) const
Equality operator for PbbAddressBlock.
std::list< Ptr< PbbTlv > >::const_iterator ConstTlvIterator
This is a PbbTlv iterator for PbbMessage.
AddressIterator AddressInsert(AddressIterator position, const Address value)
Inserts an address at the specified position in this block.
virtual uint8_t GetAddressLength(void) const
Returns address length.
static TypeId GetTypeId(void)
void AddressPushFront(Address address)
Prepends an address to the front of this block.
void PrefixClear(void)
Removes all prefixes from this block.
bool PrefixEmpty(void) const
Ptr< PbbAddressTlv > Front(void) const
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserializes a packet from the specified buffer.
void TlvClear(void)
Removes all packet TLVs from this packet.
virtual Address DeserializeAddress(uint8_t *buffer) const
TlvIterator TlvErase(TlvIterator position)
Removes the address TLV at the specified position.
Iterator Erase(Iterator position)
Removes the TLV at the specified position.
void PopFront(void)
Removes a TLV from the front of this block.