+static void routeCreation_cb(bool symmetrical, simgrid::kernel::routing::NetCard* src,
+ simgrid::kernel::routing::NetCard* dst, simgrid::kernel::routing::NetCard* gw_src,
+ simgrid::kernel::routing::NetCard* gw_dst, std::vector<Link*>* link_list)
+{
+ if (link_list->size() == 1) {
+ simgrid::surf::LinkNS3* link = static_cast<simgrid::surf::LinkNS3*>(link_list->at(0));
+
+ XBT_DEBUG("Route from '%s' to '%s' with link '%s' %s", src->cname(), dst->cname(), link->getName(),
+ (symmetrical ? "(symmetrical)" : "(not symmetrical)"));
+ char* link_bdw = bprintf("%fBps", link->bandwidth());
+ char* link_lat = bprintf("%fs", link->latency());
+
+ // XBT_DEBUG("src (%s), dst (%s), src_id = %d, dst_id = %d",src,dst, src_id, dst_id);
+ XBT_DEBUG("\tLink (%s) bdw:%s lat:%s", link->getName(), link_bdw, link_lat);
+
+ // create link ns3
+ HostNs3* host_src = nullptr;
+ HostNs3* host_dst = nullptr;
+ if (src->isHost())
+ host_src = sg_host_by_name(src->cname())->extension<HostNs3>();
+ else
+ host_src = static_cast<HostNs3*>(xbt_lib_get_or_null(as_router_lib, src->cname(), NS3_ASR_LEVEL));
+
+ if (dst->isHost())
+ host_dst = sg_host_by_name(dst->cname())->extension<HostNs3>();
+ else
+ host_dst = static_cast<HostNs3*>(xbt_lib_get_or_null(as_router_lib, dst->cname(), NS3_ASR_LEVEL));
+
+ xbt_assert(host_src != nullptr, "Network element %s does not seem to be NS3-ready", src->cname());
+ xbt_assert(host_dst != nullptr, "Network element %s does not seem to be NS3-ready", dst->cname());
+
+ ns3_add_link(host_src->node_num, host_dst->node_num, link_bdw, link_lat);
+ if (symmetrical)
+ ns3_add_link(host_dst->node_num, host_src->node_num, link_bdw, link_lat);
+
+ xbt_free(link_bdw);
+ xbt_free(link_lat);
+ }
+}
+