- xbt_graph_t graph = xbt_graph_new_graph (0, NULL);
-
- //adding hosts
- xbt_dict_foreach(global_routing->where_network_elements, cursor_src, src, data) {
- xbt_graph_new_node (graph, xbt_strdup(src));
- }
-
- //adding links
- int totalLinks = SD_link_get_number();
- const SD_link_t *links = SD_link_get_list();
- qsort((void *) links, totalLinks, sizeof(SD_link_t), name_compare_links);
- for (i = 0; i < totalLinks; i++) {
- xbt_graph_new_node (graph, xbt_strdup (SD_link_get_name(links[i])));
- }
-
- xbt_dict_foreach(global_routing->where_network_elements, cursor_src, src, data) {
- xbt_dict_foreach(global_routing->where_network_elements, cursor_dst, dst, data) {
- if (strcmp(src,"loopback")==0 || strcmp(dst,"loopback")==0) continue;
-
- xbt_node_t src_node = xbt_graph_search_node (graph, src, strcmp);
- xbt_node_t dst_node = xbt_graph_search_node (graph, dst, strcmp);
- TRY {
- xbt_dynar_t route = global_routing->get_route(src,dst);
- xbt_node_t previous = src_node;
- for(i=0;i<xbt_dynar_length(route) ;i++)
- {
- void *link = xbt_dynar_get_as(route,i,void *);
- char *link_name = bprintf("%s",((surf_resource_t) link)->name);
- if (strcmp(link_name, "loopback")==0 || strcmp(link_name, "__loopback__")==0) continue;
- xbt_node_t link_node = xbt_graph_search_node (graph, link_name, strcmp);
- if (!link_node){
- link_node = xbt_graph_new_node (graph, strdup(link_name));
- }
- xbt_edge_t edge = xbt_graph_search_edge (graph, previous, link_node);
- if (!edge){
- DEBUG2("\%s %s", (char*)xbt_graph_node_get_data(previous), (char*)xbt_graph_node_get_data(link_node));
- xbt_graph_new_edge (graph, previous, link_node, NULL);
- }
- previous = link_node;
- }
- xbt_edge_t edge = xbt_graph_search_edge (graph, previous, dst_node);
- if (!edge){
- DEBUG2("\%s %s", (char*)xbt_graph_node_get_data(previous), (char*)xbt_graph_node_get_data(dst_node));
- xbt_graph_new_edge (graph, previous, dst_node, NULL);
- }
- } CATCH(e) {}
- }