- XBT_DEBUG("vivaldi_get_route_and_latency from '%s'[%d] '%s'[%d]", src->name(), src->id(), dst->name(), dst->id());
-
- if(src->isAS()) {
- char *src_name = bprintf("router_%s",src->name());
- char *dst_name = bprintf("router_%s",dst->name());
- route->gw_src = (sg_netcard_t) xbt_lib_get_or_null(as_router_lib, src_name, ROUTING_ASR_LEVEL);
- route->gw_dst = (sg_netcard_t) xbt_lib_get_or_null(as_router_lib, dst_name, ROUTING_ASR_LEVEL);
- xbt_free(src_name);
- xbt_free(dst_name);
+ simgrid::kernel::routing::vivaldi::Coords* coords = nc->extension<simgrid::kernel::routing::vivaldi::Coords>();
+ xbt_assert(coords, "Please specify the Vivaldi coordinates of %s %s (%p)",
+ (nc->isAS() ? "AS" : (nc->isHost() ? "Host" : "Router")), nc->cname(), nc);
+ return &coords->coords;
+}
+AsVivaldi::AsVivaldi(As* father, const char* name) : AsCluster(father, name)
+{
+}
+
+void AsVivaldi::setPeerLink(NetCard* netcard, double bw_in, double bw_out, double latency, const char* coord)
+{
+ xbt_assert(netcard->containingAS() == this, "Cannot add a peer link to a netcard that is not in this AS");
+
+ new simgrid::kernel::routing::vivaldi::Coords(netcard, coord);
+
+ char* link_up = bprintf("link_%s_UP", netcard->cname());
+ char* link_down = bprintf("link_%s_DOWN", netcard->cname());
+ Link* linkUp = surf_network_model->createLink(link_up, bw_out, latency, SURF_LINK_SHARED);
+ Link* linkDown = surf_network_model->createLink(link_down, bw_in, latency, SURF_LINK_SHARED);
+ privateLinks_.insert({netcard->id(), {linkUp, linkDown}});
+
+ free(link_up);
+ free(link_down);
+}
+
+void AsVivaldi::getLocalRoute(NetCard* src, NetCard* dst, sg_platf_route_cbarg_t route, double* lat)
+{
+ XBT_DEBUG("vivaldi getLocalRoute from '%s'[%d] '%s'[%d]", src->cname(), src->id(), dst->cname(), dst->id());
+
+ if (src->isAS()) {
+ char* srcName = bprintf("router_%s", src->cname());
+ char* dstName = bprintf("router_%s", dst->cname());
+ route->gw_src = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib, srcName, ROUTING_ASR_LEVEL);
+ route->gw_dst = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib, dstName, ROUTING_ASR_LEVEL);
+ xbt_free(srcName);
+ xbt_free(dstName);