diff --git a/src/click/model/ipv4-click-routing.cc b/src/click/model/ipv4-click-routing.cc index cba7bcf08..417a3ba8a 100644 --- a/src/click/model/ipv4-click-routing.cc +++ b/src/click/model/ipv4-click-routing.cc @@ -24,6 +24,7 @@ #include "ns3/node.h" #include "ns3/simulator.h" #include "ns3/log.h" +#include "ns3/random-variable-stream.h" #include "ns3/mac48-address.h" #include "ns3/ipv4-interface.h" #include "ns3/ipv4-l3-click-protocol.h" @@ -63,6 +64,7 @@ Ipv4ClickRouting::Ipv4ClickRouting () : m_nonDefaultName (false), m_ipv4 (0) { + m_random = CreateObject (); } Ipv4ClickRouting::~Ipv4ClickRouting () @@ -111,6 +113,12 @@ Ipv4ClickRouting::SetIpv4 (Ptr ipv4) m_ipv4 = ipv4; } +Ptr +Ipv4ClickRouting::GetRandomVariable (void) +{ + return m_random; +} + void Ipv4ClickRouting::DoDispose () { @@ -606,7 +614,7 @@ int simclick_sim_command (simclick_node_t *simnode, int cmd, ...) case SIMCLICK_SUPPORTS: { int othercmd = va_arg (val, int); - retval = (othercmd >= SIMCLICK_VERSION && othercmd <= SIMCLICK_GET_NODE_ID); + retval = (othercmd >= SIMCLICK_VERSION && othercmd <= SIMCLICK_GET_RANDOM_INT); break; } @@ -738,6 +746,17 @@ int simclick_sim_command (simclick_node_t *simnode, int cmd, ...) NS_LOG_DEBUG (clickInstance->GetNodeName () << " Received a call for SIMCLICK_GET_NODE_ID"); break; } + + case SIMCLICK_GET_RANDOM_INT: + { + uint32_t *randomValue = va_arg (val, uint32_t *); + uint32_t maxValue = va_arg (val, uint32_t); + + *randomValue = static_cast (clickInstance->GetRandomVariable ()->GetValue (0.0, static_cast (maxValue) + 1.0)); + retval = 0; + NS_LOG_DEBUG (clickInstance->GetNodeName () << " SIMCLICK_RANDOM: " << *randomValue << " " << maxValue << " " << ns3::Simulator::Now ()); + break; + } } return retval; } diff --git a/src/click/model/ipv4-click-routing.h b/src/click/model/ipv4-click-routing.h index bce625be3..292ce9b45 100644 --- a/src/click/model/ipv4-click-routing.h +++ b/src/click/model/ipv4-click-routing.h @@ -44,6 +44,8 @@ namespace ns3 { * This section documents the API of the ns-3 click module. For a generic functional description, please refer to the ns-3 manual. */ +class UniformRandomVariable; + /** * \ingroup click * \brief Class to allow a node to use Click for external routing @@ -63,6 +65,7 @@ public: Ipv4ClickRouting (); virtual ~Ipv4ClickRouting (); + Ptr GetRandomVariable (void); protected: virtual void DoStart (void); @@ -255,6 +258,7 @@ private: bool m_nonDefaultName; Ptr m_ipv4; + Ptr m_random; #endif /* NS3_CLICK */ };