X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4e651064c117835e8a9340bc416a6dc1781cc56d..21b97caf3d5c7cefcf6ec9bcfbb8e866d1b8f465:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 7253143759..8ff144c2ba 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -44,6 +44,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"); @@ -55,7 +56,7 @@ 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 { @@ -64,7 +65,9 @@ typedef enum { SURF_MODEL_DIJKSTRA, SURF_MODEL_DIJKSTRACACHE, SURF_MODEL_NONE, - SURF_MODEL_RULEBASED + SURF_MODEL_RULEBASED, + SURF_MODEL_VIVALDI, + SURF_MODEL_CLUSTER } e_routing_types; struct s_model_type routing_models[] = { {"Full", @@ -91,6 +94,8 @@ struct s_model_type routing_models[] = { {"Full", model_rulebased_load, model_rulebased_unload, model_rulebased_end}, {"Vivaldi", "Vivaldi routing", model_rulebased_create, model_rulebased_load, model_rulebased_unload, model_rulebased_end}, +{"Cluster", "Cluster routing", model_cluster_create, + model_rulebased_load, model_rulebased_unload, model_rulebased_end}, {NULL, NULL, NULL, NULL, NULL, NULL} }; @@ -183,7 +188,9 @@ static void parse_E_host(void) */ static void parse_S_host_XML(void) { - parse_S_host(A_surfxml_host_id, A_surfxml_host_coordinates); +// XBT_INFO("parse_S_host_XML"); +// XBT_INFO("'%s' '%s'",struct_host->V_host_id, struct_host->V_host_coord); + parse_S_host(struct_host->V_host_id, struct_host->V_host_coord); } static void parse_E_host_XML(void) { @@ -419,22 +426,20 @@ static void parse_E_bypassRoute_store_route(void) * make the new structure and * set the parsing functions to allows parsing the part of the routing tree */ -static void parse_S_AS(char *AS_id, char *AS_routing) +void routing_AS_init(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 */ + /* 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); @@ -487,17 +492,9 @@ static void parse_S_AS(char *AS_id, char *AS_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) +static void parse_S_AS(void) { - parse_S_AS(id, mode); + routing_AS_init(A_surfxml_AS_id, A_surfxml_AS_routing); } @@ -507,11 +504,11 @@ static void parse_S_AS_lua(char *id, char *mode) * 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 routing_AS_end(const char *AS_id) { if (current_routing == NULL) { - THROWF(arg_error, 0, "Close AS(%s), that never open", AS_id); + THROWF(arg_error, 0, "Close AS(%s), that were never opened", AS_id); } else { network_element_info_t info = NULL; xbt_assert(!xbt_lib_get_or_null(as_router_lib,current_routing->name, ROUTING_ASR_LEVEL), @@ -532,17 +529,9 @@ 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) +static void parse_E_AS(void) { - parse_E_AS(id); + routing_AS_end(A_surfxml_AS_id); } /* Aux Business methods */ @@ -851,6 +840,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 * @@ -892,6 +895,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) @@ -988,8 +993,8 @@ 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_AS_cb_list, &parse_S_AS); + surfxml_add_callback(ETag_surfxml_AS_cb_list, &parse_E_AS); surfxml_add_callback(STag_surfxml_cluster_cb_list, &routing_parse_Scluster); @@ -998,7 +1003,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(); @@ -1010,18 +1015,9 @@ 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 **************** */ @@ -1499,7 +1495,7 @@ static void routing_parse_Econfig(void) 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); + XBT_INFO("The custom configuration '%s' is already defined by user!",key); free(cfg); } XBT_DEBUG("End configuration name = %s",A_surfxml_config_id); @@ -1507,17 +1503,21 @@ static void routing_parse_Econfig(void) void routing_parse_Scluster(void) { + if(!cluster_host_link) + cluster_host_link = xbt_dict_new(); + static int AX_ptr = 0; char *host_id, *groups, *link_id = NULL; - char *availability_file = xbt_strdup(A_surfxml_cluster_availability_file); - char *state_file = xbt_strdup(A_surfxml_cluster_state_file); - if(xbt_dict_size(patterns)==0) - patterns = xbt_dict_new(); + 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); + 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); + } char *route_src_dst; unsigned int iter; @@ -1526,6 +1526,8 @@ void routing_parse_Scluster(void) 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; + if(cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX) + xbt_dict_set(cluster_host_link,struct_cluster->V_cluster_id,bprintf("fullduplex"),free); static unsigned int surfxml_buffer_stack_stack_ptr = 1; static unsigned int surfxml_buffer_stack_stack[1024]; @@ -1535,8 +1537,8 @@ void routing_parse_Scluster(void) surfxml_bufferstack_push(1); SURFXML_BUFFER_SET(AS_id, struct_cluster->V_cluster_id); - SURFXML_BUFFER_SET(AS_routing, "RuleBased"); - XBT_DEBUG("", 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(struct_cluster->V_cluster_radical, ","); @@ -1544,69 +1546,80 @@ void routing_parse_Scluster(void) 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", struct_cluster->V_cluster_prefix, start, struct_cluster->V_cluster_suffix); - link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, start); - xbt_dict_set(patterns, "radical", bprintf("%d", start), xbt_free); - A_surfxml_host_state = A_surfxml_host_state_ON; - - XBT_DEBUG("", host_id, struct_cluster->S_cluster_power); - SURFXML_BUFFER_SET(host_id, host_id); - SURFXML_BUFFER_SET(host_power, struct_cluster->S_cluster_power); - - if(!strcmp(A_surfxml_cluster_availability_file,"")){ - char* tmp_availability_file = xbt_strdup(availability_file); + 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); + struct_host = xbt_new0(s_hostSG_t, 1); + struct_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); - SURFXML_BUFFER_SET(host_availability_file, tmp_availability_file); - xbt_free(tmp_availability_file); - } - else - { + struct_host->V_host_power_trace = tmgr_trace_new(tmp_availability_file); + xbt_free(tmp_availability_file); + } + else + { XBT_DEBUG("\tavailability_file=\"\""); - SURFXML_BUFFER_SET(host_availability_file, ""); - } - if(!strcmp(A_surfxml_cluster_state_file,"")){ - char *tmp_state_file = xbt_strdup(state_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); - SURFXML_BUFFER_SET(host_state_file, tmp_state_file); - xbt_free(tmp_state_file); - } - else - { - XBT_DEBUG("\tstate_file=\"\""); - SURFXML_BUFFER_SET(host_state_file, ""); - } - - SURFXML_BUFFER_SET(host_core, struct_cluster->S_cluster_core); - SURFXML_BUFFER_SET(host_availability, "1.0"); - SURFXML_BUFFER_SET(host_coordinates, ""); - SURFXML_START_TAG(host); - SURFXML_END_TAG(host); - XBT_DEBUG(""); - - 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;} + struct_host->V_host_state_trace = tmgr_trace_new(tmp_state_file); + xbt_free(tmp_state_file); + } + else + { + XBT_DEBUG("\tstate_file=\"\""); + } - XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat); + struct_host->V_host_power_peak = struct_cluster->S_cluster_power; + struct_host->V_host_power_scale = 1.0; + struct_host->V_host_core = struct_cluster->S_cluster_core; + struct_host->V_host_state_initial = SURF_RESOURCE_ON; + struct_host->V_host_coord = ""; + STag_surfxml_host_cluster(); + XBT_DEBUG(""); + + 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;} + + XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat); + + struct_lnk = xbt_new0(s_link_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; + } + STag_surfxml_link_cluster(); - SURFXML_BUFFER_SET(link_id, link_id); - SURFXML_BUFFER_SET(link_bandwidth, struct_cluster->S_cluster_bw); - SURFXML_BUFFER_SET(link_latency, struct_cluster->S_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_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(); - free(link_id); - free(host_id); - break; + break; case 2: @@ -1614,67 +1627,81 @@ 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", struct_cluster->V_cluster_prefix, i, struct_cluster->V_cluster_suffix); - link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, i); + 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); + struct_host = xbt_new0(s_hostSG_t, 1); + struct_host->V_host_id = host_id; + if(!strcmp(struct_cluster->V_cluster_availability_file,"")){ xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free); - A_surfxml_host_state = A_surfxml_host_state_ON; - - XBT_DEBUG("", host_id, struct_cluster->S_cluster_power); - SURFXML_BUFFER_SET(host_id, host_id); - SURFXML_BUFFER_SET(host_power, struct_cluster->S_cluster_power); - - if(!strcmp(A_surfxml_cluster_availability_file,"")){ - char* tmp_availability_file = xbt_strdup(availability_file); - xbt_str_varsubst(tmp_availability_file,patterns); - XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file); - SURFXML_BUFFER_SET(host_availability_file, tmp_availability_file); - xbt_free(tmp_availability_file); - } - else - { - XBT_DEBUG("\tavailability_file=\"\""); - SURFXML_BUFFER_SET(host_availability_file, ""); - } - if(!strcmp(A_surfxml_cluster_state_file,"")){ - char *tmp_state_file = xbt_strdup(state_file); - xbt_str_varsubst(tmp_state_file,patterns); - XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file); - SURFXML_BUFFER_SET(host_state_file, tmp_state_file); - xbt_free(tmp_state_file); - } - else - { - XBT_DEBUG("\tstate_file=\"\""); - SURFXML_BUFFER_SET(host_state_file, ""); - } - - SURFXML_BUFFER_SET(host_core, struct_cluster->S_cluster_core); - SURFXML_BUFFER_SET(host_availability, "1.0"); - SURFXML_BUFFER_SET(host_coordinates, ""); - SURFXML_START_TAG(host); - SURFXML_END_TAG(host); - XBT_DEBUG(""); - - 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;} - - XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat); - - SURFXML_BUFFER_SET(link_id, link_id); - SURFXML_BUFFER_SET(link_bandwidth, struct_cluster->S_cluster_bw); - SURFXML_BUFFER_SET(link_latency, struct_cluster->S_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); - - free(link_id); - free(host_id); + 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); + struct_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); + struct_host->V_host_state_trace = tmgr_trace_new(tmp_state_file); + xbt_free(tmp_state_file); + } + else + { + XBT_DEBUG("\tstate_file=\"\""); + } + + struct_host->V_host_power_peak = struct_cluster->S_cluster_power; + struct_host->V_host_power_scale = 1.0; + struct_host->V_host_core = struct_cluster->S_cluster_core; + struct_host->V_host_state_initial = SURF_RESOURCE_ON; + struct_host->V_host_coord = ""; + STag_surfxml_host_cluster(); + XBT_DEBUG(""); + + 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;} + + XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat); + + struct_lnk = xbt_new0(s_link_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; + } + STag_surfxml_link_cluster(); + + 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; @@ -1694,22 +1721,36 @@ void routing_parse_Scluster(void) SURFXML_START_TAG(router); SURFXML_END_TAG(router); - if( strcmp(struct_cluster->S_cluster_bb_bw,"") && strcmp(struct_cluster->S_cluster_bb_lat,"") ){ - 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_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, struct_cluster->S_cluster_bb_bw); - SURFXML_BUFFER_SET(link_latency, struct_cluster->S_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); - free(link_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(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_link_t, 1); + struct_lnk->V_link_id = 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 + { + 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; + } + + STag_surfxml_link_cluster(); + ETag_surfxml_link(); } XBT_DEBUG(" "); @@ -1724,137 +1765,27 @@ void routing_parse_Scluster(void) free(old_suffix); } } - route_src_dst = bprintf("%s(.*)%s", struct_cluster->V_cluster_prefix, new_suffix); + xbt_dynar_free(&radical_elements); xbt_free(new_suffix); - char *pcre_link_src = bprintf("%s_link_$1src", struct_cluster->V_cluster_id); - char *pcre_link_backbone = bprintf("%s_backbone", struct_cluster->V_cluster_id); - char *pcre_link_dst = bprintf("%s_link_$1dst", struct_cluster->V_cluster_id); - - //from router to router - XBT_DEBUG("S_cluster_router_id, struct_cluster->S_cluster_router_id); - XBT_DEBUG("symmetrical=\"NO\">"); - SURFXML_BUFFER_SET(route_src, struct_cluster->S_cluster_router_id); - SURFXML_BUFFER_SET(route_dst, struct_cluster->S_cluster_router_id); - A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO; - SURFXML_START_TAG(route); - - if( strcmp(struct_cluster->S_cluster_bb_bw,"") && strcmp(struct_cluster->S_cluster_bb_lat,"") ){ - 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("S_cluster_router_id); - XBT_DEBUG("symmetrical=\"NO\">"); - SURFXML_BUFFER_SET(route_src, route_src_dst); - SURFXML_BUFFER_SET(route_dst, struct_cluster->S_cluster_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); - - if( strcmp(struct_cluster->S_cluster_bb_bw,"") && strcmp(struct_cluster->S_cluster_bb_lat,"") ){ - 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("S_cluster_router_id, route_src_dst); - XBT_DEBUG("symmetrical=\"NO\">"); - SURFXML_BUFFER_SET(route_src, struct_cluster->S_cluster_router_id); - SURFXML_BUFFER_SET(route_dst, route_src_dst); - A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO; - SURFXML_START_TAG(route); - - if( strcmp(struct_cluster->S_cluster_bb_bw,"") && strcmp(struct_cluster->S_cluster_bb_lat,"") ){ - 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); - - if( strcmp(struct_cluster->S_cluster_bb_bw,"") && strcmp(struct_cluster->S_cluster_bb_lat,"") ){ - 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); - - xbt_free(availability_file); - xbt_free(state_file); - - xbt_dict_free(&patterns); + 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); XBT_DEBUG(" "); surfxml_bufferstack_pop(1); + +// xbt_dict_cursor_t cursor = NULL; +// char *key,*data; +// +// XBT_INFO("\n"); +// xbt_dict_foreach(cluster_host_link,cursor,key,data){ +// XBT_INFO("%s : %s",key,data); +// } } /* * This function take a string and replace parameters from patterns dict. @@ -1880,7 +1811,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); @@ -2116,36 +2047,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