+static int routing_hierarchical_is_router(int id){
+ return ISROUTER(id);
+}
+
+static void routing_hierarchical_finalize(void) {
+ routing_hierarchical_t routing = (routing_hierarchical_t)used_routing;
+ if(routing) {
+ xbt_dict_free(&used_routing->host_id);
+ routetree_free(&(routing->routetree));
+ xbt_dynar_free(&(routing->host_routetree));
+ xbt_dynar_free(&routing->last_route);
+ xbt_free(routing);
+ routing=NULL;
+ }
+}
+
+// void print_tree(routetree_t start)
+// {
+// int data;
+// unsigned int it;
+// routetree_t elem;
+//
+// printf("Nombre %s - hosts %i - routers %i - as %i\n",
+// start->name,
+// (int)start->host_count,
+// (int)start->router_count,
+// (int)start->routetree_list->used);
+// /*
+// printf("hosts:");
+// xbt_dynar_foreach(start->host_list,it,data) {
+// printf(" %i",data);
+// }
+// printf("\n");
+//
+// printf("routers:");
+// xbt_dynar_foreach(start->router_list,it,data) {
+// printf(" %i",ROUTER2HOST(data));
+// }
+// printf("\n");
+// */
+// xbt_dynar_foreach(start->routetree_list,it,elem) {
+// print_tree(elem);
+// }
+// }
+
+/* erase me */
+// The following function makes a example as if a paser program would do it.
+static void example() {
+
+ int nb_link = 0;
+ unsigned int cpt = 0;
+ xbt_dict_cursor_t cursor = NULL;
+ 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);
+