- std::string link_id = cluster->id + "_link_" + std::to_string(id);
-
- LinkCreationArgs link;
- link.id = link_id;
- link.bandwidth = cluster->bw;
- link.latency = cluster->lat;
- link.policy = cluster->sharing_policy;
- sg_platf_new_link(&link);
-
- s4u::Link* linkUp;
- s4u::Link* linkDown;
- if (link.policy == simgrid::s4u::Link::SharingPolicy::SPLITDUPLEX) {
- linkUp = s4u::Link::by_name(link_id + "_UP");
- linkDown = s4u::Link::by_name(link_id + "_DOWN");
+ xbt_assert(node_netpoint, "Invalid node_netpoint parameter");
+ xbt_assert(lb_link, "Invalid lb_link parameter");
+ xbt_assert(limiter_link, "Invalid limiter_link paramater");
+ *lb_link = nullptr;
+ *limiter_link = nullptr;
+
+ // auxiliary function to get dims from index
+ auto index_to_dims = [&dimensions](unsigned long index) {
+ std::vector<unsigned long> dims_array(dimensions.size());
+ for (auto i = static_cast<int>(dimensions.size() - 1); i >= 0; --i) {
+ if (index == 0)
+ break;
+ unsigned long value = index % dimensions[i];
+ dims_array[i] = value;
+ index = (index / dimensions[i]);
+ }
+ return dims_array;
+ };
+
+ kernel::routing::NetPoint* netpoint = nullptr;
+ kernel::routing::NetPoint* gw = nullptr;
+ auto dims = index_to_dims(position);
+ std::tie(netpoint, gw) = set_callbacks.netpoint(get_iface(), dims, position);
+ xbt_assert(netpoint, "set_netpoint(elem=%lu): Invalid netpoint (nullptr)", position);
+ if (netpoint->is_netzone()) {
+ xbt_assert(gw && not gw->is_netzone(),
+ "set_netpoint(elem=%lu): Netpoint (%s) is a netzone, but gateway (%s) is invalid", position,
+ netpoint->get_cname(), gw ? gw->get_cname() : "nullptr");