Add Ipv6Address::MakeAutoconfigured[LinkLocal]Address
This commit is contained in:
@@ -361,6 +361,34 @@ Ipv4Address Ipv6Address::GetIpv4MappedAddress() const
|
||||
return (v4Addr);
|
||||
}
|
||||
|
||||
Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Address addr, Ipv6Address prefix)
|
||||
{
|
||||
Ipv6Address ipv6Addr = Ipv6Address::GetAny ();
|
||||
|
||||
if (Mac64Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac64Address::ConvertFrom (addr), Ipv6Address (prefix) );
|
||||
}
|
||||
else if (Mac48Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), Ipv6Address (prefix));
|
||||
}
|
||||
else if (Mac16Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac16Address::ConvertFrom (addr), Ipv6Address (prefix) );
|
||||
}
|
||||
else if (Mac8Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac8Address::ConvertFrom (addr), Ipv6Address (prefix) );
|
||||
}
|
||||
|
||||
if (ipv6Addr.IsAny ())
|
||||
{
|
||||
NS_ABORT_MSG ("Unknown address type");
|
||||
}
|
||||
return ipv6Addr;
|
||||
}
|
||||
|
||||
Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Mac16Address addr, Ipv6Address prefix)
|
||||
{
|
||||
NS_LOG_FUNCTION (addr << prefix);
|
||||
@@ -370,6 +398,7 @@ Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Mac16Address addr, Ipv6Addre
|
||||
|
||||
addr.CopyTo (buf);
|
||||
prefix.GetBytes (buf2);
|
||||
memset (buf2+8, 0, 8);
|
||||
|
||||
memcpy (buf2 + 14, buf, 2);
|
||||
buf2[11] = 0xff;
|
||||
@@ -425,6 +454,7 @@ Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Mac8Address addr, Ipv6Addres
|
||||
buf[0] = 0;
|
||||
addr.CopyTo (&buf[1]);
|
||||
prefix.GetBytes (buf2);
|
||||
memset (buf2+8, 0, 8);
|
||||
|
||||
memcpy (buf2 + 14, buf, 2);
|
||||
buf2[11] = 0xff;
|
||||
@@ -434,6 +464,34 @@ Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Mac8Address addr, Ipv6Addres
|
||||
return ret;
|
||||
}
|
||||
|
||||
Ipv6Address Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Address addr)
|
||||
{
|
||||
Ipv6Address ipv6Addr = Ipv6Address::GetAny ();
|
||||
|
||||
if (Mac64Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac64Address::ConvertFrom (addr));
|
||||
}
|
||||
else if (Mac48Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac48Address::ConvertFrom (addr));
|
||||
}
|
||||
else if (Mac16Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address::ConvertFrom (addr));
|
||||
}
|
||||
else if (Mac8Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac8Address::ConvertFrom (addr));
|
||||
}
|
||||
|
||||
if (ipv6Addr.IsAny ())
|
||||
{
|
||||
NS_ABORT_MSG ("Unknown address type");
|
||||
}
|
||||
return ipv6Addr;
|
||||
}
|
||||
|
||||
Ipv6Address Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address addr)
|
||||
{
|
||||
NS_LOG_FUNCTION (addr);
|
||||
|
||||
@@ -140,6 +140,17 @@ public:
|
||||
*/
|
||||
Ipv4Address GetIpv4MappedAddress () const;
|
||||
|
||||
/**
|
||||
* \brief Make the autoconfigured IPv6 address from a Mac address.
|
||||
*
|
||||
* Actually the MAC supported are: Mac8, Mac16, Mac48, and Mac64.
|
||||
*
|
||||
* \param addr the MAC address.
|
||||
* \param prefix the IPv6 prefix
|
||||
* \return autoconfigured IPv6 address
|
||||
*/
|
||||
static Ipv6Address MakeAutoconfiguredAddress (Address addr, Ipv6Address prefix);
|
||||
|
||||
/**
|
||||
* \brief Make the autoconfigured IPv6 address with Mac16Address.
|
||||
*
|
||||
@@ -181,6 +192,16 @@ public:
|
||||
*/
|
||||
static Ipv6Address MakeAutoconfiguredAddress (Mac8Address addr, Ipv6Address prefix);
|
||||
|
||||
/**
|
||||
* \brief Make the autoconfigured link-local IPv6 address from a Mac address.
|
||||
*
|
||||
* Actually the MAC supported are: Mac8, Mac16, Mac48, and Mac64.
|
||||
*
|
||||
* \param mac the MAC address.
|
||||
* \return autoconfigured link-local IPv6 address
|
||||
*/
|
||||
static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Address mac);
|
||||
|
||||
/**
|
||||
* \brief Make the autoconfigured link-local IPv6 address with Mac16Address.
|
||||
*
|
||||
|
||||
@@ -552,7 +552,7 @@ SixLowPanNetDevice::CompressLowPanHc1 (Ptr<Packet> packet, Address const &src, A
|
||||
uint8_t bufTwo[16];
|
||||
Ipv6Address srcAddr = ipHeader.GetSourceAddress ();
|
||||
srcAddr.GetBytes (bufOne);
|
||||
Ipv6Address mySrcAddr = MakeLinkLocalAddressFromMac (src);
|
||||
Ipv6Address mySrcAddr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (src);
|
||||
|
||||
NS_LOG_LOGIC ("Checking source compression: " << mySrcAddr << " - " << srcAddr );
|
||||
|
||||
@@ -582,7 +582,7 @@ SixLowPanNetDevice::CompressLowPanHc1 (Ptr<Packet> packet, Address const &src, A
|
||||
|
||||
Ipv6Address dstAddr = ipHeader.GetDestinationAddress ();
|
||||
dstAddr.GetBytes (bufOne);
|
||||
Ipv6Address myDstAddr = MakeLinkLocalAddressFromMac (dst);
|
||||
Ipv6Address myDstAddr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (dst);
|
||||
|
||||
NS_LOG_LOGIC ("Checking destination compression: " << myDstAddr << " - " << dstAddr );
|
||||
|
||||
@@ -675,7 +675,7 @@ SixLowPanNetDevice::DecompressLowPanHc1 (Ptr<Packet> packet, Address const &src,
|
||||
address[j + 8] = 0;
|
||||
address[j] = prefix[j];
|
||||
}
|
||||
ipHeader.SetSourceAddress ( MakeGlobalAddressFromMac (src, Ipv6Address (address)));
|
||||
ipHeader.SetSourceAddress (Ipv6Address::MakeAutoconfiguredAddress (src, Ipv6Address (address)));
|
||||
break;
|
||||
case SixLowPanHc1::HC1_PCII:
|
||||
interface = encoding.GetSrcInterface ();
|
||||
@@ -688,7 +688,7 @@ SixLowPanNetDevice::DecompressLowPanHc1 (Ptr<Packet> packet, Address const &src,
|
||||
ipHeader.SetSourceAddress ( Ipv6Address (address) );
|
||||
break;
|
||||
case SixLowPanHc1::HC1_PCIC:
|
||||
ipHeader.SetSourceAddress (MakeLinkLocalAddressFromMac (src));
|
||||
ipHeader.SetSourceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (src));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -715,7 +715,7 @@ SixLowPanNetDevice::DecompressLowPanHc1 (Ptr<Packet> packet, Address const &src,
|
||||
address[j + 8] = 0;
|
||||
address[j] = prefix[j];
|
||||
}
|
||||
ipHeader.SetDestinationAddress ( MakeGlobalAddressFromMac (dst, Ipv6Address (address)));
|
||||
ipHeader.SetDestinationAddress (Ipv6Address::MakeAutoconfiguredAddress (dst, Ipv6Address (address)));
|
||||
break;
|
||||
case SixLowPanHc1::HC1_PCII:
|
||||
interface = encoding.GetDstInterface ();
|
||||
@@ -728,7 +728,7 @@ SixLowPanNetDevice::DecompressLowPanHc1 (Ptr<Packet> packet, Address const &src,
|
||||
ipHeader.SetDestinationAddress ( Ipv6Address (address) );
|
||||
break;
|
||||
case SixLowPanHc1::HC1_PCIC:
|
||||
ipHeader.SetDestinationAddress (MakeLinkLocalAddressFromMac (dst));
|
||||
ipHeader.SetDestinationAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (dst));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -873,7 +873,7 @@ SixLowPanNetDevice::CompressLowPanIphc (Ptr<Packet> packet, Address const &src,
|
||||
// Set the Source Address
|
||||
iphcHeader.SetSrcAddress (srcAddr);
|
||||
|
||||
Ipv6Address mySrcAddr = MakeLinkLocalAddressFromMac (src);
|
||||
Ipv6Address mySrcAddr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (src);
|
||||
NS_LOG_LOGIC ("Checking source compression: " << mySrcAddr << " - " << srcAddr );
|
||||
|
||||
if ( mySrcAddr == srcAddr )
|
||||
@@ -914,7 +914,7 @@ SixLowPanNetDevice::CompressLowPanIphc (Ptr<Packet> packet, Address const &src,
|
||||
// Set the Destination Address
|
||||
iphcHeader.SetDstAddress (dstAddr);
|
||||
|
||||
Ipv6Address myDstAddr = MakeLinkLocalAddressFromMac (dst);
|
||||
Ipv6Address myDstAddr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (dst);
|
||||
NS_LOG_LOGIC ("Checking destination compression: " << myDstAddr << " - " << dstAddr );
|
||||
|
||||
if ( !iphcHeader.GetM () )
|
||||
@@ -1034,7 +1034,7 @@ SixLowPanNetDevice::DecompressLowPanIphc (Ptr<Packet> packet, Address const &src
|
||||
{
|
||||
if ( encoding.GetSam () == SixLowPanIphc::HC_COMPR_0 )
|
||||
{
|
||||
ipHeader.SetSourceAddress (MakeLinkLocalAddressFromMac (src));
|
||||
ipHeader.SetSourceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (src));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1060,7 +1060,7 @@ SixLowPanNetDevice::DecompressLowPanIphc (Ptr<Packet> packet, Address const &src
|
||||
{
|
||||
if ( !encoding.GetM () && encoding.GetDam () == SixLowPanIphc::HC_COMPR_0 )
|
||||
{
|
||||
ipHeader.SetDestinationAddress (MakeLinkLocalAddressFromMac (dst));
|
||||
ipHeader.SetDestinationAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (dst));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2078,62 +2078,6 @@ void SixLowPanNetDevice::HandleFragmentsTimeout (FragmentKey key, uint32_t iif)
|
||||
m_fragmentsTimers.erase (key);
|
||||
}
|
||||
|
||||
Ipv6Address SixLowPanNetDevice::MakeLinkLocalAddressFromMac (Address const &addr)
|
||||
{
|
||||
Ipv6Address ipv6Addr = Ipv6Address::GetAny ();
|
||||
|
||||
if (Mac64Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac64Address::ConvertFrom (addr));
|
||||
}
|
||||
else if (Mac48Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac48Address::ConvertFrom (addr));
|
||||
}
|
||||
else if (Mac16Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address::ConvertFrom (addr));
|
||||
}
|
||||
else if (Mac8Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac8Address::ConvertFrom (addr));
|
||||
}
|
||||
|
||||
if (ipv6Addr.IsAny ())
|
||||
{
|
||||
NS_ABORT_MSG ("Unknown address type");
|
||||
}
|
||||
return ipv6Addr;
|
||||
}
|
||||
|
||||
Ipv6Address SixLowPanNetDevice::MakeGlobalAddressFromMac (Address const &addr, Ipv6Address prefix)
|
||||
{
|
||||
Ipv6Address ipv6Addr = Ipv6Address::GetAny ();
|
||||
|
||||
if (Mac64Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac64Address::ConvertFrom (addr), Ipv6Address (prefix) );
|
||||
}
|
||||
else if (Mac48Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac48Address::ConvertFrom (addr), Ipv6Address (prefix));
|
||||
}
|
||||
else if (Mac16Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac16Address::ConvertFrom (addr), Ipv6Address (prefix) );
|
||||
}
|
||||
else if (Mac8Address::IsMatchingType (addr))
|
||||
{
|
||||
ipv6Addr = Ipv6Address::MakeAutoconfiguredAddress (Mac8Address::ConvertFrom (addr), Ipv6Address (prefix) );
|
||||
}
|
||||
|
||||
if (ipv6Addr.IsAny ())
|
||||
{
|
||||
NS_ABORT_MSG ("Unknown address type");
|
||||
}
|
||||
return ipv6Addr;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// namespace ns3
|
||||
|
||||
@@ -270,21 +270,6 @@ private:
|
||||
*/
|
||||
TracedCallback<DropReason, Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_dropTrace;
|
||||
|
||||
/**
|
||||
* \brief Make a link-local address from a MAC address.
|
||||
* \param [in] addr The MAC address.
|
||||
* \return The IPv6 link-local address.
|
||||
*/
|
||||
Ipv6Address MakeLinkLocalAddressFromMac (Address const &addr);
|
||||
|
||||
/**
|
||||
* \brief Make a global address from a MAC address.
|
||||
* \param [in] addr the MAC address.
|
||||
* \param [in] prefix The address prefix.
|
||||
* \return The IPv6 address.
|
||||
*/
|
||||
Ipv6Address MakeGlobalAddressFromMac (Address const &addr, Ipv6Address prefix);
|
||||
|
||||
/**
|
||||
* \brief Compress the headers according to HC1 compression.
|
||||
* \param [in] packet The packet to be compressed.
|
||||
|
||||
Reference in New Issue
Block a user