- char *key, *data, *end;
- const char *sep = "#";
- xbt_dynar_t links, keys;
- char *link_name = NULL;
-
- routetree_t tmp1,tmp2,tmp3,tmp4,tmp5; // erase me
- int *val; // erase me
- int i,j,n; // erase me
- void* link; // erase me
-
-routing_hierarchical_t routing = (routing_hierarchical_t)used_routing;
-
-/////////// fixed network /////////////
-
-/////////// make the routetree tree /////////////
-
- routing->routetree = routetree_new();
- routetree_fill(&(routing->routetree),"as1",NULL,0);
-
- tmp2 = routetree_new();
- routetree_fill(&(tmp2),"as2",(routing->routetree),0);
- //hosts
- //router
- routetree_add_router("R21",&tmp2);
- routetree_add_router("R22",&tmp2);
- // add
- routetree_add(&(routing->routetree),&tmp2);
-
- tmp3 = routetree_new();
- routetree_fill(&(tmp3),"as3",(tmp2),0);
- //hosts
- routetree_add_host("A",&tmp3);
- routetree_add_host("B",&tmp3);
- //router
- routetree_add_router("R31",&tmp3);
- routetree_add_router("R32",&tmp3);
- // add
- routetree_add(&(tmp2),&tmp3);
-
- tmp4 = routetree_new();
- routetree_fill(&(tmp4),"as4",(routing->routetree),1);
- //hosts
- routetree_add_host("C",&tmp4);
- routetree_add_host("D",&tmp4);
- routetree_add_host("E",&tmp4);
- //router
- routetree_add_router("R41",&tmp4);
- routetree_add_router("R42",&tmp4);
- // add
- routetree_add(&(routing->routetree),&tmp4);
-
- tmp5 = routetree_new();
- routetree_fill(&(tmp5),"as5",(routing->routetree),2);
- //hosts
- routetree_add_host("F",&tmp5);
- //router
- routetree_add_router("R51",&tmp5);
- // add
- routetree_add(&(routing->routetree),&tmp5);
-
-/////////// fill the routing tables /////////////
-
- routetree_fill_routing_table(&(routing->routetree));
- routetree_fill_routing_table(&(tmp2));
- routetree_fill_routing_table(&(tmp3));
- routetree_fill_routing_table(&(tmp4));
- routetree_fill_routing_table(&(tmp5));
-
-/////////// fill the routing tables with the routes /////////////
-
- // as2 - as4
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "0"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp2,&tmp4,&(routing->routetree)),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "1"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp2,&tmp4,&(routing->routetree)),&link);
- SRC_DST_HIERARCHICAL_AA(&tmp2,&tmp4,&(routing->routetree))->src_id = HOST2ROUTER(0); //r21
- SRC_DST_HIERARCHICAL_AA(&tmp2,&tmp4,&(routing->routetree))->dst_id = HOST2ROUTER(4); //r41
- // as4 - as2
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "0"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp4,&tmp2,&(routing->routetree)),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "1"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp4,&tmp2,&(routing->routetree)),&link);
- SRC_DST_HIERARCHICAL_AA(&tmp4,&tmp2,&(routing->routetree))->src_id = HOST2ROUTER(4); //r41
- SRC_DST_HIERARCHICAL_AA(&tmp4,&tmp2,&(routing->routetree))->dst_id = HOST2ROUTER(0); //r21
-
- // as2 - as5
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp2,&tmp5,&(routing->routetree)),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "3"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp2,&tmp5,&(routing->routetree)),&link);
- SRC_DST_HIERARCHICAL_AA(&tmp2,&tmp5,&(routing->routetree))->src_id = HOST2ROUTER(1); //r22
- SRC_DST_HIERARCHICAL_AA(&tmp2,&tmp5,&(routing->routetree))->dst_id = HOST2ROUTER(6); //r51
- // as5 - as2
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp5,&tmp2,&(routing->routetree)),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "3"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp5,&tmp2,&(routing->routetree)),&link);
- SRC_DST_HIERARCHICAL_AA(&tmp5,&tmp2,&(routing->routetree))->src_id = HOST2ROUTER(6); //r51
- SRC_DST_HIERARCHICAL_AA(&tmp5,&tmp2,&(routing->routetree))->dst_id = HOST2ROUTER(1); //r22
-
- // as4 - as5
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "4"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp4,&tmp5,&(routing->routetree)),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp4,&tmp5,&(routing->routetree)),&link);
- SRC_DST_HIERARCHICAL_AA(&tmp4,&tmp5,&(routing->routetree))->src_id = HOST2ROUTER(5); //r42
- SRC_DST_HIERARCHICAL_AA(&tmp4,&tmp5,&(routing->routetree))->dst_id = HOST2ROUTER(6); //r51
- // as5 - as4
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "4"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp5,&tmp4,&(routing->routetree)),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AA(&tmp5,&tmp4,&(routing->routetree)),&link);
- SRC_DST_HIERARCHICAL_AA(&tmp5,&tmp4,&(routing->routetree))->src_id = HOST2ROUTER(6); //r51
- SRC_DST_HIERARCHICAL_AA(&tmp5,&tmp4,&(routing->routetree))->dst_id = HOST2ROUTER(5); //r42
-
-// tmp2
-
- // as3 - r21
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AR(&tmp3,0,&tmp2),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AR(&tmp3,0,&tmp2),&link);
- SRC_DST_HIERARCHICAL_AR(&tmp3,0,&tmp2)->src_id = HOST2ROUTER(2); //r31
- SRC_DST_HIERARCHICAL_AR(&tmp3,0,&tmp2)->dst_id = HOST2ROUTER(0); //r21
- // r21 - as3
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RA(0,&tmp3,&tmp2),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RA(0,&tmp3,&tmp2),&link);
- SRC_DST_HIERARCHICAL_RA(0,&tmp3,&tmp2)->src_id = HOST2ROUTER(0); //r21
- SRC_DST_HIERARCHICAL_RA(0,&tmp3,&tmp2)->dst_id = HOST2ROUTER(2); //r31
-
- // as3 - r22
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "3"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AR(&tmp3,1,&tmp2),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "1"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_AR(&tmp3,1,&tmp2),&link);
- SRC_DST_HIERARCHICAL_AR(&tmp3,1,&tmp2)->src_id = HOST2ROUTER(3); //r32
- SRC_DST_HIERARCHICAL_AR(&tmp3,1,&tmp2)->dst_id = HOST2ROUTER(1); //r22
- // r22 - as3
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "3"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RA(1,&tmp3,&tmp2),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "1"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RA(1,&tmp3,&tmp2),&link);
- SRC_DST_HIERARCHICAL_RA(1,&tmp3,&tmp2)->src_id = HOST2ROUTER(1); //r22
- SRC_DST_HIERARCHICAL_RA(1,&tmp3,&tmp2)->dst_id = HOST2ROUTER(3); //r32
-
-// tmp3
-
- // a - b
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "7"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(0,1,&tmp3),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(0,1,&tmp3),&link);
- // b - a
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "7"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(1,0,&tmp3),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(1,0,&tmp3),&link);
-
- // a - r31
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(0,2,&tmp3),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "1"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(0,2,&tmp3),&link);
- // a - r32
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "8"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(0,3,&tmp3),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "7"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(0,3,&tmp3),&link);
- // b - r31
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "3"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(1,2,&tmp3),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(1,2,&tmp3),&link);
- // b - r32
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "9"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(1,3,&tmp3),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "3"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(1,3,&tmp3),&link);
-
- // r31 - a
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(2,0,&tmp3),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "1"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(2,0,&tmp3),&link);
- // r32 - a
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "8"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(3,1,&tmp3),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "7"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(3,1,&tmp3),&link);
- // r31 - b
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "3"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(2,0,&tmp3),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(2,0,&tmp3),&link);
- // r32 - b
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "9"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(3,1,&tmp3),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "3"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(3,1,&tmp3),&link);
-
-// tmp4
-
- // c - d
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(2,3,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "7"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(2,3,&tmp4),&link);
- // d - c
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(3,2,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "7"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(3,2,&tmp4),&link);
- // c - e
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "6"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(2,4,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(2,4,&tmp4),&link);
- // e - c
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "6"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(4,2,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(4,2,&tmp4),&link);
- // d - e
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(3,4,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "3"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(3,4,&tmp4),&link);
- // e - d
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(4,3,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "3"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(4,3,&tmp4),&link);
-
- // c - r41
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "7"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(2,4,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "9"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(2,4,&tmp4),&link);
- // d - r41
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(3,4,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "8"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(3,4,&tmp4),&link);
- // e - r41
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "8"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(4,4,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "0"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(4,4,&tmp4),&link);
- // c - r42
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "6"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(2,5,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(2,5,&tmp4),&link);
- // d - r42
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(3,5,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "1"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(3,5,&tmp4),&link);
- // e - r42
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "9"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(4,5,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "4"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(4,5,&tmp4),&link);
-
- // r41 - c
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "7"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(4,2,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "9"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(4,2,&tmp4),&link);
- // r41 - d
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(4,3,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "8"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(4,3,&tmp4),&link);
- // r41 - e
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "8"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(4,4,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "0"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(4,4,&tmp4),&link);
- // r42 - c
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "6"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(5,2,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "5"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(5,2,&tmp4),&link);
- // r42 - d
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "2"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(5,3,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "1"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(5,3,&tmp4),&link);
- // r42 - e
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "9"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(5,4,&tmp4),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "4"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(5,4,&tmp4),&link);
-
-// tmp5
-
- // f - r51
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "6"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(5,6,&tmp5),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "8"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HR(5,6,&tmp5),&link);
-
- // r51 - f
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "6"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(6,5,&tmp5),&link);
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "8"); xbt_assert0(link!=NULL,"NULL");
- xbt_dynar_push(ROUTE_HIERARCHICAL_RH(6,5,&tmp5),&link);
-
-// loopback
-
- link = xbt_dict_get_or_null(surf_network_model->resource_set, "loopback"); xbt_assert0(link!=NULL,"NULL loopback");
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(0,0,&tmp3),&link);
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(1,1,&tmp3),&link);
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(2,2,&tmp4),&link);
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(3,3,&tmp4),&link);
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(4,4,&tmp4),&link);
- xbt_dynar_push(ROUTE_HIERARCHICAL_HH(5,5,&tmp5),&link);
-
-// for(i=0;i<=5;i++) {
-// for(j=0;j<=5;j++) {
-// links = routing_hierarchical_get_route(i,j);
-// printf("route from %d to %d",i,j);
-// cpt=0;
-// xbt_dynar_foreach(links, cpt, link) {
-// s_surf_resource_t* generic_resource = link;
-// printf(" l%s,",generic_resource->name);
-// }
-// printf("\n");
-// }
-// }
-//
-// exit(0);
-
-}
-
-static void routing_model_hierarchical_create(size_t size_of_link,void *loopback) {
-
- /* initialize the id counters */
- local_host_count = 0;
- local_router_count = 0;
-
- /* initialize our structure */
- routing_hierarchical_t routing = xbt_new0(s_routing_hierarchical_t,1);
- routing->generic_routing.name = "Hierarchical";
- routing->generic_routing.host_count = 0;
- routing->generic_routing.get_route = routing_hierarchical_get_route;
- routing->generic_routing.get_onelink_routes = routing_hierarchical_get_onelink_routes;
- routing->generic_routing.is_router = routing_hierarchical_is_router;
- routing->generic_routing.finalize = routing_hierarchical_finalize;
-
- routing->size_of_link = size_of_link;
- routing->loopback = loopback;
-
- /* Set it in position */
- used_routing = (routing_t) routing;
-
- /* Set the dict for host ids */
- routing->generic_routing.host_id = xbt_dict_new();
-
- /* Set the host */
- routing->host_routetree = xbt_dynar_new(sizeof(routetree_t), NULL);
-
- /* Create the last route array */
- routing->last_route = xbt_dynar_new(routing->size_of_link, NULL);
-
- /* Setup the parsing callbacks we need */
-
- // DAVID - only for parse the hosts
- surfxml_add_callback(STag_surfxml_host_cb_list, &routing_full_parse_Shost);
-
- // surfxml_add_callback(STag_surfxml_router_cb_list, &routing_full_parse_Srouter);
- // surfxml_add_callback(ETag_surfxml_platform_cb_list, &routing_full_parse_end);
- // surfxml_add_callback(STag_surfxml_route_cb_list, &routing_full_parse_Sroute_set_endpoints);
- // surfxml_add_callback(ETag_surfxml_route_cb_list, &routing_full_parse_Eroute);
- // surfxml_add_callback(STag_surfxml_cluster_cb_list, &routing_full_parse_Scluster);
-
- // DAVID - make a fix example
- surfxml_add_callback(ETag_surfxml_platform_cb_list, &example);
+ char *key;
+ element_as = xbt_dict_get_or_null(global_routing->where_network_elements,element);
+ result = ((routing_component_t)-1);
+ if(element_as!=rc)
+ result = generic_as_exist(rc,element_as);
+
+ int found=0;
+ if(result)
+ {
+ xbt_dict_foreach(element_as->routing_sons, cursor, key, elem) {
+ found = !strcmp(elem->name,element);
+ if( found ) break;
+ }
+ if( found ) return element_as;
+ }
+ return NULL;
+}
+
+static routing_component_t generic_processing_units_exist(routing_component_t rc, char* element) {
+ routing_component_t element_as;
+ element_as = xbt_dict_get_or_null(global_routing->where_network_elements,element);
+ if(element_as==rc) return element_as;
+ return generic_as_exist(rc,element_as);
+}
+
+static void generic_src_dst_check(routing_component_t rc, const char* src, const char* dst) {
+
+ routing_component_t src_as = xbt_dict_get_or_null(global_routing->where_network_elements,src);
+ routing_component_t dst_as = xbt_dict_get_or_null(global_routing->where_network_elements,dst);
+
+ xbt_assert3(src_as != NULL && dst_as != NULL,
+ "Ask for route \"from\"(%s) or \"to\"(%s) no found at AS \"%s\"",src,dst,rc->name);
+ xbt_assert4(src_as == dst_as,
+ "The src(%s in %s) and dst(%s in %s) are in differents AS",src,src_as->name,dst,dst_as->name);
+ xbt_assert2(rc == dst_as,
+ "The routing component of src and dst is not the same as the network elements belong (%s==%s)",rc->name,dst_as->name);
+}
+
+static void routing_full_parse_Scluster(void)
+{
+
+ char *cluster_id = A_surfxml_cluster_id;
+ char *cluster_prefix = A_surfxml_cluster_prefix;
+ char *cluster_suffix = A_surfxml_cluster_suffix;
+ char *cluster_radical = A_surfxml_cluster_radical;
+ char *cluster_power = A_surfxml_cluster_power;
+ char *cluster_bw = A_surfxml_cluster_bw;
+ char *cluster_lat = A_surfxml_cluster_lat;
+ char *cluster_bb_bw = A_surfxml_cluster_bb_bw;
+ char *cluster_bb_lat = A_surfxml_cluster_bb_lat;
+ char *host_id, *groups, *link_id;
+ char *router_id, *link_router, *link_backbone, *route_src_dst;
+ unsigned int iter;
+ int start, end, i;
+ xbt_dynar_t radical_elements;
+ xbt_dynar_t radical_ends;
+ static int AX_ptr = 0;
+ static int surfxml_bufferstack_size = 2048;
+
+ /* allocating memory for the buffer, I think 2kB should be enough */
+ surfxml_bufferstack = xbt_new0(char, surfxml_bufferstack_size);
+
+// DEBUG4("id='%s' prefix='%s' suffix='%s' radical='%s'",
+// cluster_id,cluster_prefix,cluster_suffix,cluster_radical);
+// DEBUG5("power='%s' bw='%s' lat='%s' bb_bw='%s' bb_lat='%s'",
+// cluster_power,cluster_bw,cluster_lat,cluster_bb_bw,cluster_bb_lat);
+
+ DEBUG1("<AS id=\"%s\"\trouting=\"RuleBased\">",cluster_id);
+ SURFXML_BUFFER_SET(AS_id, cluster_id);
+ SURFXML_BUFFER_SET(AS_routing, "RuleBased");
+ SURFXML_START_TAG(AS);
+
+ radical_elements = xbt_str_split(cluster_radical, ",");
+ xbt_dynar_foreach(radical_elements, iter, groups)
+ {
+ radical_ends = xbt_str_split(groups, "-");
+ switch (xbt_dynar_length(radical_ends))
+ {
+ case 1:
+ surf_parse_get_int(&start, xbt_dynar_get_as(radical_ends, 0, char *));
+ host_id = bprintf("%s%d%s", cluster_prefix, start, cluster_suffix);
+ link_id = bprintf("%s_link_%d", cluster_id, start);
+
+ DEBUG2("<host\tid=\"%s\"\tpower=\"%s\"/>",host_id,cluster_power);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(host_id, host_id);
+ SURFXML_BUFFER_SET(host_power, cluster_power);
+ SURFXML_BUFFER_SET(host_availability, "1.0");
+ SURFXML_BUFFER_SET(host_availability_file, "");
+ A_surfxml_host_state = A_surfxml_host_state_ON;
+ SURFXML_BUFFER_SET(host_state_file, "");
+ SURFXML_BUFFER_SET(host_interference_send, "1.0");
+ SURFXML_BUFFER_SET(host_interference_recv, "1.0");
+ SURFXML_BUFFER_SET(host_interference_send_recv, "1.0");
+ SURFXML_BUFFER_SET(host_max_outgoing_rate, "-1.0");
+ SURFXML_START_TAG(host);
+ SURFXML_END_TAG(host);
+
+ DEBUG3("<link\tid=\"%s\"\tbw=\"%s\"\tlat=\"%s\"/>",link_id,cluster_bw,cluster_lat);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(link_id, link_id);
+ SURFXML_BUFFER_SET(link_bandwidth, cluster_bw);
+ SURFXML_BUFFER_SET(link_latency, cluster_lat);
+ SURFXML_BUFFER_SET(link_bandwidth_file, "");
+ SURFXML_BUFFER_SET(link_latency_file, "");
+ A_surfxml_link_state = A_surfxml_link_state_ON;
+ SURFXML_BUFFER_SET(link_state_file, "");
+ A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+ SURFXML_START_TAG(link);
+ SURFXML_END_TAG(link);
+
+ break;
+
+ case 2:
+
+ surf_parse_get_int(&start, xbt_dynar_get_as(radical_ends, 0, char *));
+ surf_parse_get_int(&end, xbt_dynar_get_as(radical_ends, 1, char *));
+ for (i = start; i <= end; i++)
+ {
+ host_id = bprintf("%s%d%s", cluster_prefix, i, cluster_suffix);
+ link_id = bprintf("%s_link_%d", cluster_id, i);
+
+ DEBUG2("<host\tid=\"%s\"\tpower=\"%s\"/>",host_id,cluster_power);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(host_id, host_id);
+ SURFXML_BUFFER_SET(host_power, cluster_power);
+ SURFXML_BUFFER_SET(host_availability, "1.0");
+ SURFXML_BUFFER_SET(host_availability_file, "");
+ A_surfxml_host_state = A_surfxml_host_state_ON;
+ SURFXML_BUFFER_SET(host_state_file, "");
+ SURFXML_BUFFER_SET(host_interference_send, "1.0");
+ SURFXML_BUFFER_SET(host_interference_recv, "1.0");
+ SURFXML_BUFFER_SET(host_interference_send_recv, "1.0");
+ SURFXML_BUFFER_SET(host_max_outgoing_rate, "-1.0");
+ SURFXML_START_TAG(host);
+ SURFXML_END_TAG(host);
+
+ DEBUG3("<link\tid=\"%s\"\tbw=\"%s\"\tlat=\"%s\"/>",link_id,cluster_bw,cluster_lat);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(link_id, link_id);
+ SURFXML_BUFFER_SET(link_bandwidth, cluster_bw);
+ SURFXML_BUFFER_SET(link_latency, cluster_lat);
+ SURFXML_BUFFER_SET(link_bandwidth_file, "");
+ SURFXML_BUFFER_SET(link_latency_file, "");
+ A_surfxml_link_state = A_surfxml_link_state_ON;
+ SURFXML_BUFFER_SET(link_state_file, "");
+ A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+ SURFXML_START_TAG(link);
+ SURFXML_END_TAG(link);
+ }
+ break;
+
+ default:
+ DEBUG0("Malformed radical");
+ }
+
+ xbt_dynar_free(&radical_ends);
+ }
+
+ DEBUG0(" ");
+ router_id = bprintf("%srouter%s",cluster_prefix,cluster_suffix);
+ link_router = bprintf("%s_link_router",cluster_id);
+ link_backbone = bprintf("%s_backbone",cluster_id);
+
+ DEBUG1("<router id=\"%s\"\">",router_id);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(router_id, router_id);;
+ SURFXML_START_TAG(router);
+ SURFXML_END_TAG(router);
+
+ DEBUG3("<link\tid=\"%s\"\tbw=\"%s\"\tlat=\"%s\"/>",link_router,cluster_bw,cluster_lat);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(link_id, link_router);
+ SURFXML_BUFFER_SET(link_bandwidth, cluster_bw);
+ SURFXML_BUFFER_SET(link_latency, cluster_lat);
+ SURFXML_BUFFER_SET(link_bandwidth_file, "");
+ SURFXML_BUFFER_SET(link_latency_file, "");
+ A_surfxml_link_state = A_surfxml_link_state_ON;
+ SURFXML_BUFFER_SET(link_state_file, "");
+ A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+ SURFXML_START_TAG(link);
+ SURFXML_END_TAG(link);
+
+ DEBUG3("<link\tid=\"%s\"\tbw=\"%s\"\tlat=\"%s\"/>",link_backbone,cluster_bb_bw,cluster_bb_lat);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(link_id, link_backbone);
+ SURFXML_BUFFER_SET(link_bandwidth, cluster_bb_bw);
+ SURFXML_BUFFER_SET(link_latency, cluster_bb_lat);
+ SURFXML_BUFFER_SET(link_bandwidth_file, "");
+ SURFXML_BUFFER_SET(link_latency_file, "");
+ A_surfxml_link_state = A_surfxml_link_state_ON;
+ SURFXML_BUFFER_SET(link_state_file, "");
+ A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED;
+ SURFXML_START_TAG(link);
+ SURFXML_END_TAG(link);
+
+ char *new_suffix = bprintf("%s","");
+
+ radical_elements = xbt_str_split(cluster_suffix, ".");
+ xbt_dynar_foreach(radical_elements, iter, groups)
+ {
+ if(strcmp(groups,""))
+ {
+ new_suffix = bprintf("%s\\.%s",new_suffix,groups);
+ }
+ }
+ route_src_dst = bprintf("%s(.*)%s",cluster_prefix,new_suffix);
+
+ DEBUG0(" ");
+
+ DEBUG2("<route\tsrc=\"%s\"\tdst=\"%s\">",route_src_dst,route_src_dst);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(route_src, route_src_dst);
+ SURFXML_BUFFER_SET(route_dst, route_src_dst);
+ SURFXML_START_TAG(route);
+
+ DEBUG1("<link:ctn\tid=\"%s_link_$src1\"/>",cluster_id);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(link_c_ctn_id, bprintf("%s_link_$src1",cluster_id));
+ SURFXML_START_TAG(link_c_ctn);
+ SURFXML_END_TAG(link_c_ctn);
+
+ DEBUG1("<link:ctn\tid=\"%s_backbone\"/>",cluster_id);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(link_c_ctn_id, bprintf("%s_backbone",cluster_id));
+ SURFXML_START_TAG(link_c_ctn);
+ SURFXML_END_TAG(link_c_ctn);
+
+ DEBUG1("<link:ctn\tid=\"%s_link_$dst1\"/>",cluster_id);
+ SURFXML_BUFFER_RESET();
+ SURFXML_BUFFER_SET(link_c_ctn_id, bprintf("%s_link_$dst1",cluster_id));
+ SURFXML_START_TAG(link_c_ctn);
+ SURFXML_END_TAG(link_c_ctn);
+
+ DEBUG0("</route>");
+ SURFXML_END_TAG(route);
+
+ DEBUG0("</AS>");
+ SURFXML_END_TAG(AS);
+ DEBUG0(" ");