+ radical_elements = xbt_str_split(cluster_suffix, ".");
+ xbt_dynar_foreach(radical_elements, iter, groups) {
+ if (strcmp(groups, "")) {
+ char *old_suffix = new_suffix;
+ new_suffix = bprintf("%s\\.%s", old_suffix, groups);
+ free(old_suffix);
+ }
+ }
+ route_src_dst = bprintf("%s(.*)%s", cluster_prefix, new_suffix);
+ xbt_dynar_free(&radical_elements);
+ free(new_suffix);
+
+ char *pcre_link_src = bprintf("%s_link_$1src", cluster_id);
+ char *pcre_link_backbone = bprintf("%s_backbone", cluster_id);
+ char *pcre_link_dst = bprintf("%s_link_$1dst", cluster_id);
+
+ //from router to router
+ XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", router_id, router_id);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, router_id);
+ SURFXML_BUFFER_SET(route_dst, router_id);
+ A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
+ SURFXML_START_TAG(route);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
+ SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+
+ XBT_DEBUG("</route>");
+ SURFXML_END_TAG(route);
+
+ //from host to router
+ XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", route_src_dst, router_id);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, route_src_dst);
+ SURFXML_BUFFER_SET(route_dst, router_id);
+ A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
+ SURFXML_START_TAG(route);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_src);
+ SURFXML_BUFFER_SET(link_ctn_id, pcre_link_src);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+ {A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_UP;}
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
+ SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+
+ XBT_DEBUG("</route>");
+ SURFXML_END_TAG(route);
+
+ //from router to host
+ XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", router_id, route_src_dst);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, router_id);
+ SURFXML_BUFFER_SET(route_dst, route_src_dst);
+ A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
+ SURFXML_START_TAG(route);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
+ SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_dst);
+ SURFXML_BUFFER_SET(link_ctn_id, pcre_link_dst);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+ {A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_UP;}
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+
+ XBT_DEBUG("</route>");
+ SURFXML_END_TAG(route);
+
+ //from host to host
+ XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", route_src_dst, route_src_dst);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, route_src_dst);
+ SURFXML_BUFFER_SET(route_dst, route_src_dst);
+ A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
+ SURFXML_START_TAG(route);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_src);
+ SURFXML_BUFFER_SET(link_ctn_id, pcre_link_src);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+ {A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_UP;}
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_backbone);
+ SURFXML_BUFFER_SET(link_ctn_id, pcre_link_backbone);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", pcre_link_dst);
+ SURFXML_BUFFER_SET(link_ctn_id, pcre_link_dst);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+ {A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_DOWN;}
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+
+ XBT_DEBUG("</route>");
+ SURFXML_END_TAG(route);
+
+ free(pcre_link_dst);
+ free(pcre_link_backbone);
+ free(pcre_link_src);
+ free(route_src_dst);
+#else
+ for (i = 0; i <= xbt_dynar_length(tab_elements_num); i++) {
+ for (j = 0; j <= xbt_dynar_length(tab_elements_num); j++) {
+ if (i == xbt_dynar_length(tab_elements_num)) {
+ route_src = router_id;
+ } else {
+ route_src =
+ bprintf("%s%d%s", cluster_prefix,
+ xbt_dynar_get_as(tab_elements_num, i, int),
+ cluster_suffix);
+ }
+
+ if (j == xbt_dynar_length(tab_elements_num)) {
+ route_dst = router_id;
+ } else {
+ route_dst =
+ bprintf("%s%d%s", cluster_prefix,
+ xbt_dynar_get_as(tab_elements_num, j, int),
+ cluster_suffix);
+ }
+
+ XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", route_src, route_dst);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, route_src);
+ SURFXML_BUFFER_SET(route_dst, route_dst);
+ A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
+ SURFXML_START_TAG(route);
+
+ if (i != xbt_dynar_length(tab_elements_num)){
+ route_src =
+ bprintf("%s_link_%d", cluster_id,
+ xbt_dynar_get_as(tab_elements_num, i, int));
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", route_src);
+ SURFXML_BUFFER_SET(link_ctn_id, route_src);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX)
+ {A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_UP;}
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+ free(route_src);
+ }