X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c7b463c9c17665403d001fc59cb649551e93d950..6135d964e2f6309e0c3e1608c84faa8264553eba:/src/surf/surfxml_parse.c diff --git a/src/surf/surfxml_parse.c b/src/surf/surfxml_parse.c index 5f16dce143..69a1b6ca7c 100644 --- a/src/surf/surfxml_parse.c +++ b/src/surf/surfxml_parse.c @@ -64,41 +64,10 @@ int surf_parse_get_int(const char *string) { */ /* make sure these symbols are defined as strong ones in this file so that the linker can resolve them */ -xbt_dynar_t STag_surfxml_route_cb_list = NULL; -xbt_dynar_t ETag_surfxml_route_cb_list = NULL; -xbt_dynar_t STag_surfxml_link_ctn_cb_list = NULL; -xbt_dynar_t ETag_surfxml_link_ctn_cb_list = NULL; xbt_dynar_t STag_surfxml_process_cb_list = NULL; xbt_dynar_t ETag_surfxml_process_cb_list = NULL; xbt_dynar_t STag_surfxml_argument_cb_list = NULL; xbt_dynar_t ETag_surfxml_argument_cb_list = NULL; -xbt_dynar_t STag_surfxml_prop_cb_list = NULL; -xbt_dynar_t ETag_surfxml_prop_cb_list = NULL; -xbt_dynar_t STag_surfxml_peer_cb_list = NULL; -xbt_dynar_t ETag_surfxml_peer_cb_list = NULL; -xbt_dynar_t STag_surfxml_trace_cb_list = NULL; -xbt_dynar_t ETag_surfxml_trace_cb_list = NULL; -xbt_dynar_t STag_surfxml_trace_connect_cb_list = NULL; -xbt_dynar_t ETag_surfxml_trace_connect_cb_list = NULL; -xbt_dynar_t STag_surfxml_random_cb_list = NULL; -xbt_dynar_t ETag_surfxml_random_cb_list = NULL; -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; @@ -242,13 +211,6 @@ int ETag_surfxml_include_state(void) void surf_parse_init_callbacks(void) { sg_platf_init(); // FIXME: move to a proper place? - - STag_surfxml_route_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_route_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - STag_surfxml_link_ctn_cb_list = - xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_link_ctn_cb_list = - xbt_dynar_new(sizeof(void_f_void_t), NULL); STag_surfxml_process_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); ETag_surfxml_process_cb_list = @@ -257,45 +219,6 @@ void surf_parse_init_callbacks(void) xbt_dynar_new(sizeof(void_f_void_t), NULL); ETag_surfxml_argument_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - STag_surfxml_prop_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_prop_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - STag_surfxml_trace_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_trace_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - STag_surfxml_trace_connect_cb_list = - xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_trace_connect_cb_list = - xbt_dynar_new(sizeof(void_f_void_t), NULL); - STag_surfxml_random_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_random_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - STag_surfxml_ASroute_cb_list = - xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_ASroute_cb_list = - xbt_dynar_new(sizeof(void_f_void_t), NULL); - STag_surfxml_bypassRoute_cb_list = - 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 = - xbt_dynar_new(sizeof(void_f_void_t), NULL); - STag_surfxml_include_cb_list = - 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) @@ -308,45 +231,13 @@ void surf_parse_free_callbacks(void) { sg_platf_exit(); // FIXME: better place? - xbt_dynar_free(&STag_surfxml_route_cb_list); - xbt_dynar_free(&ETag_surfxml_route_cb_list); - xbt_dynar_free(&STag_surfxml_link_ctn_cb_list); - xbt_dynar_free(&ETag_surfxml_link_ctn_cb_list); xbt_dynar_free(&STag_surfxml_process_cb_list); xbt_dynar_free(&ETag_surfxml_process_cb_list); xbt_dynar_free(&STag_surfxml_argument_cb_list); xbt_dynar_free(&ETag_surfxml_argument_cb_list); - xbt_dynar_free(&STag_surfxml_prop_cb_list); - xbt_dynar_free(&ETag_surfxml_prop_cb_list); - xbt_dynar_free(&STag_surfxml_trace_cb_list); - xbt_dynar_free(&ETag_surfxml_trace_cb_list); - xbt_dynar_free(&STag_surfxml_trace_connect_cb_list); - xbt_dynar_free(&ETag_surfxml_trace_connect_cb_list); - xbt_dynar_free(&STag_surfxml_random_cb_list); - xbt_dynar_free(&ETag_surfxml_random_cb_list); - xbt_dynar_free(&STag_surfxml_ASroute_cb_list); - 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 */ -void ETag_surfxml_router(void) { /* ignored -- do not add content here */ } void STag_surfxml_platform(void) { _XBT_GNUC_UNUSED double version = surf_parse_get_double(A_surfxml_platform_version); @@ -381,6 +272,14 @@ void STag_surfxml_host(void){ xbt_assert(current_property_set == NULL, "Someone forgot to reset the property set to NULL in its closing tag (or XML malformed)"); } +void STag_surfxml_prop(void) +{ + if (!current_property_set) + current_property_set = xbt_dict_new_homogeneous(xbt_free_f); // Maybe, it should raise an error + + xbt_dict_set(current_property_set, A_surfxml_prop_id, xbt_strdup(A_surfxml_prop_value), NULL); +} + void ETag_surfxml_host(void) { s_sg_platf_host_cbarg_t host; memset(&host,0,sizeof(host)); @@ -405,6 +304,17 @@ void ETag_surfxml_host(void) { current_property_set = NULL; } +void STag_surfxml_host_link(void){ + XBT_DEBUG("Create a Host_link for %s",A_surfxml_host_link_id); + s_sg_platf_host_link_cbarg_t host_link; + memset(&host_link,0,sizeof(host_link)); + + host_link.id = A_surfxml_host_link_id; + host_link.link_up = A_surfxml_host_link_up; + host_link.link_down = A_surfxml_host_link_down; + sg_platf_new_host_link(&host_link); +} + void STag_surfxml_router(void){ s_sg_platf_router_cbarg_t router; memset(&router, 0, sizeof(router)); @@ -464,8 +374,19 @@ void STag_surfxml_cluster(void){ cluster.state_trace = A_surfxml_cluster_state_file; sg_platf_new_cluster(&cluster); } -void ETag_surfxml_cluster(void){ - /* nothing I can think of */ + +void STag_surfxml_cabinet(void){ + s_sg_platf_cabinet_cbarg_t cabinet; + memset(&cabinet,0,sizeof(cabinet)); + cabinet.id = A_surfxml_cabinet_id; + cabinet.prefix = A_surfxml_cabinet_prefix; + cabinet.suffix = A_surfxml_cabinet_suffix; + cabinet.power = surf_parse_get_double(A_surfxml_cabinet_power); + cabinet.bw = surf_parse_get_double(A_surfxml_cabinet_bw); + cabinet.lat = surf_parse_get_double(A_surfxml_cabinet_lat); + cabinet.radical = A_surfxml_cabinet_radical; + + sg_platf_new_cabinet(&cabinet); } void STag_surfxml_peer(void){ @@ -480,15 +401,13 @@ void STag_surfxml_peer(void){ 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); } -void ETag_surfxml_peer(void){ - /* nothing to do here */ -} + void STag_surfxml_link(void){ 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_link(void){ s_sg_platf_link_cbarg_t link; memset(&link,0,sizeof(link)); @@ -534,42 +453,181 @@ void ETag_surfxml_link(void){ current_property_set = NULL; } +void STag_surfxml_link_ctn(void){ + s_sg_platf_linkctn_cbarg_t linkctn; + memset(&linkctn,0,sizeof(linkctn)); + + linkctn.id = A_surfxml_link_ctn_id; + + switch (A_surfxml_link_ctn_direction) { + case AU_surfxml_link_ctn_direction: + case A_surfxml_link_ctn_direction_NONE: + linkctn.direction = SURF_LINK_DIRECTION_NONE; + break; + case A_surfxml_link_ctn_direction_UP: + linkctn.direction = SURF_LINK_DIRECTION_UP; + break; + case A_surfxml_link_ctn_direction_DOWN: + linkctn.direction = SURF_LINK_DIRECTION_DOWN; + break; + } + sg_platf_new_linkctn(&linkctn); + +} + +void ETag_surfxml_backbone(void){ + s_sg_platf_link_cbarg_t link; + memset(&link,0,sizeof(link)); + + link.properties = NULL; + + link.id = A_surfxml_backbone_id; + link.bandwidth = surf_parse_get_double(A_surfxml_backbone_bandwidth); + link.latency = surf_parse_get_double(A_surfxml_backbone_latency); + link.state = SURF_RESOURCE_ON; + link.policy = SURF_LINK_SHARED; + + sg_platf_new_link(&link); + routing_cluster_add_backbone(xbt_lib_get_or_null(link_lib, A_surfxml_backbone_id, SURF_LINK_LEVEL)); + current_property_set = NULL; +} + void STag_surfxml_route(void){ - surfxml_call_cb_functions(STag_surfxml_route_cb_list); + xbt_assert(strlen(A_surfxml_route_src) > 0 || strlen(A_surfxml_route_dst) > 0, + "Missing end-points while defining route \"%s\"->\"%s\"", + A_surfxml_route_src, A_surfxml_route_dst); } -void STag_surfxml_link_ctn(void){ - surfxml_call_cb_functions(STag_surfxml_link_ctn_cb_list); +void STag_surfxml_ASroute(void){ + xbt_assert(strlen(A_surfxml_ASroute_src) > 0 || strlen(A_surfxml_ASroute_dst) > 0 + || strlen(A_surfxml_ASroute_gw_src) > 0 || strlen(A_surfxml_ASroute_gw_dst) > 0, + "Missing end-points while defining route \"%s\"->\"%s\" (with %s and %s as gateways)", + A_surfxml_ASroute_src, A_surfxml_ASroute_dst, + A_surfxml_ASroute_gw_src,A_surfxml_ASroute_gw_dst); } -void STag_surfxml_process(void){ - surfxml_call_cb_functions(STag_surfxml_process_cb_list); +void STag_surfxml_bypassRoute(void){ + xbt_assert(strlen(A_surfxml_bypassRoute_src) > 0 || strlen(A_surfxml_bypassRoute_dst) > 0, + "Missing end-points while defining bupass route \"%s\"->\"%s\"", + A_surfxml_bypassRoute_src, A_surfxml_bypassRoute_dst); } -void STag_surfxml_argument(void){ - surfxml_call_cb_functions(STag_surfxml_argument_cb_list); +void STag_surfxml_bypassASroute(void){ + xbt_assert(strlen(A_surfxml_bypassASroute_src) > 0 || strlen(A_surfxml_bypassASroute_dst) > 0 + || strlen(A_surfxml_bypassASroute_gw_src) > 0 || strlen(A_surfxml_bypassASroute_gw_dst) > 0, + "Missing end-points while defining route \"%s\"->\"%s\" (with %s and %s as gateways)", + A_surfxml_bypassASroute_src, A_surfxml_bypassASroute_dst, + A_surfxml_bypassASroute_gw_src,A_surfxml_bypassASroute_gw_dst); } -void STag_surfxml_prop(void){ - surfxml_call_cb_functions(STag_surfxml_prop_cb_list); + +void ETag_surfxml_route(void){ + s_sg_platf_route_cbarg_t route; + memset(&route,0,sizeof(route)); + + route.src = A_surfxml_route_src; + route.dst = A_surfxml_route_dst; + + switch (A_surfxml_route_symmetrical) { + case AU_surfxml_route_symmetrical: + case A_surfxml_route_symmetrical_YES: + route.symmetrical = TRUE; + break; + case A_surfxml_route_symmetrical_NO: + route.symmetrical = FALSE;; + break; + } + + sg_platf_new_route(&route); +} + +void ETag_surfxml_ASroute(void){ + s_sg_platf_ASroute_cbarg_t ASroute; + memset(&ASroute,0,sizeof(ASroute)); + + ASroute.src = A_surfxml_ASroute_src; + ASroute.dst = A_surfxml_ASroute_dst; + ASroute.gw_src = A_surfxml_ASroute_gw_src; + ASroute.gw_dst = A_surfxml_ASroute_gw_dst; + + switch (A_surfxml_ASroute_symmetrical) { + case AU_surfxml_ASroute_symmetrical: + case A_surfxml_ASroute_symmetrical_YES: + ASroute.symmetrical = TRUE; + break; + case A_surfxml_ASroute_symmetrical_NO: + ASroute.symmetrical = FALSE;; + break; + } + + sg_platf_new_ASroute(&ASroute); +} + +void ETag_surfxml_bypassRoute(void){ + s_sg_platf_bypassRoute_cbarg_t route; + memset(&route,0,sizeof(route)); + + route.src = A_surfxml_bypassRoute_src; + route.dst = A_surfxml_bypassRoute_dst; + + sg_platf_new_bypassRoute(&route); +} + +void ETag_surfxml_bypassASroute(void){ + s_sg_platf_bypassASroute_cbarg_t ASroute; + memset(&ASroute,0,sizeof(ASroute)); + + ASroute.src = A_surfxml_bypassASroute_src; + ASroute.dst = A_surfxml_bypassASroute_dst; + ASroute.gw_src = A_surfxml_bypassASroute_gw_src; + ASroute.gw_dst = A_surfxml_bypassASroute_gw_dst; + + sg_platf_new_bypassASroute(&ASroute); } -void STag_surfxml_trace(void){ - surfxml_call_cb_functions(STag_surfxml_trace_cb_list); + +void ETag_surfxml_trace(void){ + s_sg_platf_trace_cbarg_t trace; + memset(&trace,0,sizeof(trace)); + + trace.id = A_surfxml_trace_id; + trace.file = A_surfxml_trace_file; + trace.periodicity = surf_parse_get_double(A_surfxml_trace_periodicity); + trace.pc_data = surfxml_pcdata; + + sg_platf_new_trace(&trace); } + void STag_surfxml_trace_connect(void){ - surfxml_call_cb_functions(STag_surfxml_trace_connect_cb_list); + s_sg_platf_trace_connect_cbarg_t trace_connect; + memset(&trace_connect,0,sizeof(trace_connect)); + + trace_connect.element = A_surfxml_trace_connect_element; + trace_connect.trace = A_surfxml_trace_connect_trace; + + switch (A_surfxml_trace_connect_kind) { + case AU_surfxml_trace_connect_kind: + case A_surfxml_trace_connect_kind_POWER: + trace_connect.kind = SURF_TRACE_CONNECT_KIND_POWER; + break; + case A_surfxml_trace_connect_kind_BANDWIDTH: + trace_connect.kind = SURF_TRACE_CONNECT_KIND_BANDWIDTH; + break; + case A_surfxml_trace_connect_kind_HOST_AVAIL: + trace_connect.kind = SURF_TRACE_CONNECT_KIND_HOST_AVAIL; + break; + case A_surfxml_trace_connect_kind_LATENCY: + trace_connect.kind = SURF_TRACE_CONNECT_KIND_LATENCY; + break; + case A_surfxml_trace_connect_kind_LINK_AVAIL: + trace_connect.kind = SURF_TRACE_CONNECT_KIND_LINK_AVAIL; + break; + } + sg_platf_new_trace_connect(&trace_connect); } + void STag_surfxml_AS(void){ - sg_platf_new_AS_begin(A_surfxml_AS_id,A_surfxml_AS_routing); + sg_platf_new_AS_begin(A_surfxml_AS_id, (int)A_surfxml_AS_routing); } void ETag_surfxml_AS(void){ sg_platf_new_AS_end(); } -void STag_surfxml_ASroute(void){ - surfxml_call_cb_functions(STag_surfxml_ASroute_cb_list); -} -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)"); @@ -590,8 +648,27 @@ void ETag_surfxml_config(void){ XBT_DEBUG("End configuration name = %s",A_surfxml_config_id); xbt_dict_free(¤t_property_set); } -void STag_surfxml_random(void){ - surfxml_call_cb_functions(STag_surfxml_random_cb_list); + +/* nothing to do in those functions */ +void ETag_surfxml_prop(void){} +void STag_surfxml_random(void){} +void ETag_surfxml_random(void){} +void ETag_surfxml_trace_connect(void){} +void STag_surfxml_trace(void){} +void ETag_surfxml_router(void){} +void ETag_surfxml_host_link(void){} +void ETag_surfxml_cluster(void){} +void ETag_surfxml_cabinet(void){} +void ETag_surfxml_peer(void){} +void STag_surfxml_backbone(void){} +void ETag_surfxml_link_ctn(void){} + +// FIXME should not call surfxml_call_cb_functions +void STag_surfxml_process(void){ + surfxml_call_cb_functions(STag_surfxml_process_cb_list); +} +void STag_surfxml_argument(void){ + surfxml_call_cb_functions(STag_surfxml_argument_cb_list); } #define parse_method(type,name) \ @@ -599,17 +676,8 @@ void STag_surfxml_random(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); 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 */ @@ -707,14 +775,6 @@ static XBT_INLINE void surfxml_call_cb_functions(xbt_dynar_t cb_list) /** * With XML parser */ -void parse_properties(void) -{ - if (!current_property_set) - current_property_set = xbt_dict_new_homogeneous(xbt_free_f); // Maybe, it should raise an error - - xbt_dict_set(current_property_set, A_surfxml_prop_id, xbt_strdup(A_surfxml_prop_value), NULL); -} - /* Random tag functions */