Addendum to bug 1522
authorTommaso Pecorella <tommaso.pecorella@unifi.it>
Fri, 16 Aug 2013 02:21:51 +0200
changeset 10159 4cb133203819
parent 10158 971f362648c3
child 10160 5bf2fe645784
Addendum to bug 1522
CHANGES.html
RELEASE_NOTES
src/internet/helper/internet-stack-helper.cc
src/internet/helper/internet-stack-helper.h
--- a/CHANGES.html	Thu Aug 15 13:04:01 2013 -0700
+++ b/CHANGES.html	Fri Aug 16 02:21:51 2013 +0200
@@ -73,6 +73,9 @@
       examples/ipv6/fragmentation-ipv6-two-MTU.cc for an example.</li>
   <li>Radvd application have a new Helper. See the updated 
       examples/ipv6/radvd.cc for an example.</li>
+  <li>InternetStackHelper have two new functions:<tt>SetIpv4ArpJitter (bool enable)</tt>
+      and <tt>SetIpv6NsRsJitter (bool enable)</tt> to enable/disable
+      the random jitter on IPv4's ARP and IPv6's NS/RS.</li>
 </ul>
 
 <h2>Changes to existing API:</h2>
@@ -131,6 +134,13 @@
   cmd.PrintHelp (std::cerr);
 </pre>
    </li>
+   <li>IPv4's ARP and IPv6's NS/RS are now issued with a random delay.
+       The delay is, by default, between 0 and 10ms.
+       This behaviour can be modify by using ArpL3Protocol's 
+       <tt>RequestJitter</tt> and Icmpv6L4Protocol's <tt>SolicitationJitter</tt>
+       attributes or by using the new InternetStackHelper functions.
+       </li>
+   
 </ul>
 
 <hr>
--- a/RELEASE_NOTES	Thu Aug 15 13:04:01 2013 -0700
+++ b/RELEASE_NOTES	Fri Aug 16 02:21:51 2013 +0200
@@ -50,8 +50,10 @@
 Bugs fixed
 ----------
 - Bug  760 - IP address removal can be painful
+- Bug 1190 - Suppress hello if bcast was sent within the last hello interval
 - Bug 1296 - Enhancement in Ipv[4,6]RoutingHelper
 - Bug 1390 - ICMPv6 Redirect are handled correctly only for /64 networks
+- Bug 1522 - Hidden node scenario leads to ARP failure
 - Bug 1643 - NdiscCache creation and existence checks
 - Bug 1646 - ICMPv6 Redirect are sent from global address instead of link-local
 - Bug 1662 - m_type not set for Ipv6OptionRouterAlertHeader
@@ -79,6 +81,7 @@
 - Bug 1738 - strict aliasing compiler bug
 - Bug 1742 - IPv6 HbH and Dst Extension Header size is not correctly calculated
 - Bug 1752 - RadvdInterface m_defaultLifeTime is set to milliseconds instead of seconds
+- Bug 1753 - Halting Issue with DistributedSimulatorImpl
 - Bug 1754 - Missing GIL lock in generated callback destructor
 
 Known issues
--- a/src/internet/helper/internet-stack-helper.cc	Thu Aug 15 13:04:01 2013 -0700
+++ b/src/internet/helper/internet-stack-helper.cc	Fri Aug 16 02:21:51 2013 +0200
@@ -234,7 +234,10 @@
   : m_routing (0),
     m_routingv6 (0),
     m_ipv4Enabled (true),
-    m_ipv6Enabled (true)
+    m_ipv6Enabled (true),
+    m_ipv4ArpJitterEnabled (true),
+    m_ipv6NsRsEnabled (true)
+
 {
   Initialize ();
 }
@@ -269,6 +272,8 @@
   m_ipv4Enabled = o.m_ipv4Enabled;
   m_ipv6Enabled = o.m_ipv6Enabled;
   m_tcpFactory = o.m_tcpFactory;
