From dda7b43d44e82a33dfd1be8a622d10072d3d386e Mon Sep 17 00:00:00 2001 From: Tommaso Pecorella Date: Sat, 30 Aug 2014 18:25:22 +0200 Subject: [PATCH] Bug 1967 - LL Multicast is not compressed in the right way in IPHC --- RELEASE_NOTES | 1 + src/internet/model/icmpv6-l4-protocol.cc | 2 ++ src/sixlowpan/model/sixlowpan-net-device.cc | 4 ++-- .../test/sixlowpan-fragmentation-test.cc | 15 +++++++++------ 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 8a5169297..17d9bd56e 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -42,6 +42,7 @@ Bugs fixed - Bug 1960 - Wrong information on index range, about Node::GetDevice - Bug 1961 - planetlab-tap-creator "variable set but not used" - Bug 1963 - AODV can tag the same packet twice (and raise an assert) +- Bug 1967 - LL Multicast is not compressed in the right way in IPHC Known issues ------------ diff --git a/src/internet/model/icmpv6-l4-protocol.cc b/src/internet/model/icmpv6-l4-protocol.cc index 380011453..2f444aa9e 100644 --- a/src/internet/model/icmpv6-l4-protocol.cc +++ b/src/internet/model/icmpv6-l4-protocol.cc @@ -1003,6 +1003,8 @@ void Icmpv6L4Protocol::SendNS (Ipv6Address src, Ipv6Address dst, Ipv6Address tar else { NS_LOG_LOGIC ("Destination is Multicast, using DelayedSendMessage"); + std::cout << Simulator::Now ().GetSeconds () << " - " << this << " - " << m_node->GetId () << " - "; + std::cout << src << " -> " << dst << " - " << *p << std::endl; Simulator::Schedule (Time (MilliSeconds (m_solicitationJitter->GetValue ())), &Icmpv6L4Protocol::DelayedSendMessage, this, p, src, dst, 255); } } diff --git a/src/sixlowpan/model/sixlowpan-net-device.cc b/src/sixlowpan/model/sixlowpan-net-device.cc index ff9f99c60..c2b2bf3a3 100644 --- a/src/sixlowpan/model/sixlowpan-net-device.cc +++ b/src/sixlowpan/model/sixlowpan-net-device.cc @@ -944,14 +944,14 @@ SixLowPanNetDevice::CompressLowPanIphc (Ptr packet, Address const &src, // The address takes the form ffXX::00XX:XXXX. // ffXX:0000:0000:0000:0000:0000:00XX:XXXX. else if ( (addressBuf[0] == multicastAddrCheckerBuf[0]) - && (memcmp (addressBuf + 2, multicastAddrCheckerBuf + 2, 11) ) ) + && (memcmp (addressBuf + 2, multicastAddrCheckerBuf + 2, 11) == 0) ) { iphcHeader.SetDam (SixLowPanIphc::HC_COMPR_16); } // The address takes the form ffXX::00XX:XXXX:XXXX. // ffXX:0000:0000:0000:0000:00XX:XXXX:XXXX. else if ( (addressBuf[0] == multicastAddrCheckerBuf[0]) - && (memcmp (addressBuf + 2, multicastAddrCheckerBuf + 2, 9) ) ) + && (memcmp (addressBuf + 2, multicastAddrCheckerBuf + 2, 9) == 0) ) { iphcHeader.SetDam (SixLowPanIphc::HC_COMPR_64); } diff --git a/src/sixlowpan/test/sixlowpan-fragmentation-test.cc b/src/sixlowpan/test/sixlowpan-fragmentation-test.cc index b68ca000c..c2d7a4f0c 100644 --- a/src/sixlowpan/test/sixlowpan-fragmentation-test.cc +++ b/src/sixlowpan/test/sixlowpan-fragmentation-test.cc @@ -257,12 +257,17 @@ SixlowpanFragmentationTest::DoRun (void) { // Create topology + Packet::EnablePrinting (); + // Receiver Node Ptr serverNode = CreateObject (); AddInternetStack (serverNode); Ptr serverDev; Ptr serverDevErrorModel = CreateObject (); { + Ptr icmpv6l4 = serverNode->GetObject (); + icmpv6l4->SetAttribute ("DAD", BooleanValue (false)); + serverDev = CreateObject (); serverDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ())); serverDev->SetMtu (1500); @@ -282,8 +287,6 @@ SixlowpanFragmentationTest::DoRun (void) ipv6->AddAddress (netdev_idx, ipv6Addr); ipv6->SetUp (netdev_idx); - Ptr icmpv6l4 = serverNode->GetObject (); - icmpv6l4->SetAttribute ("DAD", BooleanValue (false)); } StartServer (serverNode); @@ -293,6 +296,9 @@ SixlowpanFragmentationTest::DoRun (void) Ptr clientDev; Ptr clientDevErrorModel = CreateObject (); { + Ptr icmpv6l4 = clientNode->GetObject (); + icmpv6l4->SetAttribute ("DAD", BooleanValue (false)); + clientDev = CreateObject (); clientDev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ())); clientDev->SetMtu (150); @@ -302,7 +308,7 @@ SixlowpanFragmentationTest::DoRun (void) Ptr clientSix = CreateObject (); clientSix->SetAttribute ("ForceEtherType", BooleanValue (true) ); - serverNode->AddDevice (clientSix); + clientNode->AddDevice (clientSix); clientSix->SetNetDevice (clientDev); Ptr ipv6 = clientNode->GetObject (); @@ -311,9 +317,6 @@ SixlowpanFragmentationTest::DoRun (void) Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::2"), Ipv6Prefix (64)); ipv6->AddAddress (netdev_idx, ipv6Addr); ipv6->SetUp (netdev_idx); - - Ptr icmpv6l4 = clientNode->GetObject (); - icmpv6l4->SetAttribute ("DAD", BooleanValue (false)); } StartClient (clientNode);