/* search the routing model */
simgrid::kernel::routing::AsImpl *new_as = nullptr;
switch(AS->routing){
- case A_surfxml_AS_routing_Cluster: new_as = new simgrid::kernel::routing::AsCluster(AS->id); break;
- case A_surfxml_AS_routing_ClusterDragonfly: new_as = new simgrid::kernel::routing::AsClusterDragonfly(AS->id); break;
- case A_surfxml_AS_routing_ClusterTorus: new_as = new simgrid::kernel::routing::AsClusterTorus(AS->id); break;
- case A_surfxml_AS_routing_ClusterFatTree: new_as = new simgrid::kernel::routing::AsClusterFatTree(AS->id); break;
- case A_surfxml_AS_routing_Dijkstra: new_as = new simgrid::kernel::routing::AsDijkstra(AS->id, 0); break;
- case A_surfxml_AS_routing_DijkstraCache: new_as = new simgrid::kernel::routing::AsDijkstra(AS->id, 1); break;
- case A_surfxml_AS_routing_Floyd: new_as = new simgrid::kernel::routing::AsFloyd(AS->id); break;
- case A_surfxml_AS_routing_Full: new_as = new simgrid::kernel::routing::AsFull(AS->id); break;
- case A_surfxml_AS_routing_None: new_as = new simgrid::kernel::routing::AsNone(AS->id); break;
- case A_surfxml_AS_routing_Vivaldi: new_as = new simgrid::kernel::routing::AsVivaldi(AS->id); break;
- default: xbt_die("Not a valid model!"); break;
+ case A_surfxml_AS_routing_Cluster:
+ new_as = new simgrid::kernel::routing::AsCluster(current_routing, AS->id);
+ break;
+ case A_surfxml_AS_routing_ClusterDragonfly:
+ new_as = new simgrid::kernel::routing::AsClusterDragonfly(current_routing, AS->id);
+ break;
+ case A_surfxml_AS_routing_ClusterTorus:
+ new_as = new simgrid::kernel::routing::AsClusterTorus(current_routing, AS->id);
+ break;
+ case A_surfxml_AS_routing_ClusterFatTree:
+ new_as = new simgrid::kernel::routing::AsClusterFatTree(current_routing, AS->id);
+ break;
+ case A_surfxml_AS_routing_Dijkstra:
+ new_as = new simgrid::kernel::routing::AsDijkstra(current_routing, AS->id, 0);
+ break;
+ case A_surfxml_AS_routing_DijkstraCache:
+ new_as = new simgrid::kernel::routing::AsDijkstra(current_routing, AS->id, 1);
+ break;
+ case A_surfxml_AS_routing_Floyd:
+ new_as = new simgrid::kernel::routing::AsFloyd(current_routing, AS->id);
+ break;
+ case A_surfxml_AS_routing_Full:
+ new_as = new simgrid::kernel::routing::AsFull(current_routing, AS->id);
+ break;
+ case A_surfxml_AS_routing_None:
+ new_as = new simgrid::kernel::routing::AsNone(current_routing, AS->id);
+ break;
+ case A_surfxml_AS_routing_Vivaldi:
+ new_as = new simgrid::kernel::routing::AsVivaldi(current_routing, AS->id);
+ break;
+ default:
+ xbt_die("Not a valid model!");
+ break;
}
- /* make a new routing component */
- simgrid::kernel::routing::NetCard *netcard = new simgrid::kernel::routing::NetCardImpl(new_as->name(), simgrid::kernel::routing::NetCard::Type::As, current_routing);
if (current_routing == nullptr && routing_platf->root_ == nullptr) { /* it is the first one */
routing_platf->root_ = new_as;
} else if (current_routing != nullptr && routing_platf->root_ != nullptr) {
- xbt_assert(!xbt_dict_get_or_null(current_routing->children(), AS->id),
- "The AS \"%s\" already exists", AS->id);
- /* it is a part of the tree */
- new_as->father_ = current_routing;
+ xbt_assert(!xbt_dict_get_or_null(current_routing->children(), AS->id), "The AS '%s' already exists", AS->id);
/* set the father behavior */
if (current_routing->hierarchy_ == simgrid::kernel::routing::AsImpl::RoutingMode::unset)
current_routing->hierarchy_ = simgrid::kernel::routing::AsImpl::RoutingMode::recursive;
THROWF(arg_error, 0, "All defined components must belong to a AS");
}
- xbt_lib_set(as_router_lib, netcard->name(), ROUTING_ASR_LEVEL, (void *) netcard);
- XBT_DEBUG("Having set name '%s' id '%d'", new_as->name(), netcard->id());
-
/* set the new current component of the tree */
current_routing = new_as;
- current_routing->netcard_ = netcard;
simgrid::kernel::routing::asCreatedCallbacks(new_as);
if (TRACE_is_enabled())