X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/cd709fc1a07a53e8fa8c07d144c36483761e90a9..fc1551b7a3cbbcdb9fb48500f70683318c87c47b:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 007a2cc8ba..4a4077e4b2 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -1,10 +1,13 @@ -/* Copyright (c) 2009, 2010. The SimGrid Team. +/* Copyright (c) 2009, 2010, 2011. 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. */ #include /* regular expression library */ + +#include "simgrid/platf_interface.h" // platform creation API internal interface + #include "surf_routing_private.h" #include "surf/surf_routing.h" #include "surf/surfxml_parse_values.h" @@ -52,9 +55,6 @@ static void routing_parse_Speer(void); /* peer bypass */ static void routing_parse_Srandom(void); /* random bypass */ static void routing_parse_Erandom(void); /* random bypass */ -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_routing_after_parse(void); @@ -419,12 +419,19 @@ static void parse_E_bypassRoute_store_route(void) } /** - * \brief Make a new routing component + * \brief Make a new routing component to the platform + * + * Add a new autonomous system to the platform. Any elements (such as host, + * router or sub-AS) added after this call and before the corresponding call + * to sg_platf_new_AS_close() will be added to this AS. + * + * Once this function was called, the configuration concerning the used + * models cannot be changed anymore. * - * make the new structure and - * set the parsing functions to allows parsing the part of the routing tree + * @param AS_id name of this autonomous system. Must be uniq in the platform + * @param wanted_routing_type one of Full, Floyd, Dijkstra or similar. Full list in the variable routing_models, in src/surf/surf_routing.c */ -void routing_AS_init(const char *AS_id, const char *wanted_routing_type) +void sg_platf_new_AS_open(const char *AS_id, const char *wanted_routing_type) { routing_component_t new_routing; model_type_t model = NULL; @@ -491,16 +498,20 @@ void routing_AS_init(const char *AS_id, const char *wanted_routing_type) } /** - * \brief Finish the creation of a new routing component + * \brief Specify that the current description of AS is finished + * + * Once you've declared all the content of your AS, you have to close + * it with this call. Your AS is not usable until you call this function. + * + * @fixme: this call is not as robust as wanted: bad things WILL happen + * if you call it twice for the same AS, or if you forget calling it, or + * even if you add stuff to a closed AS * - * 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 */ -void routing_AS_end(const char *AS_id) -{ +void sg_platf_new_AS_close() { if (current_routing == NULL) { - THROWF(arg_error, 0, "Close AS(%s), that were never opened", AS_id); + THROWF(arg_error, 0, "Close an AS, but none was under construction"); } else { network_element_info_t info = NULL; xbt_assert(!xbt_lib_get_or_null(as_router_lib,current_routing->name, ROUTING_ASR_LEVEL), @@ -993,8 +1004,6 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ 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_random_cb_list, &routing_parse_Srandom); } @@ -1460,27 +1469,6 @@ void generic_src_dst_check(routing_component_t rc, const char *src, src,dst,src_as->name, dst_as->name,rc->name); } -static void routing_parse_Sconfig(void) -{ - XBT_DEBUG("START configuration name = %s",A_surfxml_config_id); -} - -static void routing_parse_Econfig(void) -{ - xbt_dict_cursor_t cursor = NULL; - char *key; - char *elem; - char *cfg; - xbt_dict_foreach(current_property_set, cursor, key, elem) { - cfg = bprintf("%s:%s",key,elem); - 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 defined by user!",key); - free(cfg); - } - XBT_DEBUG("End configuration name = %s",A_surfxml_config_id); -} static void parse_create_host_link(int i) { @@ -1524,7 +1512,7 @@ static void parse_create_host_link(int i) host.V_host_core = struct_cluster->S_cluster_core; host.V_host_state_initial = SURF_RESOURCE_ON; host.V_host_coord = ""; - surf_parse_host(&host); + sg_platf_new_host(&host); XBT_DEBUG(""); A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; @@ -1622,7 +1610,7 @@ 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 *)); + start=surf_parse_get_int(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); @@ -1657,7 +1645,7 @@ void routing_parse_Scluster(void) host.V_host_core = struct_cluster->S_cluster_core; host.V_host_state_initial = SURF_RESOURCE_ON; host.V_host_coord = ""; - surf_parse_host(&host); + sg_platf_new_host(&host); XBT_DEBUG(""); A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; @@ -1698,9 +1686,8 @@ void routing_parse_Scluster(void) case 2: - surf_parse_get_int(&start, - xbt_dynar_get_as(radical_ends, 0, char *)); - surf_parse_get_int(&end, xbt_dynar_get_as(radical_ends, 1, char *)); + start=surf_parse_get_int(xbt_dynar_get_as(radical_ends, 0, char *)); + end= surf_parse_get_int(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); @@ -1738,7 +1725,7 @@ void routing_parse_Scluster(void) host.V_host_core = struct_cluster->S_cluster_core; host.V_host_state_initial = SURF_RESOURCE_ON; host.V_host_coord = ""; - surf_parse_host(&host); + sg_platf_new_host(&host); XBT_DEBUG(""); A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; @@ -2014,11 +2001,11 @@ static void routing_parse_Srandom(void) char *random_radical = A_surfxml_random_radical; char *rd_name = NULL; char *rd_value; - surf_parse_get_double(&mean,A_surfxml_random_mean); - surf_parse_get_double(&std,A_surfxml_random_std_deviation); - surf_parse_get_double(&min,A_surfxml_random_min); - surf_parse_get_double(&max,A_surfxml_random_max); - surf_parse_get_double(&seed,A_surfxml_random_seed); + mean = surf_parse_get_double(A_surfxml_random_mean); + std = surf_parse_get_double(A_surfxml_random_std_deviation); + min = surf_parse_get_double(A_surfxml_random_min); + max = surf_parse_get_double(A_surfxml_random_max); + seed = surf_parse_get_double(A_surfxml_random_seed); double res = 0; int i = 0; @@ -2087,9 +2074,9 @@ static void routing_parse_Srandom(void) xbt_free(tmpbuf); break; - case 2: surf_parse_get_int(&start, - xbt_dynar_get_as(radical_ends, 0, char *)); - surf_parse_get_int(&end, xbt_dynar_get_as(radical_ends, 1, char *)); + case 2: + start = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 0, char *)); + end = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 1, char *)); for (i = start; i <= end; i++) { xbt_assert(!xbt_dict_get_or_null(random_value,random_id),"Custom Random '%s' already exists !",bprintf("%s%d",random_id,i)); res = random_generate(random);