ns-3
ns3::Address Class Reference

a polymophic address class More...

#include <address.h>

List of all members.

Public Types

enum  MaxSize_e { MAX_SIZE = 20 }

Public Member Functions

 Address ()
 Address (uint8_t type, const uint8_t *buffer, uint8_t len)
 Address (const Address &address)
Addressoperator= (const Address &address)
bool IsInvalid (void) const
uint8_t GetLength (void) const
uint32_t CopyTo (uint8_t buffer[MAX_SIZE]) const
uint32_t CopyAllTo (uint8_t *buffer, uint8_t len) const
uint32_t CopyFrom (const uint8_t *buffer, uint8_t len)
uint32_t CopyAllFrom (const uint8_t *buffer, uint8_t len)
bool CheckCompatible (uint8_t type, uint8_t len) const
bool IsMatchingType (uint8_t type) const
uint32_t GetSerializedSize (void) const
void Serialize (TagBuffer buffer) const
void Deserialize (TagBuffer buffer)

Static Public Member Functions

static uint8_t Register (void)

Friends

bool operator== (const Address &a, const Address &b)
bool operator< (const Address &a, const Address &b)
std::ostream & operator<< (std::ostream &os, const Address &address)
std::istream & operator>> (std::istream &is, Address &address)

Detailed Description

a polymophic address class

This class is very similar in design and spirit to the BSD sockaddr structure: they are both used to hold multiple types of addresses together with the type of the address.

A new address class defined by a user needs to:

  • allocate a type id with Address::Register
  • provide a method to convert his new address to an Address instance. This method is typically a member method named ConvertTo: Address MyAddress::ConvertTo (void) const;
  • provide a method to convert an Address instance back to an instance of his new address type. This method is typically a static member method of his address class named ConvertFrom: static MyAddress MyAddress::ConvertFrom (const Address &address);
  • the ConvertFrom method is expected to check that the type of the input Address instance is compatible with its own type.

Typical code to create a new class type looks like:

 // this class represents addresses which are 2 bytes long.
 class MyAddress
 {
 public:
   Address ConvertTo (void) const;
   static MyAddress ConvertFrom (void);
 private:
   static uint8_t GetType (void);
 };

 Address MyAddress::ConvertTo (void) const
 {
   return Address (GetType (), m_buffer, 2);
 }
 MyAddress MyAddress::ConvertFrom (const Address &address)
 {
   MyAddress ad;
   NS_ASSERT (address.CheckCompatible (GetType (), 2));
   address.CopyTo (ad.m_buffer, 2);
   return ad;
 }
 uint8_t MyAddress::GetType (void)
 {
   static uint8_t type = Address::Register ();
   return type;
 }

Member Enumeration Documentation

The maximum size of a byte buffer which can be stored in an Address instance.


Constructor & Destructor Documentation

Create an invalid address

ns3::Address::Address ( uint8_t  type,
const uint8_t *  buffer,
uint8_t  len 
)
Parameters:
typethe type of the Address to create
buffera pointer to a buffer of bytes which hold a serialized representation of the address in network byte order.
lenthe length of the buffer.

Create an address from a type and a buffer. This constructor is typically invoked from the conversion functions of various address types when they have to convert themselves to an Address instance.

References NS_ASSERT.


Member Function Documentation

uint32_t ns3::Address::CopyAllFrom ( const uint8_t *  buffer,
uint8_t  len 
)
Parameters:
bufferpointer to a buffer of bytes which contain a copy of all the members of this Address class.
lenthe length of the buffer
Returns:
the number of bytes copied.

The inverse of CopyAllTo().

See also:
CopyAllTo

References NS_ASSERT.

Referenced by ns3::PacketSocketAddress::ConvertFrom().

uint32_t ns3::Address::CopyAllTo ( uint8_t *  buffer,
uint8_t  len 
) const
Parameters:
bufferbuffer to copy the whole address data structure to
lenthe size of the buffer
Returns:
the number of bytes copied.

Copies the type to buffer[0], the length of the address internal buffer to buffer[1] and copies the internal buffer starting at buffer[2]. len must be at least the size of the internal buffer plus a byte for the type and a byte for the length.

References NS_ASSERT.

uint32_t ns3::Address::CopyFrom ( const uint8_t *  buffer,
uint8_t  len 
)
Parameters:
bufferpointer to a buffer of bytes which contain a serialized representation of the address in network byte order.
lenlength of buffer
Returns:
the number of bytes copied.

Copy the address bytes from buffer into to the internal buffer of this address instance.

References NS_ASSERT.

Referenced by ns3::Icmpv6OptionLinkLayerAddress::Deserialize().

Parameters:
bufferbuffer to read address from

The input address buffer is expected to be in host byte order format.

References NS_ASSERT, ns3::TagBuffer::Read(), and ns3::TagBuffer::ReadU8().

Referenced by ns3::SocketAddressTag::Deserialize().

uint32_t ns3::Address::GetSerializedSize ( void  ) const

Get the number of bytes needed to serialize the underlying Address Typically, this is GetLength () + 2

Returns:
the number of bytes required for an Address in serialized form

Referenced by ns3::SocketAddressTag::GetSerializedSize().

bool ns3::Address::IsInvalid ( void  ) const
Returns:
true if this address is invalid, false otherwise.

An address is invalid if and only if it was created through the default constructor and it was never re-initialized.

bool ns3::Address::IsMatchingType ( uint8_t  type) const
Parameters:
typea type id as returned by Address::Register
Returns:
true if the type of the address stored internally is compatible with the requested type, false otherwise.

This method checks that the types are _exactly_ equal. This method is really used only by the PacketSocketAddress and there is little point in using it otherwise so, you have been warned: DO NOT USE THIS METHOD.

Referenced by ns3::PacketSocketAddress::IsMatchingType().

uint8_t ns3::Address::Register ( void  ) [static]

Allocate a new type id for a new type of address.

Returns:
a new type id.
void ns3::Address::Serialize ( TagBuffer  buffer) const

Serialize this address in host byte order to a byte buffer

Parameters:
bufferoutput buffer that gets written with this Address

References ns3::TagBuffer::Write(), and ns3::TagBuffer::WriteU8().

Referenced by ns3::SocketAddressTag::Serialize().


The documentation for this class was generated from the following files: