Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
split the wifi model into its own files
[simgrid.git] / src / surf / network_wifi.cpp
diff --git a/src/surf/network_wifi.cpp b/src/surf/network_wifi.cpp
new file mode 100644 (file)
index 0000000..f9ab144
--- /dev/null
@@ -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 <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