INET Framework for OMNeT++/OMNEST
|
#include <MACAddress.h>
Public Member Functions | |
MACAddress () | |
MACAddress (const char *hexstr) | |
MACAddress (const MACAddress &other) | |
MACAddress & | operator= (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 |
Stores an IEEE 802 MAC address (6 octets = 48 bits).
MACAddress::MACAddress | ( | ) |
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);}
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 |
Returns true if the two addresses are equal.
Referenced by IPv6NeighbourDiscovery::processNAForOtherNCEStates(), IPv6NeighbourDiscovery::processNSWithSpecifiedSrcAddr(), and IPv6NeighbourDiscovery::processRAForRouterUpdates().
{ return memcmp(address, other.address, MAC_ADDRESS_BYTES)==0; }
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 |
bool MACAddress::isMulticast | ( | ) | const [inline] |
Returns true this is a multicast logical address (starts with bit 1).
{return address[0]&0x80;};
bool MACAddress::isUnspecified | ( | ) | const |
Returns true if all address bytes are zero.
Referenced by EtherAppCli::initialize(), ARP::processARPPacket(), IPv6NeighbourDiscovery::processIPv6Datagram(), IPv6NeighbourDiscovery::processNAForIncompleteNCEState(), IPv6NeighbourDiscovery::processNAForOtherNCEStates(), IPv6NeighbourDiscovery::processNSWithSpecifiedSrcAddr(), Ieee80211MgmtSTA::processScanCommand(), ARP::sendARPRequest(), and IPv6::sendDatagramToOutput().
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 | ( | ) |
std::string MACAddress::str | ( | ) | const |
Converts address to a hex string.
Referenced by Ieee80211MgmtSTA::handleAssociationResponseFrame(), Ieee80211Mac::initialize(), EtherMACBase::initializeMACAddress(), operator<<(), Ieee80211MgmtSTA::processAssociateCommand(), Ieee80211MgmtSTA::processAuthenticateCommand(), Ieee80211MgmtSTA::processDeauthenticateCommand(), Mac80211::registerInterface(), CSMAMacLayer::registerInterface(), Ieee80211MgmtSTA::startAssociation(), and Ieee80211MgmtSTA::startAuthentication().
{ char buf[20]; char *s = buf; for (int i=0; i<MAC_ADDRESS_BYTES; i++, s+=3) sprintf(s,"%2.2X-",address[i]); *(s-1)='\0'; return std::string(buf); }
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; }
unsigned char MACAddress::address[6] [private] |
unsigned int MACAddress::autoAddressCtr [static, private] |
Referenced by generateAutoAddress().
const MACAddress MACAddress::BROADCAST_ADDRESS [static] |
Returns the broadcast (ff:ff:ff:ff:ff:ff) MAC address
Referenced by IPv6::fragmentAndRoute(), Ieee80211MgmtSTA::processScanCommand(), IPv6::routeMulticastPacket(), and Ieee80211MgmtAP::sendBeacon().
const MACAddress MACAddress::UNSPECIFIED_ADDRESS [static] |
Returns the unspecified (null) MAC address
Referenced by IPv6NeighbourDiscovery::resolveNeighbour().