.. autodoxymethod:: simgrid::s4u::Link::set_latency_profile(kernel::profile::Profile *profile)
.. autodoxymethod:: simgrid::s4u::Link::set_state_profile(kernel::profile::Profile *profile)
+WIFI links
+----------
+
+.. tabs::
+
+ .. group-tab:: C++
+
+ .. autodoxymethod:: simgrid::s4u::Link::set_host_wifi_rate(s4u::Host* host, int level)
+
Signals
-------
/** @brief Describes how the link is shared between flows */
SharingPolicy get_sharing_policy() const;
- /** @brief Returns the current load (in flops per second) */
+ /** @brief Set the level of communication speed of the given host on this wifi link.
+ *
+ * The bandwidth of a wifi link for a given host depends on its SNR (signal to noise ratio),
+ * which ultimately depends on the distance between the host and the station and the material between them.
+ *
+ * This is modeled in SimGrid by providing several bandwidths to wifi links, one per SNR level (just provide
+ * comma-separated values in the XML file). By default, the first level in the list is used, but you can use the
+ * current function to specify that a given host uses another level of bandwidth. This can be used to take the
+ * location of hosts into account, or even to model mobility in your SimGrid simulation.
+ *
+ * Note that this function asserts that the link is actually a wifi link */
+ void set_host_wifi_rate(s4u::Host* host, int level);
+
+ /** @brief Returns the current load (in bytes per second) */
double get_usage() const;
/** @brief Check if the Link is used (at least one flow uses the link) */
#include "simgrid/simix.hpp"
#include "src/kernel/lmm/maxmin.hpp"
#include "src/surf/network_interface.hpp"
+#include "src/surf/network_wifi.hpp"
#include "xbt/log.h"
namespace simgrid {
return this->pimpl_->get_sharing_policy();
}
+void Link::set_host_wifi_rate(s4u::Host* host, int level)
+{
+ xbt_assert(pimpl_->get_sharing_policy() == Link::SharingPolicy::WIFI, "Link %s does not seem to be a wifi link.",
+ get_cname());
+ auto* wlink = dynamic_cast<kernel::resource::NetworkWifiLink*>(pimpl_);
+ xbt_assert(wlink != nullptr, "Cannot convert link %s into a wifi link.", get_cname());
+ wlink->set_host_rate(host, level);
+}
+
double Link::get_usage() const
{
return this->pimpl_->get_constraint()->get_usage();
#include "xbt/config.hpp"
#include "xbt/log.h"
-#include "src/surf/network_wifi.hpp"
+#include "src/surf/network_interface.hpp"
XBT_LOG_NEW_DEFAULT_CATEGORY(simulator, "[usage] wifi_usage <platform-file>");
simgrid::s4u::this_actor::get_host()->get_cname(), dest, end_time - start_time);
});
simgrid::s4u::Actor::create("receiver", simgrid::s4u::Host::by_name(dest), [mailbox]() { mailbox->get(); });
- auto* l = (simgrid::kernel::resource::NetworkWifiLink*)simgrid::s4u::Link::by_name("AP1")->get_impl();
- l->set_host_rate(simgrid::s4u::Host::by_name(src), 0);
- l->set_host_rate(simgrid::s4u::Host::by_name(dest), 0);
+ auto* ap1 = simgrid::s4u::Link::by_name("AP1");
+ ap1->set_host_wifi_rate(simgrid::s4u::Host::by_name(src), 0);
+ ap1->set_host_wifi_rate(simgrid::s4u::Host::by_name(dest), 0);
simgrid::s4u::this_actor::sleep_for(10);
XBT_INFO("\n");
}