25 #include "ns3/assert.h" 
   47 static uint32_t 
lookuphash (
unsigned char* k, uint32_t length, uint32_t level)
 
   50 #define mix(a, b, c) \ 
   52      (a) -= (b); (a) -= (c); (a) ^= ((c) >> 13); \ 
   53      (b) -= (c); (b) -= (a); (b) ^= ((a) << 8);  \ 
   54      (c) -= (a); (c) -= (b); (c) ^= ((b) >> 13); \ 
   55      (a) -= (b); (a) -= (c); (a) ^= ((c) >> 12); \ 
   56      (b) -= (c); (b) -= (a); (b) ^= ((a) << 16); \ 
   57      (c) -= (a); (c) -= (b); (c) ^= ((b) >> 5);  \ 
   58      (a) -= (b); (a) -= (c); (a) ^= ((c) >> 3);  \ 
   59      (b) -= (c); (b) -= (a); (b) ^= ((a) << 10); \ 
   60      (c) -= (a); (c) -= (b); (c) ^= ((b) >> 15); \ 
   64   typedef unsigned  char ub1;   
 
   78       a += (k[0] + ((ub4)k[1] << 8) + ((ub4)k[2] << 16) + ((ub4)k[3] << 24));
 
   79       b += (k[4] + ((ub4)k[5] << 8) + ((ub4)k[6] << 16) + ((ub4)k[7] << 24));
 
   80       c += (k[8] + ((ub4)k[9] << 8) + ((ub4)k[10] << 16) + ((ub4)k[11] << 24));
 
   90     case 11: c += ((ub4)k[10] << 24);
 
   91     case 10: c += ((ub4)k[9] << 16);
 
   92     case 9: c += ((ub4)k[8] << 8);  
 
   93     case 8: b += ((ub4)k[7] << 24);
 
   94     case 7: b += ((ub4)k[6] << 16);
 
   95     case 6: b += ((ub4)k[5] << 8);
 
   97     case 4: a += ((ub4)k[3] << 24);
 
   98     case 3: a += ((ub4)k[2] << 16);
 
   99     case 2: a += ((ub4)k[1] << 8);
 
  124   static const char xdigits_l[] = 
"0123456789abcdef";
 
  125   static const char xdigits_u[] = 
"0123456789ABCDEF";
 
  126   unsigned char tmp[16];
 
  127   unsigned char* tp = tmp;
 
  128   unsigned char* endp = 0;
 
  129   unsigned char* colonp = 0;
 
  130   const char* xdigits = 0;
 
  132   const char* curtok = 0;
 
  135   int seen_xdigits = 0;
 
  136   unsigned int val = 0;
 
  138   memset (tp, 0x00, 16);
 
  144       if (*++address != 
':')
 
  152   while ((ch = *address++) != 
'\0')
 
  156       if ((pch = strchr ((xdigits = xdigits_l), ch)) == 0)
 
  158           pch = strchr ((xdigits = xdigits_u), ch);
 
  164           val |= (pch - xdigits);
 
  166           if (++seen_xdigits > 4)
 
  191           *tp++ = (
unsigned char)(val >> 8) & 0xff;
 
  192           *tp++ = (
unsigned char) val & 0xff;
 
  200       if (ch == 
'.' && ((tp + 4 ) <= endp) &&
 
  201           inet_pton4 (curtok, tp) > 0)
 
  217       *tp++ = (
unsigned char)(val >> 8) & 0xff;
 
  218       *tp++ = (
unsigned char) val & 0xff;
 
  227       const int n = tp - colonp;
 
  235       for (i = 1; i <= n; i++)
 
  237           endp[-i] = colonp[n - i];
 
  249   memcpy (addr, tmp, 16);
 
  319   uint8_t buf[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 
  320                       0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 };
 
  346   memcpy (buf2 + 8, buf, 3);
 
  349   memcpy (buf2 + 13, buf + 3, 3);
 
  365   memset (buf2, 0x00, 
sizeof (buf2));
 
  368   memcpy (buf2 + 8, buf, 3);
 
  371   memcpy (buf2 + 13, buf + 3, 3);
 
  387   memset (buf, 0x00, 
sizeof (buf));
 
  403   os << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[0]
 
  404      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[1] << 
":" 
  405      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[2]
 
  406      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[3] << 
":" 
  407      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[4]
 
  408      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[5] << 
":" 
  409      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[6]
 
  410      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[7] << 
":" 
  411      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[8]
 
  412      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[9] << 
":" 
  413      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[10]
 
  414      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[11] << 
":" 
  415      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[12]
 
  416      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[13] << 
":" 
  417      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[14]
 
  418      << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_address[15]
 
  419      << std::dec << std::setfill (
' ');
 
  426   return (*
this == localhost);
 
  452   uint8_t v4MappedPrefix[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 
  453                                  0x00, 0x00, 0xff, 0xff };
 
  454   if (memcmp(
m_address, v4MappedPrefix, 
sizeof(v4MappedPrefix)) == 0)
 
  473   for (i = 0; i < 16; i++)
 
  475       addr[i] = addr[i] & pref[i];
 
  488   if (buf[0] == 0xff && 
 
  502   return (*
this == allnodes);
 
  509   return (*
this == allrouters);
 
  516   return (*
this == allhosts);
 
  523   return (*
this == any);
 
  606   static Ipv6Address ones (
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
 
  697       for (i = nb; i < 16; i++)
 
  731   for (i = 0; i < 16; i++)
 
  744   os << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[0]
 
  745   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[1] << 
":" 
  746   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[2]
 
  747   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[3] << 
":" 
  748   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[4]
 
  749   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[5] << 
":" 
  750   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[6]
 
  751   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[7] << 
":" 
  752   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[8]
 
  753   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[9] << 
":" 
  754   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[10]
 
  755   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[11] << 
":" 
  756   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[12]
 
  757   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[13] << 
":" 
  758   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[14]
 
  759   << std::hex << std::setw (2) << std::setfill (
'0') << (
unsigned int) 
m_prefix[15];
 
  793   uint8_t prefixLength = 0;
 
  795   for(i = 0; i < 16; i++)