From 47fe0d47477c759953bf252010e65097f4f3d046 Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Thu, 19 Mar 2015 20:03:57 -0700 Subject: [PATCH] bug 1982: AODV uses random variables before seeds can be set --- src/aodv/model/aodv-routing-protocol.cc | 23 ++++++++++++++++------- src/aodv/model/aodv-routing-protocol.h | 2 ++ src/internet/model/ipv4-list-routing.h | 4 ++-- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/aodv/model/aodv-routing-protocol.cc b/src/aodv/model/aodv-routing-protocol.cc index 8ef79df94..37e1caa4a 100644 --- a/src/aodv/model/aodv-routing-protocol.cc +++ b/src/aodv/model/aodv-routing-protocol.cc @@ -582,12 +582,6 @@ RoutingProtocol::SetIpv4 (Ptr ipv4) NS_ASSERT (ipv4 != 0); NS_ASSERT (m_ipv4 == 0); - if (EnableHello) - { - m_htimer.SetFunction (&RoutingProtocol::HelloTimerExpire, this); - m_htimer.Schedule (MilliSeconds (m_uniformRandomVariable->GetInteger (0, 100))); - } - m_ipv4 = ipv4; // Create lo route. It is asserted that the only one interface up for now is loopback @@ -1930,5 +1924,20 @@ RoutingProtocol::FindSubnetBroadcastSocketWithInterfaceAddress (Ipv4InterfaceAdd return socket; } +void +RoutingProtocol::DoInitialize (void) +{ + NS_LOG_FUNCTION (this); + uint32_t startTime; + if (EnableHello) + { + m_htimer.SetFunction (&RoutingProtocol::HelloTimerExpire, this); + startTime = m_uniformRandomVariable->GetInteger (0, 100); + NS_LOG_DEBUG ("Starting at time " << startTime << "ms"); + m_htimer.Schedule (MilliSeconds (startTime)); + } + Ipv4RoutingProtocol::DoInitialize (); } -} + +} //namespace aodv +} //namespace ns3 diff --git a/src/aodv/model/aodv-routing-protocol.h b/src/aodv/model/aodv-routing-protocol.h index e2346b99e..c9925c4cf 100644 --- a/src/aodv/model/aodv-routing-protocol.h +++ b/src/aodv/model/aodv-routing-protocol.h @@ -97,6 +97,8 @@ public: */ int64_t AssignStreams (int64_t stream); +protected: + virtual void DoInitialize (void); private: // Protocol parameters. diff --git a/src/internet/model/ipv4-list-routing.h b/src/internet/model/ipv4-list-routing.h index e9f6cef07..62a6a9e5b 100644 --- a/src/internet/model/ipv4-list-routing.h +++ b/src/internet/model/ipv4-list-routing.h @@ -93,8 +93,8 @@ public: virtual void PrintRoutingTable (Ptr stream) const; protected: - void DoDispose (void); - void DoInitialize (void); + virtual void DoDispose (void); + virtual void DoInitialize (void); private: /** * \brief Container identifying an IPv4 Routing Protocol entry in the list.