- char *host_id, *groups, *link_id = NULL;
- xbt_dict_t patterns = NULL;
-
- s_sg_platf_host_cbarg_t host;
- s_sg_platf_link_cbarg_t link;
-
- unsigned int iter;
- int start, end, i;
- xbt_dynar_t radical_elements;
- xbt_dynar_t radical_ends;
-
- if ((cluster->availability_trace && strcmp(cluster->availability_trace, ""))
- || (cluster->state_trace && strcmp(cluster->state_trace, ""))) {
- patterns = xbt_dict_new_homogeneous(xbt_free_f);
- xbt_dict_set(patterns, "id", xbt_strdup(cluster->id), NULL);
- xbt_dict_set(patterns, "prefix", xbt_strdup(cluster->prefix), NULL);
- xbt_dict_set(patterns, "suffix", xbt_strdup(cluster->suffix), NULL);
- }
-
- XBT_DEBUG("<AS id=\"%s\"\trouting=\"Cluster\">", cluster->id);
- s_sg_platf_AS_cbarg_t AS = SG_PLATF_AS_INITIALIZER;
- AS.id = cluster->id;
- AS.routing = A_surfxml_AS_routing_Cluster;
- sg_platf_new_AS_begin(&AS);
-
- current_routing->p_linkUpDownList
- = xbt_dynar_new(sizeof(s_surf_parsing_link_up_down_t),NULL);
-
- //Make all hosts
- radical_elements = xbt_str_split(cluster->radical, ",");
- xbt_dynar_foreach(radical_elements, iter, groups) {
-
- radical_ends = xbt_str_split(groups, "-");
- start = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 0, char *));
-
- switch (xbt_dynar_length(radical_ends)) {
- case 1:
- end = start;
- break;
- case 2:
- end = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 1, char *));
- break;
- default:
- surf_parse_error("Malformed radical");
- break;
- }
- 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);
-
- XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\">", host_id, cluster->power);
-
- memset(&host, 0, sizeof(host));
- host.id = host_id;
- if (cluster->availability_trace && strcmp(cluster->availability_trace, "")) {
- xbt_dict_set(patterns, "radical", bprintf("%d", i), NULL);
- char *avail_file = xbt_str_varsubst(cluster->availability_trace, patterns);
- XBT_DEBUG("\tavailability_file=\"%s\"", avail_file);
- host.power_trace = tmgr_trace_new_from_file(avail_file);
- xbt_free(avail_file);
- } else {
- XBT_DEBUG("\tavailability_file=\"\"");
- }
-
- if (cluster->state_trace && strcmp(cluster->state_trace, "")) {
- char *avail_file = xbt_str_varsubst(cluster->state_trace, patterns);
- XBT_DEBUG("\tstate_file=\"%s\"", avail_file);
- host.state_trace = tmgr_trace_new_from_file(avail_file);
- xbt_free(avail_file);
- } else {
- XBT_DEBUG("\tstate_file=\"\"");
- }
-
- xbt_dynar_t power_state_list = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push(power_state_list,&cluster->power);
- host.power_peak = power_state_list;
- host.pstate = 0;
-
- //host.power_peak = cluster->power;
- host.power_scale = 1.0;
- host.core_amount = cluster->core_amount;
- host.initial_state = SURF_RESOURCE_ON;
- host.coord = "";
- sg_platf_new_host(&host);
- XBT_DEBUG("</host>");
-
- XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", link_id,
- cluster->bw, cluster->lat);
-
- memset(&link, 0, sizeof(link));
- link.id = link_id;
- link.bandwidth = cluster->bw;
- link.latency = cluster->lat;
- link.state = SURF_RESOURCE_ON;
- link.policy = cluster->sharing_policy;
- sg_platf_new_link(&link);
-
- s_surf_parsing_link_up_down_t info;
-
- if (link.policy == SURF_LINK_FULLDUPLEX) {
- char *tmp_link = bprintf("%s_UP", link_id);
- info.link_up =
- xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
- free(tmp_link);
- tmp_link = bprintf("%s_DOWN", link_id);
- info.link_down =
- xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
- free(tmp_link);
- } else {
- info.link_up = xbt_lib_get_or_null(link_lib, link_id, SURF_LINK_LEVEL);
- info.link_down = info.link_up;
- }
-
- if(cluster->limiter_link!=0){
- char *tmp_link = bprintf("%s_limiter", link_id);
- XBT_DEBUG("<limiter\tid=\"%s\"\tbw=\"%f\"/>", tmp_link,
- cluster->limiter_link);
-
-
- memset(&link, 0, sizeof(link));
- link.id = tmp_link;
- link.bandwidth = cluster->limiter_link;
- link.latency = 0;
- link.state = SURF_RESOURCE_ON;
- link.policy = SURF_LINK_SHARED;
- sg_platf_new_link(&link);
- info.limiter_link =
- xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
- free(tmp_link);
- }else{
- info.limiter_link =NULL;
- }
-
- if(cluster->loopback_bw!=0 || cluster->loopback_lat!=0){
- char *tmp_link = bprintf("%s_loopback", link_id);
- XBT_DEBUG("<loopback\tid=\"%s\"\tbw=\"%f\"/>", tmp_link,
- cluster->limiter_link);
-
-
- memset(&link, 0, sizeof(link));
- link.id = tmp_link;
- link.bandwidth = cluster->loopback_bw;
- link.latency = cluster->loopback_lat;
- link.state = SURF_RESOURCE_ON;
- link.policy = SURF_LINK_FATPIPE;
- sg_platf_new_link(&link);
- info.loopback_link =
- xbt_lib_get_or_null(link_lib, tmp_link, SURF_LINK_LEVEL);
- free(tmp_link);
- }else{
- info.loopback_link =NULL;
- }