Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of https://framagit.org/simgrid/simgrid into no_simix_global
[simgrid.git] / src / surf / xml / surfxml_sax_cb.cpp
index 3850ea7..62947af 100644 (file)
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_parse, surf, "Logging specific to the SURF parsing module");
 
 std::string surf_parsed_filename; // Currently parsed file (for the error messages)
-std::vector<simgrid::kernel::resource::LinkImpl*>
-    parsed_link_list; /* temporary store of current link list of a route */
-simgrid::kernel::routing::ClusterZoneCreationArgs
-    zone_cluster; /* temporary store data for irregular clusters, created with <zone routing="Cluster"> */
+std::vector<simgrid::s4u::LinkInRoute> parsed_link_list; /* temporary store of current link list of a route */
 
 /* Helping functions */
 void surf_parse_assert(bool cond, const std::string& msg)
@@ -239,8 +236,8 @@ void STag_surfxml_host()
   property_sets.emplace_back();
   host.id = A_surfxml_host_id;
 
-  host.speed_per_pstate =
-      xbt_parse_get_all_speeds(surf_parsed_filename, surf_parse_lineno, A_surfxml_host_speed, "speed of host", host.id);
+  host.speed_per_pstate = xbt_parse_get_all_speeds(surf_parsed_filename, surf_parse_lineno, A_surfxml_host_speed,
+                                                   "speed of host " + host.id);
 
   XBT_DEBUG("pstate: %s", A_surfxml_host_pstate);
   host.core_amount = surf_parse_get_int(A_surfxml_host_core);
@@ -278,9 +275,9 @@ void ETag_surfxml_disk() {
 
   disk.id       = A_surfxml_disk_id;
   disk.read_bw  = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_disk_read___bw,
-                                         "read_bw of disk ", disk.id);
+                                         "read_bw of disk " + disk.id);
   disk.write_bw = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_disk_write___bw,
-                                          "write_bw of disk ", disk.id);
+                                          "write_bw of disk " + disk.id);
 
   sg_platf_new_disk(&disk);
 }
@@ -292,7 +289,7 @@ void STag_surfxml_host___link(){
   host_link.id        = A_surfxml_host___link_id;
   host_link.link_up   = A_surfxml_host___link_up;
   host_link.link_down = A_surfxml_host___link_down;
-  zone_cluster.host_links.emplace_back(host_link);
+  sg_platf_new_hostlink(&host_link);
 }
 
 void STag_surfxml_router(){
@@ -309,29 +306,30 @@ void ETag_surfxml_cluster(){
   cluster.suffix      = A_surfxml_cluster_suffix;
   explodesRadical(A_surfxml_cluster_radical, &cluster.radicals);
 
-  cluster.speeds      = xbt_parse_get_all_speeds(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_speed,
-                                            "speed of cluster", cluster.id);
+  cluster.speeds = xbt_parse_get_all_speeds(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_speed,
+                                            "speed of cluster " + cluster.id);
   cluster.core_amount = surf_parse_get_int(A_surfxml_cluster_core);
-  cluster.bw = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_bw, "bw of cluster",
-                                       cluster.id);
-  cluster.lat =
-      xbt_parse_get_time(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_lat, "lat of cluster", cluster.id);
+  cluster.bw          = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_bw,
+                                       "bw of cluster " + cluster.id);
+  cluster.lat = xbt_parse_get_time(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_lat,
+                                   "lat of cluster " + cluster.id);
   if(strcmp(A_surfxml_cluster_bb___bw,""))
     cluster.bb_bw = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_bb___bw,
-                                            "bb_bw of cluster", cluster.id);
+                                            "bb_bw of cluster " + cluster.id);
   if(strcmp(A_surfxml_cluster_bb___lat,""))
     cluster.bb_lat = xbt_parse_get_time(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_bb___lat,
-                                        "bb_lat of cluster", cluster.id);
+                                        "bb_lat of cluster " + cluster.id);
   if(strcmp(A_surfxml_cluster_limiter___link,""))
     cluster.limiter_link =
         xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_limiter___link,
-                                "limiter_link of cluster", cluster.id);
+                                "limiter_link of cluster " + cluster.id);
   if(strcmp(A_surfxml_cluster_loopback___bw,""))
