1 /* Copyright (c) 2019-2022. 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"
7 #include "xbt/config.hpp"
10 #include "src/kernel/resource/WifiLinkImpl.hpp"
12 XBT_LOG_NEW_DEFAULT_CATEGORY(simulator, "[usage] wifi_usage <platform-file>");
14 void run_ping_test(const char* src, const char* dest, int data_size);
16 /* We need a separate actor so that it can sleep after each test */
17 static void main_dispatcher()
19 bool crosstraffic = simgrid::kernel::resource::NetworkModel::cfg_crosstraffic;
21 XBT_INFO("TEST: Send from a station to a node on the wired network after the AP.");
22 XBT_INFO("----------------------------------------------------------------------");
23 XBT_INFO("Since AP1 is the limiting link, we have the following constraint for AP1:");
25 XBT_INFO("1.05/r_STA1 * rho_STA1 <= 1 (1.05 instead of 1 because of cross-traffic)");
26 XBT_INFO("We should thus have:");
27 XBT_INFO(" mu = 1 / [ 1/1 * 1.05/54Mbps ] = 51428571");
28 XBT_INFO(" simulation_time = 1000*8 / mu = 0.0001555556s (rounded to 0.000156s in SimGrid)");
30 XBT_INFO("1/r_STA1 * rho_STA1 <= 1 (there is no cross-traffic)");
31 XBT_INFO("We should thus have:");
32 XBT_INFO(" mu = 1 / [ 1/1 * 1/54Mbps ] = 5.4e+07");
33 XBT_INFO(" simulation_time = 1000*8 / mu = 0.0001481481s");
35 run_ping_test("Station 1", "node1", 1000);
37 XBT_INFO("TEST: Send from a station to another station on the same AP.");
38 XBT_INFO("------------------------------------------------------------");
39 XBT_INFO("We have the following constraint for AP1:");
41 XBT_INFO("1.05/r_STA1 * rho_STA1 + 1.05/r_STA2 * rho_2 <= 1 (1.05 instead of 1 because of cross-traffic)");
42 XBT_INFO("We should thus have:");
43 XBT_INFO(" mu = 1 / [ 1/2 * 1.05/54Mbps + 1.05/54Mbps ] = 51428571");
44 XBT_INFO(" simulation_time = 1000*8 / [ mu / 2 ] = 0.0003111111s");
46 XBT_INFO("1/r_STA1 * rho_STA1 + 1/r_STA2 * rho_2 <= 1 (there is no cross-traffic)");
47 XBT_INFO(" mu = 1 / [ 1/2 * 1/54Mbps + 1/54Mbps ] = 5.4e+07");
48 XBT_INFO(" simulation_time = 1000*8 / [ mu / 2 ] = 0.0002962963s");
50 run_ping_test("Station 1", "Station 2", 1000);
53 int main(int argc, char** argv)
55 simgrid::s4u::Engine engine(&argc, argv);
56 engine.load_platform(argv[1]);
57 simgrid::s4u::Actor::create("dispatcher", engine.host_by_name("node1"), main_dispatcher);
63 void run_ping_test(const char* src, const char* dest, int data_size)
65 auto* mailbox = simgrid::s4u::Mailbox::by_name("Test");
67 simgrid::s4u::Actor::create("sender", simgrid::s4u::Host::by_name(src), [mailbox, dest, data_size]() {
68 double start_time = simgrid::s4u::Engine::get_clock();
69 static std::string message = "message";
70 mailbox->put(&message, data_size);
71 double end_time = simgrid::s4u::Engine::get_clock();
72 XBT_INFO("Actual result: Sending %d bytes from '%s' to '%s' takes %f seconds.", data_size,
73 simgrid::s4u::this_actor::get_host()->get_cname(), dest, end_time - start_time);
75 simgrid::s4u::Actor::create("receiver", simgrid::s4u::Host::by_name(dest),
76 [mailbox]() { mailbox->get<std::string>(); });
77 const auto* ap1 = simgrid::s4u::Link::by_name("AP1");
78 ap1->set_host_wifi_rate(simgrid::s4u::Host::by_name(src), 0);
79 ap1->set_host_wifi_rate(simgrid::s4u::Host::by_name(dest), 0);
80 simgrid::s4u::this_actor::sleep_for(10);