Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' into 'master'
[simgrid.git] / src / surf / network_ns3.cpp
index fdcf7dda59aac83ea4092aedea3fe9ee4fdff31d..8bad9179dc3d75a01aa484b77af44eb07b2d1c39 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2020. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2007-2021. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -37,7 +37,7 @@
 #include "src/surf/xml/platf_private.hpp"
 #include "surf/surf.hpp"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ns3, surf, "Logging specific to the SURF network ns-3 module");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(res_ns3, res_network, "Network model based on ns-3");
 
 /*****************
  * Crude globals *
@@ -53,7 +53,11 @@ static int number_of_networks = 1;
 
 /* wifi globals */
 static ns3::WifiHelper wifi;
-static ns3::YansWifiPhyHelper wifiPhy         = ns3::YansWifiPhyHelper::Default();
+#if NS3_MINOR_VERSION < 33
+static ns3::YansWifiPhyHelper wifiPhy = ns3::YansWifiPhyHelper::Default();
+#else
+static ns3::YansWifiPhyHelper wifiPhy;
+#endif
 static ns3::YansWifiChannelHelper wifiChannel = ns3::YansWifiChannelHelper::Default();
 static ns3::WifiMacHelper wifiMac;
 static ns3::MobilityHelper mobility;
@@ -72,6 +76,10 @@ NetPointNs3::NetPointNs3() : ns3_node_(ns3::CreateObject<ns3::Node>(0))
   stack.Install(ns3_node_);
 }
 
+void resumeWifiDevice(ns3::Ptr<ns3::WifiNetDevice> device) {
+    device->GetPhy()->ResumeFromOff();
+}
+
 /*************
  * Callbacks *
  *************/
@@ -140,6 +148,18 @@ static void zoneCreation_cb(simgrid::s4u::NetZone const& zone) {
         netDevices.Add(wifi.Install(wifiPhy, wifiMac, station_ns3_node));
     }
 
+    const char* start_time = wifizone->get_property("start_time");
+    int start_time_value = start_time ? atoi(start_time) : 0;
+    auto resume = [](ns3::Ptr<ns3::WifiNetDevice> device){device->GetPhy()->ResumeFromOff();};
+    for (int i = 0; i < netDevices.GetN(); i++) {
+        ns3::Ptr<ns3::WifiNetDevice> device = ns3::StaticCast<ns3::WifiNetDevice>(netDevices.Get(i));
+        device->GetPhy()->SetOffMode();
+        ns3::Simulator::Schedule(
+            ns3::Seconds(start_time_value),
+            &resumeWifiDevice,
+            device);
+    }
+
     ns3::Config::Set("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelWidth", ns3::UintegerValue(40));
 
     mobility.SetPositionAllocator(positionAllocS);
@@ -402,7 +422,7 @@ void NetworkNS3Model::update_actions_state(double now, double delta)
     ns3_socket = socket_to_destroy.back();
     socket_to_destroy.pop_back();
     SgFlow* flow = flow_from_sock.at(ns3_socket);
-    if (XBT_LOG_ISENABLED(ns3, xbt_log_priority_debug)) {
+    if (XBT_LOG_ISENABLED(res_ns3, xbt_log_priority_debug)) {
       XBT_DEBUG("Removing socket %s of action %p", ns3_socket.c_str(), flow->action_);
     }
     delete flow;