#include <IPvXAddress.h>
Public Member Functions | |
IPvXAddress () | |
IPvXAddress (const IPAddress &addr) | |
IPvXAddress (const IPv6Address &addr) | |
IPvXAddress (const char *addr) | |
IPvXAddress (const IPvXAddress &addr) | |
~IPvXAddress () | |
bool | isIPv6 () const |
IPAddress | get4 () const |
IPv6Address | get6 () const |
void | set (const IPAddress &addr) |
void | set (const IPv6Address &addr) |
void | set (const IPvXAddress &addr) |
void | set (const char *addr) |
IPvXAddress & | operator= (const IPAddress &addr) |
IPvXAddress & | operator= (const IPv6Address &addr) |
IPvXAddress & | operator= (const IPvXAddress &addr) |
bool | tryParse (const char *addr) |
std::string | str () const |
bool | isUnspecified () const |
int | wordCount () const |
const uint32 * | words () const |
bool | equals (const IPAddress &addr) const |
bool | equals (const IPv6Address &addr) const |
bool | equals (const IPvXAddress &addr) const |
bool | operator== (const IPAddress &addr) const |
bool | operator!= (const IPAddress &addr) const |
bool | operator== (const IPv6Address &addr) const |
bool | operator!= (const IPv6Address &addr) const |
bool | operator== (const IPvXAddress &addr) const |
bool | operator!= (const IPvXAddress &addr) const |
bool | operator< (const IPvXAddress &addr) const |
Protected Attributes | |
uint32 | d [4] |
bool | isv6 |
Stores an IPv4 or an IPv6 address. This class should be used everywhere in transport layer and up, to guarantee IPv4/IPv6 transparence.
Storage is efficient: an object occupies size of an IPv6 address (128bits=16 bytes) plus a bool.
Definition at line 35 of file IPvXAddress.h.
IPvXAddress::IPvXAddress | ( | ) | [inline] |
name Constructors, destructor Constructor for IPv4 addresses.
Definition at line 47 of file IPvXAddress.h.
IPvXAddress::IPvXAddress | ( | const IPAddress & | addr | ) | [inline] |
IPvXAddress::IPvXAddress | ( | const IPv6Address & | addr | ) | [inline] |
IPvXAddress::IPvXAddress | ( | const char * | addr | ) | [inline] |
Accepts string representations suuported by IPAddress (dotted decimal notation) and IPv6Address (hex string with colons). Throws an error if the format is not recognized.
Definition at line 64 of file IPvXAddress.h.
{set(addr);}
IPvXAddress::IPvXAddress | ( | const IPvXAddress & | addr | ) | [inline] |
IPvXAddress::~IPvXAddress | ( | ) | [inline] |
bool IPvXAddress::equals | ( | const IPAddress & | addr | ) | const [inline] |
Returns true if the two addresses are equal
Definition at line 199 of file IPvXAddress.h.
bool IPvXAddress::equals | ( | const IPv6Address & | addr | ) | const [inline] |
Returns true if the two addresses are equal
Definition at line 206 of file IPvXAddress.h.
{ uint32 *w = const_cast<IPv6Address&>(addr).words(); return isv6 && d[0]==w[0] && d[1]==w[1] && d[2]==w[2] && d[3]==w[3]; }
bool IPvXAddress::equals | ( | const IPvXAddress & | addr | ) | const [inline] |
IPAddress IPvXAddress::get4 | ( | ) | const [inline] |
Get IPv4 address. Throws exception if this is an IPv6 address.
Definition at line 87 of file IPvXAddress.h.
Referenced by doPacking(), getLevel(), UDP::matchesSocket(), SCTPAssociation::pmStartPathManagement(), LDP::processMessageFromTCP(), SCTPPathVariables::SCTPPathVariables(), SCTP::sendAbortFromMain(), SCTPAssociation::sendInit(), IPTrafGen::sendPacket(), SCTP::sendShutdownCompleteFromMain(), PingApp::sendToICMP(), TCPSpoof::sendToIP(), tcp_old::TCPConnection::sendToIP(), TCPConnection::sendToIP(), and SCTPAssociation::sendToIP().
IPv6Address IPvXAddress::get6 | ( | ) | const [inline] |
Get IPv6 address. Throws exception if this is an IPv4 address.
Definition at line 96 of file IPvXAddress.h.
Referenced by doPacking(), getLevel(), UDP::matchesSocket(), IPTrafGen::sendPacket(), PingApp::sendToICMP(), TCPSpoof::sendToIP(), tcp_old::TCPConnection::sendToIP(), TCPConnection::sendToIP(), and SCTPAssociation::sendToIP().
{ if (!isv6) { if (d[0]==0) // allow null address to be returned as IPv6 return IPv6Address(); throw cRuntimeError("IPvXAddress: cannot return IPv4 address %s as IPv6", str().c_str()); } return IPv6Address(d[0], d[1], d[2], d[3]); }
bool IPvXAddress::isIPv6 | ( | ) | const [inline] |
name Getters, setters Is this an IPv6 address?
Definition at line 82 of file IPvXAddress.h.
Referenced by doPacking(), getLevel(), SCTPAssociation::sendInit(), IPTrafGen::sendPacket(), PingApp::sendToICMP(), TCPSpoof::sendToIP(), tcp_old::TCPConnection::sendToIP(), TCPConnection::sendToIP(), and SCTPAssociation::sendToIP().
{return isv6;}
bool IPvXAddress::isUnspecified | ( | ) | const [inline] |
name Comparison True if the structure has not been assigned any address yet.
Definition at line 180 of file IPvXAddress.h.
Referenced by SCTP::addLocalAddress(), SCTP::addLocalAddressToAllRemoteAddresses(), tcp_old::TCP::addSockPair(), TCP::addSockPair(), UDP::bind(), UDPSocket::connect(), UDP::connect(), IPAddressResolver::getAddressFrom(), PingApp::handleMessage(), UDP::matchesSocket(), SCTPAssociation::process_ASSOCIATE(), tcp_old::TCPConnection::processTCPSegment(), TCPConnection::processTCPSegment(), UDPVideoStreamCli::requestStream(), UDPSocket::send(), SCTPAssociation::sendInit(), tcp_old::TCPConnection::sendSyn(), TCPConnection::sendSyn(), and IPAddressResolver::tryResolve().
bool IPvXAddress::operator!= | ( | const IPAddress & | addr | ) | const [inline] |
bool IPvXAddress::operator!= | ( | const IPv6Address & | addr | ) | const [inline] |
bool IPvXAddress::operator!= | ( | const IPvXAddress & | addr | ) | const [inline] |
bool IPvXAddress::operator< | ( | const IPvXAddress & | addr | ) | const [inline] |
IPvXAddress& IPvXAddress::operator= | ( | const IPAddress & | addr | ) | [inline] |
IPvXAddress& IPvXAddress::operator= | ( | const IPv6Address & | addr | ) | [inline] |
IPvXAddress& IPvXAddress::operator= | ( | const IPvXAddress & | addr | ) | [inline] |
bool IPvXAddress::operator== | ( | const IPvXAddress & | addr | ) | const [inline] |
bool IPvXAddress::operator== | ( | const IPAddress & | addr | ) | const [inline] |
bool IPvXAddress::operator== | ( | const IPv6Address & | addr | ) | const [inline] |
void IPvXAddress::set | ( | const IPAddress & | addr | ) | [inline] |
Set to an IPv4 address.
Definition at line 108 of file IPvXAddress.h.
Referenced by doUnpacking(), and SCTP::findAssocForMessage().
void IPvXAddress::set | ( | const IPv6Address & | addr | ) | [inline] |
Set to an IPv6 address.
Definition at line 116 of file IPvXAddress.h.
{ if (addr.isUnspecified()) { // we always represent nulls as IPv4 null isv6 = false; d[0] = 0; return; } isv6 = true; uint32 *w = const_cast<IPv6Address&>(addr).words(); d[0] = w[0]; d[1] = w[1]; d[2] = w[2]; d[3] = w[3]; }
void IPvXAddress::set | ( | const char * | addr | ) | [inline] |
Accepts string representations supported by IPAddress (dotted decimal notation) and IPv6Address (hex string with colons). Throws an error if the format is not recognized.
Definition at line 143 of file IPvXAddress.h.
{ if (!tryParse(addr)) throw cRuntimeError("IPvXAddress: cannot interpret address string `%s'", addr); }
void IPvXAddress::set | ( | const IPvXAddress & | addr | ) | [inline] |
std::string IPvXAddress::str | ( | ) | const [inline] |
Returns the string representation of the address (e.g. "152.66.86.92")
Definition at line 172 of file IPvXAddress.h.
Referenced by tcp_old::TCP::addSockPair(), TCP::addSockPair(), operator<<(), SCTP::removeAssociation(), and SCTPPathVariables::SCTPPathVariables().
bool IPvXAddress::tryParse | ( | const char * | addr | ) |
Parses and assigns the given address and returns true if the string is recognized by IPAddress or IPv6Address, otherwise just returns false.
Definition at line 21 of file IPvXAddress.cc.
Referenced by IPAddressResolver::tryResolve().
{ // try as IPv4 if (IPAddress::isWellFormed(addr)) { set(IPAddress(addr)); return true; } // try as IPv6 IPv6Address ipv6; if (ipv6.tryParse(addr)) { set(ipv6); return true; } // no luck return false; }
int IPvXAddress::wordCount | ( | ) | const [inline] |
Returns length of internal binary representation of address, (count of 32-bit unsigned integers.)
Definition at line 188 of file IPvXAddress.h.
Referenced by TCPSerializer::checksum().
{return isv6 ? 4 : 1;}
const uint32* IPvXAddress::words | ( | ) | const [inline] |
Returns pointer to internal binary representation of address, four 32-bit unsigned integers.
Definition at line 194 of file IPvXAddress.h.
Referenced by TCPSerializer::checksum().
{return d;}
uint32 IPvXAddress::d[4] [protected] |
Definition at line 38 of file IPvXAddress.h.
Referenced by equals(), and operator<().
bool IPvXAddress::isv6 [protected] |
Definition at line 39 of file IPvXAddress.h.
Referenced by equals(), and operator<().