}
/* 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)
bool failed = std::any_of(route.begin(), route.end(), [](const StandardLinkImpl* link) { return not link->is_on(); });
- if (cfg_crosstraffic) {
+ if (not failed && cfg_crosstraffic) {
dst->route_to(src, back_route, nullptr);
- if (not failed)
- failed = std::any_of(back_route.begin(), back_route.end(),
- [](const StandardLinkImpl* link) { return not link->is_on(); });
+ failed = std::any_of(back_route.begin(), back_route.end(),
+ [](const StandardLinkImpl* link) { return not link->is_on(); });
}
return failed;
}