From: Martin Quinson Date: Sun, 20 Oct 2019 13:43:10 +0000 (+0200) Subject: split the wifi model into its own files X-Git-Tag: v3.25~503 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/0abff6931a0872390fe17485f39d5538c41353c5 split the wifi model into its own files --- diff --git a/src/surf/network_cm02.cpp b/src/surf/network_cm02.cpp index 36a5c499bb..708f0d1b7a 100644 --- a/src/surf/network_cm02.cpp +++ b/src/surf/network_cm02.cpp @@ -3,10 +3,11 @@ /* 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 "network_cm02.hpp" +#include "src/surf/network_cm02.hpp" #include "simgrid/s4u/Host.hpp" #include "simgrid/sg_config.hpp" #include "src/kernel/resource/profile/Event.hpp" +#include "src/surf/network_wifi.hpp" #include "src/surf/surf_interface.hpp" #include "surf/surf.hpp" @@ -93,10 +94,10 @@ NetworkCm02Model::NetworkCm02Model(kernel::lmm::System* (*make_new_lmm_system)(b LinkImpl* NetworkCm02Model::create_link(const std::string& name, const std::vector& bandwidths, double latency, s4u::Link::SharingPolicy policy) { - if (policy == s4u::Link::SharingPolicy::WIFI) { - return (new NetworkWifiLink(this, name, bandwidths, policy, get_maxmin_system())); - } - xbt_assert(bandwidths.size() == 1, "Non WIFI links must use only 1 bandwidth."); + if (policy == s4u::Link::SharingPolicy::WIFI) + return new NetworkWifiLink(this, name, bandwidths, policy, get_maxmin_system()); + + xbt_assert(bandwidths.size() == 1, "Non-WIFI links must use only 1 bandwidth."); return new NetworkCm02Link(this, name, bandwidths[0], latency, policy, get_maxmin_system()); } @@ -323,9 +324,8 @@ void NetworkCm02Link::apply_event(kernel::profile::Event* triggered, double valu } else if (triggered == state_event_) { if (value > 0) turn_on(); - else { + else turn_off(); - } tmgr_trace_event_unref(&state_event_); } else { xbt_die("Unknown event!\n"); @@ -392,46 +392,6 @@ void NetworkCm02Link::set_latency(double value) } } -NetworkWifiLink::NetworkWifiLink(NetworkCm02Model* model, const std::string& name, std::vector bandwidths, - s4u::Link::SharingPolicy policy, lmm::System* system) - : NetworkCm02Link( - model, name, 1 / sg_bandwidth_factor, 0, policy, - system) // Since link uses bw*sg_bandwidth_factor we should divide by sg_bw_factor to ensure that we have 1 as - // a bound in the lmm system -{ - for (auto bandwidth : bandwidths) { - bandwidths_.push_back({bandwidth, 1.0, nullptr}); - } -} - -void NetworkWifiLink::set_host_rate(s4u::Host* host, int rate_level) -{ - auto insert_done = host_rates_.insert(std::make_pair(host->get_name(), rate_level)); - if (insert_done.second == false) - insert_done.first->second = rate_level; -} - -double NetworkWifiLink::get_host_rate(sg_host_t host) -{ - std::map::iterator host_rates_it; - host_rates_it = host_rates_.find(host->get_name()); - - if (host_rates_it == host_rates_.end()) - return -1; - - int rate_id = host_rates_it->second; - xbt_assert(rate_id >= 0 && rate_id < (int)bandwidths_.size(), "Host \"%s\" has an invalid rate \"%d\"", - host->get_name().c_str(), rate_id); - - Metric rate = bandwidths_[rate_id]; - return rate.peak * rate.scale; -} - -s4u::Link::SharingPolicy NetworkWifiLink::get_sharing_policy() -{ - return s4u::Link::SharingPolicy::WIFI; -} - /********** * Action * **********/ diff --git a/src/surf/network_cm02.hpp b/src/surf/network_cm02.hpp index 01bce47a88..0999119fa9 100644 --- a/src/surf/network_cm02.hpp +++ b/src/surf/network_cm02.hpp @@ -53,23 +53,6 @@ public: void set_latency(double value) override; }; -class NetworkWifiLink : public NetworkCm02Link { - /** @brief Hold every rates association between host and links (host name, rates id) */ - std::map host_rates_; - - /** @brief A link can have several bandwidth attach to it (mostly use by wifi model) */ - std::vector bandwidths_; - -public: - NetworkWifiLink(NetworkCm02Model* model, const std::string& name, std::vector bandwidths, - s4u::Link::SharingPolicy policy, lmm::System* system); - - void set_host_rate(s4u::Host* host, int rate_level); - /** @brief Get the AP rate associated to the host (or -1 if not associated to the AP) */ - double get_host_rate(s4u::Host* host); - s4u::Link::SharingPolicy get_sharing_policy() override; -}; - /********** * Action * **********/ diff --git a/src/surf/network_wifi.cpp b/src/surf/network_wifi.cpp new file mode 100644 index 0000000000..f9ab144cd2 --- /dev/null +++ b/src/surf/network_wifi.cpp @@ -0,0 +1,68 @@ +/* Copyright (c) 2013-2019. 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 "network_wifi.hpp" +#include "simgrid/s4u/Host.hpp" +#include "src/surf/surf_interface.hpp" +/* +#include "simgrid/sg_config.hpp" +#include "src/kernel/resource/profile/Event.hpp" +#include "surf/surf.hpp" + +#include +#include +*/ +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_network); + +namespace simgrid { +namespace kernel { +namespace resource { + +/************ + * Resource * + ************/ + +NetworkWifiLink::NetworkWifiLink(NetworkCm02Model* model, const std::string& name, std::vector bandwidths, + s4u::Link::SharingPolicy policy, lmm::System* system) + : NetworkCm02Link( + model, name, 1 / sg_bandwidth_factor, 0, policy, + system) // Since link use bw*sg_bandwidth_factor we should divise in order to as 1 as bound in the lmm system +{ + for (auto bandwidth : bandwidths) { + bandwidths_.push_back({bandwidth, 1.0, nullptr}); + } +} + +void NetworkWifiLink::set_host_rate(s4u::Host* host, int rate_level) +{ + auto insert_done = host_rates_.insert(std::make_pair(host->get_name(), rate_level)); + if (insert_done.second == false) + insert_done.first->second = rate_level; +} + +double NetworkWifiLink::get_host_rate(sg_host_t host) +{ + std::map::iterator host_rates_it; + host_rates_it = host_rates_.find(host->get_name()); + + if (host_rates_it == host_rates_.end()) + return -1; + + int rate_id = host_rates_it->second; + xbt_assert(rate_id >= 0 && rate_id < (int)bandwidths_.size(), "Host \"%s\" has an invalid rate \"%d\"", + host->get_name().c_str(), rate_id); + + Metric rate = bandwidths_[rate_id]; + return rate.peak * rate.scale; +} + +s4u::Link::SharingPolicy NetworkWifiLink::get_sharing_policy() +{ + return s4u::Link::SharingPolicy::WIFI; +} + +} // namespace resource +} // namespace kernel +} // namespace simgrid diff --git a/src/surf/network_wifi.hpp b/src/surf/network_wifi.hpp new file mode 100644 index 0000000000..33e672d932 --- /dev/null +++ b/src/surf/network_wifi.hpp @@ -0,0 +1,42 @@ +/* Copyright (c) 2019. 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. */ + +#ifndef SURF_NETWORK_WIFI_HPP_ +#define SURF_NETWORK_WIFI_HPP_ + +#include + +#include "network_cm02.hpp" +#include "xbt/string.hpp" + +/*********** + * Classes * + ***********/ + +namespace simgrid { +namespace kernel { +namespace resource { + +class NetworkWifiLink : public NetworkCm02Link { + /** @brief Hold every rates association between host and links (host name, rates id) */ + std::map host_rates_; + + /** @brief A link can have several bandwith attach to it (mostly use by wifi model) */ + std::vector bandwidths_; + +public: + NetworkWifiLink(NetworkCm02Model* model, const std::string& name, std::vector bandwidths, + s4u::Link::SharingPolicy policy, lmm::System* system); + + void set_host_rate(s4u::Host* host, int rate_level); + /** @brief Get the AP rate associated to the host (or -1 if not associated to the AP) */ + double get_host_rate(s4u::Host* host); + s4u::Link::SharingPolicy get_sharing_policy() override; +}; + +} // namespace resource +} // namespace kernel +} // namespace simgrid +#endif /* SURF_NETWORK_WIFI_HPP_ */ diff --git a/teshsuite/surf/wifi_usage/wifi_usage.cpp b/teshsuite/surf/wifi_usage/wifi_usage.cpp index a081c0b6cc..dc15e71927 100644 --- a/teshsuite/surf/wifi_usage/wifi_usage.cpp +++ b/teshsuite/surf/wifi_usage/wifi_usage.cpp @@ -7,7 +7,7 @@ #include "xbt/log.h" #include "simgrid/msg.h" -#include "src/surf/network_cm02.hpp" +#include "src/surf/network_wifi.hpp" #include #include #include diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index 180f99e848..c50a3de38a 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -43,6 +43,7 @@ set(EXTRA_DIST src/surf/network_ns3.hpp src/surf/network_smpi.hpp src/surf/network_ib.hpp + src/surf/network_wifi.hpp src/surf/ns3/ns3_simulator.hpp src/surf/xml/simgrid.dtd src/surf/xml/simgrid_dtd.h @@ -348,6 +349,7 @@ set(SURF_SRC src/surf/network_cm02.cpp src/surf/network_constant.cpp src/surf/network_interface.cpp + src/surf/network_wifi.cpp src/surf/PropertyHolder.cpp src/surf/sg_platf.cpp src/surf/StorageImpl.cpp