- char* link_id = bprintf("%s_link_%d", cluster->id, id);
-
- s_sg_platf_link_cbarg_t link;
- memset(&link, 0, sizeof(link));
- link.id = link_id;
- link.bandwidth = cluster->bw;
- link.latency = cluster->lat;
- link.policy = cluster->sharing_policy;
- sg_platf_new_link(&link);
-
- Link *linkUp, *linkDown;
- if (link.policy == SURF_LINK_FULLDUPLEX) {
- char* tmp_link = bprintf("%s_UP", link_id);
- linkUp = Link::byName(tmp_link);
- xbt_free(tmp_link);
- tmp_link = bprintf("%s_DOWN", link_id);
- linkDown = Link::byName(tmp_link);
- xbt_free(tmp_link);
+ 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");