+  m_ipv4ArpJitterEnabled = o.m_ipv4ArpJitterEnabled;
+  m_ipv6NsRsEnabled = o.m_ipv6NsRsEnabled;
 }
 
 InternetStackHelper &
@@ -292,6 +297,8 @@
   m_routingv6 = 0;
   m_ipv4Enabled = true;
   m_ipv6Enabled = true;
+  m_ipv4ArpJitterEnabled = true;
+  m_ipv6NsRsEnabled = true;
   Initialize ();
 }
 
@@ -320,6 +327,16 @@
   m_ipv6Enabled = enable;
 }
 
+void InternetStackHelper::SetIpv4ArpJitter (bool enable)
+{
+  m_ipv4ArpJitterEnabled = enable;
+}
+
+void InternetStackHelper::SetIpv6NsRsJitter (bool enable)
+{
+  m_ipv6NsRsEnabled = enable;
+}
+
 int64_t
 InternetStackHelper::AssignStreams (NodeContainer c, int64_t stream)
 {
@@ -417,6 +434,11 @@
       CreateAndAggregateObjectFromTypeId (node, "ns3::ArpL3Protocol");
       CreateAndAggregateObjectFromTypeId (node, "ns3::Ipv4L3Protocol");
       CreateAndAggregateObjectFromTypeId (node, "ns3::Icmpv4L4Protocol");
+      if (m_ipv4ArpJitterEnabled == false)
+        {
+          Ptr<ArpL3Protocol> arp = node->GetObject<ArpL3Protocol> ();
+          arp->SetAttribute ("RequestJitter", StringValue ("ns3::ConstantRandomVariable[Constant=0.0]"));
+        }
       // Set routing
       Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
       Ptr<Ipv4RoutingProtocol> ipv4Routing = m_routing->Create (node);
@@ -435,6 +457,11 @@
 
       CreateAndAggregateObjectFromTypeId (node, "ns3::Ipv6L3Protocol");
       CreateAndAggregateObjectFromTypeId (node, "ns3::Icmpv6L4Protocol");
+      if (m_ipv6NsRsEnabled == false)
+        {
+          Ptr<Icmpv6L4Protocol> icmpv6l4 = node->GetObject<Icmpv6L4Protocol> ();
+          icmpv6l4->SetAttribute ("SolicitationJitter", StringValue ("ns3::ConstantRandomVariable[Constant=0.0]"));
+        }
       // Set routing
       Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
       Ptr<Ipv6RoutingProtocol> ipv6Routing = m_routingv6->Create (node);
--- a/src/internet/helper/internet-stack-helper.h	Thu Aug 15 13:04:01 2013 -0700
+++ b/src/internet/helper/internet-stack-helper.h	Fri Aug 16 02:21:51 2013 +0200
@@ -178,7 +178,19 @@
    */
   void SetIpv6StackInstall (bool enable);
 
- /**
+  /**
+   * \brief Enable/disable IPv4 ARP Jitter.
+   * \param enable enable state
+   */
+  void SetIpv4ArpJitter (bool enable);
+
+  /**
+   * \brief Enable/disable IPv6 NS and RS Jitter.
+   * \param enable enable state
+   */
+  void SetIpv6NsRsJitter (bool enable);
+
+  /**
   * Assign a fixed random variable stream number to the random variables
   * used by this model.  Return the number of streams (possibly zero) that
   * have been assigned.  The Install() method should have previously been
@@ -303,6 +315,16 @@
    * \brief IPv6 install state (enabled/disabled) ?
    */
   bool m_ipv6Enabled;
+
+  /**
+   * \brief IPv4 ARP Jitter state (enabled/disabled) ?
+   */
+  bool m_ipv4ArpJitterEnabled;
+
+  /**
+   * \brief IPv6 IPv6 NS and RS Jitter state (enabled/disabled) ?
+   */
+  bool m_ipv6NsRsEnabled;
 };
 
 } // namespace ns3