Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
directly store the ns3Node, don't rely on a num ID to find it later on
authorMartin Quinson <martin.quinson@loria.fr>
Wed, 31 Jan 2018 23:03:29 +0000 (00:03 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Wed, 31 Jan 2018 23:03:29 +0000 (00:03 +0100)
src/surf/network_ns3.cpp
src/surf/ns3/ns3_interface.hpp

index ea97b5f..8cd88b5 100644 (file)
@@ -48,9 +48,9 @@ simgrid::xbt::Extension<simgrid::kernel::routing::NetPoint, NetPointNs3> NetPoin
 
 NetPointNs3::NetPointNs3()
 {
-  ns3::Ptr<ns3::Node> node = ns3::CreateObject<ns3::Node>(0);
-  stack.Install(node);
-  nodes.Add(node);
+  ns3Node_ = ns3::CreateObject<ns3::Node>(0);
+  stack.Install(ns3Node_);
+  nodes.Add(ns3Node_);
   node_num = number_of_nodes++;
 }
 
@@ -156,6 +156,7 @@ NetworkNS3Model::NetworkNS3Model() : NetworkModel() {
     XBT_VERB("SimGrid's %s is known as node %d within NS3", pt->getCname(), pt->extension<NetPointNs3>()->node_num);
   });
   simgrid::surf::on_cluster.connect(&clusterCreation_cb);
+
   simgrid::s4u::onPlatformCreated.connect(&postparse_cb);
   simgrid::s4u::NetZone::onRouteCreation.connect(&routeCreation_cb);
 }
@@ -345,8 +346,8 @@ void ns3_create_flow(simgrid::s4u::Host* src, simgrid::s4u::Host* dst,
   unsigned int node1 = src->pimpl_netpoint->extension<NetPointNs3>()->node_num;
   unsigned int node2 = dst->pimpl_netpoint->extension<NetPointNs3>()->node_num;
 
-  ns3::Ptr<ns3::Node> src_node = nodes.Get(node1);
-  ns3::Ptr<ns3::Node> dst_node = nodes.Get(node2);
+  ns3::Ptr<ns3::Node> src_node = src->pimpl_netpoint->extension<NetPointNs3>()->ns3Node_;
+  ns3::Ptr<ns3::Node> dst_node = dst->pimpl_netpoint->extension<NetPointNs3>()->ns3Node_;
 
   xbt_assert(node2 < IPV4addr.size(), "Element %s is unknown to NS3. Is it connected to any one-hop link?",
              dst->pimpl_netpoint->getCname());
@@ -453,8 +454,8 @@ void ns3_add_link(NetPointNs3* src, NetPointNs3* dst, double bw, double lat) {
   int srcNum = src->node_num;
   int dstNum = dst->node_num;
 
-  ns3::Ptr<ns3::Node> a = nodes.Get(srcNum);
-  ns3::Ptr<ns3::Node> b = nodes.Get(dstNum);
+  ns3::Ptr<ns3::Node> a = src->ns3Node_;
+  ns3::Ptr<ns3::Node> b = dst->ns3Node_;
 
   XBT_DEBUG("\tAdd PTP from %d to %d bw:'%f Bps' lat:'%fs'", srcNum, dstNum, bw, lat);
   pointToPoint.SetDeviceAttribute("DataRate",
index 8b1bc35..dfee129 100644 (file)
@@ -6,6 +6,7 @@
 #ifndef NS3_INTERFACE_HPP
 #define NS3_INTERFACE_HPP
 
+#include "ns3/ptr.h"
 #include "simgrid/s4u/Host.hpp"
 
 namespace simgrid {
@@ -13,6 +14,9 @@ namespace surf {
 class NetworkNS3Action;
 }
 }
+namespace ns3 {
+class Node;
+}
 
 class NetPointNs3 {
 public:
@@ -20,6 +24,7 @@ public:
 
   explicit NetPointNs3();
   int node_num;
+  ns3::Ptr<ns3::Node> ns3Node_;
 };
 
 extern "C" {