Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
d3ec01910019ebc08db3e9ccd8b03a568c95ad83
[simgrid.git] / examples / cpp / network-ns3-wifi / s4u-network-ns3-wifi.cpp
1 /* Copyright (c) 2007-2022. The SimGrid Team. All rights reserved.          */
2
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. */
5
6 #include "simgrid/s4u.hpp"
7 #include <iostream>
8 #include <iomanip>
9
10 XBT_LOG_NEW_DEFAULT_CATEGORY(ns3_wifi_example, "Messages specific for this s4u example");
11 namespace sg4 = simgrid::s4u;
12
13 class Message
14 {
15 public:
16   std::string sender;
17   int size;
18
19   Message(const std::string& sender_, int size_) : sender(sender_), size(size_) {}
20 };
21
22 static void sender(const std::string& mailbox, int msg_size, unsigned sleep_time)
23 {
24   sg4::this_actor::sleep_for(sleep_time);
25   auto* mbox = sg4::Mailbox::by_name(mailbox);
26   auto* msg  = new Message(sg4::this_actor::get_host()->get_name(), msg_size);
27   mbox->put(msg, msg_size);
28 }
29
30 static void receiver(const std::string& mailbox)
31 {
32   auto* mbox = sg4::Mailbox::by_name(mailbox);
33   auto msg   = mbox->get_unique<Message>();
34   XBT_INFO("[%s] %s received %d bytes from %s", mailbox.c_str(), sg4::this_actor::get_host()->get_name().c_str(),
35            msg->size, msg->sender.c_str());
36 }
37
38 int main(int argc, char* argv[])
39 {
40   sg4::Engine e(&argc, argv);
41
42   e.load_platform(argv[1]);
43   int msg_size = 1e5;
44
45   /* Communication between STA in the same wifi zone */
46   sg4::Actor::create("sender", e.host_by_name("STA0-0"), sender, "1", msg_size, 10);
47   sg4::Actor::create("receiver", e.host_by_name("STA0-1"), receiver, "1");
48   sg4::Actor::create("sender", e.host_by_name("STA0-1"), sender, "2", msg_size, 20);
49   sg4::Actor::create("receiver", e.host_by_name("STA0-0"), receiver, "2");
50   sg4::Actor::create("sender", e.host_by_name("STA1-1"), sender, "3", msg_size, 30);
51   sg4::Actor::create("receiver", e.host_by_name("STA1-2"), receiver, "3");
52   sg4::Actor::create("sender", e.host_by_name("STA1-2"), sender, "4", msg_size, 40);
53   sg4::Actor::create("receiver", e.host_by_name("STA1-1"), receiver, "4");
54
55   /* Communication between STA of different wifi zones */
56   sg4::Actor::create("sender", e.host_by_name("STA0-0"), sender, "5", msg_size, 50);
57   sg4::Actor::create("receiver", e.host_by_name("STA1-0"), receiver, "5");
58   sg4::Actor::create("sender", e.host_by_name("STA1-0"), sender, "6", msg_size, 60);
59   sg4::Actor::create("receiver", e.host_by_name("STA0-0"), receiver, "6");
60   sg4::Actor::create("sender", e.host_by_name("STA0-1"), sender, "7", msg_size, 70);
61   sg4::Actor::create("receiver", e.host_by_name("STA1-2"), receiver, "7");
62   sg4::Actor::create("sender", e.host_by_name("STA1-2"), sender, "8", msg_size, 80);
63   sg4::Actor::create("receiver", e.host_by_name("STA0-1"), receiver, "8");
64
65   e.run();
66   return 0;
67 }