src/network/utils/ipv6-address.cc
changeset 7252 c8200621e252
parent 7240 395988f30476
child 7256 b04ba6772f8c
equal deleted inserted replaced
7251:b2fe610ad03f 7252:c8200621e252
   406 
   406 
   407   memcpy (addr, m_address, 16);
   407   memcpy (addr, m_address, 16);
   408   ((Ipv6Prefix)prefix).GetBytes (pref);
   408   ((Ipv6Prefix)prefix).GetBytes (pref);
   409 
   409 
   410   /* a little bit ugly... */
   410   /* a little bit ugly... */
   411   for (i = 0 ; i < 16 ; i++)
   411   for (i = 0; i < 16; i++)
   412     {
   412     {
   413       addr[i] = addr[i] & pref[i];
   413       addr[i] = addr[i] & pref[i];
   414     }
   414     }
   415   ipv6.Set (addr);
   415   ipv6.Set (addr);
   416   return ipv6;
   416   return ipv6;
   607     }
   607     }
   608 
   608 
   609   if (nb < 16)
   609   if (nb < 16)
   610     {
   610     {
   611       nb++;
   611       nb++;
   612       for (i = nb; i < 16 ; i++)
   612       for (i = nb; i < 16; i++)
   613         {
   613         {
   614           m_prefix[i] = 0x00;
   614           m_prefix[i] = 0x00;
   615         }
   615         }
   616     }
   616     }
   617 }
   617 }
   639 
   639 
   640   a.GetBytes (addrA);
   640   a.GetBytes (addrA);
   641   b.GetBytes (addrB);
   641   b.GetBytes (addrB);
   642 
   642 
   643   /* a little bit ugly... */
   643   /* a little bit ugly... */
   644   for (i = 0 ; i < 16 ; i++)
   644   for (i = 0; i < 16; i++)
   645     {
   645     {
   646       if ((addrA[i] & m_prefix[i]) != (addrB[i] & m_prefix[i]))
   646       if ((addrA[i] & m_prefix[i]) != (addrB[i] & m_prefix[i]))
   647         {
   647         {
   648           return false;
   648           return false;
   649         }
   649         }
   652 }
   652 }
   653 
   653 
   654 void Ipv6Prefix::Print (std::ostream &os) const
   654 void Ipv6Prefix::Print (std::ostream &os) const
   655 {
   655 {
   656   os << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[0]
   656   os << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[0]
   657      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[1] << ":"
   657   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[1] << ":"
   658      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[2]
   658   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[2]
   659      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[3] << ":"
   659   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[3] << ":"
   660      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[4]
   660   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[4]
   661      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[5] << ":"
   661   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[5] << ":"
   662      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[6]
   662   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[6]
   663      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[7] << ":"
   663   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[7] << ":"
   664      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[8]
   664   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[8]
   665      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[9] << ":"
   665   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[9] << ":"
   666      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[10]
   666   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[10]
   667      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[11] << ":"
   667   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[11] << ":"
   668      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[12]
   668   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[12]
   669      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[13] << ":"
   669   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[13] << ":"
   670      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[14]
   670   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[14]
   671      << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[15];
   671   << std::hex << std::setw (2) << std::setfill ('0') << (unsigned int) m_prefix[15];
   672 }
   672 }
   673 
   673 
   674 Ipv6Prefix Ipv6Prefix::GetLoopback ()
   674 Ipv6Prefix Ipv6Prefix::GetLoopback ()
   675 {
   675 {
   676   static Ipv6Prefix prefix ((uint8_t)128);
   676   static Ipv6Prefix prefix ((uint8_t)128);
   697 uint8_t Ipv6Prefix::GetPrefixLength () const
   697 uint8_t Ipv6Prefix::GetPrefixLength () const
   698 {
   698 {
   699   uint8_t i = 0;
   699   uint8_t i = 0;
   700   uint8_t prefixLength = 0;
   700   uint8_t prefixLength = 0;
   701 
   701 
   702   for(i = 0 ; i < 16 ; i++)
   702   for(i = 0; i < 16; i++)
   703     {
   703     {
   704       uint8_t mask = m_prefix[i];
   704       uint8_t mask = m_prefix[i];
   705 
   705 
   706       while(mask != 0)
   706       while(mask != 0)
   707         {
   707         {