X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/cb8c69ffa2625f5d14255ede0a59d9ab964bffab..c6e3171ad40484dafd04d7e252fee95a76e49bad:/src/surf/surfxml_parse.c diff --git a/src/surf/surfxml_parse.c b/src/surf/surfxml_parse.c index ab0282afe0..c695806fa2 100644 --- a/src/surf/surfxml_parse.c +++ b/src/surf/surfxml_parse.c @@ -45,7 +45,7 @@ double surf_parse_get_double(const char *string) { double res; int ret = sscanf(string, "%lg", &res); if (ret != 1) - surf_parse_error(bprintf("%s is not a double", string)); + surf_parse_error("%s is not a double", string); return res; } @@ -53,13 +53,13 @@ int surf_parse_get_int(const char *string) { int res; int ret = sscanf(string, "%d", &res); if (ret != 1) - surf_parse_error(bprintf("%s is not an integer", string)); + surf_parse_error("%s is not an integer", string); return res; } /* - * All the callback lists that can be overiden anywhere. + * All the callback lists that can be overridden anywhere. * (this list should probably be reduced to the bare minimum to allow the models to work) */ @@ -86,9 +86,20 @@ xbt_dynar_t STag_surfxml_ASroute_cb_list = NULL; xbt_dynar_t ETag_surfxml_ASroute_cb_list = NULL; xbt_dynar_t STag_surfxml_bypassRoute_cb_list = NULL; xbt_dynar_t ETag_surfxml_bypassRoute_cb_list = NULL; +xbt_dynar_t STag_surfxml_bypassASroute_cb_list = NULL; +xbt_dynar_t ETag_surfxml_bypassASroute_cb_list = NULL; xbt_dynar_t STag_surfxml_include_cb_list = NULL; xbt_dynar_t ETag_surfxml_include_cb_list = NULL; +xbt_dynar_t STag_surfxml_storage_cb_list = NULL; +xbt_dynar_t ETag_surfxml_storage_cb_list = NULL; +xbt_dynar_t STag_surfxml_storage_type_cb_list = NULL; +xbt_dynar_t ETag_surfxml_storage_type_cb_list = NULL; +xbt_dynar_t STag_surfxml_mount_cb_list = NULL; +xbt_dynar_t ETag_surfxml_mount_cb_list = NULL; +xbt_dynar_t STag_surfxml_mstorage_cb_list = NULL; +xbt_dynar_t ETag_surfxml_mstorage_cb_list = NULL; + /* The default current property receiver. Setup in the corresponding opening callbacks. */ xbt_dict_t current_property_set = NULL; /* dictionary of random generator data */ @@ -103,6 +114,67 @@ FILE *surf_file_to_parse = NULL; static void init_randomness(void); static void add_randomness(void); +/* + * Stuff relative to storage + */ +void STag_surfxml_storage(void) +{ + XBT_DEBUG("STag_surfxml_storage"); +} +void ETag_surfxml_storage(void) +{ + s_sg_platf_storage_cbarg_t storage; + memset(&storage,0,sizeof(storage)); + + storage.id = A_surfxml_storage_id; + storage.type_id = A_surfxml_storage_typeId; + sg_platf_new_storage(&storage); +} +void STag_surfxml_storage_type(void) +{ + XBT_DEBUG("STag_surfxml_storage_type"); + xbt_assert(current_property_set == NULL, "Someone forgot to reset the property set to NULL in its closing tag (or XML malformed)"); +} +void ETag_surfxml_storage_type(void) +{ + s_sg_platf_storage_type_cbarg_t storage_type; + memset(&storage_type,0,sizeof(storage_type)); + + storage_type.content = A_surfxml_storage_type_content; + storage_type.id = A_surfxml_storage_type_id; + storage_type.model = A_surfxml_storage_type_model; + storage_type.properties = current_property_set; + storage_type.size = surf_parse_get_int(A_surfxml_storage_type_size); + sg_platf_new_storage_type(&storage_type); + current_property_set = NULL; +} +void STag_surfxml_mstorage(void) +{ + XBT_DEBUG("STag_surfxml_mstorage"); +} +void ETag_surfxml_mstorage(void) +{ + s_sg_platf_mstorage_cbarg_t mstorage; + memset(&mstorage,0,sizeof(mstorage)); + + mstorage.name = A_surfxml_mstorage_name; + mstorage.type_id = A_surfxml_mstorage_typeId; + sg_platf_new_mstorage(&mstorage); +} +void STag_surfxml_mount(void) +{ + XBT_DEBUG("STag_surfxml_mount"); +} +void ETag_surfxml_mount(void) +{ + s_sg_platf_mount_cbarg_t mount; + memset(&mount,0,sizeof(mount)); + + mount.name = A_surfxml_mount_name; + mount.id = A_surfxml_mount_id; + sg_platf_new_mount(&mount); +} + /* * Stuff relative to the tag */ @@ -112,7 +184,7 @@ static xbt_dynar_t surf_parsed_filename_stack = NULL; void STag_surfxml_include(void) { - XBT_INFO("STag_surfxml_include '%s'",A_surfxml_include_file); + XBT_DEBUG("STag_surfxml_include '%s'",A_surfxml_include_file); xbt_dynar_push(surf_parsed_filename_stack,&surf_parsed_filename); // save old file name surf_parsed_filename = xbt_strdup(A_surfxml_include_file); @@ -147,22 +219,22 @@ void ETag_surfxml_include(void) { int ETag_surfxml_include_state(void) { fflush(NULL); - XBT_INFO("ETag_surfxml_include_state '%s'",A_surfxml_include_file); + XBT_DEBUG("ETag_surfxml_include_state '%s'",A_surfxml_include_file); - if(!xbt_dynar_is_empty(surf_input_buffer_stack)) // nope, that's a true premature EOF. Let the parser die verbosely. - return 1; + if(xbt_dynar_is_empty(surf_input_buffer_stack)) // nope, that's a true premature EOF. Let the parser die verbosely. + return 0; // Yeah, we were in an Restore state and proceed. fclose(surf_file_to_parse); xbt_dynar_pop(surf_file_to_parse_stack, &surf_file_to_parse); surf_parse_pop_buffer_state(); - xbt_dynar_pop(surf_input_buffer_stack,surf_input_buffer); + xbt_dynar_pop(surf_input_buffer_stack,&surf_input_buffer); // Restore the filename for error messages free(surf_parsed_filename); xbt_dynar_pop(surf_parsed_filename_stack,&surf_parsed_filename); - return 0; + return 1; } @@ -202,6 +274,10 @@ void surf_parse_init_callbacks(void) xbt_dynar_new(sizeof(void_f_void_t), NULL); ETag_surfxml_bypassRoute_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); + STag_surfxml_bypassASroute_cb_list = + xbt_dynar_new(sizeof(void_f_void_t), NULL); + ETag_surfxml_bypassASroute_cb_list = + xbt_dynar_new(sizeof(void_f_void_t), NULL); STag_surfxml_peer_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); ETag_surfxml_peer_cb_list = @@ -210,6 +286,15 @@ void surf_parse_init_callbacks(void) xbt_dynar_new(sizeof(void_f_void_t), NULL); ETag_surfxml_include_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); + + STag_surfxml_storage_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); + ETag_surfxml_storage_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); + STag_surfxml_storage_type_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); + ETag_surfxml_storage_type_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); + STag_surfxml_mount_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); + ETag_surfxml_mount_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); + STag_surfxml_mstorage_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); + ETag_surfxml_mstorage_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); } void surf_parse_reset_callbacks(void) @@ -242,10 +327,21 @@ void surf_parse_free_callbacks(void) xbt_dynar_free(&ETag_surfxml_ASroute_cb_list); xbt_dynar_free(&STag_surfxml_bypassRoute_cb_list); xbt_dynar_free(&ETag_surfxml_bypassRoute_cb_list); + xbt_dynar_free(&STag_surfxml_bypassASroute_cb_list); + xbt_dynar_free(&ETag_surfxml_bypassASroute_cb_list); xbt_dynar_free(&STag_surfxml_peer_cb_list); xbt_dynar_free(&ETag_surfxml_peer_cb_list); xbt_dynar_free(&STag_surfxml_include_cb_list); xbt_dynar_free(&ETag_surfxml_include_cb_list); + + xbt_dynar_free(&STag_surfxml_storage_cb_list); + xbt_dynar_free(&ETag_surfxml_storage_cb_list); + xbt_dynar_free(&STag_surfxml_mstorage_cb_list); + xbt_dynar_free(&ETag_surfxml_mstorage_cb_list); + xbt_dynar_free(&STag_surfxml_mount_cb_list); + xbt_dynar_free(&ETag_surfxml_mount_cb_list); + xbt_dynar_free(&STag_surfxml_storage_type_cb_list); + xbt_dynar_free(&ETag_surfxml_storage_type_cb_list); } /* Stag and Etag parse functions */ @@ -294,8 +390,8 @@ void ETag_surfxml_host(void) { host.power_peak = get_cpu_power(A_surfxml_host_power); host.power_scale = surf_parse_get_double( A_surfxml_host_availability); host.core_amount = surf_parse_get_int(A_surfxml_host_core); - host.power_trace = tmgr_trace_new(A_surfxml_host_availability_file); - host.state_trace = tmgr_trace_new(A_surfxml_host_state_file); + host.power_trace = tmgr_trace_new_from_file(A_surfxml_host_availability_file); + host.state_trace = tmgr_trace_new_from_file(A_surfxml_host_state_file); xbt_assert((A_surfxml_host_state == A_surfxml_host_state_ON) || (A_surfxml_host_state == A_surfxml_host_state_OFF), "Invalid state"); if (A_surfxml_host_state == A_surfxml_host_state_ON) @@ -346,9 +442,8 @@ void STag_surfxml_cluster(void){ cluster.sharing_policy = SURF_LINK_FATPIPE; break; default: - surf_parse_error(bprintf - ("Invalid cluster sharing policy for cluster %s", - cluster.id)); + surf_parse_error("Invalid cluster sharing policy for cluster %s", + cluster.id); break; } switch (AX_surfxml_cluster_bb_sharing_policy) { @@ -359,9 +454,8 @@ void STag_surfxml_cluster(void){ cluster.bb_sharing_policy = SURF_LINK_SHARED; break; default: - surf_parse_error(bprintf - ("Invalid bb sharing policy in cluster %s", - cluster.id)); + surf_parse_error("Invalid bb sharing policy in cluster %s", + cluster.id); break; } @@ -382,8 +476,8 @@ void STag_surfxml_peer(void){ peer.bw_out = surf_parse_get_double(A_surfxml_peer_bw_out); peer.lat = surf_parse_get_double(A_surfxml_peer_lat); peer.coord = A_surfxml_peer_coordinates; - peer.availability_trace = tmgr_trace_new(A_surfxml_peer_availability_file); - peer.state_trace = tmgr_trace_new(A_surfxml_peer_state_file); + peer.availability_trace = tmgr_trace_new_from_file(A_surfxml_peer_availability_file); + peer.state_trace = tmgr_trace_new_from_file(A_surfxml_peer_state_file); surfxml_call_cb_functions(STag_surfxml_peer_cb_list); sg_platf_new_peer(&peer); @@ -402,9 +496,9 @@ void ETag_surfxml_link(void){ link.id = A_surfxml_link_id; link.bandwidth = surf_parse_get_double(A_surfxml_link_bandwidth); - link.bandwidth_trace = tmgr_trace_new(A_surfxml_link_bandwidth_file); + link.bandwidth_trace = tmgr_trace_new_from_file(A_surfxml_link_bandwidth_file); link.latency = surf_parse_get_double(A_surfxml_link_latency); - link.latency_trace = tmgr_trace_new(A_surfxml_link_latency_file); + link.latency_trace = tmgr_trace_new_from_file(A_surfxml_link_latency_file); switch (A_surfxml_link_state) { case A_surfxml_link_state_ON: @@ -414,10 +508,10 @@ void ETag_surfxml_link(void){ link.state = SURF_RESOURCE_OFF; break; default: - surf_parse_error(bprintf("invalid state for link %s",link.id)); + surf_parse_error("invalid state for link %s", link.id); break; } - link.state_trace = tmgr_trace_new(A_surfxml_link_state_file); + link.state_trace = tmgr_trace_new_from_file(A_surfxml_link_state_file); switch (A_surfxml_link_sharing_policy) { case A_surfxml_link_sharing_policy_SHARED: @@ -430,7 +524,7 @@ void ETag_surfxml_link(void){ link.policy = SURF_LINK_FULLDUPLEX; break; default: - surf_parse_error(bprintf("Invalid sharing policy in link %s",link.id)); + surf_parse_error("Invalid sharing policy in link %s", link.id); break; } @@ -472,6 +566,9 @@ void STag_surfxml_ASroute(void){ void STag_surfxml_bypassRoute(void){ surfxml_call_cb_functions(STag_surfxml_bypassRoute_cb_list); } +void STag_surfxml_bypassASroute(void){ + surfxml_call_cb_functions(STag_surfxml_bypassASroute_cb_list); +} void STag_surfxml_config(void){ XBT_DEBUG("START configuration name = %s",A_surfxml_config_id); xbt_assert(current_property_set == NULL, "Someone forgot to reset the property set to NULL in its closing tag (or XML malformed)"); @@ -496,9 +593,11 @@ void STag_surfxml_random(void){ surfxml_call_cb_functions(STag_surfxml_random_cb_list); } -#define parse_method(type,name) \ -void type##Tag_surfxml_##name(void) \ -{ surfxml_call_cb_functions(type##Tag_surfxml_##name##_cb_list); } +#define parse_method(type,name) \ + void type##Tag_surfxml_##name(void) \ + { surfxml_call_cb_functions(type##Tag_surfxml_##name##_cb_list); } \ + void type##Tag_surfxml_##name(void) + parse_method(E, route); parse_method(E, link_ctn); parse_method(E, process); @@ -509,6 +608,7 @@ parse_method(E, trace_connect); parse_method(E, random); parse_method(E, ASroute); parse_method(E, bypassRoute); +parse_method(E, bypassASroute); /* Open and Close parse file */ @@ -530,8 +630,8 @@ void surf_parse_open(const char *file) if (!surf_file_to_parse_stack) surf_file_to_parse_stack = xbt_dynar_new(sizeof(FILE *), NULL); - if (!surf_file_to_parse_stack) - surf_parsed_filename_stack = xbt_dynar_new(sizeof(FILE *), xbt_free_f); + if (!surf_parsed_filename_stack) + surf_parsed_filename_stack = xbt_dynar_new(sizeof(char *), &xbt_free_ref); surf_parsed_filename = xbt_strdup(file); surf_file_to_parse = surf_fopen(file, "r"); @@ -640,8 +740,8 @@ double get_cpu_power(const char *power) return power_scale; } -double random_min, random_max, random_mean, random_std_deviation, - random_generator; +double random_min, random_max, random_mean, random_std_deviation; +e_random_generator_t random_generator; char *random_id; static void init_randomness(void) @@ -651,7 +751,24 @@ static void init_randomness(void) random_max = surf_parse_get_double(A_surfxml_random_max); random_mean = surf_parse_get_double(A_surfxml_random_mean); random_std_deviation = surf_parse_get_double(A_surfxml_random_std_deviation); - random_generator = A_surfxml_random_generator; + switch (A_surfxml_random_generator) { + case AU_surfxml_random_generator: + case A_surfxml_random_generator_NONE: + random_generator = NONE; + break; + case A_surfxml_random_generator_DRAND48: + random_generator = DRAND48; + break; + case A_surfxml_random_generator_RAND: + random_generator = RAND; + break; + case A_surfxml_random_generator_RNGSTREAM: + random_generator = RNGSTREAM; + break; + default: + surf_parse_error("Invalid random generator"); + break; + } } static void add_randomness(void)