X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a7430c3a3c007a1746ac3d8ff320058a66e70b64..b24f30653c7107b2c85ea2f3704f722efe8648e6:/src/surf/surfxml_parse.c diff --git a/src/surf/surfxml_parse.c b/src/surf/surfxml_parse.c index aee71a9f7b..91e0254dd3 100644 --- a/src/surf/surfxml_parse.c +++ b/src/surf/surfxml_parse.c @@ -59,7 +59,7 @@ int surf_parse_get_int(const char *string) { /* - * 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) @@ -380,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); @@ -400,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: @@ -415,7 +511,7 @@ void ETag_surfxml_link(void){ 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: @@ -470,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)"); @@ -497,16 +596,17 @@ void STag_surfxml_random(void){ #define parse_method(type,name) \ void type##Tag_surfxml_##name(void) \ { surfxml_call_cb_functions(type##Tag_surfxml_##name##_cb_list); } -parse_method(E, route); -parse_method(E, link_ctn); -parse_method(E, process); -parse_method(E, argument); -parse_method(E, prop); -parse_method(E, trace); -parse_method(E, trace_connect); -parse_method(E, random); -parse_method(E, ASroute); -parse_method(E, bypassRoute); +parse_method(E, route) +parse_method(E, link_ctn) +parse_method(E, process) +parse_method(E, argument) +parse_method(E, prop) +parse_method(E, trace) +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 */ @@ -528,8 +628,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");