X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fe45c9fee67e0b37665de17ee009844a115778d3..7abffd12021a46a0ac1bd2b4ff48ca4b3cc8c71c:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 023c1d9520..3849709b7c 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -27,6 +27,8 @@ int SD_HOST_LEVEL; //Simdag level int COORD_HOST_LEVEL=0; //Coordinates level int NS3_HOST_LEVEL; //host node for ns3 +xbt_dict_t watched_hosts_lib; + /** * @ingroup SURF_build_api * @brief A library containing all known links @@ -109,6 +111,36 @@ struct s_model_type routing_models[] = { {NULL, NULL, NULL, NULL} }; +/** + * \brief Add a "host_link" to the network element list + */ +static void parse_S_host_link(sg_platf_host_link_cbarg_t host) +{ + sg_routing_edge_t info = NULL; + info = xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL); + xbt_assert(info, "Host '%s' not found!",host->id); + xbt_assert(current_routing->model_desc == &routing_models[SURF_MODEL_CLUSTER], + "You have to be in model Cluster to use tag host_link!"); + + s_surf_parsing_link_up_down_t link_up_down; + link_up_down.link_up = xbt_lib_get_or_null(link_lib, host->link_up, SURF_LINK_LEVEL); + link_up_down.link_down = xbt_lib_get_or_null(link_lib, host->link_down, SURF_LINK_LEVEL); + + xbt_assert(link_up_down.link_up, "Link '%s' not found!",host->link_up); + xbt_assert(link_up_down.link_down, "Link '%s' not found!",host->link_down); + + if(!current_routing->link_up_down_list) + current_routing->link_up_down_list = xbt_dynar_new(sizeof(s_surf_parsing_link_up_down_t),NULL); + + // If dynar is is greater than edge id and if the host_link is already defined + if(xbt_dynar_length(current_routing->link_up_down_list) > info->id && + xbt_dynar_get_as(current_routing->link_up_down_list,info->id,void*)) + xbt_die("Host_link for '%s' is already defined!",host->id); + + XBT_INFO("Push Host_link for host '%s' to position %d",info->name,info->id); + xbt_dynar_set_as(current_routing->link_up_down_list,info->id,s_surf_parsing_link_up_down_t,link_up_down); +} + /** * \brief Add a "host" to the network element list */ @@ -582,6 +614,7 @@ static void _get_route_and_latency(sg_routing_edge_t src, sg_routing_edge_t dst, if (src_father == dst_father) { /* SURF_ROUTING_BASE */ route.link_list = *links; common_father->get_route_and_latency(common_father, src, dst, &route,latency); + // if vivaldi latency+=vivaldi(src,dst) return; } @@ -605,12 +638,13 @@ static void _get_route_and_latency(sg_routing_edge_t src, sg_routing_edge_t dst, /* If source gateway is not our source, we have to recursively find our way up to this point */ if (src != src_gateway_net_elm) _get_route_and_latency(src, src_gateway_net_elm, links, latency); - xbt_dynar_merge(links, &route.link_list); /* If dest gateway is not our destination, we have to recursively find our way from this point */ if (dst_gateway_net_elm != dst) _get_route_and_latency(dst_gateway_net_elm, dst, links, latency); + + // if vivaldi latency+=vivaldi(src_gateway,dst_gateway) } /** @@ -742,6 +776,14 @@ void routing_model_create( void *loopback) /* ************************************************************************** */ /* ************************* GENERIC PARSE FUNCTIONS ************************ */ +void routing_cluster_add_backbone(void* bb) { + xbt_assert(current_routing->model_desc == &routing_models[SURF_MODEL_CLUSTER], + "You have to be in model Cluster to use tag backbone!"); + xbt_assert(!((as_cluster_t)current_routing)->backbone,"The backbone link is already defined!"); + ((as_cluster_t)current_routing)->backbone = bb; + XBT_DEBUG("Add a backbone to AS '%s'",current_routing->name); +} + static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster) { char *host_id, *groups, *link_id = NULL; @@ -889,7 +931,7 @@ static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster) sg_platf_new_link(&link); - surf_routing_cluster_add_backbone(current_routing, xbt_lib_get_or_null(link_lib, link_backbone, SURF_LINK_LEVEL)); + routing_cluster_add_backbone(xbt_lib_get_or_null(link_lib, link_backbone, SURF_LINK_LEVEL)); free(link_backbone); } @@ -1142,6 +1184,7 @@ void routing_register_callbacks() { sg_platf_host_add_cb(parse_S_host); sg_platf_router_add_cb(parse_S_router); + sg_platf_host_link_add_cb(parse_S_host_link); surfxml_add_callback(STag_surfxml_random_cb_list, &routing_parse_Srandom);