--- /dev/null
+<?xml version='1.0'?>
+
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+<platform version="4.1">
+ <AS id="AS0" routing="Full">
+
+ <!-- WIFI cell -->
+ <AS id="AS_AP1" routing="Cluster">
+ <host id="STA1" speed="100.0Mf,50.0Mf,20.0Mf">
+ </host>
+ <router id="AP1_ROUTER"/>
+
+ <!-- Access Point -->
+ <link id="AP1" sharing_policy="WIFI" bandwidth="54Mbps" latency="0ms">
+ </link>
+
+ <host_link id="STA1" up="AP1" down="AP1"/>
+ </AS>
+
+
+ <!-- NODE1 AS -->
+ <AS id="AS1" routing="Full">
+ <host id="NODE1" speed="100.0Mf,50.0Mf,20.0Mf">
+ </host>
+ </AS>
+
+
+ <!-- AS Routing -->
+ <link id="LINK1" sharing_policy="SHARED" bandwidth="100Mbps" latency="0ms">
+ </link>
+ <ASroute src="AS_AP1" dst="AS1" gw_src="AP1_ROUTER" gw_dst="NODE1">
+ <link_ctn id="LINK1" />
+ </ASroute>
+
+ </AS>
+</platform>
--- /dev/null
+<?xml version='1.0'?>
+
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+<platform version="4.1">
+ <AS id="AS0" routing="Cluster">
+ <host id="STA1" speed="100.0Mf,50.0Mf,20.0Mf">
+ </host>
+ <host id="STA2" speed="100.0Mf,50.0Mf,20.0Mf">
+ </host>
+ <router id="AP1_ROUTER"/>
+
+
+ <!-- Access Point -->
+ <link id="AP1" sharing_policy="WIFI" bandwidth="54Mbps" latency="0ms">
+ </link>
+
+ <host_link id="STA1" up="AP1" down="AP1"/>
+ <host_link id="STA2" up="AP1" down="AP1"/>
+
+ </AS>
+</platform>
--- /dev/null
+/* Copyright (c) 2017-2018. 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. */
+
+#include "simgrid/s4u.hpp"
+#include "xbt/log.h"
+
+#include "simgrid/msg.h"
+#include "src/surf/network_cm02.hpp"
+#include <exception>
+#include <iostream>
+#include <random>
+#include <string>
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(simulator, "[wifi_usage] 1STA-1LINK-1NODE-CT");
+
+void setup_simulation();
+static void flowActor(std::vector<std::string> args);
+
+/**
+ * Theory says:
+ * - AP1 is the most constraint constraint
+ * - When two STA communicates on the same AP we have the following AP constraint:
+ * 1.05/r_STA1 * rho_STA1 <= 1
+ * - Thus:
+ * mu = 1 / [ 1/1 * 1.05/54Mbps ] = 51428571
+ * simulation_time = 1000*8 / mu = 0.0001555556s
+ * BTW: SimGrid should give you: 0.000156s due to computation side effects
+ *
+ */
+int main(int argc, char** argv)
+{
+
+ // Build engine
+ simgrid::s4u::Engine engine(&argc, argv);
+ engine.load_platform(argv[1]);
+ setup_simulation();
+ engine.run();
+ XBT_INFO("Simulation took %fs", simgrid::s4u::Engine::get_clock());
+ return (0);
+}
+
+void setup_simulation()
+{
+
+ std::vector<std::string> args, noArgs;
+ args.push_back("NODE1");
+ args.push_back("1000");
+ simgrid::s4u::Actor::create("STA1", simgrid::s4u::Host::by_name("STA1"), flowActor, args);
+ simgrid::s4u::Actor::create("NODE1", simgrid::s4u::Host::by_name("NODE1"), flowActor, noArgs);
+ simgrid::kernel::resource::NetworkWifiLink* l =
+ (simgrid::kernel::resource::NetworkWifiLink*)simgrid::s4u::Link::by_name("AP1")->get_impl();
+ l->set_host_rate(simgrid::s4u::Host::by_name("STA1"), 0);
+}
+
+static void flowActor(std::vector<std::string> args)
+{
+ std::string selfName = simgrid::s4u::this_actor::get_host()->get_name();
+ simgrid::s4u::Mailbox* selfMailbox = simgrid::s4u::Mailbox::by_name(simgrid::s4u::this_actor::get_host()->get_name());
+
+ if (args.size() > 0) { // We should send
+ simgrid::s4u::Mailbox* dstMailbox = simgrid::s4u::Mailbox::by_name(args.at(0));
+
+ int dataSize = std::atoi(args.at(1).c_str());
+ double comStartTime = simgrid::s4u::Engine::get_clock();
+ dstMailbox->put(const_cast<char*>("message"), dataSize);
+ double comEndTime = simgrid::s4u::Engine::get_clock();
+ XBT_INFO("%s sent %d bytes to %s in %f seconds from %f to %f", selfName.c_str(), dataSize, args.at(0).c_str(),
+ comEndTime - comStartTime, comStartTime, comEndTime);
+ } else { // We should receive
+ selfMailbox->get();
+ }
+}
--- /dev/null
+#!/usr/bin/env tesh
+
+$ ${bindir:=.}/1STA-1LINK-1NODE-CT ${platfdir}/wifi/1STA-1LINK-1NODE.xml
+> [STA1:STA1:(1) 0.000156] [simulator/INFO] STA1 sent 1000 bytes to NODE1 in 0.000156 seconds from 0.000000 to 0.000156
+> [0.000156] [simulator/INFO] Simulation took 0.000156s
--- /dev/null
+/* Copyright (c) 2017-2018. 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. */
+
+#include "simgrid/s4u.hpp"
+#include "xbt/log.h"
+
+#include "simgrid/msg.h"
+#include "src/surf/network_cm02.hpp"
+#include <exception>
+#include <iostream>
+#include <random>
+#include <string>
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(simulator, "[wifi_usage] 1STA-1LINK-1NODE");
+
+void setup_simulation();
+static void flowActor(std::vector<std::string> args);
+
+/**
+ * Theory says:
+ * - AP1 is the most constraint constraint
+ * - When two STA communicates on the same AP we have the following AP constraint:
+ * 1/r_STA1 * rho_STA1 <= 1
+ * - Thus:
+ * mu = 1 / [ 1/1 * 1/54Mbps ] = 5.4e+07
+ * simulation_time = 1000*8 / mu = 0.0001481481s
+ *
+ */
+int main(int argc, char** argv)
+{
+
+ // Build engine
+ simgrid::s4u::Engine engine(&argc, argv);
+ engine.load_platform(argv[1]);
+ setup_simulation();
+ engine.run();
+ XBT_INFO("Simulation took %fs", simgrid::s4u::Engine::get_clock());
+
+ return (0);
+}
+
+void setup_simulation()
+{
+
+ std::vector<std::string> args, noArgs;
+ args.push_back("NODE1");
+ args.push_back("1000");
+ simgrid::s4u::Actor::create("STA1", simgrid::s4u::Host::by_name("STA1"), flowActor, args);
+ simgrid::s4u::Actor::create("NODE1", simgrid::s4u::Host::by_name("NODE1"), flowActor, noArgs);
+ simgrid::kernel::resource::NetworkWifiLink* l =
+ (simgrid::kernel::resource::NetworkWifiLink*)simgrid::s4u::Link::by_name("AP1")->get_impl();
+ l->set_host_rate(simgrid::s4u::Host::by_name("STA1"), 0);
+}
+
+static void flowActor(std::vector<std::string> args)
+{
+ std::string selfName = simgrid::s4u::this_actor::get_host()->get_name();
+ simgrid::s4u::Mailbox* selfMailbox = simgrid::s4u::Mailbox::by_name(simgrid::s4u::this_actor::get_host()->get_name());
+
+ if (args.size() > 0) { // We should send
+ simgrid::s4u::Mailbox* dstMailbox = simgrid::s4u::Mailbox::by_name(args.at(0));
+
+ int dataSize = std::atoi(args.at(1).c_str());
+ double comStartTime = simgrid::s4u::Engine::get_clock();
+ dstMailbox->put(const_cast<char*>("message"), dataSize);
+ double comEndTime = simgrid::s4u::Engine::get_clock();
+ XBT_INFO("%s sent %d bytes to %s in %f seconds from %f to %f", selfName.c_str(), dataSize, args.at(0).c_str(),
+ comEndTime - comStartTime, comStartTime, comEndTime);
+ } else { // We should receive
+ selfMailbox->get();
+ }
+}
--- /dev/null
+#!/usr/bin/env tesh
+
+$ ${bindir:=.}/1STA-1LINK-1NODE-NOCT ${platfdir}/wifi/1STA-1LINK-1NODE.xml --cfg=network/crosstraffic:0
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/crosstraffic' to '0'
+> [STA1:STA1:(1) 0.000148] [simulator/INFO] STA1 sent 1000 bytes to NODE1 in 0.000148 seconds from 0.000000 to 0.000148
+> [0.000148] [simulator/INFO] Simulation took 0.000148s
--- /dev/null
+/* Copyright (c) 2017-2018. 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. */
+
+#include "simgrid/msg.h"
+#include "simgrid/s4u.hpp"
+#include "src/surf/network_cm02.hpp"
+#include "xbt/log.h"
+#include <exception>
+#include <iostream>
+#include <random>
+#include <string>
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(simulator, "[wifi_usage] 2STA-1NODE");
+
+void setup_simulation();
+static void flowActor(std::vector<std::string> args);
+
+/**
+ * Theory says:
+ * - When two STA communicates on the same AP we have the following AP constraint:
+ * 1.05/r_STA1 * rho_STA1 + 1.05/r_STA2 * rho_2 <= 1
+ * - Thus:
+ * mu = 1 / [ 1/2 * 1.05/54Mbps + 1.05/54Mbps ] = 51428571
+ * simulation_time = 1000*8 / [ mu / 2 ] = 0.0003111111s
+ *
+ */
+int main(int argc, char** argv)
+{
+
+ // Build engine
+ simgrid::s4u::Engine engine(&argc, argv);
+ engine.load_platform(argv[1]);
+ setup_simulation();
+ engine.run();
+ XBT_INFO("Simulation took %fs", simgrid::s4u::Engine::get_clock());
+
+ return (0);
+}
+
+void setup_simulation()
+{
+
+ std::vector<std::string> args, noArgs;
+ args.push_back("STA2");
+ args.push_back("1000");
+ simgrid::s4u::Actor::create("STA1", simgrid::s4u::Host::by_name("STA1"), flowActor, args);
+ simgrid::s4u::Actor::create("STA2", simgrid::s4u::Host::by_name("STA2"), flowActor, noArgs);
+ simgrid::kernel::resource::NetworkWifiLink* l =
+ (simgrid::kernel::resource::NetworkWifiLink*)simgrid::s4u::Link::by_name("AP1")->get_impl();
+ l->set_host_rate(simgrid::s4u::Host::by_name("STA1"), 0);
+ l->set_host_rate(simgrid::s4u::Host::by_name("STA2"), 0);
+}
+
+static void flowActor(std::vector<std::string> args)
+{
+ std::string selfName = simgrid::s4u::this_actor::get_host()->get_name();
+ simgrid::s4u::Mailbox* selfMailbox = simgrid::s4u::Mailbox::by_name(simgrid::s4u::this_actor::get_host()->get_name());
+
+ if (args.size() > 0) { // We should send
+ simgrid::s4u::Mailbox* dstMailbox = simgrid::s4u::Mailbox::by_name(args.at(0));
+
+ int dataSize = std::atoi(args.at(1).c_str());
+ double comStartTime = simgrid::s4u::Engine::get_clock();
+ dstMailbox->put(const_cast<char*>("message"), dataSize);
+ double comEndTime = simgrid::s4u::Engine::get_clock();
+ XBT_INFO("%s sent %d bytes to %s in %f seconds from %f to %f", selfName.c_str(), dataSize, args.at(0).c_str(),
+ comEndTime - comStartTime, comStartTime, comEndTime);
+ } else { // We should receive
+ selfMailbox->get();
+ }
+}
--- /dev/null
+#!/usr/bin/env tesh
+
+$ ${bindir:=.}/2STA-CT ${platfdir}/wifi/2STA.xml
+> [STA1:STA1:(1) 0.000311] [simulator/INFO] STA1 sent 1000 bytes to STA2 in 0.000311 seconds from 0.000000 to 0.000311
+> [0.000311] [simulator/INFO] Simulation took 0.000311s
--- /dev/null
+/* Copyright (c) 2017-2018. 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. */
+
+#include "simgrid/msg.h"
+#include "simgrid/s4u.hpp"
+#include "src/surf/network_cm02.hpp"
+#include "xbt/log.h"
+#include <exception>
+#include <iostream>
+#include <random>
+#include <string>
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(simulator, "[wifi_usage] 2STA-1NODE");
+
+void setup_simulation();
+static void flowActor(std::vector<std::string> args);
+
+/**
+ * Theory says:
+ * - When two STA communicates on the same AP we have the following AP constraint:
+ * 1/r_STA1 * rho_STA1 + 1/r_STA2 * rho_2 <= 1
+ * - Thus:
+ * mu = 1 / [ 1/2 * 1/54Mbps + 1/54Mbps ] = 5.4e+07
+ * simulation_time = 1000*8 / [ mu / 2 ] = 0.0002962963s
+ *
+ */
+int main(int argc, char** argv)
+{
+
+ // Build engine
+ simgrid::s4u::Engine engine(&argc, argv);
+ engine.load_platform(argv[1]);
+ setup_simulation();
+ engine.run();
+ XBT_INFO("Simulation took %fs", simgrid::s4u::Engine::get_clock());
+
+ return (0);
+}
+
+void setup_simulation()
+{
+
+ std::vector<std::string> args, noArgs;
+ args.push_back("STA2");
+ args.push_back("1000");
+ simgrid::s4u::Actor::create("STA1", simgrid::s4u::Host::by_name("STA1"), flowActor, args);
+ simgrid::s4u::Actor::create("STA2", simgrid::s4u::Host::by_name("STA2"), flowActor, noArgs);
+ simgrid::kernel::resource::NetworkWifiLink* l =
+ (simgrid::kernel::resource::NetworkWifiLink*)simgrid::s4u::Link::by_name("AP1")->get_impl();
+ l->set_host_rate(simgrid::s4u::Host::by_name("STA1"), 0);
+ l->set_host_rate(simgrid::s4u::Host::by_name("STA2"), 0);
+}
+
+static void flowActor(std::vector<std::string> args)
+{
+ std::string selfName = simgrid::s4u::this_actor::get_host()->get_name();
+ simgrid::s4u::Mailbox* selfMailbox = simgrid::s4u::Mailbox::by_name(simgrid::s4u::this_actor::get_host()->get_name());
+
+ if (args.size() > 0) { // We should send
+ simgrid::s4u::Mailbox* dstMailbox = simgrid::s4u::Mailbox::by_name(args.at(0));
+
+ int dataSize = std::atoi(args.at(1).c_str());
+ double comStartTime = simgrid::s4u::Engine::get_clock();
+ dstMailbox->put(const_cast<char*>("message"), dataSize);
+ double comEndTime = simgrid::s4u::Engine::get_clock();
+ XBT_INFO("%s sent %d bytes to %s in %f seconds from %f to %f", selfName.c_str(), dataSize, args.at(0).c_str(),
+ comEndTime - comStartTime, comStartTime, comEndTime);
+ } else { // We should receive
+ selfMailbox->get();
+ }
+}
--- /dev/null
+#!/usr/bin/env tesh
+
+$ ${bindir:=.}/2STA-NOCT ${platfdir}/wifi/2STA.xml --cfg=network/crosstraffic:0
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/crosstraffic' to '0'
+> [STA1:STA1:(1) 0.000296] [simulator/INFO] STA1 sent 1000 bytes to STA2 in 0.000296 seconds from 0.000000 to 0.000296
+> [0.000296] [simulator/INFO] Simulation took 0.000296s