|
A Discrete-Event Network Simulator
|
API
|
Go to the documentation of this file.
48 #include "ns3/assert.h"
72 static uint32_t
lookuphash (
unsigned char*
k, uint32_t length, uint32_t level)
75 #define mix(a, b, c) \
77 (a) -= (b); (a) -= (c); (a) ^= ((c) >> 13); \
78 (b) -= (c); (b) -= (a); (b) ^= ((a) << 8); \
79 (c) -= (a); (c) -= (b); (c) ^= ((b) >> 13); \
80 (a) -= (b); (a) -= (c); (a) ^= ((c) >> 12); \
81 (b) -= (c); (b) -= (a); (b) ^= ((a) << 16); \
82 (c) -= (a); (c) -= (b); (c) ^= ((b) >> 5); \
83 (a) -= (b); (a) -= (c); (a) ^= ((c) >> 3); \
84 (b) -= (c); (b) -= (a); (b) ^= ((a) << 10); \
85 (c) -= (a); (c) -= (b); (c) ^= ((b) >> 15); \
102 a += (
k[0] + ((ub4)
k[1] << 8) + ((ub4)
k[2] << 16) + ((ub4)
k[3] << 24));
103 b += (
k[4] + ((ub4)
k[5] << 8) + ((ub4)
k[6] << 16) + ((ub4)
k[7] << 24));
104 c += (
k[8] + ((ub4)
k[9] << 8) + ((ub4)
k[10] << 16) + ((ub4)
k[11] << 24));
114 case 11: c += ((ub4)
k[10] << 24);
115 case 10: c += ((ub4)
k[9] << 16);
116 case 9: c += ((ub4)
k[8] << 8);
117 case 8: b += ((ub4)
k[7] << 24);
118 case 7: b += ((ub4)
k[6] << 16);
119 case 6: b += ((ub4)
k[5] << 8);
121 case 4: a += ((ub4)
k[3] << 24);
122 case 3: a += ((ub4)
k[2] << 16);
123 case 2: a += ((ub4)
k[1] << 8);
153 static const char xdigits_l[] =
"0123456789abcdef";
154 static const char xdigits_u[] =
"0123456789ABCDEF";
155 unsigned char tmp[16];
156 unsigned char* tp = tmp;
157 unsigned char*
const endp = tp + 16;
158 unsigned char* colonp = 0;
159 const char* xdigits = 0;
161 const char* curtok = 0;
164 int seen_xdigits = 0;
165 unsigned int val = 0;
167 memset (tp, 0x00, 16);
180 while ((ch = *
address++) !=
'\0')
184 if ((pch = strchr ((xdigits = xdigits_l), ch)) == 0)
186 pch = strchr ((xdigits = xdigits_u), ch);
192 val |= (pch - xdigits);
194 if (++seen_xdigits > 4)
219 *tp++ = (
unsigned char)(val >> 8) & 0xff;
220 *tp++ = (
unsigned char) val & 0xff;
228 if (ch ==
'.' && (endp - tp > 3 )) &&
229 inet_pton4 (curtok, tp) > 0)
245 *tp++ = (
unsigned char)(val >> 8) & 0xff;
246 *tp++ = (
unsigned char) val & 0xff;
255 const int n = tp - colonp;
263 for (i = 1; i <=
n; i++)
265 endp[-i] = colonp[
n - i];
277 memcpy (addr, tmp, 16);
355 uint8_t buf[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
356 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 };
393 if (ipv6Addr.
IsAny ())
415 memset (buf2+8, 0, 8);
417 memcpy (buf2 + 14, buf, 2);
435 memcpy (buf2 + 8, buf, 3);
438 memcpy (buf2 + 13, buf + 3, 3);
455 memcpy (buf2 + 8, buf, 8);
471 memset (buf2+8, 0, 8);
473 memcpy (buf2 + 14, buf, 2);
502 if (ipv6Addr.
IsAny ())
518 memset (buf2, 0x00,
sizeof (buf2));
521 memcpy (buf2 + 14, buf, 2);
538 memset (buf2, 0x00,
sizeof (buf2));
541 memcpy (buf2 + 8, buf, 3);
544 memcpy (buf2 + 13, buf + 3, 3);
560 memset (buf2, 0x00,
sizeof (buf2));
563 memcpy (buf2 + 8, buf, 8);
579 memset (buf2, 0x00,
sizeof (buf2));
582 memcpy (buf2 + 14, buf, 2);
599 memset (buf, 0x00,
sizeof (buf));
638 int8_t bestBase = -1;
661 if (bestBase == -1 || curLen > bestLen)
672 if (bestBase == -1 || curLen > bestLen)
678 if (bestBase != -1 && bestLen < 2)
683 for (i = 0; i < 8;) {
696 os << std::hex << (
unsigned int)
address[i];
700 if (bestBase != -1 && (bestBase + bestLen) == 8)
711 return (*
this == localhost);
737 static uint8_t v4MappedPrefix[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
738 0x00, 0x00, 0xff, 0xff };
739 if (memcmp(
m_address, v4MappedPrefix,
sizeof(v4MappedPrefix)) == 0)
758 for (i = 0; i < 16; i++)
760 addr[i] = addr[i] & pref[i];
770 static Ipv6Address documentation (
"ff02::1:ff00:0");
784 return (*
this == allNodesI || *
this == allNodesL || *
this == allNodesR);
794 return (*
this == allroutersI || *
this == allroutersL || *
this == allroutersR || *
this == allroutersS);
801 return (*
this == any);
907 static Ipv6Address ones (
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
975 NS_ASSERT_MSG (autoLength <= prefixLength,
"Ipv6Prefix: address and prefix are not compatible: " <<
Ipv6Address (prefix) <<
"/" << +prefixLength);
986 NS_ASSERT_MSG (autoLength <= prefixLength,
"Ipv6Prefix: address and prefix are not compatible: " <<
Ipv6Address (prefix) <<
"/" << +prefixLength);
1020 for (i = nb; i < 16; i++)
1056 for (i = 0; i < 16; i++)
1102 uint8_t prefixBytes[16];
1103 memcpy (prefixBytes,
m_prefix, 16);
1106 return convertedPrefix;
1125 uint8_t prefixLength = 0;
1128 for(int8_t i=15; i>=0 && !stop; i--)
1132 for(uint8_t j=0; j<8 && !stop; j++)
1134 if ((mask & 1) == 0)
1146 return 128 - prefixLength;
bool IsLocalhost() const
If the IPv6 address is localhost (::1).
bool IsMatch(Ipv6Address a, Ipv6Address b) const
If the Address match the type.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
static Ipv6Address Deserialize(const uint8_t buf[16])
Deserialize this address.
void Set(char const *address)
Sets an Ipv6Address by parsing the input C-string.
static bool IsMatchingType(const Address &address)
If the Address matches the type.
A class used for addressing MAC8 MAC's.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
uint8_t GetMinimumPrefixLength() const
Get the minimum prefix length, i.e., 128 - the length of the largest sequence trailing zeroes.
static bool IsMatchingType(const Address &address)
bool IsIpv4MappedAddress() const
If the address is an IPv4-mapped address.
static Mac8Address ConvertFrom(const Address &address)
Convert a generic address to a Mac8Address.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static Ipv6Address MakeSolicitedAddress(Ipv6Address addr)
Make the solicited IPv6 address.
void GetBytes(uint8_t buf[16]) const
Get the bytes corresponding to the prefix.
static Ipv6Prefix GetOnes()
Get the "all-1" IPv6 mask (ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff).
static bool IsMatchingType(const Address &address)
static Mac64Address ConvertFrom(const Address &address)
This class can contain 16 bit addresses.
uint8_t m_address[16]
The address representation on 128 bits (16 bytes).
static Ipv6Address GetAllHostsMulticast()
Get the "all hosts multicast" address.
~Ipv6Address()
Destructor.
static uint8_t Register(void)
Allocate a new type id for a new type of address.
bool IsInitialized(void) const
bool IsAllNodesMulticast() const
If the IPv6 address is "all nodes multicast" (ff02::1/8).
Ipv4 addresses are stored in host order in this class.
Describes an IPv6 address.
void CopyTo(uint8_t buffer[8]) const
void GetBytes(uint8_t buf[16]) const
Get the bytes corresponding to the address.
void CopyTo(uint8_t buffer[2]) const
static Ipv6Address GetLoopback()
Get the loopback address.
bool HasPrefix(Ipv6Prefix const &prefix) const
Compares an address and a prefix.
std::string reference
reference tag
void Serialize(uint8_t buf[16]) const
Serialize this address to a 16-byte buffer.
void Print(std::ostream &os) const
Print this address to the given output stream.
void SetPrefixLength(uint8_t prefixLength)
Set prefix length.
void CopyTo(uint8_t *pBuffer) const
Writes address to buffer parameter.
bool IsSolicitedMulticast() const
If the IPv6 address is a Solicited multicast address.
static Ipv4Address Deserialize(const uint8_t buf[4])
bool IsLinkLocal() const
If the IPv6 address is a link-local address (fe80::/64).
Ipv6Address CombinePrefix(Ipv6Prefix const &prefix) const
Combine this address with a prefix.
a polymophic address class
static Mac48Address ConvertFrom(const Address &address)
#define ATTRIBUTE_HELPER_CPP(type)
Define the attribute value, accessor and checkers for class type
Ipv4Address GetIpv4MappedAddress() const
Return the Ipv4 address.
static Ipv6Address ConvertFrom(const Address &address)
Convert the Address object into an Ipv6Address ones.
void Print(std::ostream &os) const
Print this address to the given output stream.
static Ipv6Prefix GetZero()
Get the zero prefix ( /0).
static bool IsMatchingType(const Address &address)
Check that a generic Address is compatible with Mac8Address.
Ipv6Address ConvertToIpv6Address() const
Convert the Prefix into an IPv6 Address.
uint8_t m_prefix[16]
The prefix representation.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
static bool IsMatchingType(const Address &address)
static Ipv6Address GetZero()
Get the 0 (::) Ipv6Address.
bool m_initialized
IPv6 address has been explicitly initialized to a valid value.
bool IsLinkLocalMulticast() const
If the IPv6 address is link-local multicast (ff02::/16).
uint8_t m_prefixLength
The prefix length.
static Ipv6Address MakeAutoconfiguredAddress(Address addr, Ipv6Address prefix)
Make the autoconfigured IPv6 address from a Mac address.
bool IsMulticast() const
If the IPv6 address is multicast (ff00::/8).
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
static Ipv6Address MakeAutoconfiguredLinkLocalAddress(Address mac)
Make the autoconfigured link-local IPv6 address from a Mac address.
static Ipv6Address GetAllNodesMulticast()
Get the "all nodes multicast" address.
Ipv6Prefix()
Default constructor.
uint8_t GetPrefixLength() const
Get prefix length.
static Mac16Address ConvertFrom(const Address &address)
static bool AsciiToIpv6Host(const char *address, uint8_t addr[16])
Convert an IPv6 C-string into a 128-bit representation.
static Ipv6Address GetAny()
Get the "any" (::) Ipv6Address.
void Serialize(uint8_t buf[4]) const
Serialize this address to a 4-byte buffer.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
static Ipv6Address GetOnes()
Get the "all-1" IPv6 address (ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff).
static Ipv6Prefix GetLoopback()
Get the loopback prefix ( /128).
Address ConvertTo(void) const
convert the IPv6Address object to an Address object.
void CopyTo(uint8_t buffer[6]) const
static uint32_t lookuphash(unsigned char *k, uint32_t length, uint32_t level)
Get a hash key.
static Ipv6Address MakeIpv4MappedAddress(Ipv4Address addr)
Make the Ipv4-mapped IPv6 address.
bool IsAny() const
If the IPv6 address is the "Any" address.
std::ostream & operator<<(std::ostream &os, const Angles &a)
bool IsDocumentation() const
If the IPv6 address is a documentation address (2001:DB8::/32).
Describes an IPv6 prefix.
static uint8_t GetType(void)
Return the Type of address.
static Ipv6Address GetAllRoutersMulticast()
Get the "all routers multicast" address.
bool IsAllRoutersMulticast() const
If the IPv6 address is "all routers multicast" (ff02::2/8).
Ipv6Address()
Default constructor.
size_t operator()(Ipv6Address const &x) const
Returns the hash of an IPv6 address.
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
std::istream & operator>>(std::istream &is, Angles &a)