int main (int argc, char *argv[]) { GNUNET_log_setup("gnunet-ats-sim", "INFO", NULL); parse_args (argc, argv); if (NULL == opt_exp_file ) { fprintf (stderr, "No experiment given...\n"); return 1; } fprintf (stderr, "Loading experiment `%s' \n", opt_exp_file ); e = GNUNET_ATS_TEST_experimentation_load (opt_exp_file); if (NULL == e) { fprintf (stderr, "Invalid experiment\n"); return 1; } if (0 == e->num_episodes) { fprintf (stderr, "No episodes included\n"); return 1; } /* Setup a topology with */ GNUNET_ATS_TEST_create_topology ("gnunet-ats-sim", e->cfg_file, e->num_slaves, e->num_masters, GNUNET_NO, &topology_setup_done, NULL, &transport_recv_cb, &log_request__cb); GNUNET_free (opt_exp_file); return 0; }
/* * Start the performance test case */ int main (int argc, char *argv[]) { char *tmp; char *tmp_sep; char *test_name; char *conf_name; char *comm_name; char *dotexe; char *prefs[] = GNUNET_ATS_PreferenceTypeString; int c; result = 0; /* Determine testname * perf_ats_<solver>_<transport>_<preference>[.exe]*/ /* Find test prefix, store in temp */ tmp = strstr (argv[0], TESTNAME_PREFIX); if (NULL == tmp) { fprintf (stderr, "Unable to parse test name `%s'\n", argv[0]); return GNUNET_SYSERR; } /* Set tmp to end of test name prefix */ tmp += strlen (TESTNAME_PREFIX); /* Determine solver name */ solver = GNUNET_strdup (tmp); /* Remove .exe prefix */ if (NULL != (dotexe = strstr (solver, ".exe")) && dotexe[4] == '\0') dotexe[0] = '\0'; /* Determine first '_' after solver */ tmp_sep = strchr (solver, '_'); if (NULL == tmp_sep) { fprintf (stderr, "Unable to parse test name `%s'\n", argv[0]); GNUNET_free(solver); return GNUNET_SYSERR; } tmp_sep[0] = '\0'; comm_name = GNUNET_strdup (&tmp_sep[1]); tmp_sep = strchr (comm_name, '_'); if (NULL == tmp_sep) { fprintf (stderr, "Unable to parse test name `%s'\n", argv[0]); GNUNET_free(solver); return GNUNET_SYSERR; } tmp_sep[0] = '\0'; for (c = 0; c <= strlen (comm_name); c++) comm_name[c] = toupper (comm_name[c]); if (0 == strcmp (comm_name, "CORE")) test_core = GNUNET_YES; else if (0 == strcmp (comm_name, "TRANSPORT")) test_core = GNUNET_NO; else { GNUNET_free (comm_name); GNUNET_free (solver); return GNUNET_SYSERR; } pref_str = GNUNET_strdup(tmp_sep + 1); GNUNET_asprintf (&conf_name, "%s%s_%s.conf", TESTNAME_PREFIX, solver, pref_str); GNUNET_asprintf (&test_name, "%s%s_%s", TESTNAME_PREFIX, solver, pref_str); for (c = 0; c <= strlen (pref_str); c++) pref_str[c] = toupper (pref_str[c]); pref_val = -1; if (0 != strcmp (pref_str, "NONE")) { for (c = 0; c < GNUNET_ATS_PREFERENCE_END; c++) { if (0 == strcmp (pref_str, prefs[c])) { pref_val = c; break; } } } else { /* abuse terminator to indicate no pref */ pref_val = GNUNET_ATS_PREFERENCE_END; } if (-1 == pref_val) { fprintf (stderr, "Unknown preference: `%s'\n", pref_str); GNUNET_free(solver); GNUNET_free(pref_str); GNUNET_free (comm_name); return -1; } for (c = 0; c < (argc - 1); c++) { if (0 == strcmp (argv[c], "-d")) break; } if (c < argc - 1) { if (GNUNET_OK != GNUNET_STRINGS_fancy_time_to_relative (argv[c + 1], &perf_duration)) fprintf (stderr, "Failed to parse duration `%s'\n", argv[c + 1]); } else { perf_duration = BENCHMARK_DURATION; } fprintf (stderr, "Running benchmark for %llu secs\n", (unsigned long long) (perf_duration.rel_value_us) / (1000 * 1000)); for (c = 0; c < (argc - 1); c++) { if (0 == strcmp (argv[c], "-s")) break; } if (c < argc - 1) { if ((0L != (num_slaves = strtol (argv[c + 1], NULL, 10))) && (num_slaves >= 1)) fprintf (stderr, "Starting %u slave peers\n", num_slaves); else num_slaves = DEFAULT_SLAVES_NUM; } else num_slaves = DEFAULT_SLAVES_NUM; for (c = 0; c < (argc - 1); c++) { if (0 == strcmp (argv[c], "-m")) break; } if (c < argc - 1) { if ((0L != (num_masters = strtol (argv[c + 1], NULL, 10))) && (num_masters >= 2)) fprintf (stderr, "Starting %u master peers\n", num_masters); else num_masters = DEFAULT_MASTERS_NUM; } else num_masters = DEFAULT_MASTERS_NUM; logging = GNUNET_NO; for (c = 0; c < argc; c++) { if (0 == strcmp (argv[c], "-l")) logging = GNUNET_YES; } if (GNUNET_YES == logging) { for (c = 0; c < (argc - 1); c++) { if (0 == strcmp (argv[c], "-f")) break; } if (c < argc - 1) { if (GNUNET_OK != GNUNET_STRINGS_fancy_time_to_relative (argv[c + 1], &log_frequency)) fprintf (stderr, "Failed to parse duration `%s'\n", argv[c + 1]); } else { log_frequency = LOGGING_FREQUENCY; } fprintf (stderr, "Using log frequency %llu ms\n", (unsigned long long) (log_frequency.rel_value_us) / (1000)); } GNUNET_asprintf (&testname, "%s_%s_%s",solver, comm_name, pref_str); if (num_slaves < num_masters) { fprintf (stderr, "Number of master peers is lower than slaves! exit...\n"); GNUNET_free(test_name); GNUNET_free(solver); GNUNET_free(pref_str); GNUNET_free (comm_name); return GNUNET_SYSERR; } /** * Setup the topology */ GNUNET_ATS_TEST_create_topology ("perf-ats", conf_name, num_slaves, num_masters, test_core, &do_benchmark, NULL, &test_recv_cb, &log_request_cb); return result; }