void AsFull::addRoute(sg_platf_route_cbarg_t route) { NetCard *src_net_elm = route->src; NetCard *dst_net_elm = route->dst; const char *src = src_net_elm->name(); const char *dst = dst_net_elm->name(); addRouteCheckParams(route); size_t table_size = vertices_.size(); if (!routingTable_) routingTable_ = xbt_new0(sg_platf_route_cbarg_t, table_size * table_size); /* Check that the route does not already exist */ if (route->gw_dst) // AS route (to adapt the error message, if any) xbt_assert(nullptr == TO_ROUTE_FULL(src_net_elm->id(), dst_net_elm->id()), "The route between %s@%s and %s@%s already exists (Rq: routes are symmetrical by default).", src,route->gw_src->name(),dst,route->gw_dst->name()); else xbt_assert(nullptr == TO_ROUTE_FULL(src_net_elm->id(), dst_net_elm->id()), "The route between %s and %s already exists (Rq: routes are symmetrical by default).", src,dst); /* Add the route to the base */ TO_ROUTE_FULL(src_net_elm->id(), dst_net_elm->id()) = newExtendedRoute(hierarchy_, route, 1); TO_ROUTE_FULL(src_net_elm->id(), dst_net_elm->id())->link_list->shrink_to_fit(); if (route->symmetrical == true && src_net_elm != dst_net_elm) { if (route->gw_dst && route->gw_src) { NetCard* gw_tmp = route->gw_src; route->gw_src = route->gw_dst; route->gw_dst = gw_tmp; } if (route->gw_dst) // AS route (to adapt the error message, if any) xbt_assert(nullptr == TO_ROUTE_FULL(dst_net_elm->id(), src_net_elm->id()), "The route between %s@%s and %s@%s already exists. You should not declare the reverse path as symmetrical.", dst,route->gw_dst->name(),src,route->gw_src->name()); else xbt_assert(nullptr == TO_ROUTE_FULL(dst_net_elm->id(), src_net_elm->id()), "The route between %s and %s already exists. You should not declare the reverse path as symmetrical.", dst,src); TO_ROUTE_FULL(dst_net_elm->id(), src_net_elm->id()) = newExtendedRoute(hierarchy_, route, 0); TO_ROUTE_FULL(dst_net_elm->id(), src_net_elm->id())->link_list->shrink_to_fit(); } }
void FullZone::add_route(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoint* gw_dst, std::vector<resource::LinkImpl*>& link_list, bool symmetrical) { addRouteCheckParams(src, dst, gw_src, gw_dst, link_list, symmetrical); unsigned int table_size = get_table_size(); if (not routing_table_) routing_table_ = new RouteCreationArgs*[table_size * table_size](); /* Check that the route does not already exist */ if (gw_dst) // inter-zone route (to adapt the error message, if any) xbt_assert(nullptr == TO_ROUTE_FULL(src->id(), dst->id()), "The route between %s@%s and %s@%s already exists (Rq: routes are symmetrical by default).", src->get_cname(), gw_src->get_cname(), dst->get_cname(), gw_dst->get_cname()); else xbt_assert(nullptr == TO_ROUTE_FULL(src->id(), dst->id()), "The route between %s and %s already exists (Rq: routes are symmetrical by default).", src->get_cname(), dst->get_cname()); /* Add the route to the base */ TO_ROUTE_FULL(src->id(), dst->id()) = newExtendedRoute(hierarchy_, src, dst, gw_src, gw_dst, link_list, symmetrical, true); if (symmetrical == true && src != dst) { if (gw_dst && gw_src) { NetPoint* gw_tmp = gw_src; gw_src = gw_dst; gw_dst = gw_tmp; } if (gw_dst && gw_src) // inter-zone route (to adapt the error message, if any) xbt_assert( nullptr == TO_ROUTE_FULL(dst->id(), src->id()), "The route between %s@%s and %s@%s already exists. You should not declare the reverse path as symmetrical.", dst->get_cname(), gw_dst->get_cname(), src->get_cname(), gw_src->get_cname()); else xbt_assert(nullptr == TO_ROUTE_FULL(dst->id(), src->id()), "The route between %s and %s already exists. You should not declare the reverse path as symmetrical.", dst->get_cname(), src->get_cname()); TO_ROUTE_FULL(dst->id(), src->id()) = newExtendedRoute(hierarchy_, src, dst, gw_src, gw_dst, link_list, symmetrical, false); } }