- for (auto const& link : route)
- get_maxmin_system()->expand(link->get_constraint(), action->get_variable(), 1.0);
+ for (auto const& link : route) {
+ // Handle WIFI links
+ if (link->get_sharing_policy() == s4u::Link::SharingPolicy::WIFI) {
+ xbt_assert(!cfg_crosstraffic,
+ "Cross-traffic is not yet supported when using WIFI. Please use --cfg=network/crosstraffic:0");
+ NetworkWifiLink* wifi_link = (NetworkWifiLink*)link;
+
+ double src_rate = wifi_link->get_host_rate(src);
+ double dst_rate = wifi_link->get_host_rate(dst);
+
+ // TODO: What do to when src and dst are on the same AP ? (for the moment we use src rate)
+ if (src_rate != -1 && dst_rate != -1) {
+ get_maxmin_system()->expand(link->get_constraint(), action->get_variable(), 1.0 / src_rate);
+ } else {
+ xbt_assert(
+ !(src_rate == -1 && dst_rate == -1),
+ "Some Stations are not associated to any Access Point. Make sure to call set_host_rate on all Stations.");
+ if (src_rate != -1)
+ get_maxmin_system()->expand(link->get_constraint(), action->get_variable(), 1.0 / src_rate);
+ else
+ get_maxmin_system()->expand(link->get_constraint(), action->get_variable(), 1.0 / dst_rate);
+ }
+ } else {
+ get_maxmin_system()->expand(link->get_constraint(), action->get_variable(), 1.0);
+ }
+ }