X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2d5b327d0b5304bc0beaff6aae611dda6dac1b03..5e2dd3ecf166c2d82974beb220aeb8dd4200f105:/src/surf/surfxml_parse.c diff --git a/src/surf/surfxml_parse.c b/src/surf/surfxml_parse.c index be1a261d50..a2afeae851 100644 --- a/src/surf/surfxml_parse.c +++ b/src/surf/surfxml_parse.c @@ -1,6 +1,5 @@ -/* $Id$ */ - -/* Copyright (c) 2004 Arnaud Legrand. All rights reserved. */ +/* Copyright (c) 2006, 2007, 2008, 2009, 2010. 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. */ @@ -29,11 +28,11 @@ xbt_dict_t trace_connect_list_latency = NULL; /* This buffer is used to store the original buffer before substituing it by out own buffer. Usefull for the foreach tag */ static xbt_dynar_t surfxml_bufferstack_stack = NULL; -static int surfxml_bufferstack_size = 2048; +int surfxml_bufferstack_size = 2048; static char *old_buff = NULL; static void surf_parse_error(char *msg); -static void push_surfxml_bufferstack(int new) +void surfxml_bufferstack_push(int new) { if (!new) old_buff = surfxml_bufferstack; @@ -43,7 +42,7 @@ static void push_surfxml_bufferstack(int new) } } -static void pop_surfxml_bufferstack(int new) +void surfxml_bufferstack_pop(int new) { if (!new) surfxml_bufferstack = old_buff; @@ -56,9 +55,7 @@ static void pop_surfxml_bufferstack(int new) /* Stores the set name reffered to by the foreach tag */ static char *foreach_set_name; static xbt_dynar_t main_STag_surfxml_host_cb_list = NULL; -static xbt_dynar_t main_ETag_surfxml_host_cb_list = NULL; static xbt_dynar_t main_STag_surfxml_link_cb_list = NULL; -static xbt_dynar_t main_ETag_surfxml_link_cb_list = NULL; /* make sure these symbols are defined as strong ones in this file so that the linked can resolve them */ xbt_dynar_t STag_surfxml_platform_cb_list = NULL; @@ -93,6 +90,10 @@ xbt_dynar_t STag_surfxml_trace_c_connect_cb_list = NULL; xbt_dynar_t ETag_surfxml_trace_c_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_AS_cb_list = NULL; // addded by david +xbt_dynar_t ETag_surfxml_AS_cb_list = NULL; // addded by david +xbt_dynar_t STag_surfxml_gateway_cb_list = NULL; // addded by david +xbt_dynar_t ETag_surfxml_gateway_cb_list = NULL; // addded by david /* Stores the sets defined in the XML */ xbt_dict_t set_list = NULL; @@ -119,14 +120,13 @@ FILE *surf_file_to_parse = NULL; static void convert_route_multi_to_routes(void); static void parse_route_elem(void); -static void parse_foreach(void); +static void parse_Stag_foreach(void); static void parse_sets(void); -static void parse_route_multi_set_endpoints(void); -static void parse_route_multi_set_route(void); -static void parse_cluster(void); -static void parse_trace_init(void); -static void parse_trace_finalize(void); -static void parse_trace_c_connect(void); +static void parse_Stag_route_multi(void); +static void parse_Etag_route_multi(void); +static void parse_Stag_trace(void); +static void parse_Etag_trace(void); +static void parse_Stag_trace_c_connect(void); static void init_randomness(void); static void add_randomness(void); @@ -164,6 +164,10 @@ void surf_parse_free_callbacks(void) xbt_dynar_free(&ETag_surfxml_trace_c_connect_cb_list); xbt_dynar_free(&STag_surfxml_random_cb_list); xbt_dynar_free(&ETag_surfxml_random_cb_list); + xbt_dynar_free(&STag_surfxml_AS_cb_list); // addded by david + xbt_dynar_free(&ETag_surfxml_AS_cb_list); // addded by david + xbt_dynar_free(&STag_surfxml_gateway_cb_list); // addded by david + xbt_dynar_free(&ETag_surfxml_gateway_cb_list); // addded by david } void surf_parse_reset_parser(void) @@ -207,6 +211,10 @@ void surf_parse_reset_parser(void) 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_AS_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); // addded by david + ETag_surfxml_AS_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); // addded by david + STag_surfxml_gateway_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); // addded by david + ETag_surfxml_gateway_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); // addded by david } void STag_surfxml_include(void) @@ -273,6 +281,7 @@ void ETag_surfxml_platform(void) void STag_surfxml_host(void) { surfxml_call_cb_functions(STag_surfxml_host_cb_list); + } void ETag_surfxml_host(void) @@ -363,7 +372,7 @@ void ETag_surfxml_set(void) void STag_surfxml_foreach(void) { /* Save the current buffer */ - push_surfxml_bufferstack(0); + surfxml_bufferstack_push(0); surfxml_call_cb_functions(STag_surfxml_foreach_cb_list); } @@ -373,18 +382,11 @@ void ETag_surfxml_foreach(void) /* free the temporary dynar and restore original */ xbt_dynar_free(&STag_surfxml_host_cb_list); - xbt_dynar_free(&ETag_surfxml_host_cb_list); - STag_surfxml_host_cb_list = main_STag_surfxml_host_cb_list; - ETag_surfxml_host_cb_list = main_ETag_surfxml_host_cb_list; /* free the temporary dynar and restore original */ xbt_dynar_free(&STag_surfxml_link_cb_list); - xbt_dynar_free(&ETag_surfxml_link_cb_list); - STag_surfxml_link_cb_list = main_STag_surfxml_link_cb_list; - ETag_surfxml_link_cb_list = main_ETag_surfxml_link_cb_list; - } void STag_surfxml_route_c_multi(void) @@ -437,6 +439,26 @@ void ETag_surfxml_random(void) surfxml_call_cb_functions(ETag_surfxml_random_cb_list); } +void STag_surfxml_AS(void) // addded by david +{ + surfxml_call_cb_functions(STag_surfxml_AS_cb_list); +} + +void ETag_surfxml_AS(void) // addded by david +{ + surfxml_call_cb_functions(ETag_surfxml_AS_cb_list); +} + +void STag_surfxml_gateway(void) // addded by david +{ + surfxml_call_cb_functions(STag_surfxml_gateway_cb_list); +} + +void ETag_surfxml_gateway(void) // addded by david +{ + surfxml_call_cb_functions(ETag_surfxml_gateway_cb_list); +} + void surf_parse_open(const char *file) { static int warned = 0; /* warn only once */ @@ -448,13 +470,14 @@ void surf_parse_open(const char *file) } return; } + surf_file_to_parse = surf_fopen(file, "r"); + xbt_assert1((surf_file_to_parse), "Unable to open \"%s\"\n", file); + if (!surf_input_buffer_stack) surf_input_buffer_stack = xbt_dynar_new(sizeof(YY_BUFFER_STATE), NULL); if (!surf_file_to_parse_stack) surf_file_to_parse_stack = xbt_dynar_new(sizeof(FILE *), NULL); - surf_file_to_parse = surf_fopen(file, "r"); - xbt_assert1((surf_file_to_parse), "Unable to open \"%s\"\n", file); surf_input_buffer = surf_parse__create_buffer(surf_file_to_parse, 10); surf_parse__switch_to_buffer(surf_input_buffer); surf_parse_lineno = 1; @@ -473,7 +496,6 @@ void surf_parse_close(void) } } - static int _surf_parse(void) { return surf_parse_lex(); @@ -522,12 +544,24 @@ void surfxml_add_callback(xbt_dynar_t cb_list, void_f_void_t function) xbt_dynar_push(cb_list, &function); } +void surfxml_del_callback(xbt_dynar_t* p_cb_list, void_f_void_t function) +{ + xbt_dynar_t new_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); + unsigned int it; + void_f_void_t func; + xbt_dynar_foreach(*p_cb_list,it,func) { + if( func != function ) + xbt_dynar_push(new_cb_list, &func); + } + xbt_dynar_free(p_cb_list); + *p_cb_list = new_cb_list; +} + static XBT_INLINE void surfxml_call_cb_functions(xbt_dynar_t cb_list) { unsigned int iterator; void_f_void_t fun; xbt_dynar_foreach(cb_list, iterator, fun) { - DEBUG2("call %p %p", fun, *fun); (*fun) (); } } @@ -564,15 +598,14 @@ static void init_data(void) &parse_route_set_endpoints); surfxml_add_callback(STag_surfxml_set_cb_list, &parse_sets); surfxml_add_callback(STag_surfxml_route_c_multi_cb_list, - &parse_route_multi_set_endpoints); + &parse_Stag_route_multi); surfxml_add_callback(ETag_surfxml_route_c_multi_cb_list, - &parse_route_multi_set_route); - surfxml_add_callback(STag_surfxml_foreach_cb_list, &parse_foreach); - surfxml_add_callback(STag_surfxml_cluster_cb_list, &parse_cluster); - surfxml_add_callback(STag_surfxml_trace_cb_list, &parse_trace_init); - surfxml_add_callback(ETag_surfxml_trace_cb_list, &parse_trace_finalize); + &parse_Etag_route_multi); + surfxml_add_callback(STag_surfxml_foreach_cb_list, &parse_Stag_foreach); + surfxml_add_callback(STag_surfxml_trace_cb_list, &parse_Stag_trace); + surfxml_add_callback(ETag_surfxml_trace_cb_list, &parse_Etag_trace); surfxml_add_callback(STag_surfxml_trace_c_connect_cb_list, - &parse_trace_c_connect); + &parse_Stag_trace_c_connect); surfxml_add_callback(STag_surfxml_random_cb_list, &init_randomness); surfxml_add_callback(ETag_surfxml_random_cb_list, &add_randomness); } @@ -621,14 +654,18 @@ static void free_data(void) void parse_platform_file(const char *file) { + int parse_status; surf_parse_open(file); init_data(); - xbt_assert1((!(*surf_parse) ()), "Parse error in %s", file); + parse_status = surf_parse(); free_data(); surf_parse_close(); + if (parse_status) + xbt_dict_free(&random_data_list); + xbt_assert1(!parse_status, "Parse error in %s", file); } -/* Functions to bypass route, host and link tags. Used by the foreach and route:multi tags */ +/* Functions to bypass route tag. Used by the route:multi tag */ static void parse_make_temporary_route(const char *src, const char *dst, int action) @@ -640,38 +677,6 @@ static void parse_make_temporary_route(const char *src, const char *dst, SURFXML_BUFFER_SET(route_dst, dst); } -static void parse_change_cpu_data(const char *hostName, - const char *surfxml_host_power, - const char *surfxml_host_availability, - const char *surfxml_host_availability_file, - const char *surfxml_host_state_file) -{ - int AX_ptr = 0; - - SURFXML_BUFFER_SET(host_id, hostName); - SURFXML_BUFFER_SET(host_power, surfxml_host_power /*hostPower */ ); - SURFXML_BUFFER_SET(host_availability, surfxml_host_availability); - SURFXML_BUFFER_SET(host_availability_file, surfxml_host_availability_file); - SURFXML_BUFFER_SET(host_state_file, surfxml_host_state_file); -} - -static void parse_change_link_data(const char *linkName, - const char *surfxml_link_bandwidth, - const char *surfxml_link_bandwidth_file, - const char *surfxml_link_latency, - const char *surfxml_link_latency_file, - const char *surfxml_link_state_file) -{ - int AX_ptr = 0; - - SURFXML_BUFFER_SET(link_id, linkName); - SURFXML_BUFFER_SET(link_bandwidth, surfxml_link_bandwidth); - SURFXML_BUFFER_SET(link_bandwidth_file, surfxml_link_bandwidth_file); - SURFXML_BUFFER_SET(link_latency, surfxml_link_latency); - SURFXML_BUFFER_SET(link_latency_file, surfxml_link_latency_file); - SURFXML_BUFFER_SET(link_state_file, surfxml_link_state_file); -} - /* Functions for the sets and foreach tags */ static void parse_sets(void) @@ -736,27 +741,19 @@ static void parse_sets(void) free(id); } -static const char *surfxml_host_power; -static const char *surfxml_host_availability; -static const char *surfxml_host_availability_file; -static const char *surfxml_host_state_file; +static void parse_host_foreach(void){ -static void parse_host_foreach(void) -{ - surfxml_host_power = A_surfxml_host_power; - surfxml_host_availability = A_surfxml_host_availability; - surfxml_host_availability_file = A_surfxml_host_availability_file; - surfxml_host_state_file = A_surfxml_host_state_file; -} - -static void finalize_host_foreach(void) -{ xbt_dynar_t names = NULL; unsigned int cpt = 0; char *name; xbt_dict_cursor_t cursor = NULL; char *key, *data; + const char *surfxml_host_power = A_surfxml_host_power; + const char *surfxml_host_availability = A_surfxml_host_availability; + const char *surfxml_host_availability_file = A_surfxml_host_availability_file; + const char *surfxml_host_state_file = A_surfxml_host_state_file; + xbt_dict_t cluster_host_props = current_property_set; names = xbt_dict_get_or_null(set_list, foreach_set_name); @@ -771,10 +768,16 @@ static void finalize_host_foreach(void) /* foreach name in set call the main host callback */ xbt_dynar_foreach(names, cpt, name) { - push_surfxml_bufferstack(1); - parse_change_cpu_data(name, surfxml_host_power, surfxml_host_availability, - surfxml_host_availability_file, - surfxml_host_state_file); + int AX_ptr = 0; /* needed by the SURFXML_BUFFER_SET macro */ + + surfxml_bufferstack_push(1); + + SURFXML_BUFFER_SET(host_id, name); + SURFXML_BUFFER_SET(host_power, surfxml_host_power /*hostPower */ ); + SURFXML_BUFFER_SET(host_availability, surfxml_host_availability); + SURFXML_BUFFER_SET(host_availability_file, surfxml_host_availability_file); + SURFXML_BUFFER_SET(host_state_file, surfxml_host_state_file); + surfxml_call_cb_functions(main_STag_surfxml_host_cb_list); xbt_dict_foreach(cluster_host_props, cursor, key, data) { @@ -782,32 +785,23 @@ static void finalize_host_foreach(void) free); } - surfxml_call_cb_functions(main_ETag_surfxml_host_cb_list); - pop_surfxml_bufferstack(1); + /* Call the (unmodified) callbacks of , if any */ + surfxml_call_cb_functions(ETag_surfxml_host_cb_list); + surfxml_bufferstack_pop(1); } current_property_set = xbt_dict_new(); - pop_surfxml_bufferstack(0); + surfxml_bufferstack_pop(0); } -static const char *surfxml_link_bandwidth; -static const char *surfxml_link_bandwidth_file; -static const char *surfxml_link_latency; -static const char *surfxml_link_latency_file; -static const char *surfxml_link_state_file; - -static void parse_link_foreach(void) -{ - surfxml_link_bandwidth = A_surfxml_link_bandwidth; - surfxml_link_bandwidth_file = A_surfxml_link_bandwidth_file; - surfxml_link_latency = A_surfxml_link_latency; - surfxml_link_latency_file = A_surfxml_link_latency_file; - surfxml_link_state_file = A_surfxml_link_state_file; -} +static void parse_link_foreach(void) { + const char *surfxml_link_bandwidth = A_surfxml_link_bandwidth; + const char *surfxml_link_bandwidth_file = A_surfxml_link_bandwidth_file; + const char *surfxml_link_latency = A_surfxml_link_latency; + const char *surfxml_link_latency_file = A_surfxml_link_latency_file; + const char *surfxml_link_state_file = A_surfxml_link_state_file; -static void finalize_link_foreach(void) -{ xbt_dynar_t names = NULL; unsigned int cpt = 0; char *name; @@ -827,11 +821,17 @@ static void finalize_link_foreach(void) /* for each name in set call the main link callback */ xbt_dynar_foreach(names, cpt, name) { - push_surfxml_bufferstack(1); - parse_change_link_data(name, surfxml_link_bandwidth, - surfxml_link_bandwidth_file, surfxml_link_latency, - surfxml_link_latency_file, - surfxml_link_state_file); + int AX_ptr = 0; /* needed by the SURFXML_BUFFER_SET */ + + surfxml_bufferstack_push(1); + + SURFXML_BUFFER_SET(link_id, name); + SURFXML_BUFFER_SET(link_bandwidth, surfxml_link_bandwidth); + SURFXML_BUFFER_SET(link_bandwidth_file, surfxml_link_bandwidth_file); + SURFXML_BUFFER_SET(link_latency, surfxml_link_latency); + SURFXML_BUFFER_SET(link_latency_file, surfxml_link_latency_file); + SURFXML_BUFFER_SET(link_state_file, surfxml_link_state_file); + surfxml_call_cb_functions(main_STag_surfxml_link_cb_list); xbt_dict_foreach(cluster_link_props, cursor, key, data) { @@ -839,35 +839,30 @@ static void finalize_link_foreach(void) free); } - surfxml_call_cb_functions(main_ETag_surfxml_link_cb_list); - pop_surfxml_bufferstack(1); + /* Call the (unmodified) callbacks of , if any */ + surfxml_call_cb_functions(ETag_surfxml_link_cb_list); + surfxml_bufferstack_pop(1); } current_property_set = xbt_dict_new(); - pop_surfxml_bufferstack(0); + surfxml_bufferstack_pop(0); free(foreach_set_name); foreach_set_name = NULL; } -static void parse_foreach(void) +static void parse_Stag_foreach(void) { /* save the host & link callbacks */ main_STag_surfxml_host_cb_list = STag_surfxml_host_cb_list; - main_ETag_surfxml_host_cb_list = ETag_surfxml_host_cb_list; main_STag_surfxml_link_cb_list = STag_surfxml_link_cb_list; - main_ETag_surfxml_link_cb_list = ETag_surfxml_link_cb_list; - /* define host & link callbacks to be used only by the foreach tag */ + /* redefine host & link callbacks to be used only by the foreach tag */ STag_surfxml_host_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_host_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); STag_surfxml_link_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_link_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); surfxml_add_callback(STag_surfxml_host_cb_list, &parse_host_foreach); - surfxml_add_callback(ETag_surfxml_host_cb_list, &finalize_host_foreach); surfxml_add_callback(STag_surfxml_link_cb_list, &parse_link_foreach); - surfxml_add_callback(ETag_surfxml_link_cb_list, &finalize_link_foreach); /* get set name */ foreach_set_name = xbt_strdup(A_surfxml_foreach_set_id); @@ -886,9 +881,10 @@ static void parse_route_elem(void) val = xbt_strdup(A_surfxml_link_c_ctn_id); xbt_dynar_push(route_link_list, &val); + //INFO2("Push %s (size now:%ld)",val,xbt_dynar_length(route_link_list)); } -static void parse_route_multi_set_endpoints(void) +static void parse_Stag_route_multi(void) { src_name = xbt_strdup(A_surfxml_route_c_multi_src); dst_name = xbt_strdup(A_surfxml_route_c_multi_dst); @@ -899,17 +895,6 @@ static void parse_route_multi_set_endpoints(void) route_link_list = xbt_dynar_new(sizeof(char *), &xbt_free_ref); } -static int contains(xbt_dynar_t list, const char *value) -{ - unsigned int cpt; - char *val; - xbt_dynar_foreach(list, cpt, val) { - if (strcmp(val, value) == 0) - return 1; - } - return 0; -} - /* This function is used to append or override the contents of an already existing route in the case a new one with its name is found. The decision is based upon the value of action specified in the xml route:multi attribute action @@ -923,7 +908,11 @@ void manage_route(xbt_dict_t routing_table, const char *route_name, /* get already existing list if it exists */ links = xbt_dict_get_or_null(routing_table, route_name); - DEBUG1("ROUTE: %s", route_name); + DEBUG3("ROUTE: %s (action:%s; len:%ld)", route_name, + (action==A_surfxml_route_action_OVERRIDE?"override":( + action==A_surfxml_route_action_PREPEND?"prepend":"postpend")), + (links?xbt_dynar_length(links):0)); + if (links != NULL) { switch (action) { case A_surfxml_route_action_PREPEND: /* add existing links at the end; route_link_list + links */ @@ -933,7 +922,7 @@ void manage_route(xbt_dict_t routing_table, const char *route_name, xbt_dynar_free(&links); break; case A_surfxml_route_action_POSTPEND: /* add existing links in front; links + route_link_list */ - xbt_dynar_foreach(route_link_list, cpt, value) { + xbt_dynar_foreach(route_link_list, cpt, value) { xbt_dynar_push(links, &value); } xbt_dynar_free(&route_link_list); @@ -943,8 +932,11 @@ void manage_route(xbt_dict_t routing_table, const char *route_name, xbt_dynar_free(&links); break; default: + xbt_die(bprintf("While dealing with routes of %s, got action=%d. Please report this bug.", + route_name,action)); break; } + } /* this is the final route; do not add if name is a set; add only if name is in set list */ if (!isMultiRoute) { @@ -952,7 +944,7 @@ void manage_route(xbt_dict_t routing_table, const char *route_name, } } -static void parse_route_multi_set_route(void) +static void parse_Etag_route_multi(void) { char *route_name; @@ -985,7 +977,7 @@ static void add_multi_links(const char *src, const char *dst, unsigned int cpt; char *value, *val; - push_surfxml_bufferstack(1); + surfxml_bufferstack_push(1); parse_make_temporary_route(src_name, dst_name, route_action); surfxml_call_cb_functions(STag_surfxml_route_cb_list); @@ -1006,7 +998,7 @@ static void add_multi_links(const char *src, const char *dst, xbt_dynar_push(route_link_list, &val); } surfxml_call_cb_functions(ETag_surfxml_route_cb_list); - pop_surfxml_bufferstack(1); + surfxml_bufferstack_pop(1); } static void convert_route_multi_to_routes(void) @@ -1031,7 +1023,7 @@ static void convert_route_multi_to_routes(void) set = surf_model_resource_set(surf_workstation_model); - push_surfxml_bufferstack(0); + surfxml_bufferstack_push(0); /* Get all routes in the exact order they were entered in the platform file */ xbt_dynar_foreach(route_multi_elements, cursor, key) { /* Get links for the route */ @@ -1097,105 +1089,9 @@ static void convert_route_multi_to_routes(void) } xbt_dynar_free(&keys); } - pop_surfxml_bufferstack(0); + surfxml_bufferstack_pop(0); } -/* Cluster tag functions */ - -static void parse_cluster(void) -{ - static int AX_ptr = 0; - - 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_bw = A_surfxml_cluster_bw; - char *cluster_lat = A_surfxml_cluster_lat; - char *cluster_bb_bw = A_surfxml_cluster_bb_bw; - char *cluster_bb_lat = A_surfxml_cluster_bb_lat; - char *backbone_name; - - push_surfxml_bufferstack(1); - - /* Make set */ - SURFXML_BUFFER_SET(set_id, cluster_id); - SURFXML_BUFFER_SET(set_prefix, cluster_prefix); - SURFXML_BUFFER_SET(set_suffix, cluster_suffix); - SURFXML_BUFFER_SET(set_radical, cluster_radical); - - SURFXML_START_TAG(set); - SURFXML_END_TAG(set); - - /* Make foreach */ - SURFXML_BUFFER_SET(foreach_set_id, cluster_id); - - SURFXML_START_TAG(foreach); - - /* Make host for the foreach */ - parse_change_cpu_data("$1", cluster_power, "1.0", "", ""); - A_surfxml_host_state = A_surfxml_host_state_ON; - - SURFXML_START_TAG(host); - SURFXML_END_TAG(host); - - /* Make link for the foreach */ - parse_change_link_data("$1", cluster_bw, "", cluster_lat, "", ""); - A_surfxml_link_state = A_surfxml_link_state_ON; - A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; - - SURFXML_START_TAG(link); - SURFXML_END_TAG(link); - - SURFXML_END_TAG(foreach); - - /* Make backbone link */ - backbone_name = bprintf("%s_bb", cluster_id); - parse_change_link_data(backbone_name, 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_FATPIPE; - - SURFXML_START_TAG(link); - SURFXML_END_TAG(link); - - /* Make route multi with the outside world, i.e. cluster->$* */ - SURFXML_BUFFER_SET(route_c_multi_src, cluster_id); - SURFXML_BUFFER_SET(route_c_multi_dst, "$*"); - A_surfxml_route_c_multi_symmetric = A_surfxml_route_c_multi_symmetric_NO; - A_surfxml_route_c_multi_action = A_surfxml_route_c_multi_action_OVERRIDE; - - SURFXML_START_TAG(route_c_multi); - - SURFXML_BUFFER_SET(link_c_ctn_id, "$src"); - - SURFXML_START_TAG(link_c_ctn); - SURFXML_END_TAG(link_c_ctn); - - SURFXML_END_TAG(route_c_multi); - - /* Make route multi between cluster hosts, i.e. cluster->cluster */ - SURFXML_BUFFER_SET(route_c_multi_src, cluster_id); - SURFXML_BUFFER_SET(route_c_multi_dst, cluster_id); - A_surfxml_route_c_multi_action = A_surfxml_route_c_multi_action_POSTPEND; - A_surfxml_route_c_multi_symmetric = A_surfxml_route_c_multi_symmetric_NO; - - SURFXML_START_TAG(route_c_multi); - - SURFXML_BUFFER_SET(link_c_ctn_id, backbone_name); - - SURFXML_START_TAG(link_c_ctn); - SURFXML_END_TAG(link_c_ctn); - - SURFXML_END_TAG(route_c_multi); - - - free(backbone_name); - - /* Restore buff */ - pop_surfxml_bufferstack(1); -} /* Trace management functions */ @@ -1203,14 +1099,14 @@ static double trace_periodicity = -1.0; static char *trace_file = NULL; static char *trace_id; -static void parse_trace_init(void) +static void parse_Stag_trace(void) { trace_id = strdup(A_surfxml_trace_id); trace_file = strdup(A_surfxml_trace_file); surf_parse_get_double(&trace_periodicity, A_surfxml_trace_periodicity); } -static void parse_trace_finalize(void) +static void parse_Etag_trace(void) { tmgr_trace_t trace; if (!trace_file || strcmp(trace_file, "") != 0) { @@ -1226,7 +1122,7 @@ static void parse_trace_finalize(void) xbt_dict_set(traces_set_list, trace_id, (void *) trace, NULL); } -static void parse_trace_c_connect(void) +static void parse_Stag_trace_c_connect(void) { xbt_assert2(xbt_dict_get_or_null (traces_set_list, A_surfxml_trace_c_connect_trace), @@ -1314,3 +1210,130 @@ static void add_randomness(void) random_std_deviation); xbt_dict_set(random_data_list, random_id, (void *) random, NULL); } + +/** + * create CPU resource via CPU Model + */ +void surf_host_create_resource(char *name, double power_peak, + double power_scale, + tmgr_trace_t power_trace, + e_surf_resource_state_t state_initial, + tmgr_trace_t state_trace, + xbt_dict_t cpu_properties) +{ + return surf_cpu_model->extension.cpu. + create_resource(name,power_peak,power_scale,power_trace,state_initial,state_trace,cpu_properties); +} + +/* + * create CPU resource via worsktation_ptask_L07 model + */ + +void surf_wsL07_host_create_resource(char *name, double power_peak, + double power_scale, + tmgr_trace_t power_trace, + e_surf_resource_state_t state_initial, + tmgr_trace_t state_trace, + xbt_dict_t cpu_properties) +{ + surf_workstation_model->extension.workstation. + cpu_create_resource(name,power_peak,power_scale,power_trace,state_initial,state_trace,cpu_properties); +} +/* + * create link resource via network Model + */ +void surf_link_create_resource(char *name, + double bw_initial, + tmgr_trace_t bw_trace, + double lat_initial, + tmgr_trace_t lat_trace, + e_surf_resource_state_t + state_initial, + tmgr_trace_t state_trace, + e_surf_link_sharing_policy_t policy, + xbt_dict_t properties) +{ + return surf_network_model->extension.network. + create_resource(name,bw_initial,bw_trace,lat_initial,lat_trace, + state_initial,state_trace,policy,properties); + +} + +/* + * create link resource via workstation_ptask_L07 model + */ + +void surf_wsL07_link_create_resource(char *name, + double bw_initial, + tmgr_trace_t bw_trace, + double lat_initial, + tmgr_trace_t lat_trace, + e_surf_resource_state_t + state_initial, + tmgr_trace_t state_trace, + e_surf_link_sharing_policy_t + policy, xbt_dict_t properties) +{ + return surf_workstation_model->extension.workstation. + link_create_resource(name,bw_initial,bw_trace,lat_initial,lat_trace, + state_initial,state_trace,policy,properties); +} + + +/** + * Route: add route element bypassing the parser : + * same job as parse_route_elem + */ + +void surf_add_route_element(char* link_ctn_id) +{ + char *val; + val = xbt_strdup(link_ctn_id); + xbt_dynar_push(route_link_list,&val); +} +/** + * set route + */ +void surf_route_set_resource(char *source_id,char *destination_id,xbt_dynar_t links_id,int action) +{ + route_link_list = xbt_dynar_new(sizeof(char *), NULL); + //routing_add_route(source_id,destination_id,links_id,action); // COMMENTED BY DAVID + +} + +/** + * add host to routing host list + */ +void surf_route_add_host(char *host_id) +{ + //routing_add_host(host_id); // COMMENTED BY DAVID +} + +/* + * Add Traces + */ +void surf_add_host_traces(void) +{ + return surf_cpu_model->extension.cpu. + add_traces(); +} + +void surf_add_link_traces(void) +{ + return surf_network_model->extension.network. + add_traces(); +} + +void surf_wsL07_add_traces(void) +{ + return surf_workstation_model->extension.workstation. + add_traces(); +} +/** + * set routes + */ +void surf_set_routes(void) +{ + //routing_set_routes(); // COMMENTED BY DAVID +} +