* current function to specify that a given host uses another level of bandwidth. This can be used to take the
* location of hosts into account, or even to model mobility in your SimGrid simulation.
*
- * Note that this function asserts that the link is actually a wifi link */
+ * Note that this function asserts that the link is actually a wifi link
+ *
+ * warning: in the case where a 0Mbps data rate should be used, set that rate only once during the
+ * experiment, and don't modify the bandwidth of that host later */
void set_host_wifi_rate(const s4u::Host* host, int level) const;
/** @brief Returns the current load (in bytes per second) */
double min_bw = bandwidth.peak - (wifi_max_rate_ - wifi_min_rate_);
double model_rate = bandwidth.peak - (wifi_max_rate_ - model_rate_);
- xbt_assert(min_bw > 0, "Your WIFI link is using bandwidth(s) which is too low for the decay model.");
+ //xbt_assert(min_bw > 0, "Your WIFI link is using bandwidth(s) which is too low for the decay model.");
double N0 = max_bw - min_bw;
double lambda = (-log(model_rate - min_bw) + log(N0)) / model_n_;
}
/* WI-FI links needs special treatment, do it here */
- if (src_wifi_link != nullptr)
- get_maxmin_system()->expand(src_wifi_link->get_constraint(), action->get_variable(),
- 1.0 / src_wifi_link->get_host_rate(src));
- if (dst_wifi_link != nullptr)
- get_maxmin_system()->expand(dst_wifi_link->get_constraint(), action->get_variable(),
- 1.0 / dst_wifi_link->get_host_rate(dst));
+ if (src_wifi_link != nullptr) {
+ /* In case of 0Mbps data rate, don't consider it in the LMM */
+ if (src_wifi_link->get_host_rate(src) != 0)
+ get_maxmin_system()->expand(src_wifi_link->get_constraint(), action->get_variable(),
+ 1.0 / src_wifi_link->get_host_rate(src));
+ else
+ get_maxmin_system()->update_variable_penalty(action->get_variable(), 0);
+ }
+ if (dst_wifi_link != nullptr) {
+ if (dst_wifi_link->get_host_rate(dst) != 0)
+ get_maxmin_system()->expand(dst_wifi_link->get_constraint(), action->get_variable(),
+ 1.0 / dst_wifi_link->get_host_rate(dst));
+ else {
+ get_maxmin_system()->update_variable_penalty(action->get_variable(), 0);
+ }
+ }
for (auto const* link : route) {
if (link->get_sharing_policy() != s4u::Link::SharingPolicy::WIFI)