--- /dev/null
+/* 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 <algorithm>
+#include <numeric>
+*/
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_network);
+
+namespace simgrid {
+namespace kernel {
+namespace resource {
+
+/************
+ * Resource *
+ ************/
+
+NetworkWifiLink::NetworkWifiLink(NetworkCm02Model* model, const std::string& name, std::vector<double> 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<xbt::string, int>::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