MACAddress Class Reference

#include <MACAddress.h>

List of all members.


Detailed Description

Stores an IEEE 802 MAC address (6 octets = 48 bits).


Public Member Functions

 MACAddress ()
 MACAddress (const char *hexstr)
 MACAddress (const MACAddress &other)
MACAddressoperator= (const MACAddress &other)
unsigned int getAddressArraySize () const
unsigned char getAddress (unsigned int k) const
void setAddress (unsigned int k, unsigned char addrbyte)
void setAddress (const char *hexstr)
unsigned char * getAddressBytes ()
void setAddressBytes (unsigned char *addrbytes)
void setBroadcast ()
bool isBroadcast () const
bool isMulticast () const
bool isUnspecified () const
std::string str () const
bool equals (const MACAddress &other) const
bool operator== (const MACAddress &other) const
bool operator!= (const MACAddress &other) const
int compareTo (const MACAddress &other) const
InterfaceToken formInterfaceIdentifier () const

Static Public Member Functions

static MACAddress generateAutoAddress ()

Static Public Attributes

static const MACAddress UNSPECIFIED_ADDRESS
static const MACAddress BROADCAST_ADDRESS

Private Attributes

unsigned char address [6]

Static Private Attributes

static unsigned int autoAddressCtr


Constructor & Destructor Documentation

MACAddress::MACAddress (  ) 

Default constructor initializes address bytes to zero.

00070 {
00071     address[0]=address[1]=address[2]=address[3]=address[4]=address[5]=0;
00072 }

MACAddress::MACAddress ( const char *  hexstr  ) 

Constructor which accepts hex string or the string "auto".

00075 {
00076     setAddress(hexstr);
00077 }

MACAddress::MACAddress ( const MACAddress other  )  [inline]

Copy constructor.

00061 {operator=(other);}


Member Function Documentation

int MACAddress::compareTo ( const MACAddress other  )  const

Returns -1, 0 or 1 as result of comparison of 2 addresses.

00146 {
00147     return memcmp(address, other.address, MAC_ADDRESS_BYTES);
00148 }

bool MACAddress::equals ( const MACAddress other  )  const

Returns true if the two addresses are equal.

00141 {
00142     return memcmp(address, other.address, MAC_ADDRESS_BYTES)==0;
00143 }

InterfaceToken MACAddress::formInterfaceIdentifier (  )  const

Create interface identifier (IEEE EUI-64) which can be used by IPv6 stateless address autoconfiguration.

00151 {
00152     const unsigned char *b = address;
00153     uint32 high = (b[0]<<24) | (b[1]<<16) | (b[2]<<8) | 0xff;
00154     uint32 low =  (0xfe<<24) | (b[3]<<16) | (b[4]<<8) | b[5];
00155     return InterfaceToken(low, high, 64);
00156 }

MACAddress MACAddress::generateAutoAddress (  )  [static]

Generates a unique address which begins with 0a:aa and ends in a unique suffix.

00159 {
00160     ++autoAddressCtr;
00161 
00162     unsigned char addrbytes[6];
00163     addrbytes[0] = 0x0A;
00164     addrbytes[1] = 0xAA;
00165     addrbytes[2] = (autoAddressCtr>>24)&0xff;
00166     addrbytes[3] = (autoAddressCtr>>16)&0xff;
00167     addrbytes[4] = (autoAddressCtr>>8)&0xff;
00168     addrbytes[5] = (autoAddressCtr)&0xff;
00169 
00170     MACAddress addr;
00171     addr.setAddressBytes(addrbytes);
00172     return addr;
00173 }

unsigned char MACAddress::getAddress ( unsigned int  k  )  const

Returns the kth byte of the address.

00091 {
00092     if (k>=6) throw new cException("Array of size 6 indexed with %d", k);
00093     return address[k];
00094 }

unsigned int MACAddress::getAddressArraySize (  )  const

Returns 6.

00086 {
00087     return 6;
00088 }

unsigned char* MACAddress::getAddressBytes (  )  [inline]

Returns pointer to internal binary representation of address (array of 6 unsigned chars).

00092 {return address;}

bool MACAddress::isBroadcast (  )  const

Returns true this is the broadcast address (hex ff:ff:ff:ff:ff:ff).

00121 {
00122     return (address[0]&address[1]&address[2]&address[3]&address[4]&address[5])==0xff;
00123 }

bool MACAddress::isMulticast (  )  const [inline]

Returns true this is a multicast logical address (starts with bit 1).

00112 {return address[0]&0x80;};

bool MACAddress::isUnspecified (  )  const

Returns true if all address bytes are zero.

00126 {
00127     return !(address[0] || address[1] || address[2] || address[3] || address[4] || address[5]);
00128 }

bool MACAddress::operator!= ( const MACAddress other  )  const [inline]

Returns true if the two addresses are not equal.

00137 {return !(*this).equals(other);}

MACAddress & MACAddress::operator= ( const MACAddress other  ) 

Assignment.

00080 {
00081     memcpy(address, other.address, MAC_ADDRESS_BYTES);
00082     return *this;
00083 }

bool MACAddress::operator== ( const MACAddress other  )  const [inline]

Returns true if the two addresses are equal.

00132 {return (*this).equals(other);}

void MACAddress::setAddress ( const char *  hexstr  ) 

Converts address value from hex string. The string "auto" is also accepted, it'll generate a unique address starting with "A0 00".

00103 {
00104     if (!hexstr)
00105         throw new cException("MACAddress::setAddress(const char *): got null pointer");
00106     if (hextobin(hexstr, address, MAC_ADDRESS_BYTES)!=MAC_ADDRESS_BYTES)
00107         throw new cException("MACAddress::setAddress(const char *): hex string \"%s\" too short, should be 12 hex digits", hexstr);
00108 }

void MACAddress::setAddress ( unsigned int  k,
unsigned char  addrbyte 
)

Sets the kth byte of the address.

00097 {
00098     if (k>=6) throw new cException("Array of size 6 indexed with %d", k);
00099     address[k] = addrbyte;
00100 }

void MACAddress::setAddressBytes ( unsigned char *  addrbytes  ) 

Sets address bytes. The argument should point to an array of 6 unsigned chars.

00111 {
00112     memcpy(address, addrbytes, MAC_ADDRESS_BYTES);
00113 }

void MACAddress::setBroadcast (  ) 

Sets the address to the broadcast address (hex ff:ff:ff:ff:ff:ff).

00116 {
00117     address[0]=address[1]=address[2]=address[3]=address[4]=address[5]=0xff;
00118 }

std::string MACAddress::str (  )  const

Converts address to a hex string.

00131 {
00132     char buf[20];
00133     char *s = buf;
00134     for (int i=0; i<MAC_ADDRESS_BYTES; i++, s+=3)
00135         sprintf(s,"%2.2X-",address[i]);
00136     *(s-1)='\0';
00137     return std::string(buf);
00138 }


Member Data Documentation

unsigned char MACAddress::address[6] [private]

unsigned int MACAddress::autoAddressCtr [static, private]

const MACAddress MACAddress::BROADCAST_ADDRESS [static]

Returns the broadcast (ff:ff:ff:ff:ff:ff) MAC address

const MACAddress MACAddress::UNSPECIFIED_ADDRESS [static]

Returns the unspecified (null) MAC address


The documentation for this class was generated from the following files:
Generated on Wed Apr 4 13:20:22 2007 for INET Framework for OMNeT++/OMNEST by  doxygen 1.4.7