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 */
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);
}
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);
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;
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\"",
{
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);
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;
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);
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);
{
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);
(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);
}
/*********************** 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);