16#include "ns3/address.h"
17#include "ns3/buffer.h"
18#include "ns3/header.h"
20#include "ns3/simple-ref-count.h"
49 typedef std::list<Ptr<PbbTlv>>::iterator
Iterator;
175 void Print(std::ostream& os)
const;
185 void Print(std::ostream& os,
int level)
const;
213 typedef std::list<Ptr<PbbAddressTlv>>::iterator
Iterator;
341 void Print(std::ostream& os)
const;
351 void Print(std::ostream& os,
int level)
const;
661 void Print(std::ostream& os)
const override;
1041 void Print(std::ostream& os)
const;
1052 void Print(std::ostream& os,
int level)
const;
1530 void Print(std::ostream& os)
const;
1541 void Print(std::ostream& os,
int level)
const;
1595 void GetHeadTail(uint8_t* head, uint8_t& headlen, uint8_t* tail, uint8_t& taillen)
const;
1603 bool HasZeroTail(
const uint8_t* tail, uint8_t taillen)
const;
1763 void Print(std::ostream& os)
const;
1773 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.
void PrefixPopFront()
Removes a prefix from the front of this block.
Address AddressFront() const
std::list< uint8_t >::iterator PrefixIterator
Prefix iterator.
void AddressPopFront()
Removes an address from the front of this block.
uint8_t GetPrefixFlags() const
Get the prefix flags.
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.
PrefixIterator PrefixEnd()
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.
void PrefixClear()
Removes all prefixes from this block.
uint32_t GetSerializedSize() const
bool operator!=(const PbbAddressBlock &other) const
Inequality operator for PbbAddressBlock.
void Serialize(Buffer::Iterator &start) const
Serializes this address block into the specified buffer.
PbbAddressTlvBlock::Iterator TlvIterator
tlvblock iterator
Ptr< PbbAddressTlv > TlvBack()
virtual void PrintAddress(std::ostream &os, ConstAddressIterator iter) const =0
Print one or more addresses.
Ptr< PbbAddressTlv > TlvFront()
void GetHeadTail(uint8_t *head, uint8_t &headlen, uint8_t *tail, uint8_t &taillen) const
Get head and tail.
void TlvPopBack()
Removes an address TLV from the back of this message.
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.
void TlvPushBack(Ptr< PbbAddressTlv > address)
Appends an address TLV to the back of this message.
Address AddressBack() const
void AddressClear()
Removes all addresses from this block.
void AddressPushBack(Address address)
Appends an address to the back of this block.
AddressIterator AddressErase(AddressIterator position)
Removes the address at the specified position.
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 PrefixPopBack()
Removes a prefix from the back of this block.
uint8_t PrefixFront() const
PrefixIterator PrefixBegin()
void AddressPopBack()
Removes an address from the back 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.
uint8_t PrefixBack() const
void TlvClear()
Removes all address TLVs from this block.
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 TlvPushFront(Ptr< PbbAddressTlv > address)
Prepends an address TLV to the front of this message.
void TlvPopFront()
Removes an address TLV from the front of this message.
virtual ~PbbAddressBlock()
virtual uint8_t GetAddressLength() const =0
Returns address length.
void Deserialize(Buffer::Iterator &start)
Deserializes an address block from the specified buffer.
AddressIterator AddressBegin()
TlvIterator TlvErase(TlvIterator position)
Removes the address TLV at the specified position.
std::list< uint8_t >::const_iterator ConstPrefixIterator
Prefix const iterator.
void AddressPushFront(Address address)
Prepends an address to the front of this block.
std::list< Address >::iterator AddressIterator
Address iterator.
AddressIterator AddressEnd()
bool AddressEmpty() const
bool operator==(const PbbAddressBlock &other) const
Equality operator for PbbAddressBlock.
PbbAddressTlvBlock m_addressTlvList
PbbAddressTlv container.
Concrete IPv4 specific PbbAddressBlock.
uint8_t GetAddressLength() const override
Returns address length.
void PrintAddress(std::ostream &os, ConstAddressIterator iter) const override
Print one or more addresses.
void SerializeAddress(uint8_t *buffer, ConstAddressIterator iter) const override
Serialize one or more addresses.
~PbbAddressBlockIpv4() override
Address DeserializeAddress(uint8_t *buffer) const override
Deserialize one address.
Concrete IPv6 specific PbbAddressBlock.
~PbbAddressBlockIpv6() override
void SerializeAddress(uint8_t *buffer, ConstAddressIterator iter) const override
Serialize one or more addresses.
uint8_t GetAddressLength() const override
Returns address length.
void PrintAddress(std::ostream &os, ConstAddressIterator iter) const override
Print one or more addresses.
Address DeserializeAddress(uint8_t *buffer) const override
Deserialize one address.
A block of Address TLVs (PbbAddressTlv).
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.
std::list< Ptr< PbbAddressTlv > > m_tlvList
PbbAddressTlv container.
void PopFront()
Removes an AddressTLV from the front of this block.
bool operator!=(const PbbAddressTlvBlock &other) const
Inequality operator for PbbAddressTlvBlock.
std::list< Ptr< PbbAddressTlv > >::const_iterator ConstIterator
PbbAddressTlv const iterator for PbbAddressTlvBlock.
void Clear()
Removes all Address TLVs from this block.
std::list< Ptr< PbbAddressTlv > >::iterator Iterator
PbbAddressTlv iterator for PbbAddressTlvBlock.
void Deserialize(Buffer::Iterator &start)
Deserializes a block from the specified buffer.
uint32_t GetSerializedSize() const
Ptr< PbbAddressTlv > Front() const
Ptr< PbbAddressTlv > Back() 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.
void PopBack()
Removes an Address TLV from the back of this block.
bool operator==(const PbbAddressTlvBlock &other) const
Equality operator for PbbAddressTlvBlock.
bool HasIndexStart() const
Tests whether or not this address TLV has a start index.
bool IsMultivalue() const
Tests whether or not this address TLV is "multivalue".
void SetMultivalue(bool isMultivalue)
Sets whether or not this address TLV is "multivalue".
void SetIndexStart(uint8_t index)
Sets the index of the first address in the associated address block that this address TLV applies to.
bool HasIndexStop() const
Tests whether or not this address TLV has a stop index.
uint8_t GetIndexStop() const
uint8_t GetIndexStart() 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.
void AddressBlockPushFront(Ptr< PbbAddressBlock > block)
Prepends an address block to the front of this message.
uint16_t m_sequenceNumber
Sequence number.
virtual PbbAddressLength GetAddressLength() const =0
Returns address length (IPV4 3 or IPV6 15)
std::list< Ptr< PbbAddressBlock > >::iterator AddressBlockIterator
PbbAddressBlock iterator.
bool HasOriginatorAddress() const
Tests whether or not this message has an originator address.
bool m_hasHopLimit
Hop limit present.
void TlvPopFront()
Removes a message TLV from the front of this message.
void TlvPushFront(Ptr< PbbTlv > tlv)
Prepends a message TLV to the front of this message.
Address m_originatorAddress
originator address
bool HasHopLimit() const
Tests whether or not this message has a hop limit.
bool operator!=(const PbbMessage &other) const
Inequality operator for PbbMessage.
int AddressBlockSize() const
AddressBlockIterator AddressBlockBegin()
void Deserialize(Buffer::Iterator &start)
Deserializes a message from the specified buffer.
std::list< Ptr< PbbTlv > >::const_iterator ConstTlvIterator
PbbTlv const iterator.
AddressBlockIterator AddressBlockEnd()
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.
std::list< Ptr< PbbAddressBlock > > m_addressBlockList
PbbAddressBlock container.
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.
static Ptr< PbbMessage > DeserializeMessage(Buffer::Iterator &start)
Deserializes a message, returning the correct object depending on whether it is an IPv4 message or an...
Address GetOriginatorAddress() const
void TlvClear()
Removes all message TLVs from this block.
uint8_t m_hopLimit
Hop limit.
void AddressBlockPushBack(Ptr< PbbAddressBlock > block)
Appends an address block to the front of this message.
void TlvPopBack()
Removes a message TLV from the back of this message.
uint16_t GetSequenceNumber() const
bool m_hasOriginatorAddress
Originator address present.
virtual void PrintOriginatorAddress(std::ostream &os) const =0
Print the originator address.
bool HasSequenceNumber() const
Tests whether or not this message has a sequence number.
uint8_t GetHopLimit() const
std::list< Ptr< PbbTlv > >::iterator TlvIterator
PbbTlv iterator.
virtual Address DeserializeOriginatorAddress(Buffer::Iterator &start) const =0
Deserialize the originator address.
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.
bool m_hasHopCount
Hop count present.
void AddressBlockClear()
Removes all address blocks from this message.
virtual Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const =0
Deserialize an address block.
PbbTlvBlock m_tlvList
PbbTlvBlock.
void TlvPushBack(Ptr< PbbTlv > tlv)
Appends a message TLV to the back of this message.
virtual void SerializeOriginatorAddress(Buffer::Iterator &start) const =0
Serialize the originator address.
AddressBlockIterator AddressBlockErase(AddressBlockIterator position)
Removes the address block at the specified position.
Ptr< PbbAddressBlock > AddressBlockBack()
uint8_t GetHopCount() const
void AddressBlockPopFront()
Removes an address block from the front of this message.
bool operator==(const PbbMessage &other) const
Equality operator for PbbMessage.
PbbAddressLength m_addrSize
the address size
uint8_t m_hopCount
Hop count.
bool m_hasSequenceNumber
Sequence number present.
uint32_t GetSerializedSize() const
Ptr< PbbAddressBlock > AddressBlockFront()
bool AddressBlockEmpty() const
bool HasHopCount() const
Tests whether or not this message has a hop count.
uint8_t m_type
the type for this message
void AddressBlockPopBack()
Removes an address block from the back of this message.
Concrete IPv4 specific PbbMessage.
void PrintOriginatorAddress(std::ostream &os) const override
Print the originator address.
void SerializeOriginatorAddress(Buffer::Iterator &start) const override
Serialize the originator address.
PbbAddressLength GetAddressLength() const override
Returns address length (IPV4 3 or IPV6 15)
Address DeserializeOriginatorAddress(Buffer::Iterator &start) const override
Deserialize the originator address.
Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const override
Deserialize an address block.
Concrete IPv6 specific PbbMessage class.
Ptr< PbbAddressBlock > AddressBlockDeserialize(Buffer::Iterator &start) const override
Deserialize an address block.
void PrintOriginatorAddress(std::ostream &os) const override
Print the originator address.
void SerializeOriginatorAddress(Buffer::Iterator &start) const override
Serialize the originator address.
PbbAddressLength GetAddressLength() const override
Returns address length (IPV4 3 or IPV6 15)
Address DeserializeOriginatorAddress(Buffer::Iterator &start) const override
Deserialize the originator address.
Main PacketBB Packet object.
std::list< Ptr< PbbMessage > >::iterator MessageIterator
PbbMessage Iterator for PbbPacket.
std::list< Ptr< PbbMessage > >::const_iterator ConstMessageIterator
PbbMessage Const Iterator for PbbPacket.
MessageIterator MessageEnd()
std::list< Ptr< PbbMessage > > m_messageList
PbbTlvBlock container.
bool m_hasseqnum
Sequence number present.
void TlvPushBack(Ptr< PbbTlv > tlv)
Appends a packet TLV to the back of this packet.
void TlvClear()
Removes all packet TLVs from this packet.
static TypeId GetTypeId()
Get the type ID.
void TlvPopBack()
Removes a packet TLV from the back of this block.
void TlvPopFront()
Removes a packet TLV from the front of this packet.
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 MessageClear()
Removes all messages from this packet.
Ptr< PbbMessage > MessageFront()
void SetSequenceNumber(uint16_t number)
Sets the sequence number of this packet.
void MessagePopFront()
Removes a message from the front of this packet.
void ForceTlv(bool forceTlv)
Forces a packet to write a TLV list even if it's empty, ignoring the phastlv bit.
uint32_t GetSerializedSize() const override
void TlvPushFront(Ptr< PbbTlv > tlv)
Prepends a packet TLV to the front of this packet.
bool MessageEmpty() const
uint16_t GetSequenceNumber() const
void MessagePopBack()
Removes a message from the back of this packet.
bool HasSequenceNumber() const
Tests whether or not this packet has a sequence number.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
MessageIterator MessageBegin()
MessageIterator Erase(MessageIterator first, MessageIterator last)
Removes all messages from [first, last) (includes first, not includes last).
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.
void Serialize(Buffer::Iterator start) const override
Serializes this packet into the specified buffer.
Ptr< PbbMessage > MessageBack()
void Print(std::ostream &os) const override
Pretty-prints the contents of this block.
bool operator!=(const PbbPacket &other) const
Inequality operator for PbbPacket.
uint16_t m_seqnum
Sequence number.
uint8_t GetVersion() const
uint32_t Deserialize(Buffer::Iterator start) override
Deserializes a packet from the specified buffer.
bool m_forceTlv
Force writing a TLV list (even if it's empty)
std::list< Ptr< PbbTlv > >::const_iterator ConstTlvIterator
PbbTlv const iterator for PbbPacket.
PbbTlvBlock m_tlvList
PbbTlv container.
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.
void PushBack(Ptr< PbbTlv > tlv)
Appends a TLV to the back of 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.
Ptr< PbbTlv > Front() const
void PushFront(Ptr< PbbTlv > tlv)
Prepends a TLV to the front of this block.
std::list< Ptr< PbbTlv > >::iterator Iterator
PbbTlv container iterator.
Ptr< PbbTlv > Back() const
void Clear()
Removes all TLVs from this block.
Iterator Insert(Iterator position, const Ptr< PbbTlv > tlv)
Inserts a TLV at the specified position in this block.
void PopFront()
Removes a TLV from the front of this block.
std::list< Ptr< PbbTlv > >::const_iterator ConstIterator
PbbTlv container const iterator.
uint32_t GetSerializedSize() const
void Deserialize(Buffer::Iterator &start)
Deserializes a block from the specified buffer.
std::list< Ptr< PbbTlv > > m_tlvList
PbbTlv container.
void PopBack()
Removes a TLV from the back of this block.
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 GetIndexStop() const
Get the stop point index.
bool operator!=(const PbbTlv &other) const
Inequality operator for PbbTlv.
bool HasTypeExt() const
Tests whether or not this TLV has a type extension.
uint8_t GetIndexStart() const
Get the starting point index.
bool HasValue() const
Tests whether or not this TLV has a value.
bool HasIndexStart() const
Checks if there is a starting index.
uint8_t m_indexStart
Start 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.
bool IsMultivalue() const
Check the multivalue parameter.
void SetType(uint8_t type)
Sets the type of this TLV.
bool m_hasIndexStop
Stop index present.
uint8_t GetTypeExt() const
void SetIndexStop(uint8_t index)
Set an index as stop point.
bool HasIndexStop() const
Checks if there is a stop index.
void SetMultivalue(bool isMultivalue)
Set 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.
uint32_t GetSerializedSize() 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.