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;
 
   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;
 
 1719   void SetValue (
const uint8_t * buffer, uint32_t size);
 
 1765   void Print (std::ostream &os) 
const;
 
 1775   void Print (std::ostream &os, 
int level) 
const;
 
bool m_hasOriginatorAddress
Originator address present. 
PrefixIterator PrefixEnd(void)
AddressBlockIterator AddressBlockEnd()
bool m_hasHopCount
Hop count present. 
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
PbbTlv container iterator. 
bool m_hasIndexStart
Start index present. 
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
PbbMessage Const Iterator 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 
Deserialize the originator address. 
bool HasIndexStart(void) const 
Checks if there is a starting index. 
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 
Check the multivalue parameter. 
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)
Set an index as stop point. 
virtual Address DeserializeOriginatorAddress(Buffer::Iterator &start) const =0
Deserialize the originator address. 
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 
Serialize the originator address. 
PbbAddressLength
Used in Messages to determine whether it contains IPv4 or IPv6 addresses. 
std::list< Address > m_addressList
Addreses container. 
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
PbbTlv container const 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. 
uint8_t m_type
Type of this TLV. 
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
PbbAddressBlock const iterator. 
uint8_t GetIndexStart(void) const 
Get the starting point index. 
void SetMultivalue(bool isMultivalue)
Set the multivalue parameter. 
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
PbbMessage Iterator for PbbPacket. 
Ptr< PbbAddressTlv > TlvFront(void)
uint8_t m_type
the type for this message 
std::list< uint8_t > m_prefixList
Prefixes container. 
std::list< Ptr< PbbAddressBlock > >::iterator AddressBlockIterator
PbbAddressBlock iterator. 
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 
virtual void PrintAddress(std::ostream &os, ConstAddressIterator iter) const 
Print one or more addresses. 
bool m_hasSequenceNumber
Sequence number present. 
MessageIterator MessageEnd(void)
uint16_t m_sequenceNumber
Sequence number. 
AddressBlockIterator AddressBlockBegin()
virtual Address DeserializeAddress(uint8_t *buffer) const =0
Deserialize one address. 
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
Address const iterator. 
Iterator Erase(Iterator position)
Removes the Address TLV at the specified position. 
virtual void SerializeAddress(uint8_t *buffer, ConstAddressIterator iter) const 
Serialize one or more addresses. 
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)
std::list< Address >::iterator AddressIterator
Address iterator. 
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 
Print one or more addresses. 
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. 
bool m_hasHopLimit
Hop limit present. 
bool m_isMultivalue
Is multivalue. 
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
PbbTlv iterator for PbbPacket. 
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. 
uint8_t m_hopCount
Hop count. 
virtual Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const 
Deserialize an address block. 
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
the address size 
Ptr< PbbTlv > Front(void) const 
bool operator==(const PbbTlvBlock &other) const 
Equality operator for PbbTlvBlock. 
std::list< uint8_t >::const_iterator ConstPrefixIterator
Prefix const iterator. 
bool HasHopCount(void) const 
Tests whether or not this message has a hop count. 
bool m_hasValue
Has value. 
virtual void PrintAddress(std::ostream &os, ConstAddressIterator iter) const =0
Print one or more addresses. 
uint8_t GetType(void) const 
uint8_t m_typeExt
Extended type. 
Ptr< PbbTlv > Back(void) const 
void Deserialize(Buffer::Iterator &start)
Deserializes a block from the specified buffer. 
std::list< Ptr< PbbTlv > >::iterator TlvIterator
PbbTlv iterator. 
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
Deserialize an address block. 
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 
Serialize the originator address. 
virtual void SerializeAddress(uint8_t *buffer, ConstAddressIterator iter) const =0
Serialize one or more addresses. 
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
PbbAddressTlv iterator for PbbAddressTlvBlock. 
PbbAddressTlvBlock::Iterator TlvIterator
tlvblock iterator 
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 
Print the originator address. 
void Print(std::ostream &os) const 
Pretty-prints the contents of this address block. 
PbbAddressTlvBlock m_addressTlvList
PbbAddressTlv container. 
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. 
bool m_hasIndexStop
Stop index present. 
std::list< Ptr< PbbAddressTlv > > m_tlvList
PbbAddressTlv container. 
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
originator address 
A block of packet or message TLVs (PbbTlv). 
uint8_t m_indexStart
Start index. 
uint8_t GetType(void) const 
bool MessageEmpty(void) const 
uint8_t GetIndexStop(void) const 
std::list< Ptr< PbbMessage > > m_messageList
PbbTlvBlock container. 
void Print(std::ostream &os) const 
Pretty-prints the contents of this block. 
void SetIndexStart(uint8_t index)
Set an index as starting point. 
void TlvPushBack(Ptr< PbbAddressTlv > address)
Appends an address TLV to the back of this message. 
std::list< Ptr< PbbTlv > > m_tlvList
PbbTlv container. 
PbbTlvBlock m_tlvList
PbbTlv container. 
int AddressSize(void) const 
std::list< Ptr< PbbAddressBlock > > m_addressBlockList
PbbAddressBlock container. 
bool m_hasTypeExt
Extended type present. 
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 
uint16_t m_seqnum
Sequence number. 
PbbAddressTlvBlock::ConstIterator ConstTlvIterator
tlvblock const iterator 
virtual ~PbbAddressBlockIpv4()
virtual void PrintOriginatorAddress(std::ostream &os) const =0
Print the originator address. 
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 
Serialize one or more addresses. 
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
Serialize the originator address. 
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
PbbAddressTlv const iterator for PbbAddressTlvBlock. 
uint8_t m_hopLimit
Hop limit. 
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 
Deserialize the originator address. 
uint8_t GetPrefixFlags(void) const 
Get the prefix flags. 
bool HasZeroTail(const uint8_t *tail, uint8_t taillen) const 
Check if the tail is empty. 
Buffer GetValue(void) const 
uint8_t GetIndexStop(void) const 
Get the stop point index. 
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. 
bool m_hasseqnum
Sequence number present. 
Ptr< PbbMessage > MessageFront(void)
virtual Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const 
Deserialize an address block. 
void TlvPushFront(Ptr< PbbTlv > tlv)
Prepends a message TLV to the front of this message. 
MessageIterator MessageBegin(void)
bool HasIndexStop(void) const 
Checks if there is a stop index. 
void Clear(void)
Removes all TLVs from this block. 
std::list< uint8_t >::iterator PrefixIterator
Prefix iterator. 
virtual Address DeserializeAddress(uint8_t *buffer) const 
Deserialize one address. 
AddressIterator AddressErase(AddressIterator position)
Removes the address at the specified position. 
void AddressPopBack(void)
Removes an address from the back of this block. 
PbbTlvBlock m_tlvList
PbbTlvBlock. 
Concrete IPv6 specific PbbMessage class. 
uint8_t m_indexStop
Stop index. 
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
PbbTlv const 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 
Get head and tail. 
An Address Block and its associated Address TLV Blocks. 
virtual void PrintOriginatorAddress(std::ostream &os) const 
Print the originator address. 
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
PbbTlv const iterator. 
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)
Get the type ID. 
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 
Deserialize one address. 
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.