-    cluster.loopback_bw = xbt_parse_get_bandwidth(
-        surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_loopback___bw, "loopback_bw of cluster", cluster.id);
+    cluster.loopback_bw =
+        xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_loopback___bw,
+                                "loopback_bw of cluster " + cluster.id);
   if(strcmp(A_surfxml_cluster_loopback___lat,""))
     cluster.loopback_lat = xbt_parse_get_time(surf_parsed_filename, surf_parse_lineno, A_surfxml_cluster_loopback___lat,
-                                              "loopback_lat of cluster", cluster.id);
+                                              "loopback_lat of cluster " + cluster.id);
 
   switch(AX_surfxml_cluster_topology){
   case A_surfxml_cluster_topology_FLAT:
@@ -393,26 +391,26 @@ void STag_surfxml_cabinet(){
   cabinet.prefix  = A_surfxml_cabinet_prefix;
   cabinet.suffix  = A_surfxml_cabinet_suffix;
   cabinet.speed   = xbt_parse_get_speed(surf_parsed_filename, surf_parse_lineno, A_surfxml_cabinet_speed,
-                                      "speed of cabinet", cabinet.id.c_str());
-  cabinet.bw  = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_cabinet_bw, "bw of cabinet",
-                                       cabinet.id.c_str());
-  cabinet.lat = xbt_parse_get_time(surf_parsed_filename, surf_parse_lineno, A_surfxml_cabinet_lat, "lat of cabinet",
-                                   cabinet.id.c_str());
+                                      "speed of cabinet " + cabinet.id);
+  cabinet.bw = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_cabinet_bw,
+                                       "bw of cabinet " + cabinet.id);
+  cabinet.lat = xbt_parse_get_time(surf_parsed_filename, surf_parse_lineno, A_surfxml_cabinet_lat,
+                                   "lat of cabinet " + cabinet.id);
   explodesRadical(A_surfxml_cabinet_radical, &cabinet.radicals);
 
