void read_applications_from_file(char *file){ FILE *fd; long i; char pattern[50]; char *pattern_aux; long servers = get_servers(); application app; app.info.start_time = 0; app.info.end_time = 0; app.info.n_flows = 0; app.info.flows_distance = 0; app.info.flows_latency = 0; app.packets = 8192; app.comp_time = 10; app.phases = 1; app.running = 0; app.tasks_finished = 0; app.info.id = 1; if((fd = fopen(file, "r")) == NULL){ printf("Error opening the workload file.\n"); exit(-1); } while(!feof(fd)){ fscanf(fd,"%llu %s %ld %s\n",&app.info.arrive_time, pattern, &app.size, app.allocation_type); if(app.size > servers){ printf("WARNING: Application %ld with size %ld is larger than the network: %ld.\n",app.info.id,app.size, servers); exit(-1); } pattern_aux = strtok(pattern, "_"); if(!literal_value(tpatterns_l, pattern_aux, (int *) &app.pattern)) { printf("Error: Unknown traffic pattern - %s\n", pattern_aux); exit(-1); } app.pattern_nparam=0; if(app.pattern == FILE_PATTERN){ pattern_aux = strtok(NULL, "_"); sscanf(pattern_aux, "%s", app.pattern_file); } while ( (pattern_aux = strtok(NULL, "_")) && app.pattern_nparam < MAX_TRAFFIC_PARAMS){ app.pattern_params[app.pattern_nparam++] = atoi(pattern_aux); } for (i = app.pattern_nparam; i < MAX_TRAFFIC_PARAMS; i++) app.pattern_params[i] = -1; // undefine values, should not be checking these anyway. if(!literal_value(allocation_l, app.allocation_type, (int *) &app.allocation)) { printf("Error: Unknown allocation pattern - %s\n", app.allocation_type); exit(-1); } app.phases = app.pattern_params[0]; list_append(&workload, &app); app.info.id++; } fclose(fd); }
/** * Gets an option & its value. * * Put the value to the FSIN variable. * @param option The string which contains an option=value */ void get_option(char * option) { long opt; char * name; char * value; char * param; char * sep=" _"; char message[100]; name = strtok(option, "="); if(!literal_value(options_l, name, &opt)) { sprintf(message, "get_option: Unknown option %s", name); panic(message); } value = strtok(NULL, "="); switch(opt) { case 2: sscanf(value, "%lf", &bg_load); break; case 3: param = strtok(value, sep); if (param) pkt_len = atoi(param); param = strtok(NULL, sep); if (param) phit_size = atoi(param); break; case 4: if(!literal_value(pattern_l, value, (long *) &pattern)) panic("get_conf: Unknown traffic pattern"); break; case 5: sscanf(value, "%lf", &load); break; case 6: param = strtok(value, sep); if(!literal_value(topology_l, param, (long *) &topo)) panic("get_conf: Unknown topology"); if(topo<DIRECT){ param = strtok(NULL, sep); if (param) { nodes_x = atoi(param); ndim = 1; } param = strtok(NULL, sep); if (param) { nodes_y = atoi(param); ndim = 2; } param = strtok(NULL, sep); if (param) { nodes_z = atoi(param); ndim = 3; } } else if (topo==FATTREE){ param = strtok(NULL, sep); if (param) radix = atoi(param); param = strtok(NULL, sep); if (param) nstages = atoi(param); stDown=stUp=radix; radix=2*radix; } else if (topo==SLIMTREE || topo==THINTREE){ param = strtok(NULL, sep); if (param) stDown = atoi(param); param = strtok(NULL, sep); if (param) stUp = atoi(param); param = strtok(NULL, sep); if (param) nstages = atoi(param); radix = stDown+stUp; } else if (topo==ICUBE){ param = strtok(NULL, sep); if (param) { stDown = nodes_per_switch = atoi(param); } param = strtok(NULL, sep); if (param) { links_per_direction = atoi(param); } param = strtok(NULL, sep); if (param) { nodes_x = atoi(param); ndim=1; } param = strtok(NULL, sep); if (param) { nodes_y = atoi(param); ndim=2; } else nodes_y=1; param = strtok(NULL, sep); if (param) { nodes_z = atoi(param); ndim=3; } else nodes_z=1; } break; case 7: case 8: case 9: panic("The Correct Syntax is now \"topo=<direct_topology>_<nodes_x>_<nodes_y>_<nodes_z>\" "); break; case 10: if(!literal_value(vc_l, value, (long *) &vc_management)) panic("get_conf: Unknown vc management"); break; case 11: if(!literal_value(routing_l, value, (long *) &routing)) panic("get_conf: Unknown routing"); break; case 12: if(!literal_value(rmode_l, value, (long *) &req_mode)) panic("get_conf: Unknown request mode"); break; case 13: param = strtok(value, sep); bub_x = bub_y = bub_z = 2; if (param) bub_y = bub_z = bub_x = atoi(param); param = strtok(NULL, sep); if (param) bub_z = bub_y = atoi(param); param = strtok(NULL, sep); if (param) bub_z = atoi(param); break; case 14: if(!literal_value(atype_l, value, (long *) &arb_mode)) panic("get_conf: Unknown arbitration mode"); break; case 15: if(!literal_value(ctype_l, value, (long *) &cons_mode)) panic("get_conf: Unknown consumption mode"); break; case 16: sscanf(value, "%ld", &plevel); break; case 17: sscanf(value, "%ld", &pheaders); if (pheaders>2047) panic("get_conf: Invalid partial header value"); break; case 18: sscanf(value, "%ld", &bheaders); if (pheaders>8191) panic("get_conf: Invalid batch header value"); break; case 19: sscanf(value, "%ld", &r_seed); break; case 20: sscanf(value, "%ld", &buffer_cap); break; case 21: sscanf(value, "%ld", &binj_cap); break; case 22: sscanf(value, "%s", &file); break; case 23: sscanf(value, "%s", &trcfile); break; case 24: sscanf(value, "%" SCAN_CLOCK, &pinterval); break; case 25: sscanf(value, "%ld", &nways); break; case 26: sscanf(value, "%ld", &nchan); break; case 27: sscanf(value, "%ld", &ninj); break; case 28: sscanf(value, "%" SCAN_CLOCK, &timeout_upper_limit); break; case 29: sscanf(value, "%" SCAN_CLOCK, &timeout_lower_limit); break; case 30: sscanf(value, "%ld", &extract); break; case 31: sscanf(value, "%ld", &monitored); break; case 32: if(!literal_value(injmode_l, value, (long *) &inj_mode)) panic("get_conf: Unknown injection mode"); break; case 33: sscanf(value, "%lf", &intransit_pr); break; case 34: sscanf(value, "%d", &drop_packets); if (drop_packets) drop_packets = TRUE; break; case 35: sscanf(value, "%ld", &bub_adap[1]); break; case 36: sscanf(value, "%d", ¶llel_injection); if (parallel_injection) parallel_injection = TRUE; break; case 37: sscanf(value, "%d", &shotmode); if (shotmode) shotmode = TRUE; break; case 38: sscanf(value, "%ld", &shotsize); break; case 39: sscanf(value, "%" SCAN_CLOCK, &update_period); break; case 40: sscanf(value, "%lf", &global_cc); break; case 41: sscanf(value, "%ld", &sk_xy); break; case 42: sscanf(value, "%ld", &sk_xz); break; case 43: sscanf(value, "%ld", &sk_yx); break; case 44: sscanf(value, "%ld", &sk_yz); break; case 45: sscanf(value, "%ld", &sk_zx); break; case 46: sscanf(value, "%ld", &sk_zy); break; case 47: sscanf(value, "%" SCAN_CLOCK, &warm_up_period); break; case 48: sscanf(value, "%" SCAN_CLOCK, &conv_period); break; case 49: sscanf(value, "%lf", &threshold); break; case 50: sscanf(value, "%" SCAN_CLOCK, &max_conv_time); break; case 51: sscanf(value, "%d", &samples); break; case 52: sscanf(value, "%" SCAN_CLOCK, &batch_time); break; case 53: sscanf(value, "%d", &min_batch_size); break; case 54: param = strtok(value, sep); if(!literal_value(placement_l, param, (long *) &placement)) panic("get_conf: Unknown placement mode"); if (placement==SHIFT_PLACE){ param = strtok(NULL, sep); if (param) shift = atoi(param); else shift=0; } if (placement==ICUBE_PLACE){ param = strtok(NULL, sep); if (param) pnodes_x = atoi(param); else pnodes_x = 1; param = strtok(NULL, sep); if (param) pnodes_y = atoi(param); else pnodes_y = 1; param = strtok(NULL, sep); if (param) pnodes_z = atoi(param); else pnodes_z = 1; } if (placement==FILE_PLACE){ param = strtok(NULL, sep); if (param) strcpy(placefile, param); else panic("placement from file requires a placement file"); } param = strtok(NULL, sep); if (param) trace_nodes = atoi(param); else trace_nodes = 0; param = strtok(NULL, sep); if (param) trace_instances = atoi(param); else trace_instances=0; break; case 55: #if (BIMODAL_SUPPORT != 0) sscanf(value, "%d", &msglength); #endif /* BIMODAL */ break; case 56: #if (BIMODAL_SUPPORT != 0) sscanf(value, "%lf", &lm_percent); #endif /* BIMODAL */ break; case 58: sscanf(value, "%lf", &trigger_rate); break; case 59: param = strtok(value, sep); trigger_max = trigger_min = 0; if (param) trigger_max = trigger_min = atoi(param); param = strtok(NULL, sep); if (param) trigger_min = atoi(param); if (trigger_min>trigger_max){ // Just in case long aux; aux=trigger_min; trigger_min=trigger_max; trigger_max=aux; } break; case 60: sscanf(value, "%d", &faults); break; #if (EXECUTION_DRIVEN != 0) case 100: sscanf(value, "%ld", &fsin_cycle_relation); break; case 101: sscanf(value, "%ld", &simics_cycle_relation); break; case 103: sscanf(value, "%ld", &serv_addr); break; case 104: sscanf(value, "%ld", &num_periodos_espera); break; #else case 100: case 101: case 103: case 104: break; #endif default: panic("Should not be here in get_option"); } }
static void pki_literals_callback(LITERAL *lit, void *data) { FILE *out = (FILE *) data; fprintf(out, "L%i:\tda \"%s\"\n", literal_address(lit), literal_value(lit)); }