Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[route parsing] make surf_network_resource_by_name public under name sg_routing_edge_...
authorMartin Quinson <martin.quinson@loria.fr>
Mon, 9 Apr 2012 02:14:32 +0000 (16:14 -1000)
committerMartin Quinson <martin.quinson@loria.fr>
Mon, 9 Apr 2012 02:14:32 +0000 (16:14 -1000)
* 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
src/include/surf/surf.h
src/instr/instr_interface.c
src/surf/surf_routing.c
src/surf/surf_routing_dijkstra.c
src/surf/surf_routing_floyd.c
src/surf/surf_routing_full.c
src/surf/surf_routing_rulebased.c
testsuite/surf/surf_usage.c

index ce33501..fb46ea8 100644 (file)
@@ -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 */
index 4313391..d5d2114 100644 (file)
@@ -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);
 }
index 763d75f..a24ded0 100644 (file)
@@ -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);
index b9ae258..0d0408b 100644 (file)
@@ -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;
 
index f0eea13..4ae034e 100644 (file)
@@ -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);
index aaf1004..92020e8 100644 (file)
@@ -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);
index 1781b2f..776d2ed 100644 (file)
@@ -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);
index 640a18a..e7aecf4 100644 (file)
@@ -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);
   }
 
index 2e8c31a..e95bd14 100644 (file)
@@ -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);