X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/66a6b6eefde8b9d5aac551b3e0008d3df3ddeba7..a95e6bf7b637ba63f3d668b005deb91071c00c1a:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 65abb38f6f..5d6a515f93 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -1,14 +1,16 @@ -/* Copyright (c) 2009, 2010. The SimGrid Team. +/* Copyright (c) 2009, 2010, 2011. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#ifdef HAVE_PCRE_LIB #include /* regular expression library */ -#endif + +#include "simgrid/platf.h" // platform creation API + #include "surf_routing_private.h" #include "surf/surf_routing.h" +#include "surf/surfxml_parse_values.h" xbt_lib_t host_lib; int ROUTING_HOST_LEVEL; //Routing level @@ -45,6 +47,7 @@ static const char *dst = NULL; /* temporary store the destination name of static char *gw_src = NULL; /* temporary store the gateway source name of a route */ static char *gw_dst = NULL; /* temporary store the gateway destination name of a route */ static double_f_cpvoid_t get_link_latency = NULL; +xbt_dict_t cluster_host_link = NULL; /* for tag cluster */ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route, surf, "Routing part of surf"); @@ -52,11 +55,8 @@ static void routing_parse_Speer(void); /* peer bypass */ static void routing_parse_Srandom(void); /* random bypass */ static void routing_parse_Erandom(void); /* random bypass */ -static void routing_parse_Sconfig(void); /* config Tag */ -static void routing_parse_Econfig(void); /* config Tag */ - static char* replace_random_parameter(char * chaine); -static void clean_dict_random(void); +static void clean_routing_after_parse(void); /* this lines are only for replace use like index in the model table */ typedef enum { @@ -65,9 +65,9 @@ typedef enum { SURF_MODEL_DIJKSTRA, SURF_MODEL_DIJKSTRACACHE, SURF_MODEL_NONE, -#ifdef HAVE_PCRE_LIB - SURF_MODEL_RULEBASED -#endif + SURF_MODEL_RULEBASED, + SURF_MODEL_VIVALDI, + SURF_MODEL_CLUSTER } e_routing_types; struct s_model_type routing_models[] = { {"Full", @@ -90,12 +90,12 @@ struct s_model_type routing_models[] = { {"Full", model_dijkstra_both_unload, model_dijkstra_both_end}, {"none", "No routing (usable with Constant network only)", model_none_create, model_none_load, model_none_unload, model_none_end}, -#ifdef HAVE_PCRE_LIB {"RuleBased", "Rule-Based routing data (...)", model_rulebased_create, model_rulebased_load, model_rulebased_unload, model_rulebased_end}, {"Vivaldi", "Vivaldi routing", model_rulebased_create, model_rulebased_load, model_rulebased_unload, model_rulebased_end}, -#endif +{"Cluster", "Cluster routing", model_cluster_create, + model_rulebased_load, model_rulebased_unload, model_rulebased_end}, {NULL, NULL, NULL, NULL, NULL, NULL} }; @@ -186,9 +186,9 @@ static void parse_E_host(void) /* * \brief Add a host to the network element list from XML */ -static void parse_S_host_XML(void) +static void parse_S_host_XML(surf_parsing_host_arg_t h) { - parse_S_host(A_surfxml_host_id, A_surfxml_host_coordinates); + parse_S_host(h->V_host_id, h->V_host_coord); } static void parse_E_host_XML(void) { @@ -207,30 +207,29 @@ static void parse_S_host_lua(const char *host_id, const char *coord) /** * \brief Add a "router" to the network element list */ -static void parse_S_router(const char *router_id) +static void parse_S_router(void) { network_element_info_t info = NULL; - if (current_routing->hierarchy == SURF_ROUTING_NULL) current_routing->hierarchy = SURF_ROUTING_BASE; - xbt_assert(!xbt_lib_get_or_null(as_router_lib,A_surfxml_router_id, ROUTING_ASR_LEVEL), + xbt_assert(!xbt_lib_get_or_null(as_router_lib,struct_router->V_router_id, ROUTING_ASR_LEVEL), "Reading a router, processing unit \"%s\" already exists", - router_id); + struct_router->V_router_id); xbt_assert(current_routing->set_processing_unit, "no defined method \"set_processing_unit\" in \"%s\"", current_routing->name); (*(current_routing->set_processing_unit)) (current_routing, - router_id); + struct_router->V_router_id); info = xbt_new0(s_network_element_info_t, 1); info->rc_component = current_routing; info->rc_type = SURF_NETWORK_ELEMENT_ROUTER; - xbt_lib_set(as_router_lib,router_id,ROUTING_ASR_LEVEL,(void *) info); + xbt_lib_set(as_router_lib,struct_router->V_router_id,ROUTING_ASR_LEVEL,(void *) info); if (strcmp(A_surfxml_router_coordinates,"")) { if(!COORD_ASR_LEVEL) xbt_die("To use coordinates, you must set configuration 'coordinates' to 'yes'"); xbt_dynar_t ctn = xbt_str_split_str(A_surfxml_router_coordinates, " "); xbt_dynar_shrink(ctn, 0); - xbt_lib_set(as_router_lib,router_id,COORD_ASR_LEVEL,(void *) ctn); + xbt_lib_set(as_router_lib,struct_router->V_router_id,COORD_ASR_LEVEL,(void *) ctn); } } @@ -239,7 +238,7 @@ static void parse_S_router(const char *router_id) */ static void parse_S_router_XML(void) { - return parse_S_router(A_surfxml_router_id); + return parse_S_router(); } /** @@ -247,7 +246,9 @@ static void parse_S_router_XML(void) */ static void parse_S_router_lua(const char* router_id) { - return parse_S_router(router_id); + struct_router->V_router_id = xbt_strdup(router_id); + struct_router->V_router_coord = xbt_strdup(""); + return parse_S_router(); } /** @@ -418,27 +419,35 @@ static void parse_E_bypassRoute_store_route(void) } /** - * \brief Make a new routing component + * \brief Make a new routing component to the platform + * + * Add a new autonomous system to the platform. Any elements (such as host, + * router or sub-AS) added after this call and before the corresponding call + * to sg_platf_new_AS_close() will be added to this AS. * - * make the new structure and - * set the parsing functions to allows parsing the part of the routing tree + * Once this function was called, the configuration concerning the used + * models cannot be changed anymore. + * + * @param AS_id name of this autonomous system. Must be uniq in the platform + * @param wanted_routing_type one of Full, Floyd, Dijkstra or similar. Full list in the variable routing_models, in src/surf/surf_routing.c */ -static void parse_S_AS(char *AS_id, char *AS_routing) +void sg_platf_new_AS_open(const char *AS_id, const char *wanted_routing_type) { routing_component_t new_routing; model_type_t model = NULL; - char *wanted = AS_routing; int cpt; - /* seach the routing model */ + + surf_parse_models_setup(); /* ensure that the models are created after the last tag and before the first -like */ + + /* search the routing model */ for (cpt = 0; routing_models[cpt].name; cpt++) - if (!strcmp(wanted, routing_models[cpt].name)) + if (!strcmp(wanted_routing_type, routing_models[cpt].name)) model = &routing_models[cpt]; /* if its not exist, error */ if (model == NULL) { fprintf(stderr, "Routing model %s not found. Existing models:\n", - wanted); + wanted_routing_type); for (cpt = 0; routing_models[cpt].name; cpt++) - if (!strcmp(wanted, routing_models[cpt].name)) fprintf(stderr, " %s: %s\n", routing_models[cpt].name, routing_models[cpt].desc); xbt_die(NULL); @@ -488,34 +497,21 @@ static void parse_S_AS(char *AS_id, char *AS_routing) current_routing = new_routing; } -/* - * Detect the routing model type of the routing component from XML platforms - */ -static void parse_S_AS_XML(void) -{ - parse_S_AS(A_surfxml_AS_id, A_surfxml_AS_routing); -} - -/* - * define the routing model type of routing component from lua script - */ -static void parse_S_AS_lua(char *id, char *mode) -{ - parse_S_AS(id, mode); -} - - /** - * \brief Finish the creation of a new routing component + * \brief Specify that the current description of AS is finished + * + * Once you've declared all the content of your AS, you have to close + * it with this call. Your AS is not usable until you call this function. + * + * @fixme: this call is not as robust as wanted: bad things WILL happen + * if you call it twice for the same AS, or if you forget calling it, or + * even if you add stuff to a closed AS * - * When you finish to read the routing component, other structures must be created. - * the "end" method allow to do that for any routing model type */ -static void parse_E_AS(const char *AS_id) -{ +void sg_platf_new_AS_close() { if (current_routing == NULL) { - THROWF(arg_error, 0, "Close AS(%s), that never open", AS_id); + THROWF(arg_error, 0, "Close an AS, but none was under construction"); } else { network_element_info_t info = NULL; xbt_assert(!xbt_lib_get_or_null(as_router_lib,current_routing->name, ROUTING_ASR_LEVEL), @@ -533,22 +529,6 @@ static void parse_E_AS(const char *AS_id) } } -/* - * \brief Finish the creation of a new routing component from XML - */ -static void parse_E_AS_XML(void) -{ - parse_E_AS(A_surfxml_AS_id); -} - -/* - * \brief Finish the creation of a new routing component from lua - */ -static void parse_E_AS_lua(const char *id) -{ - parse_E_AS(id); -} - /* Aux Business methods */ /** @@ -809,6 +789,27 @@ static xbt_dynar_t get_route(const char *src, const char *dst) return route; } +/** + * \brief Generic method: find a route between hosts + * + * \param src the source host name + * \param dst the destination host name + * + * same as get_route, but return NULL if any exception is raised. + */ +static xbt_dynar_t get_route_or_null(const char *src, const char *dst) +{ + xbt_dynar_t route = NULL; + xbt_ex_t exception; + TRY { + get_route_latency(src, dst, &route, NULL, 1); + }CATCH(exception) { + xbt_ex_free(exception); + return NULL; + } + return route; +} + /** * \brief Generic method: find a route between hosts * @@ -834,6 +835,20 @@ static double get_latency(const char *src, const char *dst) return latency; } +static int surf_parse_models_setup_already_called=0; +/* Call the last initialization functions, that must be called after the + * tag, if any, and before the first of cluster|peer|AS|trace|trace_connect + */ +void surf_parse_models_setup() +{ + if (surf_parse_models_setup_already_called) + return; + surf_parse_models_setup_already_called=1; + routing_parse_Erandom(); + surf_config_models_setup(); +} + + /** * \brief Recursive function for finalize * @@ -875,6 +890,8 @@ static void finalize(void) xbt_dynar_free(&(global_routing->last_route)); /* delete global routing structure */ xbt_free(global_routing); + /* make sure that we will reinit the models while loading the platf once reinited -- HACK but there is no proper surf_routing_init() */ + surf_parse_models_setup_already_called = 0; } static xbt_dynar_t recursive_get_onelink_routes(routing_component_t rc) @@ -935,6 +952,7 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ global_routing = xbt_new0(s_routing_global_t, 1); global_routing->root = NULL; global_routing->get_route = get_route; + global_routing->get_route_or_null = get_route_or_null; global_routing->get_latency = get_latency; global_routing->get_route_no_cleanup = get_route_no_cleanup; global_routing->get_onelink_routes = get_onelink_routes; @@ -949,7 +967,7 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ current_routing = NULL; /* parse generic elements */ - surfxml_add_callback(STag_surfxml_host_cb_list, &parse_S_host_XML); + surf_parse_host_add_cb(parse_S_host_XML); surfxml_add_callback(ETag_surfxml_host_cb_list, &parse_E_host_XML); surfxml_add_callback(STag_surfxml_router_cb_list, &parse_S_router_XML); @@ -970,9 +988,6 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ surfxml_add_callback(ETag_surfxml_bypassRoute_cb_list, &parse_E_bypassRoute_store_route); - surfxml_add_callback(STag_surfxml_AS_cb_list, &parse_S_AS_XML); - surfxml_add_callback(ETag_surfxml_AS_cb_list, &parse_E_AS_XML); - surfxml_add_callback(STag_surfxml_cluster_cb_list, &routing_parse_Scluster); @@ -980,7 +995,7 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ &routing_parse_Speer); surfxml_add_callback(ETag_surfxml_platform_cb_list, - &clean_dict_random); + &clean_routing_after_parse); #ifdef HAVE_TRACING instr_routing_define_callbacks(); @@ -989,21 +1004,10 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ void surf_parse_add_callback_config(void) { - surfxml_add_callback(STag_surfxml_config_cb_list, &routing_parse_Sconfig); - surfxml_add_callback(ETag_surfxml_config_cb_list, &routing_parse_Econfig); surfxml_add_callback(STag_surfxml_prop_cb_list, &parse_properties_XML); - surfxml_add_callback(STag_surfxml_AS_cb_list, &surf_parse_models_setup); surfxml_add_callback(STag_surfxml_random_cb_list, &routing_parse_Srandom); } -void surf_parse_models_setup() -{ - routing_parse_Erandom(); - surfxml_del_callback(STag_surfxml_AS_cb_list, surf_parse_models_setup); - surf_config_models_setup(platform_filename); - free(platform_filename); -} - /* ************************************************** */ /* ********** PATERN FOR NEW ROUTING **************** */ @@ -1465,154 +1469,220 @@ void generic_src_dst_check(routing_component_t rc, const char *src, src,dst,src_as->name, dst_as->name,rc->name); } -static void routing_parse_Sconfig(void) -{ - XBT_DEBUG("START configuration name = %s",A_surfxml_config_id); -} -static void routing_parse_Econfig(void) +static void parse_create_host_link(int i) { - xbt_dict_cursor_t cursor = NULL; - char *key; - char *elem; - char *cfg; - xbt_dict_foreach(current_property_set, cursor, key, elem) { - cfg = bprintf("%s:%s",key,elem); - if(xbt_cfg_is_default_value(_surf_cfg_set, key)) - xbt_cfg_set_parse(_surf_cfg_set, cfg); - else - XBT_INFO("The custom configuration '%s' is already define by user!",key); - free(cfg); - } - XBT_DEBUG("End configuration name = %s",A_surfxml_config_id); + char *host_id, *link_id = NULL; + s_surf_parsing_host_arg_t host; + memset(&host,0,sizeof(host)); + + host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, i, struct_cluster->V_cluster_suffix); + link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, i); + + A_surfxml_host_state = A_surfxml_host_state_ON; + + XBT_DEBUG("", host_id, struct_cluster->S_cluster_power); + host.V_host_id = xbt_strdup(host_id); + if(strcmp(struct_cluster->V_cluster_availability_file,"")){ + xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free); + char* tmp_availability_file = xbt_strdup(struct_cluster->V_cluster_availability_file); + xbt_str_varsubst(tmp_availability_file,patterns); + XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file); + host.V_host_power_trace = tmgr_trace_new(tmp_availability_file); + xbt_free(tmp_availability_file); + } + else + { + XBT_DEBUG("\tavailability_file=\"\""); + } + if(strcmp(struct_cluster->V_cluster_state_file,"")){ + char *tmp_state_file = xbt_strdup(struct_cluster->V_cluster_state_file); + xbt_str_varsubst(tmp_state_file,patterns); + XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file); + host.V_host_state_trace = tmgr_trace_new(tmp_state_file); + xbt_free(tmp_state_file); + } + else + { + XBT_DEBUG("\tstate_file=\"\""); + } + + host.V_host_power_peak = struct_cluster->S_cluster_power; + host.V_host_power_scale = 1.0; + host.V_host_core = struct_cluster->S_cluster_core; + host.V_host_state_initial = SURF_RESOURCE_ON; + host.V_host_coord = ""; + surf_parse_host(&host); + XBT_DEBUG(""); + + A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; + if(AX_surfxml_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;} + if(AX_surfxml_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;} + + XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat); + + struct_lnk = xbt_new0(s_surf_parsing_link_arg_t, 1); + struct_lnk->V_link_id = xbt_strdup(link_id); + struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bw; + struct_lnk->V_link_latency = struct_cluster->S_cluster_lat; + struct_lnk->V_link_bandwidth_file = NULL; + struct_lnk->V_link_latency_file = NULL; + struct_lnk->V_link_state_file = NULL; + struct_lnk->V_link_state = SURF_RESOURCE_ON; + struct_lnk->V_link_sharing_policy = A_surfxml_link_sharing_policy; + + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED) + struct_lnk->V_policy_initial_link = SURF_LINK_SHARED; + else + { + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FATPIPE) + struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE; + else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX) + struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX; + } + surf_parse_link(); + + ETag_surfxml_host(); + ETag_surfxml_link(); + + surf_parsing_link_up_down_t info = xbt_new0(s_surf_parsing_link_up_down_t, 1); + + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX){ + char* tmp_link = bprintf("%s_UP",link_id); + info->link_up = xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL); + free(tmp_link); + tmp_link = bprintf("%s_DOWN",link_id); + info->link_down = xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL); + free(tmp_link); + } + else{ + info->link_up = xbt_lib_get_or_null(link_lib, link_id, SURF_LINK_LEVEL); + info->link_down = info->link_up; + } + xbt_dict_set(cluster_host_link,host_id,info,xbt_free); + xbt_free(link_id); + xbt_free(host_id); } void routing_parse_Scluster(void) { - static int AX_ptr = 0; + if(!cluster_host_link) + cluster_host_link = xbt_dict_new(); - char *cluster_id = A_surfxml_cluster_id; - char *cluster_prefix = A_surfxml_cluster_prefix; - char *cluster_suffix = A_surfxml_cluster_suffix; - char *cluster_radical = A_surfxml_cluster_radical; - char *cluster_power = A_surfxml_cluster_power; - char *cluster_core = A_surfxml_cluster_core; - char *cluster_bw = A_surfxml_cluster_bw; - char *cluster_lat = A_surfxml_cluster_lat; - char *temp_cluster_bw = NULL; - char *temp_cluster_lat = NULL; - char *temp_cluster_power = NULL; - char *cluster_bb_bw = A_surfxml_cluster_bb_bw; - char *cluster_bb_lat = A_surfxml_cluster_bb_lat; - char *cluster_availability_file = A_surfxml_cluster_availability_file; - char *cluster_state_file = A_surfxml_cluster_state_file; + static int AX_ptr = 0; char *host_id, *groups, *link_id = NULL; - char *router_id, *link_backbone; - char *availability_file = xbt_strdup(cluster_availability_file); - char *state_file = xbt_strdup(cluster_state_file); - if(xbt_dict_size(patterns)==0) - patterns = xbt_dict_new(); + s_surf_parsing_host_arg_t host; - xbt_dict_set(patterns,"id",cluster_id,NULL); - xbt_dict_set(patterns,"prefix",cluster_prefix,NULL); - xbt_dict_set(patterns,"suffix",cluster_suffix,NULL); + if( strcmp(struct_cluster->V_cluster_availability_file,"") + || strcmp(struct_cluster->V_cluster_state_file,"") ) + { + if(xbt_dict_size(patterns)==0) + patterns = xbt_dict_new(); + xbt_dict_set(patterns,"id",struct_cluster->V_cluster_id,NULL); + xbt_dict_set(patterns,"prefix",struct_cluster->V_cluster_prefix,NULL); + xbt_dict_set(patterns,"suffix",struct_cluster->V_cluster_suffix,NULL); + } -#ifdef HAVE_PCRE_LIB - char *route_src_dst; -#endif unsigned int iter; int start, end, i; xbt_dynar_t radical_elements; xbt_dynar_t radical_ends; - int cluster_sharing_policy = AX_surfxml_cluster_sharing_policy; - int cluster_bb_sharing_policy = AX_surfxml_cluster_bb_sharing_policy; - -#ifndef HAVE_PCRE_LIB - xbt_dynar_t tab_elements_num = xbt_dynar_new(sizeof(int), NULL); - char *route_src, *route_dst; - int j; -#endif static unsigned int surfxml_buffer_stack_stack_ptr = 1; static unsigned int surfxml_buffer_stack_stack[1024]; surfxml_buffer_stack_stack[0] = 0; - surfxml_bufferstack_push(1); - SURFXML_BUFFER_SET(AS_id, cluster_id); -#ifdef HAVE_PCRE_LIB - SURFXML_BUFFER_SET(AS_routing, "RuleBased"); - XBT_DEBUG("", cluster_id); -#else - SURFXML_BUFFER_SET(AS_routing, "Full"); - XBT_DEBUG("", cluster_id); -#endif + SURFXML_BUFFER_SET(AS_id, struct_cluster->V_cluster_id); + SURFXML_BUFFER_SET(AS_routing, "Cluster"); + XBT_DEBUG("", struct_cluster->V_cluster_id); SURFXML_START_TAG(AS); - radical_elements = xbt_str_split(cluster_radical, ","); + //Make all hosts + radical_elements = xbt_str_split(struct_cluster->V_cluster_radical, ","); xbt_dynar_foreach(radical_elements, iter, groups) { + memset(&host,0,sizeof(host)); + radical_ends = xbt_str_split(groups, "-"); switch (xbt_dynar_length(radical_ends)) { case 1: - surf_parse_get_int(&start, - xbt_dynar_get_as(radical_ends, 0, char *)); - host_id = bprintf("%s%d%s", cluster_prefix, start, cluster_suffix); -#ifndef HAVE_PCRE_LIB - xbt_dynar_push_as(tab_elements_num, int, start); -#endif - link_id = bprintf("%s_link_%d", cluster_id, start); - - xbt_dict_set(patterns, "radical", bprintf("%d", start), xbt_free); - temp_cluster_power = xbt_strdup(cluster_power); - temp_cluster_power = replace_random_parameter(temp_cluster_power); - XBT_DEBUG("", host_id, temp_cluster_power); - A_surfxml_host_state = A_surfxml_host_state_ON; - SURFXML_BUFFER_SET(host_id, host_id); - SURFXML_BUFFER_SET(host_power, temp_cluster_power); - SURFXML_BUFFER_SET(host_core, cluster_core); - SURFXML_BUFFER_SET(host_availability, "1.0"); - SURFXML_BUFFER_SET(host_coordinates, ""); - xbt_free(availability_file); - availability_file = xbt_strdup(cluster_availability_file); - xbt_free(state_file); - state_file = xbt_strdup(cluster_state_file); - XBT_DEBUG("\tavailability_file=\"%s\"",xbt_str_varsubst(availability_file,patterns)); - XBT_DEBUG("\tstate_file=\"%s\"",xbt_str_varsubst(state_file,patterns)); - SURFXML_BUFFER_SET(host_availability_file, xbt_str_varsubst(availability_file,patterns)); - SURFXML_BUFFER_SET(host_state_file, xbt_str_varsubst(state_file,patterns)); - XBT_DEBUG(""); - SURFXML_START_TAG(host); - SURFXML_END_TAG(host); - - - temp_cluster_bw = xbt_strdup(cluster_bw); - temp_cluster_bw = replace_random_parameter(temp_cluster_bw); - temp_cluster_lat = xbt_strdup(cluster_lat); - temp_cluster_lat = replace_random_parameter(temp_cluster_lat); - XBT_DEBUG("", link_id,temp_cluster_bw, cluster_lat); - A_surfxml_link_state = A_surfxml_link_state_ON; - A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; - if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX) - {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;} - if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE) - {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;} - SURFXML_BUFFER_SET(link_id, link_id); - SURFXML_BUFFER_SET(link_bandwidth, temp_cluster_bw); - SURFXML_BUFFER_SET(link_latency, temp_cluster_lat); - SURFXML_BUFFER_SET(link_bandwidth_file, ""); - SURFXML_BUFFER_SET(link_latency_file, ""); - SURFXML_BUFFER_SET(link_state_file, ""); - SURFXML_START_TAG(link); - SURFXML_END_TAG(link); - - xbt_free(temp_cluster_bw); - xbt_free(temp_cluster_lat); - xbt_free(temp_cluster_power); - free(link_id); - free(host_id); - break; + surf_parse_get_int(&start, xbt_dynar_get_as(radical_ends, 0, char *)); + host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, start, struct_cluster->V_cluster_suffix); + link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, start); + + XBT_DEBUG("", host_id, struct_cluster->S_cluster_power); + host.V_host_id = host_id; + if(strcmp(struct_cluster->V_cluster_availability_file,"")){ + xbt_dict_set(patterns, "radical", bprintf("%d", start), xbt_free); + char* tmp_availability_file = xbt_strdup(struct_cluster->V_cluster_availability_file); + xbt_str_varsubst(tmp_availability_file,patterns); + XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file); + host.V_host_power_trace = tmgr_trace_new(tmp_availability_file); + xbt_free(tmp_availability_file); + } + else + { + XBT_DEBUG("\tavailability_file=\"\""); + } + if(strcmp(struct_cluster->V_cluster_state_file,"")){ + char *tmp_state_file = xbt_strdup(struct_cluster->V_cluster_state_file); + xbt_str_varsubst(tmp_state_file,patterns); + XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file); + host.V_host_state_trace = tmgr_trace_new(tmp_state_file); + xbt_free(tmp_state_file); + } + else + { + XBT_DEBUG("\tstate_file=\"\""); + } + + host.V_host_power_peak = struct_cluster->S_cluster_power; + host.V_host_power_scale = 1.0; + host.V_host_core = struct_cluster->S_cluster_core; + host.V_host_state_initial = SURF_RESOURCE_ON; + host.V_host_coord = ""; + surf_parse_host(&host); + XBT_DEBUG(""); + + A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; + if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;} + if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;} + + XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat); + + struct_lnk = xbt_new0(s_surf_parsing_link_arg_t, 1); + struct_lnk->V_link_id = link_id; + struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bw; + struct_lnk->V_link_latency = struct_cluster->S_cluster_lat; + struct_lnk->V_link_bandwidth_file = NULL; + struct_lnk->V_link_latency_file = NULL; + struct_lnk->V_link_state_file = NULL; + struct_lnk->V_link_state = SURF_RESOURCE_ON; + struct_lnk->V_link_sharing_policy = A_surfxml_link_sharing_policy; + + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED) + struct_lnk->V_policy_initial_link = SURF_LINK_SHARED; + else + { + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FATPIPE) + struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE; + else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX) + struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX; + } + surf_parse_link(); + + xbt_dict_set(cluster_host_link,host_id,strdup(link_id),free); +// XBT_INFO("key '%s' Value '%s'",host_id,link_id); + ETag_surfxml_host(); + ETag_surfxml_link(); + + break; case 2: @@ -1620,129 +1690,139 @@ void routing_parse_Scluster(void) xbt_dynar_get_as(radical_ends, 0, char *)); surf_parse_get_int(&end, xbt_dynar_get_as(radical_ends, 1, char *)); for (i = start; i <= end; i++) { - host_id = bprintf("%s%d%s", cluster_prefix, i, cluster_suffix); -#ifndef HAVE_PCRE_LIB - xbt_dynar_push_as(tab_elements_num, int, i); -#endif - link_id = bprintf("%s_link_%d", cluster_id, i); - - xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free); - temp_cluster_power = xbt_strdup(cluster_power); - temp_cluster_power = replace_random_parameter(temp_cluster_power); - XBT_DEBUG("", host_id, temp_cluster_power); - A_surfxml_host_state = A_surfxml_host_state_ON; - SURFXML_BUFFER_SET(host_id, host_id); - SURFXML_BUFFER_SET(host_power, temp_cluster_power); - SURFXML_BUFFER_SET(host_core, cluster_core); - SURFXML_BUFFER_SET(host_availability, "1.0"); - SURFXML_BUFFER_SET(host_coordinates, ""); - xbt_free(availability_file); - availability_file = xbt_strdup(cluster_availability_file); - xbt_free(state_file); - state_file = xbt_strdup(cluster_state_file); - XBT_DEBUG("\tavailability_file=\"%s\"",xbt_str_varsubst(availability_file,patterns)); - XBT_DEBUG("\tstate_file=\"%s\"",xbt_str_varsubst(state_file,patterns)); - SURFXML_BUFFER_SET(host_availability_file, xbt_str_varsubst(availability_file,patterns)); - SURFXML_BUFFER_SET(host_state_file, xbt_str_varsubst(state_file,patterns)); - XBT_DEBUG(""); - SURFXML_START_TAG(host); - SURFXML_END_TAG(host); - - xbt_free(temp_cluster_power); - - temp_cluster_bw = xbt_strdup(cluster_bw); - temp_cluster_bw = replace_random_parameter(temp_cluster_bw); - temp_cluster_lat = xbt_strdup(cluster_lat); - temp_cluster_lat = replace_random_parameter(temp_cluster_lat); - XBT_DEBUG("", link_id,temp_cluster_bw, cluster_lat); - A_surfxml_link_state = A_surfxml_link_state_ON; - A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; - if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX) - {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;} - if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE) - {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;} - SURFXML_BUFFER_SET(link_id, link_id); - SURFXML_BUFFER_SET(link_bandwidth, temp_cluster_bw); - SURFXML_BUFFER_SET(link_latency, temp_cluster_lat); - SURFXML_BUFFER_SET(link_bandwidth_file, ""); - SURFXML_BUFFER_SET(link_latency_file, ""); - SURFXML_BUFFER_SET(link_state_file, ""); - SURFXML_START_TAG(link); - SURFXML_END_TAG(link); - - xbt_free(temp_cluster_bw); - xbt_free(temp_cluster_lat); - free(link_id); - free(host_id); + host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, i, struct_cluster->V_cluster_suffix); + link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, i); + + A_surfxml_host_state = A_surfxml_host_state_ON; + + XBT_DEBUG("", host_id, struct_cluster->S_cluster_power); + host.V_host_id = host_id; + if(strcmp(struct_cluster->V_cluster_availability_file,"")){ + xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free); + char* tmp_availability_file = xbt_strdup(struct_cluster->V_cluster_availability_file); + xbt_str_varsubst(tmp_availability_file,patterns); + XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file); + host.V_host_power_trace = tmgr_trace_new(tmp_availability_file); + xbt_free(tmp_availability_file); + } + else + { + XBT_DEBUG("\tavailability_file=\"\""); + } + if(strcmp(struct_cluster->V_cluster_state_file,"")){ + char *tmp_state_file = xbt_strdup(struct_cluster->V_cluster_state_file); + xbt_str_varsubst(tmp_state_file,patterns); + XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file); + host.V_host_state_trace = tmgr_trace_new(tmp_state_file); + xbt_free(tmp_state_file); + } + else + { + XBT_DEBUG("\tstate_file=\"\""); + } + + host.V_host_power_peak = struct_cluster->S_cluster_power; + host.V_host_power_scale = 1.0; + host.V_host_core = struct_cluster->S_cluster_core; + host.V_host_state_initial = SURF_RESOURCE_ON; + host.V_host_coord = ""; + surf_parse_host(&host); + XBT_DEBUG(""); + + A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; + if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;} + if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;} + + XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat); + + struct_lnk = xbt_new0(s_surf_parsing_link_arg_t, 1); + struct_lnk->V_link_id = link_id; + struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bw; + struct_lnk->V_link_latency = struct_cluster->S_cluster_lat; + struct_lnk->V_link_bandwidth_file = NULL; + struct_lnk->V_link_latency_file = NULL; + struct_lnk->V_link_state_file = NULL; + struct_lnk->V_link_state = SURF_RESOURCE_ON; + struct_lnk->V_link_sharing_policy = A_surfxml_link_sharing_policy; + + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED) + struct_lnk->V_policy_initial_link = SURF_LINK_SHARED; + else + { + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FATPIPE) + struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE; + else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX) + struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX; + } + surf_parse_link(); + + xbt_dict_set(cluster_host_link,host_id,strdup(link_id),free); +// XBT_INFO("key '%s' Value '%s'",host_id,link_id); + + ETag_surfxml_host(); + ETag_surfxml_link(); + } break; default: XBT_DEBUG("Malformed radical"); + break; } xbt_dynar_free(&radical_ends); } xbt_dynar_free(&radical_elements); + //Make the router XBT_DEBUG(" "); - router_id = - bprintf("%s%s_router%s", cluster_prefix, cluster_id, - cluster_suffix); - //link_router = bprintf("%s_link_%s_router", cluster_id, cluster_id); - link_backbone = bprintf("%s_backbone", cluster_id); - - XBT_DEBUG("", router_id); - SURFXML_BUFFER_SET(router_id, router_id); + XBT_DEBUG("", struct_cluster->S_cluster_router_id); + SURFXML_BUFFER_SET(router_id, struct_cluster->S_cluster_router_id); SURFXML_BUFFER_SET(router_coordinates, ""); SURFXML_START_TAG(router); SURFXML_END_TAG(router); - //TODO -// xbt_dict_set(patterns, "radical", xbt_strdup("_router"), xbt_free); -// temp_cluster_bw = xbt_strdup(cluster_bw); -// temp_cluster_bw = replace_random_parameter(temp_cluster_bw); -// temp_cluster_lat = xbt_strdup(cluster_lat); -// temp_cluster_lat = replace_random_parameter(temp_cluster_lat); -// XBT_DEBUG("", link_router,temp_cluster_bw, temp_cluster_lat); -// A_surfxml_link_state = A_surfxml_link_state_ON; -// A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; -// if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX) -// {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;} -// if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE) -// {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;} -// SURFXML_BUFFER_SET(link_id, link_router); -// SURFXML_BUFFER_SET(link_bandwidth, temp_cluster_bw); -// SURFXML_BUFFER_SET(link_latency, temp_cluster_lat); -// SURFXML_BUFFER_SET(link_bandwidth_file, ""); -// SURFXML_BUFFER_SET(link_latency_file, ""); -// SURFXML_BUFFER_SET(link_state_file, ""); -// SURFXML_START_TAG(link); -// SURFXML_END_TAG(link); - -// xbt_free(temp_cluster_bw); -// xbt_free(temp_cluster_lat); - - XBT_DEBUG("", link_backbone,cluster_bb_bw, cluster_bb_lat); - A_surfxml_link_state = A_surfxml_link_state_ON; - A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; - if(cluster_bb_sharing_policy == A_surfxml_cluster_bb_sharing_policy_FATPIPE) - {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;} - SURFXML_BUFFER_SET(link_id, link_backbone); - SURFXML_BUFFER_SET(link_bandwidth, cluster_bb_bw); - SURFXML_BUFFER_SET(link_latency, cluster_bb_lat); - SURFXML_BUFFER_SET(link_bandwidth_file, ""); - SURFXML_BUFFER_SET(link_latency_file, ""); - SURFXML_BUFFER_SET(link_state_file, ""); - SURFXML_START_TAG(link); - SURFXML_END_TAG(link); + //Make the backbone + if( (struct_cluster->S_cluster_bb_bw!= 0) && (struct_cluster->S_cluster_bb_lat!=0) ){ + char *link_backbone = bprintf("%s_backbone", struct_cluster->V_cluster_id); + XBT_DEBUG("", link_backbone,struct_cluster->S_cluster_bb_bw, struct_cluster->S_cluster_bb_lat); + + A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; + if(AX_surfxml_cluster_bb_sharing_policy == A_surfxml_cluster_bb_sharing_policy_FATPIPE) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;} + + struct_lnk = xbt_new0(s_surf_parsing_link_arg_t, 1); + struct_lnk->V_link_id = xbt_strdup(link_backbone); + struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bb_bw; + struct_lnk->V_link_latency = struct_cluster->S_cluster_bb_lat; + struct_lnk->V_link_bandwidth_file = NULL; + struct_lnk->V_link_latency_file = NULL; + struct_lnk->V_link_state_file = NULL; + struct_lnk->V_link_state = SURF_RESOURCE_ON; + struct_lnk->V_link_sharing_policy = A_surfxml_link_sharing_policy; + + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED) + struct_lnk->V_policy_initial_link = SURF_LINK_SHARED; + else + struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE; + + surf_parse_link(); + ETag_surfxml_link(); + + surf_parsing_link_up_down_t info = xbt_new0(s_surf_parsing_link_up_down_t, 1); + info->link_up = xbt_lib_get_or_null(link_lib, link_backbone, SURF_LINK_LEVEL); + info->link_down = info->link_up; + xbt_dict_set(cluster_host_link,struct_cluster->V_cluster_id,info,xbt_free); + free(link_backbone); + } XBT_DEBUG(" "); -#ifdef HAVE_PCRE_LIB char *new_suffix = xbt_strdup(""); - radical_elements = xbt_str_split(cluster_suffix, "."); + radical_elements = xbt_str_split(struct_cluster->V_cluster_suffix, "."); xbt_dynar_foreach(radical_elements, iter, groups) { if (strcmp(groups, "")) { char *old_suffix = new_suffix; @@ -1750,194 +1830,13 @@ void routing_parse_Scluster(void) 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(""); - 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("", 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(""); - SURFXML_END_TAG(route); - - //from host to router - XBT_DEBUG(""); - 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("", 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("", 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(""); - SURFXML_END_TAG(route); - //from router to host - XBT_DEBUG(""); - 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("", 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("", 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(""); - SURFXML_END_TAG(route); - - //from host to host - XBT_DEBUG(""); - 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("", 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("", 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("", 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(""); - 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(""); - 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("", 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); - } - - XBT_DEBUG("", cluster_id); - SURFXML_BUFFER_SET(link_ctn_id, bprintf("%s_backbone", cluster_id)); - A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE; - SURFXML_START_TAG(link_ctn); - SURFXML_END_TAG(link_ctn); - - if (j != xbt_dynar_length(tab_elements_num)) { - route_dst = - bprintf("%s_link_%d", cluster_id, - xbt_dynar_get_as(tab_elements_num, j, int)); - XBT_DEBUG("", route_dst); - SURFXML_BUFFER_SET(link_ctn_id, route_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); - free(route_dst); - } - - XBT_DEBUG(""); - SURFXML_END_TAG(route); - } - } - xbt_dynar_free(&tab_elements_num); - -#endif + xbt_dynar_free(&radical_elements); + xbt_free(new_suffix); - free(router_id); - free(link_backbone); - //free(link_router); - xbt_dict_free(&patterns); - free(availability_file); - free(state_file); + if( strcmp(struct_cluster->V_cluster_availability_file,"") + || strcmp(struct_cluster->V_cluster_state_file,"") ) + xbt_dict_free(&patterns); XBT_DEBUG(""); SURFXML_END_TAG(AS); @@ -1969,7 +1868,7 @@ static char* replace_random_parameter(char * string) return string; } -static void clean_dict_random(void) +static void clean_routing_after_parse(void) { xbt_dict_free(&random_value); xbt_dict_free(&patterns); @@ -1978,16 +1877,6 @@ static void clean_dict_random(void) static void routing_parse_Speer(void) { static int AX_ptr = 0; - - char *peer_id = A_surfxml_peer_id; - char *peer_power = A_surfxml_peer_power; - char *peer_bw_in = A_surfxml_peer_bw_in; - char *peer_bw_out = A_surfxml_peer_bw_out; - char *peer_lat = A_surfxml_peer_lat; - char *peer_coord = A_surfxml_peer_coordinates; - char *peer_state_file = A_surfxml_peer_state_file; - char *peer_availability_file = A_surfxml_peer_availability_file; - char *host_id = NULL; char *router_id, *link_router, *link_backbone, *link_id_up, *link_id_down; @@ -1998,57 +1887,58 @@ static void routing_parse_Speer(void) surfxml_bufferstack_push(1); - SURFXML_BUFFER_SET(AS_id, peer_id); + SURFXML_BUFFER_SET(AS_id, struct_peer->V_peer_id); SURFXML_BUFFER_SET(AS_routing, "Full"); - XBT_DEBUG("", peer_id); + XBT_DEBUG("", struct_peer->V_peer_id); SURFXML_START_TAG(AS); XBT_DEBUG(" "); - host_id = bprintf("peer_%s", peer_id); - router_id = bprintf("router_%s", peer_id); - link_id_up = bprintf("link_%s_up", peer_id); - link_id_down = bprintf("link_%s_down", peer_id); + host_id = bprintf("peer_%s", struct_peer->V_peer_id); + router_id = bprintf("router_%s", struct_peer->V_peer_id); + link_id_up = bprintf("link_%s_up", struct_peer->V_peer_id); + link_id_down = bprintf("link_%s_down", struct_peer->V_peer_id); - link_router = bprintf("%s_link_router", peer_id); - link_backbone = bprintf("%s_backbone", peer_id); + link_router = bprintf("%s_link_router", struct_peer->V_peer_id); + link_backbone = bprintf("%s_backbone", struct_peer->V_peer_id); - XBT_DEBUG("", host_id, peer_power); + XBT_DEBUG("", host_id, struct_peer->V_peer_power); A_surfxml_host_state = A_surfxml_host_state_ON; SURFXML_BUFFER_SET(host_id, host_id); - SURFXML_BUFFER_SET(host_power, peer_power); + SURFXML_BUFFER_SET(host_power, struct_peer->V_peer_power); SURFXML_BUFFER_SET(host_availability, "1.0"); - SURFXML_BUFFER_SET(host_availability_file, peer_availability_file); - SURFXML_BUFFER_SET(host_state_file, peer_state_file); + SURFXML_BUFFER_SET(host_availability_file, struct_peer->V_peer_availability_trace); + SURFXML_BUFFER_SET(host_state_file, struct_peer->V_peer_state_trace); SURFXML_BUFFER_SET(host_coordinates, ""); + SURFXML_BUFFER_SET(host_core, "1.0"); SURFXML_START_TAG(host); SURFXML_END_TAG(host); - XBT_DEBUG("", router_id, peer_coord); + XBT_DEBUG("", router_id, struct_peer->V_peer_coord); SURFXML_BUFFER_SET(router_id, router_id); - SURFXML_BUFFER_SET(router_coordinates, peer_coord); + SURFXML_BUFFER_SET(router_coordinates, struct_peer->V_peer_coord); SURFXML_START_TAG(router); SURFXML_END_TAG(router); - XBT_DEBUG("", link_id_up, peer_bw_in, peer_lat); + XBT_DEBUG("", link_id_up, struct_peer->V_peer_bw_in, struct_peer->V_peer_lat); A_surfxml_link_state = A_surfxml_link_state_ON; A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; SURFXML_BUFFER_SET(link_id, link_id_up); - SURFXML_BUFFER_SET(link_bandwidth, peer_bw_in); - SURFXML_BUFFER_SET(link_latency, peer_lat); + SURFXML_BUFFER_SET(link_bandwidth, struct_peer->V_peer_bw_in); + SURFXML_BUFFER_SET(link_latency, struct_peer->V_peer_lat); SURFXML_BUFFER_SET(link_bandwidth_file, ""); SURFXML_BUFFER_SET(link_latency_file, ""); SURFXML_BUFFER_SET(link_state_file, ""); SURFXML_START_TAG(link); SURFXML_END_TAG(link); - XBT_DEBUG("", link_id_down, peer_bw_out, peer_lat); + XBT_DEBUG("", link_id_down, struct_peer->V_peer_bw_out, struct_peer->V_peer_lat); A_surfxml_link_state = A_surfxml_link_state_ON; A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; SURFXML_BUFFER_SET(link_id, link_id_down); - SURFXML_BUFFER_SET(link_bandwidth, peer_bw_out); - SURFXML_BUFFER_SET(link_latency, peer_lat); + SURFXML_BUFFER_SET(link_bandwidth, struct_peer->V_peer_bw_out); + SURFXML_BUFFER_SET(link_latency, struct_peer->V_peer_lat); SURFXML_BUFFER_SET(link_bandwidth_file, ""); SURFXML_BUFFER_SET(link_latency_file, ""); SURFXML_BUFFER_SET(link_state_file, ""); @@ -2198,6 +2088,7 @@ static void routing_parse_Srandom(void) break; default: XBT_INFO("Malformed radical"); + break; } res = random_generate(random); rd_name = bprintf("%s_router",random_id); @@ -2213,36 +2104,20 @@ static void routing_parse_Srandom(void) static void routing_parse_Erandom(void) { - xbt_dict_cursor_t cursor = NULL; + /*xbt_dict_cursor_t cursor = NULL; char *key; char *elem; xbt_dict_foreach(random_value, cursor, key, elem) { XBT_DEBUG("%s = %s",key,elem); } - +*/ } - /* * New methods to init the routing model component from the lua script */ -/* - * calling parse_S_AS_lua with lua values - */ -void routing_AS_init(const char *AS_id, const char *AS_routing) -{ - parse_S_AS_lua((char *) AS_id, (char *) AS_routing); -} - -/* - * calling parse_E_AS_lua to fisnish the creation of routing component - */ -void routing_AS_end(const char *AS_id) -{ - parse_E_AS_lua((char *) AS_id); -} /* * add a host to the network element list