X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/171293b2177631594dafc0a8449ee370aebdd305..4e62e76d104a17f0c9aaf9135ac605e9c8c87141:/src/surf/network_cm02.hpp diff --git a/src/surf/network_cm02.hpp b/src/surf/network_cm02.hpp index c2c3b3077c..01bce47a88 100644 --- a/src/surf/network_cm02.hpp +++ b/src/surf/network_cm02.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2018. The SimGrid Team. All rights reserved. */ +/* 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. */ @@ -10,7 +10,7 @@ #include "network_interface.hpp" #include "xbt/graph.h" - +#include "xbt/string.hpp" /*********** * Classes * @@ -32,7 +32,7 @@ class NetworkCm02Model : public NetworkModel { public: explicit NetworkCm02Model(lmm::System* (*make_new_sys)(bool) = &lmm::make_new_maxmin_system); virtual ~NetworkCm02Model() = default; - LinkImpl* create_link(const std::string& name, double bandwidth, double latency, + LinkImpl* create_link(const std::string& name, const std::vector& bandwidths, double latency, s4u::Link::SharingPolicy policy) override; void update_actions_state_lazy(double now, double delta) override; void update_actions_state_full(double now, double delta) override; @@ -47,18 +47,34 @@ class NetworkCm02Link : public LinkImpl { public: NetworkCm02Link(NetworkCm02Model* model, const std::string& name, double bandwidth, double latency, s4u::Link::SharingPolicy policy, lmm::System* system); - virtual ~NetworkCm02Link() = default; - void apply_event(tmgr_trace_event_t event, double value) override; + ~NetworkCm02Link() override = default; + void apply_event(kernel::profile::Event* event, double value) override; void set_bandwidth(double value) override; 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 * **********/ class NetworkCm02Action : public NetworkAction { friend Action* NetworkCm02Model::communicate(s4u::Host* src, s4u::Host* dst, double size, double rate); - friend NetworkSmpiModel; public: NetworkCm02Action(Model* model, double cost, bool failed) : NetworkAction(model, cost, failed){};