+static void routing_parse_peer(sg_platf_peer_cbarg_t peer)
+{
+ static int AX_ptr = 0;
+ char *host_id = NULL;
+ char *router_id, *link_router, *link_backbone, *link_id_up, *link_id_down;
+
+ static unsigned int surfxml_buffer_stack_stack_ptr = 1;
+ static unsigned int surfxml_buffer_stack_stack[1024];
+
+ surfxml_buffer_stack_stack[0] = 0;
+
+ surfxml_bufferstack_push(1);
+
+ XBT_DEBUG("<AS id=\"%s\"\trouting=\"Full\">", peer->id);
+ sg_platf_new_AS_begin(peer->id, "Full");
+
+ XBT_DEBUG(" ");
+ host_id = HOST_PEER(peer->id);
+ router_id = ROUTER_PEER(peer->id);
+ link_id_up = LINK_UP_PEER(peer->id);
+ link_id_down = LINK_DOWN_PEER(peer->id);
+
+ link_router = bprintf("%s_link_router", peer->id);
+ link_backbone = bprintf("%s_backbone", peer->id);
+
+ XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\"/>", host_id, peer->power);
+ s_sg_platf_host_cbarg_t host;
+ memset(&host, 0, sizeof(host));
+ host.initial_state = SURF_RESOURCE_ON;
+ host.id = host_id;
+ host.power_peak = peer->power;
+ host.power_scale = 1.0;
+ host.power_trace = peer->availability_trace;
+ host.state_trace = peer->state_trace;
+ host.core_amount = 1;
+ sg_platf_new_host(&host);
+
+
+ XBT_DEBUG("<router id=\"%s\"\tcoordinates=\"%s\"/>", router_id, peer->coord);
+ s_sg_platf_router_cbarg_t router;
+ memset(&router, 0, sizeof(router));
+ router.id = router_id;
+ router.coord = peer->coord;
+ sg_platf_new_router(&router);
+
+ XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", link_id_up,
+ peer->bw_in, peer->lat);
+ s_sg_platf_link_cbarg_t link;
+ memset(&link, 0, sizeof(link));
+ link.state = SURF_RESOURCE_ON;
+ link.policy = SURF_LINK_SHARED;
+ link.id = link_id_up;
+ link.bandwidth = peer->bw_in;
+ link.latency = peer->lat;
+ sg_platf_new_link(&link);
+
+ // FIXME: dealing with full duplex is not the role of this piece of code, I'd say [Mt]
+ // Instead, it should be created fullduplex, and the models will do what's needed in this case
+ XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", link_id_down,
+ peer->bw_out, peer->lat);
+ link.id = link_id_down;
+ sg_platf_new_link(&link);
+
+ XBT_DEBUG(" ");
+
+ // begin here
+ XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", host_id, router_id);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, host_id);
+ SURFXML_BUFFER_SET(route_dst, router_id);
+ A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
+ SURFXML_START_TAG(route);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", link_id_up);
+ SURFXML_BUFFER_SET(link_ctn_id, link_id_up);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+
+ XBT_DEBUG("</route>");
+ SURFXML_END_TAG(route);
+
+ //Opposite Route
+ XBT_DEBUG("<route\tsrc=\"%s\"\tdst=\"%s\"", router_id, host_id);
+ XBT_DEBUG("symmetrical=\"NO\">");
+ SURFXML_BUFFER_SET(route_src, router_id);
+ SURFXML_BUFFER_SET(route_dst, host_id);
+ A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
+ SURFXML_START_TAG(route);
+
+ XBT_DEBUG("<link_ctn\tid=\"%s\"/>", link_id_down);
+ SURFXML_BUFFER_SET(link_ctn_id, link_id_down);
+ A_surfxml_link_ctn_direction = A_surfxml_link_ctn_direction_NONE;
+ SURFXML_START_TAG(link_ctn);
+ SURFXML_END_TAG(link_ctn);
+
+ XBT_DEBUG("</route>");
+ SURFXML_END_TAG(route);
+
+ XBT_DEBUG("</AS>");
+ sg_platf_new_AS_end();
+ XBT_DEBUG(" ");
+
+ //xbt_dynar_free(&tab_elements_num);
+ free(host_id);
+ free(router_id);
+ free(link_router);
+ free(link_backbone);
+ free(link_id_up);
+ free(link_id_down);
+ surfxml_bufferstack_pop(1);