-/* Copyright (c) 2017-2021. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2017-2022. 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/Link.hpp>
#include "src/kernel/activity/CommImpl.hpp"
-#include "src/surf/network_interface.hpp"
-#include "src/surf/network_wifi.hpp"
+#include "src/kernel/resource/StandardLinkImpl.hpp"
+#include "src/kernel/resource/WifiLinkImpl.hpp"
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
* This is the WiFi energy plugin, accounting for the dissipated energy of WiFi links.
*/
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(link_energy_wifi, surf, "Logging specific to the link energy wifi plugin");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(link_energy_wifi, kernel, "Logging specific to the link energy wifi plugin");
namespace simgrid {
namespace plugin {
class XBT_PRIVATE LinkEnergyWifi {
// associative array keeping size of data already sent for a given flow (required for interleaved actions)
- std::map<kernel::resource::NetworkWifiAction*, std::pair<int, double>> flowTmp{};
+ std::map<kernel::resource::WifiLinkAction*, std::pair<int, double>> flowTmp{};
// WiFi link the plugin instance is attached to
s4u::Link* link_{};
void LinkEnergyWifi::update_destroy()
{
- auto const* wifi_link = static_cast<kernel::resource::NetworkWifiLink*>(link_->get_impl());
+ auto const* wifi_link = static_cast<kernel::resource::WifiLinkImpl*>(link_->get_impl());
double duration = simgrid::s4u::Engine::get_clock() - prev_update_;
prev_update_ = simgrid::s4u::Engine::get_clock();
if(duration < 1e-6)
return;
- auto const* wifi_link = static_cast<kernel::resource::NetworkWifiLink*>(link_->get_impl());
+ auto const* wifi_link = static_cast<kernel::resource::WifiLinkImpl*>(link_->get_impl());
const kernel::lmm::Element* elem = nullptr;
*/
double durUsage = 0;
while (const auto* var = wifi_link->get_constraint()->get_variable(&elem)) {
- auto* action = static_cast<kernel::resource::NetworkWifiAction*>(var->get_id());
+ auto* action = static_cast<kernel::resource::WifiLinkAction*>(var->get_id());
XBT_DEBUG("cost: %f action value: %f link rate 1: %f link rate 2: %f", action->get_cost(), action->get_rate(),
wifi_link->get_host_rate(&action->get_src()), wifi_link->get_host_rate(&action->get_dst()));
/* **************************** events callback *************************** */
static void on_communication(const simgrid::kernel::activity::CommImpl& comm)
{
- for (auto* link : comm.get_traversed_links()) {
+ for (const auto* link : comm.get_traversed_links()) {
if (link != nullptr && link->get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::WIFI) {
auto* link_energy = link->extension<LinkEnergyWifi>();
XBT_DEBUG("Update %s on Comm Start/End", link->get_cname());
* - Link::on_communication_state_change: to account for the energy when communications are updated
* - CommImpl::on_start and CommImpl::on_completion: to account for the energy during communications
*/
- simgrid::s4u::Link::on_creation.connect([](simgrid::s4u::Link& link) {
+ simgrid::s4u::Link::on_creation_cb([](simgrid::s4u::Link& link) {
// verify the link is appropriate to WiFi energy computations
if (link.get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::WIFI) {
XBT_DEBUG("Wifi Link: %s, initialization of wifi energy plugin", link.get_cname());
}
});
- simgrid::s4u::Link::on_destruction.connect([](simgrid::s4u::Link const& link) {
+ simgrid::s4u::Link::on_destruction_cb([](simgrid::s4u::Link const& link) {
// output energy values if WiFi link
if (link.get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::WIFI) {
link.extension<LinkEnergyWifi>()->update_destroy();
}
});
- simgrid::s4u::Link::on_communication_state_change.connect(
- [](simgrid::kernel::resource::NetworkAction const& action,
- simgrid::kernel::resource::Action::State /* previous */) {
- // update WiFi links encountered during the communication
- for (auto const* link : action.get_links()) {
- if (link != nullptr && link->get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::WIFI) {
- link->get_iface()->extension<LinkEnergyWifi>()->update();
- }
- }
- });
+ simgrid::s4u::Link::on_communication_state_change_cb([](simgrid::kernel::resource::NetworkAction const& action,
+ simgrid::kernel::resource::Action::State /* previous */) {
+ // update WiFi links encountered during the communication
+ for (auto const* link : action.get_links()) {
+ if (link != nullptr && link->get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::WIFI) {
+ link->get_iface()->extension<LinkEnergyWifi>()->update();
+ }
+ }
+ });
simgrid::kernel::activity::CommImpl::on_start.connect(&on_communication);
simgrid::kernel::activity::CommImpl::on_completion.connect(&on_communication);