X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1b531b916a0eae7de729c2f1e99d050dbcb3ebba..7631e98c4699e3d1f9fa92a21594294f119f95ac:/src/surf/surf_routing_cluster.c diff --git a/src/surf/surf_routing_cluster.c b/src/surf/surf_routing_cluster.c index 3af7568158..840015941c 100644 --- a/src/surf/surf_routing_cluster.c +++ b/src/surf/surf_routing_cluster.c @@ -6,7 +6,6 @@ #include "surf_routing_private.h" /* Global vars */ -extern routing_global_t global_routing; XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_cluster, surf, "Routing part of surf"); @@ -23,20 +22,31 @@ typedef struct { static xbt_dict_t cluster_host_link = NULL; /* Business methods */ -static void cluster_get_route(AS_t as, - const char *src, const char *dst, - route_t route) { +static void cluster_get_route_and_latency(AS_t as, + const char *src, const char *dst, + route_t route, double *lat) { surf_parsing_link_up_down_t info; info = xbt_dict_get_or_null(cluster_host_link,src); - if(info) xbt_dynar_push_as(route->link_list,void*,info->link_up); //link_up + if(info) { // link up + xbt_dynar_push_as(route->link_list,void*,info->link_up); + if (lat) + *lat += surf_network_model->extension.network.get_link_latency(info->link_up); + } - if ( ((as_cluster_t)as)->backbone ) + if ( ((as_cluster_t)as)->backbone ) { xbt_dynar_push_as(route->link_list,void*, ((as_cluster_t)as)->backbone) ; + if (lat) + *lat += surf_network_model->extension.network.get_link_latency(((as_cluster_t)as)->backbone); + } info = xbt_dict_get_or_null(cluster_host_link,dst); - if(info) xbt_dynar_push_as(route->link_list,void*,info->link_down); //link_down + if(info) { // link down + xbt_dynar_push_as(route->link_list,void*,info->link_down); + if (lat) + *lat += surf_network_model->extension.network.get_link_latency(info->link_down); + } } static void model_cluster_finalize(AS_t as) { @@ -47,8 +57,7 @@ static void model_cluster_finalize(AS_t as) { AS_t model_cluster_create(void) { AS_t result = model_none_create_sized(sizeof(s_as_cluster_t)); - result->get_route = cluster_get_route; - result->get_latency = generic_get_link_latency; + result->get_route_and_latency = cluster_get_route_and_latency; result->finalize = model_cluster_finalize; return (AS_t) result; @@ -56,9 +65,9 @@ AS_t model_cluster_create(void) void surf_routing_cluster_add_link(const char* host_id,surf_parsing_link_up_down_t info) { if(!cluster_host_link) - cluster_host_link = xbt_dict_new(); + cluster_host_link = xbt_dict_new_homogeneous(xbt_free); - xbt_dict_set(cluster_host_link,host_id,info,xbt_free); + xbt_dict_set(cluster_host_link,host_id,info,NULL); } void surf_routing_cluster_add_backbone(AS_t as, void* bb) {