if(!p_graphNodeMap)
p_graphNodeMap = xbt_dict_new_homogeneous(&graph_node_map_elem_free);
- if (m_cached && !p_routeCache)
- p_routeCache = xbt_dict_new_homogeneous(&route_cache_elem_free);
-
/* Add the loopback if needed */
if (routing_platf->p_loopback && hierarchy_ == SURF_ROUTING_BASE)
addLoopback();
/* set utils vars */
srcDstCheck(src, dst);
- int *src_id = src->getIdPtr();
- int *dst_id = dst->getIdPtr();
-
- if (!src_id || !dst_id)
- THROWF(arg_error,0,"No route from '%s' to '%s'",src->name(),dst->name());
+ int src_id = src->id();
+ int dst_id = dst->id();
int *pred_arr = NULL;
sg_platf_route_cbarg_t e_route;
xbt_dynar_t nodes = xbt_graph_get_nodes(p_routeGraph);
/* Use the graph_node id mapping set to quickly find the nodes */
- graph_node_map_element_t src_elm = nodeMapSearch(*src_id);
- graph_node_map_element_t dst_elm = nodeMapSearch(*dst_id);
+ graph_node_map_element_t src_elm = nodeMapSearch(src_id);
+ graph_node_map_element_t dst_elm = nodeMapSearch(dst_id);
int src_node_id = ((graph_node_data_t) xbt_graph_node_get_data(src_elm->node))->graph_id;
int dst_node_id = ((graph_node_data_t) xbt_graph_node_get_data(dst_elm->node))->graph_id;
}
route_cache_element_t elm = NULL;
- if (m_cached) { /* cache mode */
+ if (p_routeCache) { /* cache mode */
elm = (route_cache_element_t)
xbt_dict_get_or_null_ext(p_routeCache, (char *) (&src_id), sizeof(int));
}
route->gw_dst = first_gw;
}
- if (m_cached && elm == NULL) {
+ if (p_routeCache && elm == NULL) {
/* add to predecessor list of the current src-host to cache */
elm = xbt_new0(struct route_cache_element, 1);
elm->pred_arr = pred_arr;
xbt_dict_set_ext(p_routeCache, (char *) (&src_id), sizeof(int), (xbt_dictelm_t) elm, NULL);
}
- if (!m_cached)
+ if (!p_routeCache)
xbt_free(pred_arr);
}
AsDijkstra::AsDijkstra(const char*name, bool cached)
: AsGeneric(name)
- , m_cached(cached)
-{
- p_routeGraph = NULL;
- p_graphNodeMap = NULL;
- p_routeCache = NULL;
-}
-
-void AsDijkstra::end()
{
- xbt_node_t node = NULL;
- unsigned int cursor2;
- xbt_dynar_t nodes = NULL;
-
- /* Create the topology graph */
- if(!p_routeGraph)
- p_routeGraph = xbt_graph_new_graph(1, NULL);
- if(!p_graphNodeMap)
- p_graphNodeMap = xbt_dict_new_homogeneous(&graph_node_map_elem_free);
-
- if (m_cached && !p_routeCache)
+ if (cached)
p_routeCache = xbt_dict_new_homogeneous(&route_cache_elem_free);
-
- /* Add the loopback if needed */
- if (routing_platf->p_loopback && hierarchy_ == SURF_ROUTING_BASE)
- addLoopback();
-
- /* initialize graph indexes in nodes after graph has been built */
- nodes = xbt_graph_get_nodes(p_routeGraph);
-
- xbt_dynar_foreach(nodes, cursor2, node) {
- graph_node_data_t data = (graph_node_data_t) xbt_graph_node_get_data(node);
- data->graph_id = cursor2;
- }
-
}
void AsDijkstra::parseRoute(sg_platf_route_cbarg_t route)
{
- char *src = (char*)(route->src);
- char *dst = (char*)(route->dst);
+ const char *src = route->src;
+ const char *dst = route->dst;
int as_route = 0;
if(!route->gw_dst && !route->gw_src)
surf_parse_error("The gw_src '%s' does not exist!",route->gw_src->name());
}
- NetCard *src_net_elm, *dst_net_elm;
-
- src_net_elm = sg_netcard_by_name_or_null(src);
- dst_net_elm = sg_netcard_by_name_or_null(dst);
+ NetCard *src_net_elm = sg_netcard_by_name_or_null(src);
+ NetCard *dst_net_elm = sg_netcard_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);
if(!p_graphNodeMap)
p_graphNodeMap = xbt_dict_new_homogeneous(&graph_node_map_elem_free);
- if (m_cached && !p_routeCache)
- p_routeCache = xbt_dict_new_homogeneous(&route_cache_elem_free);
-
sg_platf_route_cbarg_t e_route = newExtendedRoute(hierarchy_, route, 1);
newRoute(src_net_elm->id(), dst_net_elm->id(), e_route);
// Symmetrical YES
- if ( (route->symmetrical == TRUE && as_route == 0)
- || (route->symmetrical == TRUE && as_route == 1)
- )
- {
+ if ( (route->symmetrical == TRUE && as_route == 0) || (route->symmetrical == TRUE && as_route == 1) ) {
if(!route->gw_dst && !route->gw_src)
XBT_DEBUG("Load Route from \"%s\" to \"%s\"", dst, src);
else
xbt_dynar_t nodes = xbt_graph_get_nodes(p_routeGraph);
xbt_node_t node_s_v = xbt_dynar_get_as(nodes, src_net_elm->id(), xbt_node_t);
xbt_node_t node_e_v = xbt_dynar_get_as(nodes, dst_net_elm->id(), xbt_node_t);
- xbt_edge_t edge =
- xbt_graph_get_edge(p_routeGraph, node_e_v, node_s_v);
+ xbt_edge_t edge = xbt_graph_get_edge(p_routeGraph, node_e_v, node_s_v);
if (edge)
- THROWF(arg_error,0,"(AS)Route from '%s' to '%s' already exists",src,dst);
+ THROWF(arg_error,0, "Route from '%s' to '%s' already exists",src,dst);
if (route->gw_dst && route->gw_src) {
- NetCard *gw_tmp;
- gw_tmp = route->gw_src;
+ NetCard *gw_tmp = route->gw_src;
route->gw_src = route->gw_dst;
route->gw_dst = gw_tmp;
}