X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/840bd4689d1c44baf35062cb5707e761b4e0f652..7dc4bb85bd3aac877dc0b80199606d66951cb374:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 434ddf14f8..d1760991ea 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -32,12 +32,11 @@ int ROUTING_ASR_LEVEL; //Routing level int COORD_ASR_LEVEL; //Coordinates level int NS3_ASR_LEVEL; //host node for ns3 -static xbt_dict_t patterns = NULL; static xbt_dict_t random_value = NULL; /* Global vars */ routing_global_t global_routing = NULL; -routing_component_t current_routing = NULL; +AS_t current_routing = NULL; routing_model_description_t current_routing_model = NULL; /* global parse functions */ @@ -294,7 +293,7 @@ static void routing_parse_E_bypassRoute(void) */ void routing_AS_begin(const char *AS_id, const char *wanted_routing_type) { - routing_component_t new_routing; + AS_t new_routing; routing_model_description_t model = NULL; int cpt; @@ -313,7 +312,7 @@ void routing_AS_begin(const char *AS_id, const char *wanted_routing_type) } /* make a new routing component */ - new_routing = (routing_component_t) (*(model->create)) (); + new_routing = (AS_t) (*(model->create)) (); new_routing->routing = model; new_routing->hierarchy = SURF_ROUTING_NULL; new_routing->name = xbt_strdup(AS_id); @@ -392,21 +391,21 @@ void routing_AS_end() * father in the chain */ static void elements_father(const char *src, const char *dst, - routing_component_t * res_father, - routing_component_t * res_src, - routing_component_t * res_dst) + AS_t * res_father, + AS_t * res_src, + AS_t * res_dst) { xbt_assert(src && dst, "bad parameters for \"elements_father\" method"); #define ELEMENTS_FATHER_MAXDEPTH 16 /* increase if it is not enough */ - routing_component_t src_as, dst_as; - routing_component_t path_src[ELEMENTS_FATHER_MAXDEPTH]; - routing_component_t path_dst[ELEMENTS_FATHER_MAXDEPTH]; + AS_t src_as, dst_as; + AS_t path_src[ELEMENTS_FATHER_MAXDEPTH]; + AS_t path_dst[ELEMENTS_FATHER_MAXDEPTH]; int index_src = 0; int index_dst = 0; - routing_component_t current; - routing_component_t current_src; - routing_component_t current_dst; - routing_component_t father; + AS_t current; + AS_t current_src; + AS_t current_dst; + AS_t father; /* (1) find the as where the src and dst are located */ network_element_info_t src_data = xbt_lib_get_or_null(host_lib, src, @@ -474,9 +473,9 @@ static void _get_route_latency(const char *src, const char *dst, XBT_DEBUG("Solve route/latency \"%s\" to \"%s\"", src, dst); xbt_assert(src && dst, "bad parameters for \"_get_route_latency\" method"); - routing_component_t common_father; - routing_component_t src_father; - routing_component_t dst_father; + AS_t common_father; + AS_t src_father; + AS_t dst_father; elements_father(src, dst, &common_father, &src_father, &dst_father); if (src_father == dst_father) { /* SURF_ROUTING_BASE */ @@ -661,9 +660,7 @@ static xbt_dynar_t get_route_no_cleanup(const char *src, const char *dst) return route; } -/*Get Latency*/ -static double get_latency(const char *src, const char *dst) -{ +static double get_latency(const char *src, const char *dst) { double latency = -1.0; get_route_latency(src, dst, NULL, &latency, 0); return latency; @@ -677,23 +674,17 @@ static double get_latency(const char *src, const char *dst) * This fuction is call by "finalize". It allow to finalize the * AS or routing components. It delete all the structures. */ -static void _finalize(routing_component_t rc) -{ - if (rc) { - xbt_dict_cursor_t cursor = NULL; - char *key; - routing_component_t elem; - xbt_dict_foreach(rc->routing_sons, cursor, key, elem) { - _finalize(elem); - } - xbt_dict_t tmp_sons = rc->routing_sons; - char *tmp_name = rc->name; - xbt_dict_free(&tmp_sons); - xbt_free(tmp_name); - xbt_assert(rc->finalize, "no defined method \"finalize\" in \"%s\"", - current_routing->name); - (*(rc->finalize)) (rc); - } +static void finalize_rec(AS_t as) { + xbt_dict_cursor_t cursor = NULL; + char *key; + AS_t elem; + + xbt_dict_foreach(as->routing_sons, cursor, key, elem) + finalize_rec(elem); + + xbt_dict_free(&as->routing_sons); + xbt_free(as->name); + as->finalize(as); } /** @@ -702,17 +693,13 @@ static void _finalize(routing_component_t rc) * walk through the routing components tree and delete the structures * by calling the different "finalize" functions in each routing component */ -static void finalize(void) -{ - /* delete recursively all the tree */ - _finalize(global_routing->root); - /* delete last_route */ - xbt_dynar_free(&(global_routing->last_route)); - /* delete global routing structure */ +static void finalize(void) { + finalize_rec(global_routing->root); + xbt_dynar_free(&global_routing->last_route); xbt_free(global_routing); } -static xbt_dynar_t recursive_get_onelink_routes(routing_component_t rc) +static xbt_dynar_t recursive_get_onelink_routes(AS_t rc) { xbt_dynar_t ret = xbt_dynar_new(sizeof(onelink_t), xbt_free); @@ -728,7 +715,7 @@ static xbt_dynar_t recursive_get_onelink_routes(routing_component_t rc) //recursing char *key; xbt_dict_cursor_t cursor = NULL; - routing_component_t rc_child; + AS_t rc_child; xbt_dict_foreach(rc->routing_sons, cursor, key, rc_child) { xbt_dynar_t onelink_child = recursive_get_onelink_routes(rc_child); if (onelink_child) { @@ -836,14 +823,14 @@ void routing_model_create(size_t size_of_links, void *loopback) static void routing_parse_cluster(void) { char *host_id, *groups, *link_id = NULL; + xbt_dict_t patterns = NULL; s_sg_platf_host_cbarg_t host; s_sg_platf_link_cbarg_t link; if (strcmp(struct_cluster->availability_trace, "") || strcmp(struct_cluster->state_trace, "")) { - if (xbt_dict_size(patterns) == 0) - patterns = xbt_dict_new(); + patterns = xbt_dict_new(); xbt_dict_set(patterns, "id", xbt_strdup(struct_cluster->id), free); xbt_dict_set(patterns, "prefix", xbt_strdup(struct_cluster->prefix), free); xbt_dict_set(patterns, "suffix", xbt_strdup(struct_cluster->suffix), free); @@ -1034,19 +1021,14 @@ static void routing_parse_cluster(void) xbt_dynar_free(&radical_elements); xbt_free(new_suffix); - if (strcmp(struct_cluster->availability_trace, "") - || strcmp(struct_cluster->state_trace, "")) - xbt_dict_free(&patterns); - XBT_DEBUG(""); sg_platf_new_AS_end(); XBT_DEBUG(" "); + xbt_dict_free(&patterns); // no op if it were never set } -static void routing_parse_postparse(void) -{ +static void routing_parse_postparse(void) { xbt_dict_free(&random_value); - xbt_dict_free(&patterns); } static void routing_parse_peer(sg_platf_peer_cbarg_t peer)