1 /* Copyright (c) 2017-2018. The SimGrid Team. All rights reserved. */
3 /* This program is free software; you can redistribute it and/or modify it
4 * under the terms of the license (GNU LGPL) which comes with this package. */
6 #include "simgrid/s4u.hpp"
9 #include "simgrid/msg.h"
10 #include "src/surf/network_cm02.hpp"
16 XBT_LOG_NEW_DEFAULT_CATEGORY(simulator, "[wifi_usage] 1STA-1LINK-1NODE-CT");
18 void setup_simulation();
19 static void flowActor(std::vector<std::string> args);
23 * - AP1 is the most constraint constraint
24 * - When two STA communicates on the same AP we have the following AP constraint:
25 * 1.05/r_STA1 * rho_STA1 <= 1
27 * mu = 1 / [ 1/1 * 1.05/54Mbps ] = 51428571
28 * simulation_time = 1000*8 / mu = 0.0001555556s
29 * BTW: SimGrid should give you: 0.000156s due to computation side effects
32 int main(int argc, char** argv)
36 simgrid::s4u::Engine engine(&argc, argv);
37 engine.load_platform(argv[1]);
40 XBT_INFO("Simulation took %fs", simgrid::s4u::Engine::get_clock());
44 void setup_simulation()
47 std::vector<std::string> args, noArgs;
48 args.push_back("NODE1");
49 args.push_back("1000");
50 simgrid::s4u::Actor::create("STA1", simgrid::s4u::Host::by_name("STA1"), flowActor, args);
51 simgrid::s4u::Actor::create("NODE1", simgrid::s4u::Host::by_name("NODE1"), flowActor, noArgs);
52 simgrid::kernel::resource::NetworkWifiLink* l =
53 (simgrid::kernel::resource::NetworkWifiLink*)simgrid::s4u::Link::by_name("AP1")->get_impl();
54 l->set_host_rate(simgrid::s4u::Host::by_name("STA1"), 0);
57 static void flowActor(std::vector<std::string> args)
59 std::string selfName = simgrid::s4u::this_actor::get_host()->get_name();
60 simgrid::s4u::Mailbox* selfMailbox = simgrid::s4u::Mailbox::by_name(simgrid::s4u::this_actor::get_host()->get_name());
62 if (args.size() > 0) { // We should send
63 simgrid::s4u::Mailbox* dstMailbox = simgrid::s4u::Mailbox::by_name(args.at(0));
65 int dataSize = std::atoi(args.at(1).c_str());
66 double comStartTime = simgrid::s4u::Engine::get_clock();
67 dstMailbox->put(const_cast<char*>("message"), dataSize);
68 double comEndTime = simgrid::s4u::Engine::get_clock();
69 XBT_INFO("%s sent %d bytes to %s in %f seconds from %f to %f", selfName.c_str(), dataSize, args.at(0).c_str(),
70 comEndTime - comStartTime, comStartTime, comEndTime);
71 } else { // We should receive