X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/66f9d7f18e9a5f08bbcc381381283895ab6a0a89..975babad32bf69ffb339dc1d449cd85e111ba733:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index e0d8795ed0..4aadf20d31 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -4,14 +4,14 @@ /* 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" +#include /* regular expression library */ + /** * @ingroup SURF_build_api * @brief A library containing all known workstations @@ -42,6 +42,7 @@ xbt_lib_t as_router_lib; int ROUTING_ASR_LEVEL; //Routing level int COORD_ASR_LEVEL; //Coordinates level int NS3_ASR_LEVEL; //host node for ns3 +int ROUTING_PROP_ASR_LEVEL; //Where the properties are stored static xbt_dict_t random_value = NULL; @@ -147,7 +148,7 @@ static void parse_S_host(sg_platf_host_cbarg_t host) xbt_assert(!xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL), "Reading a host, processing unit \"%s\" already exists", host->id); - info = xbt_new0(s_network_element_t, 1); + info = xbt_new0(s_routing_edge_t, 1); info->rc_component = current_routing; info->rc_type = SURF_NETWORK_ELEMENT_HOST; info->name = xbt_strdup(host->id); @@ -192,7 +193,7 @@ static void parse_S_router(sg_platf_router_cbarg_t router) "Reading a router, processing unit \"%s\" already exists", router->id); - info = xbt_new0(s_network_element_t, 1); + info = xbt_new0(s_routing_edge_t, 1); info->rc_component = current_routing; info->rc_type = SURF_NETWORK_ELEMENT_ROUTER; info->name = xbt_strdup(router->id); @@ -333,18 +334,18 @@ static void routing_parse_trace_connect(sg_platf_trace_connect_cbarg_t trace_con * @param AS_id name of this autonomous system. Must be unique 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_begin(const char *AS_id, int wanted_routing_type) +void routing_AS_begin(sg_platf_AS_cbarg_t AS) { XBT_DEBUG("routing_AS_begin"); AS_t new_as; routing_model_description_t model = NULL; xbt_assert(!xbt_lib_get_or_null - (as_router_lib, AS_id, ROUTING_ASR_LEVEL), - "The AS \"%s\" already exists", AS_id); + (as_router_lib, AS->id, ROUTING_ASR_LEVEL), + "The AS \"%s\" already exists", AS->id); /* search the routing model */ - switch(wanted_routing_type){ + switch(AS->routing){ case A_surfxml_AS_routing_Cluster: model = &routing_models[SURF_MODEL_CLUSTER];break; case A_surfxml_AS_routing_Dijkstra: model = &routing_models[SURF_MODEL_DIJKSTRA];break; case A_surfxml_AS_routing_DijkstraCache: model = &routing_models[SURF_MODEL_DIJKSTRACACHE];break; @@ -361,10 +362,10 @@ void routing_AS_begin(const char *AS_id, int wanted_routing_type) new_as = (AS_t) model->create(); new_as->model_desc = model; new_as->hierarchy = SURF_ROUTING_NULL; - new_as->name = xbt_strdup(AS_id); + new_as->name = xbt_strdup(AS->id); sg_routing_edge_t info = NULL; - info = xbt_new0(s_network_element_t, 1); + info = xbt_new0(s_routing_edge_t, 1); if (current_routing == NULL && routing_platf->root == NULL) { @@ -375,15 +376,15 @@ void routing_AS_begin(const char *AS_id, int wanted_routing_type) } else if (current_routing != NULL && routing_platf->root != NULL) { xbt_assert(!xbt_dict_get_or_null - (current_routing->routing_sons, AS_id), - "The AS \"%s\" already exists", AS_id); + (current_routing->routing_sons, AS->id), + "The AS \"%s\" already exists", AS->id); /* it is a part of the tree */ new_as->routing_father = current_routing; /* set the father behavior */ if (current_routing->hierarchy == SURF_ROUTING_NULL) current_routing->hierarchy = SURF_ROUTING_RECURSIVE; /* add to the sons dictionary */ - xbt_dict_set(current_routing->routing_sons, AS_id, + xbt_dict_set(current_routing->routing_sons, AS->id, (void *) new_as, NULL); /* add to the father element list */ info->id = current_routing->parse_AS(current_routing, (void *) info); @@ -395,7 +396,7 @@ void routing_AS_begin(const char *AS_id, int wanted_routing_type) info->rc_type = SURF_NETWORK_ELEMENT_AS; info->name = new_as->name; - xbt_lib_set(as_router_lib, new_as->name, ROUTING_ASR_LEVEL, + xbt_lib_set(as_router_lib, info->name, ROUTING_ASR_LEVEL, (void *) info); XBT_DEBUG("Having set name '%s' id '%d'",new_as->name,info->id); @@ -416,7 +417,7 @@ void routing_AS_begin(const char *AS_id, int wanted_routing_type) * even if you add stuff to a closed AS * */ -void routing_AS_end() +void routing_AS_end(sg_platf_AS_cbarg_t AS) { if (current_routing == NULL) { @@ -520,8 +521,8 @@ static void _get_route_and_latency(sg_routing_edge_t src, sg_routing_edge_t dst, s_sg_platf_route_cbarg_t route; memset(&route,0,sizeof(route)); - XBT_DEBUG("Solve route/latency \"%s\" to \"%s\"", src->name, dst->name); xbt_assert(src && dst, "bad parameters for \"_get_route_latency\" method"); + XBT_DEBUG("Solve route/latency \"%s\" to \"%s\"", src->name, dst->name); /* Find how src and dst are interconnected */ AS_t common_father, src_father, dst_father; @@ -806,7 +807,10 @@ static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster) } XBT_DEBUG("", cluster->id); - sg_platf_new_AS_begin(cluster->id, A_surfxml_AS_routing_Cluster); + s_sg_platf_AS_cbarg_t AS = SG_PLATF_AS_INITIALIZER; + AS.id = cluster->id; + AS.routing = A_surfxml_AS_routing_Cluster; + sg_platf_new_AS_begin(&AS); current_routing->link_up_down_list = xbt_dynar_new(sizeof(s_surf_parsing_link_up_down_t),NULL);