-  zone_cluster.cabinets.emplace_back(cabinet);
+  sg_platf_new_cabinet(&cabinet);
 }
 
 void STag_surfxml_peer(){
   simgrid::kernel::routing::PeerCreationArgs peer;
 
   peer.id          = std::string(A_surfxml_peer_id);
-  peer.speed       = xbt_parse_get_speed(surf_parsed_filename, surf_parse_lineno, A_surfxml_peer_speed, "speed of peer",
-                                   peer.id.c_str());
-  peer.bw_in = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_peer_bw___in, "bw_in of peer",
-                                       peer.id.c_str());
-  peer.bw_out      = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_peer_bw___out,
-                                        "bw_out of peer", peer.id.c_str());
+  peer.speed =
+      xbt_parse_get_speed(surf_parsed_filename, surf_parse_lineno, A_surfxml_peer_speed, "speed of peer " + peer.id);
+  peer.bw_in = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_peer_bw___in,
+                                       "bw_in of peer " + peer.id);
+  peer.bw_out = xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno, A_surfxml_peer_bw___out,
+                                        "bw_out of peer " + peer.id);
   peer.coord       = A_surfxml_peer_coordinates;
   peer.speed_trace = nullptr;
   if (A_surfxml_peer_availability___file[0] != '\0') {
@@ -444,12 +442,12 @@ void ETag_surfxml_link(){
 
   link.id                  = std::string(A_surfxml_link_id);
   link.bandwidths          = xbt_parse_get_bandwidths(surf_parsed_filename, surf_parse_lineno, A_surfxml_link_bandwidth,
-                                             "bandwidth of link", link.id.c_str());
+                                             "bandwidth of link " + link.id);
   link.bandwidth_trace     = A_surfxml_link_bandwidth___file[0]
                              ? simgrid::kernel::profile::Profile::from_file(A_surfxml_link_bandwidth___file)
                              : nullptr;
-  link.latency = xbt_parse_get_time(surf_parsed_filename, surf_parse_lineno, A_surfxml_link_latency, "latency of link",
-                                    link.id.c_str());
+  link.latency =
+      xbt_parse_get_time(surf_parsed_filename, surf_parse_lineno, A_surfxml_link_latency, "latency of link " + link.id);
   link.latency_trace       = A_surfxml_link_latency___file[0]
                            ? simgrid::kernel::profile::Profile::from_file(A_surfxml_link_latency___file)
                            : nullptr;
@@ -483,17 +481,20 @@ void ETag_surfxml_link(){
 
 void STag_surfxml_link___ctn()
 {
-  simgrid::kernel::resource::LinkImpl* link = nullptr;
+  const simgrid::s4u::Link* link;
+  simgrid::s4u::LinkInRoute::Direction direction = simgrid::s4u::LinkInRoute::Direction::NONE;
   switch (A_surfxml_link___ctn_direction) {
   case AU_surfxml_link___ctn_direction:
   case A_surfxml_link___ctn_direction_NONE:
-    link = simgrid::s4u::Link::by_name(std::string(A_surfxml_link___ctn_id))->get_impl();
+    link = simgrid::s4u::Link::by_name(std::string(A_surfxml_link___ctn_id));
     break;
   case A_surfxml_link___ctn_direction_UP:
-    link = simgrid::s4u::Link::by_name(std::string(A_surfxml_link___ctn_id) + "_UP")->get_impl();
+    link      = simgrid::s4u::SplitDuplexLink::by_name(std::string(A_surfxml_link___ctn_id));
+    direction = simgrid::s4u::LinkInRoute::Direction::UP;
     break;
   case A_surfxml_link___ctn_direction_DOWN:
-    link = simgrid::s4u::Link::by_name(std::string(A_surfxml_link___ctn_id) + "_DOWN")->get_impl();
+    link      = simgrid::s4u::SplitDuplexLink::by_name(std::string(A_surfxml_link___ctn_id));
+    direction = simgrid::s4u::LinkInRoute::Direction::DOWN;
     break;
   default:
     surf_parse_error(std::string("Invalid direction for link ") + A_surfxml_link___ctn_id);
@@ -511,7 +512,7 @@ void STag_surfxml_link___ctn()
       dirname = "";
   }
   surf_parse_assert(link != nullptr, std::string("No such link: '") + A_surfxml_link___ctn_id + "'" + dirname);
-  parsed_link_list.push_back(link);
+  parsed_link_list.emplace_back(link, direction);
 }
 
 void ETag_surfxml_backbone()
@@ -519,14 +520,13 @@ void ETag_surfxml_backbone()
   auto link = std::make_unique<simgrid::kernel::routing::LinkCreationArgs>();
 
   link->id = std::string(A_surfxml_backbone_id);
-  link->bandwidths.push_back(xbt_parse_get_bandwidth(surf_parsed_filename, surf_parse_lineno,
-                                                     A_surfxml_backbone_bandwidth, "bandwidth of backbone",
-                                                     link->id.c_str()));
+  link->bandwidths.push_back(xbt_parse_get_bandwidth(
+      surf_parsed_filename, surf_parse_lineno, A_surfxml_backbone_bandwidth, "bandwidth of backbone " + link->id));
   link->latency = xbt_parse_get_time(surf_parsed_filename, surf_parse_lineno, A_surfxml_backbone_latency,
-                                     "latency of backbone", link->id.c_str());
+                                     "latency of backbone " + link->id);
   link->policy  = simgrid::s4u::Link::SharingPolicy::SHARED;
 
-  zone_cluster.backbone = std::move(link);
+  routing_cluster_add_backbone(std::move(link));
 }
 
 void STag_surfxml_route(){
@@ -617,7 +617,7 @@ void ETag_surfxml_bypassRoute(){
 
   route.link_list.swap(parsed_link_list);
 
-  sg_platf_new_bypassRoute(&route);
+  sg_platf_new_bypass_route(&route);
 }
 
 void ETag_surfxml_bypassASroute()
@@ -641,7 +641,7 @@ void ETag_surfxml_bypassZoneRoute()
   ASroute.gw_src = sg_netpoint_by_name_or_null(A_surfxml_bypassZoneRoute_gw___src);
   ASroute.gw_dst = sg_netpoint_by_name_or_null(A_surfxml_bypassZoneRoute_gw___dst);
 
-  sg_platf_new_bypassRoute(&ASroute);
+  sg_platf_new_bypass_route(&ASroute);
 }
 
 void ETag_surfxml_trace(){
@@ -703,23 +703,14 @@ void STag_surfxml_zone()
   simgrid::kernel::routing::ZoneCreationArgs zone;
   zone.id      = A_surfxml_zone_id;
   zone.routing = A_surfxml_zone_routing;
-  sg_platf_new_Zone_begin(&zone);
-  /* new cluster zone, clear temp structures */
-  if (strcasecmp(A_surfxml_zone_routing, "Cluster") == 0) {
-    zone_cluster.host_links.clear();
-    zone_cluster.cabinets.clear();
-    zone_cluster.backbone.release();
-  }
+  sg_platf_new_zone_begin(&zone);
 }
 
 void ETag_surfxml_zone()
 {
-  sg_platf_new_Zone_set_properties(property_sets.back());
+  sg_platf_new_zone_set_properties(property_sets.back());
   property_sets.pop_back();
-  if (strcasecmp(A_surfxml_zone_routing, "Cluster") == 0) {
-    sg_platf_zone_cluster_populate(&zone_cluster);
-  }
-  sg_platf_new_Zone_seal();
+  sg_platf_new_zone_seal();
 }
 
 void STag_surfxml_config()