Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Peers should be within an AS if we want this construction to be compatible with other...
[simgrid.git] / src / surf / surf_routing.c
index 919022a..32f9bfa 100644 (file)
@@ -1003,11 +1003,22 @@ static void routing_parse_postparse(void) {
 static void routing_parse_peer(sg_platf_peer_cbarg_t peer)
 {
   char *host_id = NULL;
-  char *link_id;
+  char *link_id = NULL;
+  char *router_id = NULL;
 
   XBT_DEBUG(" ");
   host_id = HOST_PEER(peer->id);
   link_id = LINK_PEER(peer->id);
+  router_id = ROUTER_PEER(peer->id);
+
+  XBT_DEBUG("<AS id=\"%s\"\trouting=\"Cluster\">", peer->id);
+  s_sg_platf_AS_cbarg_t AS = SG_PLATF_AS_INITIALIZER;
+  AS.id = peer->id;
+  AS.routing = A_surfxml_AS_routing_Cluster;
+  sg_platf_new_AS_begin(&AS);
+
+  current_routing->link_up_down_list
+            = xbt_dynar_new(sizeof(s_surf_parsing_link_up_down_t),NULL);
 
   XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\"/>", host_id, peer->power);
   s_sg_platf_host_cbarg_t host;
@@ -1024,7 +1035,6 @@ static void routing_parse_peer(sg_platf_peer_cbarg_t peer)
   host.power_trace = peer->availability_trace;
   host.state_trace = peer->state_trace;
   host.core_amount = 1;
-  host.coord = peer->coord;
   sg_platf_new_host(&host);
 
   s_sg_platf_link_cbarg_t link;
@@ -1055,6 +1065,16 @@ static void routing_parse_peer(sg_platf_peer_cbarg_t peer)
   host_link.link_down= link_down;
   sg_platf_new_host_link(&host_link);
 
+  XBT_DEBUG("<router id=\"%s\"/>", router_id);
+  s_sg_platf_router_cbarg_t router;
+  memset(&router, 0, sizeof(router));
+  router.id = router_id;
+  router.coord = peer->coord;
+  sg_platf_new_router(&router);
+  ((as_cluster_t)current_routing)->router = xbt_lib_get_or_null(as_router_lib, router.id, ROUTING_ASR_LEVEL);
+
+  XBT_DEBUG("</AS>");
+  sg_platf_new_AS_end();
   XBT_DEBUG(" ");
 
   //xbt_dynar_free(&tab_elements_num);
@@ -1240,3 +1260,36 @@ void routing_exit(void) {
   finalize_rec(routing_platf->root);
   xbt_free(routing_platf);
 }
+
+AS_t surf_AS_get_routing_root() {
+  return routing_platf->root;  
+}
+
+const char *surf_AS_get_name(AS_t as) {
+  return as->name;
+}
+
+xbt_dict_t surf_AS_get_routing_sons(AS_t as) {
+  return as->routing_sons;
+}
+
+const char *surf_AS_get_model(AS_t as) {
+  return as->model_desc->name;
+}
+
+xbt_dynar_t surf_AS_get_hosts(AS_t as) {
+  xbt_dynar_t elms = as->index_network_elm;
+  sg_routing_edge_t relm;
+  xbt_dictelm_t delm;
+  int index;
+  int count = xbt_dynar_length(elms);
+  xbt_dynar_t res =  xbt_dynar_new(sizeof(xbt_dictelm_t), NULL);
+  for (index = 0; index < count; index++) {
+     relm = xbt_dynar_get_as(elms, index, sg_routing_edge_t);
+     delm = xbt_lib_get_elm_or_null(host_lib, relm->name);
+     if (delm!=NULL) {
+       xbt_dynar_push(res, &delm);
+     }
+  }
+  return res;
+}