INET Framework for OMNeT++/OMNEST
MACAddress Class Reference

#include <MACAddress.h>

List of all members.

Public Member Functions

 MACAddress ()
 MACAddress (const char *hexstr)
 MACAddress (const MACAddress &other)
MACAddressoperator= (const MACAddress &other)
unsigned int getAddressSize () const
unsigned char getAddressByte (unsigned int k) const
void setAddressByte (unsigned int k, unsigned char addrbyte)
bool tryParse (const char *hexstr)
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

Detailed Description

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


Constructor & Destructor Documentation

MACAddress::MACAddress ( )

Default constructor initializes address bytes to zero.

{
    address[0]=address[1]=address[2]=address[3]=address[4]=address[5]=0;
}
MACAddress::MACAddress ( const char *  hexstr)

Constructor which accepts a hex string (12 hex digits, may also contain spaces, hyphens and colons)

{
    setAddress(hexstr);
}
MACAddress::MACAddress ( const MACAddress other) [inline]

Copy constructor.

{operator=(other);}

Member Function Documentation

int MACAddress::compareTo ( const MACAddress other) const

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

Referenced by MACRelayUnitBase::MAC_compare::operator()(), and Ieee80211MgmtAP::MAC_compare::operator()().

{
    return memcmp(address, other.address, MAC_ADDRESS_BYTES);
}
bool MACAddress::equals ( const MACAddress other) const
InterfaceToken MACAddress::formInterfaceIdentifier ( ) const

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

Referenced by Mac80211::registerInterface(), Ieee80211Mac::registerInterface(), EtherMACBase::registerInterface(), and CSMAMacLayer::registerInterface().

{
    const unsigned char *b = address;
    uint32 high = (b[0]<<24) | (b[1]<<16) | (b[2]<<8) | 0xff;
    uint32 low =  (0xfe<<24) | (b[3]<<16) | (b[4]<<8) | b[5];
    return InterfaceToken(low, high, 64);
}
MACAddress MACAddress::generateAutoAddress ( ) [static]

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

Referenced by Ieee80211Mac::initialize(), EtherMACBase::initializeMACAddress(), Mac80211::registerInterface(), and CSMAMacLayer::registerInterface().

{
    ++autoAddressCtr;

    unsigned char addrbytes[6];
    addrbytes[0] = 0x0A;
    addrbytes[1] = 0xAA;
    addrbytes[2] = (autoAddressCtr>>24)&0xff;
    addrbytes[3] = (autoAddressCtr>>16)&0xff;
    addrbytes[4] = (autoAddressCtr>>8)&0xff;
    addrbytes[5] = (autoAddressCtr)&0xff;

    MACAddress addr;
    addr.setAddressBytes(addrbytes);
    return addr;
}
unsigned char MACAddress::getAddressByte ( unsigned int  k) const

Returns the kth byte of the address.

{
    if (k>=6) throw cRuntimeError("Array of size 6 indexed with %d", k);
    return address[k];
}
unsigned char* MACAddress::getAddressBytes ( ) [inline]

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

{return address;}
unsigned int MACAddress::getAddressSize ( ) const

Returns 6.

{
    return 6;
}
bool MACAddress::isBroadcast ( ) const

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

Referenced by CSMAMacLayer::handleLowerMsg().

{
    return (address[0]&address[1]&address[2]&address[3]&address[4]&address[5])==0xff;
}
bool MACAddress::isMulticast ( ) const [inline]

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

{return address[0]&0x80;};
bool MACAddress::operator!= ( const MACAddress other) const [inline]

Returns true if the two addresses are not equal.

{return !(*this).equals(other);}
MACAddress & MACAddress::operator= ( const MACAddress other)

Assignment.

{
    memcpy(address, other.address, MAC_ADDRESS_BYTES);
    return *this;
}
bool MACAddress::operator== ( const MACAddress other) const [inline]

Returns true if the two addresses are equal.

{return (*this).equals(other);}
void MACAddress::setAddress ( const char *  hexstr)

Converts address value from hex string (12 hex digits, may also contain spaces, hyphens and colons)

Referenced by Ieee80211MgmtSTASimplified::initialize(), Ieee80211MgmtBase::initialize(), Ieee80211Mac::initialize(), EtherMACBase::initializeMACAddress(), MACAddress(), Mac80211::registerInterface(), CSMAMacLayer::registerInterface(), and EtherAppCli::resolveDestMACAddress().

{
    if (!tryParse(hexstr))
        throw cRuntimeError("MACAddress: wrong address syntax '%s': 12 hex digits expected, with optional embedded spaces, hyphens or colons", hexstr);
}
void MACAddress::setAddressByte ( unsigned int  k,
unsigned char  addrbyte 
)

Sets the kth byte of the address.

{
    if (k>=6) throw cRuntimeError("Array of size 6 indexed with %d", k);
    address[k] = addrbyte;
}
void MACAddress::setAddressBytes ( unsigned char *  addrbytes)

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

Referenced by generateAutoAddress(), and ARP::processOutboundPacket().

{
    memcpy(address, addrbytes, MAC_ADDRESS_BYTES);
}
void MACAddress::setBroadcast ( )

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

{
    address[0]=address[1]=address[2]=address[3]=address[4]=address[5]=0xff;
}
bool MACAddress::tryParse ( const char *  hexstr)

Sets the address and returns true if the syntax of the string is correct. (See setAddress() for the syntax.)

Referenced by EtherAppCli::resolveDestMACAddress(), and setAddress().

{
    if (!hexstr)
        return false;

    // check syntax
    int numHexDigits = 0;
    for (const char *s = hexstr; *s; s++) {
        if (isxdigit(*s))
            numHexDigits++;
        else if (*s!=' ' && *s!=':' && *s!='-')
            return false; // wrong syntax
    }
    if (numHexDigits != 2*MAC_ADDRESS_BYTES)
        return false;

    // convert
    hextobin(hexstr, address, MAC_ADDRESS_BYTES);
    return true;
}

Member Data Documentation

unsigned int MACAddress::autoAddressCtr [static, private]

Referenced by generateAutoAddress().

Returns the unspecified (null) MAC address

Referenced by IPv6NeighbourDiscovery::resolveNeighbour().


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