From f7bbc27a9c71861263b01883617b2828e974bb68 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sun, 8 Apr 2012 16:14:32 -1000 Subject: [PATCH] [route parsing] make surf_network_resource_by_name public under name sg_routing_edge_by_name_or_null * This function existed already, but were almost never used, its content being inlined in ways too much location. * Use that function were relevant. That's much cleaner this way. * Making it public is one step further to the C interface for routing creation interface (drop in to XML) --- include/simgrid/platf.h | 2 ++ src/include/surf/surf.h | 5 ---- src/instr/instr_interface.c | 6 ++--- src/surf/surf_routing.c | 44 +++++++++++-------------------- src/surf/surf_routing_dijkstra.c | 8 ++---- src/surf/surf_routing_floyd.c | 8 ++---- src/surf/surf_routing_full.c | 8 ++---- src/surf/surf_routing_rulebased.c | 22 ++-------------- testsuite/surf/surf_usage.c | 4 +-- 9 files changed, 30 insertions(+), 77 deletions(-) diff --git a/include/simgrid/platf.h b/include/simgrid/platf.h index ce33501779..fb46ea8f13 100644 --- a/include/simgrid/platf.h +++ b/include/simgrid/platf.h @@ -14,6 +14,8 @@ typedef void *sg_routing_link_t; /* The actual type is model-dependent so use void* instead*/ typedef struct s_routing_edge *sg_routing_edge_t; +XBT_PUBLIC(sg_routing_edge_t) sg_routing_edge_by_name_or_null(const char *name); + typedef struct tmgr_trace *tmgr_trace_t; /**< Opaque structure defining an availability trace */ diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 4313391915..d5d2114bce 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -333,11 +333,6 @@ static inline void *surf_cpu_resource_by_name(const char *name) { static inline void *surf_workstation_resource_by_name(const char *name){ return xbt_lib_get_or_null(host_lib, name, SURF_WKS_LEVEL); } -static inline void *surf_network_resource_by_name(const char *name){ - sg_routing_edge_t net_elm = xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL); - if(!net_elm) net_elm = xbt_lib_get_or_null(as_router_lib, name, ROUTING_ASR_LEVEL); - return net_elm; -} static inline void *surf_storage_resource_by_name(const char *name){ return xbt_lib_get_or_null(storage_lib, name, SURF_STORAGE_LEVEL); } diff --git a/src/instr/instr_interface.c b/src/instr/instr_interface.c index 763d75f8fe..a24ded0384 100644 --- a/src/instr/instr_interface.c +++ b/src/instr/instr_interface.c @@ -298,12 +298,10 @@ static void instr_user_srcdst_variable(double time, InstrUserVariable what) { xbt_dynar_t route=NULL; - sg_routing_edge_t src_elm = xbt_lib_get_or_null(host_lib,src,ROUTING_HOST_LEVEL); - if(!src_elm) src_elm = xbt_lib_get_or_null(as_router_lib,src,ROUTING_ASR_LEVEL); + sg_routing_edge_t src_elm = sg_routing_edge_by_name_or_null(src); if(!src_elm) xbt_die("Element '%s' not found!",src); - sg_routing_edge_t dst_elm = xbt_lib_get_or_null(host_lib,dst,ROUTING_HOST_LEVEL); - if(!dst_elm) dst_elm = xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL); + sg_routing_edge_t dst_elm = sg_routing_edge_by_name_or_null(dst); if(!dst_elm) xbt_die("Element '%s' not found!",dst); routing_get_route_and_latency (src_elm, dst_elm, &route,NULL); diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index b9ae25868a..0d0408b21b 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -43,6 +43,16 @@ int NS3_ASR_LEVEL; //host node for ns3 static xbt_dict_t random_value = NULL; +/** @brief Retrieve a routing edge from its name + * + * Routing edges are either CPU/workstation and routers, whatever + */ +sg_routing_edge_t sg_routing_edge_by_name_or_null(const char *name) { + sg_routing_edge_t net_elm = xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL); + if(!net_elm) net_elm = xbt_lib_get_or_null(as_router_lib, name, ROUTING_ASR_LEVEL); + return net_elm; +} + /* Global vars */ routing_global_t global_routing = NULL; AS_t current_routing = NULL; @@ -306,19 +316,11 @@ static void routing_parse_E_ASroute(void) e_route->link_list = parsed_link_list; if (!strcmp(current_routing->model_desc->name,"RuleBased")) { - e_route->src_gateway = (sg_routing_edge_t) gw_src; // DIRTY HACK possible only + e_route->src_gateway = (sg_routing_edge_t) gw_src; // DIRTY HACK possible only FIXME e_route->dst_gateway = (sg_routing_edge_t) gw_dst; // because of what is in routing_parse_E_ASroute } else { - e_route->src_gateway = xbt_lib_get_or_null(as_router_lib, gw_src, - ROUTING_ASR_LEVEL); - if (!e_route->src_gateway) - e_route->src_gateway = xbt_lib_get_or_null(host_lib, gw_src, - ROUTING_HOST_LEVEL); - e_route->dst_gateway = xbt_lib_get_or_null(as_router_lib, gw_dst, - ROUTING_ASR_LEVEL); - if (!e_route->dst_gateway) - e_route->dst_gateway = xbt_lib_get_or_null(host_lib, gw_dst, - ROUTING_HOST_LEVEL); + e_route->src_gateway = sg_routing_edge_by_name_or_null(gw_src); + e_route->dst_gateway = sg_routing_edge_by_name_or_null(gw_dst); } xbt_assert(current_routing->parse_ASroute, "no defined method \"set_ASroute\" in \"%s\"", @@ -358,16 +360,8 @@ static void routing_parse_E_bypassASroute(void) { route_t e_route = xbt_new0(s_route_t, 1); e_route->link_list = parsed_link_list; - e_route->src_gateway = xbt_lib_get_or_null(as_router_lib, gw_src, - ROUTING_ASR_LEVEL); - if (!e_route->src_gateway) - e_route->src_gateway = xbt_lib_get_or_null(host_lib, gw_src, - ROUTING_HOST_LEVEL); - e_route->dst_gateway = xbt_lib_get_or_null(as_router_lib, gw_dst, - ROUTING_ASR_LEVEL); - if (!e_route->dst_gateway) - e_route->dst_gateway = xbt_lib_get_or_null(host_lib, gw_dst, - ROUTING_HOST_LEVEL); + e_route->src_gateway = sg_routing_edge_by_name_or_null(gw_src); + e_route->dst_gateway = sg_routing_edge_by_name_or_null(gw_dst); xbt_assert(current_routing->parse_bypassroute, "Bypassing mechanism not implemented by routing '%s'", current_routing->name); @@ -696,13 +690,7 @@ static xbt_dynar_t get_onelink_routes(void) e_surf_network_element_type_t routing_get_network_element_type(const char *name) { - sg_routing_edge_t rc = NULL; - - rc = xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL); - if (rc) - return rc->rc_type; - - rc = xbt_lib_get_or_null(as_router_lib, name, ROUTING_ASR_LEVEL); + sg_routing_edge_t rc = sg_routing_edge_by_name_or_null(name); if (rc) return rc->rc_type; diff --git a/src/surf/surf_routing_dijkstra.c b/src/surf/surf_routing_dijkstra.c index f0eea132d9..4ae034e1e1 100644 --- a/src/surf/surf_routing_dijkstra.c +++ b/src/surf/surf_routing_dijkstra.c @@ -487,12 +487,8 @@ void model_dijkstra_both_parse_route (AS_t asg, const char *src, as_dijkstra_t as = (as_dijkstra_t) asg; sg_routing_edge_t src_net_elm, dst_net_elm; - src_net_elm = xbt_lib_get_or_null(host_lib, src, ROUTING_HOST_LEVEL); - dst_net_elm = xbt_lib_get_or_null(host_lib, dst, ROUTING_HOST_LEVEL); - if (!src_net_elm) - src_net_elm = xbt_lib_get_or_null(as_router_lib, src, ROUTING_ASR_LEVEL); - if (!dst_net_elm) - dst_net_elm = xbt_lib_get_or_null(as_router_lib, dst, ROUTING_ASR_LEVEL); + src_net_elm = sg_routing_edge_by_name_or_null(src); + dst_net_elm = sg_routing_edge_by_name_or_null(dst); xbt_assert(src_net_elm, "Network elements %s not found", src); xbt_assert(dst_net_elm, "Network elements %s not found", dst); diff --git a/src/surf/surf_routing_floyd.c b/src/surf/surf_routing_floyd.c index aaf100434d..92020e8bba 100644 --- a/src/surf/surf_routing_floyd.c +++ b/src/surf/surf_routing_floyd.c @@ -256,12 +256,8 @@ void model_floyd_parse_route(AS_t rc, const char *src, size_t table_size = xbt_dynar_length(rc->index_network_elm); sg_routing_edge_t src_net_elm, dst_net_elm; - src_net_elm = xbt_lib_get_or_null(host_lib, src, ROUTING_HOST_LEVEL); - dst_net_elm = xbt_lib_get_or_null(host_lib, dst, ROUTING_HOST_LEVEL); - if (!src_net_elm) - src_net_elm = xbt_lib_get_or_null(as_router_lib, src, ROUTING_ASR_LEVEL); - if (!dst_net_elm) - dst_net_elm = xbt_lib_get_or_null(as_router_lib, dst, ROUTING_ASR_LEVEL); + src_net_elm = sg_routing_edge_by_name_or_null(src); + dst_net_elm = sg_routing_edge_by_name_or_null(dst); xbt_assert(src_net_elm, "Network elements %s not found", src); xbt_assert(dst_net_elm, "Network elements %s not found", dst); diff --git a/src/surf/surf_routing_full.c b/src/surf/surf_routing_full.c index 1781b2fae4..776d2edcce 100644 --- a/src/surf/surf_routing_full.c +++ b/src/surf/surf_routing_full.c @@ -161,12 +161,8 @@ void model_full_set_route(AS_t rc, const char *src, { sg_routing_edge_t src_net_elm, dst_net_elm; int as_route = 0; - src_net_elm = xbt_lib_get_or_null(host_lib, src, ROUTING_HOST_LEVEL); - dst_net_elm = xbt_lib_get_or_null(host_lib, dst, ROUTING_HOST_LEVEL); - if (!src_net_elm) - src_net_elm = xbt_lib_get_or_null(as_router_lib, src, ROUTING_ASR_LEVEL); - if (!dst_net_elm) - dst_net_elm = xbt_lib_get_or_null(as_router_lib, dst, ROUTING_ASR_LEVEL); + src_net_elm = sg_routing_edge_by_name_or_null(src); + dst_net_elm = sg_routing_edge_by_name_or_null(dst); xbt_assert(src_net_elm, "Network elements %s not found", src); xbt_assert(dst_net_elm, "Network elements %s not found", dst); diff --git a/src/surf/surf_routing_rulebased.c b/src/surf/surf_routing_rulebased.c index 640a18a470..e7aecf4619 100644 --- a/src/surf/surf_routing_rulebased.c +++ b/src/surf/surf_routing_rulebased.c @@ -348,30 +348,12 @@ static void rulebased_get_route_and_latency(AS_t rc, (rule_route_extended_t) ruleroute; char *gw_src_name = remplace(ruleroute_extended->re_src_gateway, list_src, rc_src, list_dst, rc_dst); - route->src_gateway = xbt_lib_get_or_null(host_lib, gw_src_name, - ROUTING_HOST_LEVEL); - route->src_gateway = xbt_lib_get_or_null(host_lib, gw_src_name, - ROUTING_HOST_LEVEL); - if (!route->src_gateway) - route->src_gateway = xbt_lib_get_or_null(as_router_lib, gw_src_name, - ROUTING_ASR_LEVEL); - if (!route->src_gateway) - route->src_gateway = xbt_lib_get_or_null(as_router_lib, gw_src_name, - ROUTING_ASR_LEVEL); + route->src_gateway = sg_routing_edge_by_name_or_null(gw_src_name); xbt_free(gw_src_name); char *gw_dst_name = remplace(ruleroute_extended->re_dst_gateway, list_src, rc_src, list_dst, rc_dst); - route->dst_gateway = xbt_lib_get_or_null(host_lib, gw_dst_name, - ROUTING_HOST_LEVEL); - route->dst_gateway = xbt_lib_get_or_null(host_lib, gw_dst_name, - ROUTING_HOST_LEVEL); - if (!route->dst_gateway) - route->dst_gateway = xbt_lib_get_or_null(as_router_lib, gw_dst_name, - ROUTING_ASR_LEVEL); - if (!route->dst_gateway) - route->dst_gateway = xbt_lib_get_or_null(as_router_lib, gw_dst_name, - ROUTING_ASR_LEVEL); + route->dst_gateway = sg_routing_edge_by_name_or_null(gw_dst_name); xbt_free(gw_dst_name); } diff --git a/testsuite/surf/surf_usage.c b/testsuite/surf/surf_usage.c index 2e8c31af48..e95bd142d2 100644 --- a/testsuite/surf/surf_usage.c +++ b/testsuite/surf/surf_usage.c @@ -82,8 +82,8 @@ void test(char *platform) /*********************** Network *******************************/ XBT_DEBUG("%p", surf_network_model); - cardA = surf_network_resource_by_name("Cpu A"); - cardB = surf_network_resource_by_name("Cpu B"); + cardA = sg_routing_edge_by_name_or_null("Cpu A"); + cardB = sg_routing_edge_by_name_or_null("Cpu B"); /* Let's check that those two processors exist */ XBT_DEBUG("%s : %p", surf_resource_name(cardA), cardA); -- 2.20.1