- /* search the routing model */
- simgrid::kernel::routing::NetZoneImpl* new_zone = nullptr;
- simgrid::kernel::resource::NetworkModel* netmodel =
- current_routing == nullptr ? surf_network_model : current_routing->network_model_;
- if (strcasecmp(zone->routing.c_str(), "Cluster") == 0) {
- new_zone = new simgrid::kernel::routing::ClusterZone(current_routing, zone->id, netmodel);
- } else if (strcasecmp(zone->routing.c_str(),"ClusterDragonfly") == 0) {
- new_zone = new simgrid::kernel::routing::DragonflyZone(current_routing, zone->id, netmodel);
- } else if (strcasecmp(zone->routing.c_str(),"ClusterTorus") == 0) {
- new_zone = new simgrid::kernel::routing::TorusZone(current_routing, zone->id, netmodel);
- } else if (strcasecmp(zone->routing.c_str(),"ClusterFatTree") == 0) {
- new_zone = new simgrid::kernel::routing::FatTreeZone(current_routing, zone->id, netmodel);
- } else if (strcasecmp(zone->routing.c_str(),"Dijkstra") == 0) {
- new_zone = new simgrid::kernel::routing::DijkstraZone(current_routing, zone->id, netmodel, false);
- } else if (strcasecmp(zone->routing.c_str(),"DijkstraCache") == 0) {
- new_zone = new simgrid::kernel::routing::DijkstraZone(current_routing, zone->id, netmodel, true);
- } else if (strcasecmp(zone->routing.c_str(),"Floyd") == 0) {
- new_zone = new simgrid::kernel::routing::FloydZone(current_routing, zone->id, netmodel);
- } else if (strcasecmp(zone->routing.c_str(),"Full") == 0) {
- new_zone = new simgrid::kernel::routing::FullZone(current_routing, zone->id, netmodel);
- } else if (strcasecmp(zone->routing.c_str(),"None") == 0) {
- new_zone = new simgrid::kernel::routing::EmptyZone(current_routing, zone->id, netmodel);
- } else if (strcasecmp(zone->routing.c_str(),"Vivaldi") == 0) {
- new_zone = new simgrid::kernel::routing::VivaldiZone(current_routing, zone->id, netmodel);
- } else if (strcasecmp(zone->routing.c_str(), "Wifi") == 0) {
- new_zone = new simgrid::kernel::routing::WifiZone(current_routing, zone->id, netmodel);
- } else {
- xbt_die("Not a valid model!");
- }
-
- if (current_routing == nullptr) { /* it is the first one */
- simgrid::s4u::Engine::get_instance()->set_netzone_root(new_zone->get_iface());
- } else {
- /* set the father behavior */
- if (current_routing->hierarchy_ == simgrid::kernel::routing::NetZoneImpl::RoutingMode::unset)
- current_routing->hierarchy_ = simgrid::kernel::routing::NetZoneImpl::RoutingMode::recursive;
- /* add to the sons dictionary */
- current_routing->get_children()->push_back(new_zone);
- }
-