/*---------------------------------------------------------------------------*/ static void na_test_parse_options(int argc, char *argv[], struct na_test_info *na_test_info) { int opt; if (argc < 2) { na_test_usage(argv[0]); exit(1); } while ((opt = na_test_getopt(argc, argv, na_test_short_opt_g, na_test_opt_g)) != EOF) { switch (opt) { case 'h': na_test_usage(argv[0]); exit(1); case 'c': /* Comm */ /* Prevent from overriding comm */ if (!na_test_info->comm) na_test_info->comm = strdup(na_test_opt_arg_g); break; case 'p': /* Protocol */ /* Prevent from overriding protocol */ if (!na_test_info->protocol) na_test_info->protocol = strdup(na_test_opt_arg_g); break; case 'H': /* hostname */ na_test_info->hostname = strdup(na_test_opt_arg_g); break; case 'L': /* listen */ na_test_info->listen = NA_TRUE; break; case 's': /* static */ na_test_info->mpi_static = NA_TRUE; if (na_test_info->protocol) free(na_test_info->protocol); na_test_info->protocol = strdup("static"); break; case 'S': /* self */ na_test_info->self_send = NA_TRUE; break; case 'a': /* auth service */ na_test_info->auth = NA_TRUE; break; case 'k': /* key */ // na_test_info->key = strdup(na_test_opt_arg_g); break; case 'l': /* loop */ na_test_info->loop = atoi(na_test_opt_arg_g); break; case 'b': /* busy */ na_test_info->busy_wait = NA_TRUE; break; case 'C': /* number of contexts */ na_test_info->max_contexts = (na_uint8_t) atoi(na_test_opt_arg_g); break; case 'V': /* verbose */ na_test_info->verbose = NA_TRUE; break; default: break; } } na_test_opt_ind_g = 1; if (!na_test_info->comm || ! na_test_info->protocol) { na_test_usage(argv[0]); exit(1); } if (!na_test_info->loop) na_test_info->loop = 1; /* Default */ }
/*---------------------------------------------------------------------------*/ static const char * na_test_gen_config(int argc, char *argv[]) { char *na_class_name = NULL; char *na_protocol_name = NULL; static char info_string[NA_TEST_MAX_ADDR_NAME]; char na_hostname[NA_TEST_MAX_ADDR_NAME]; unsigned int na_port = 22222; char *info_string_ptr = info_string; int opt; if (argc < 2) { na_test_usage(argv[0]); exit(0); } while ((opt = na_test_getopt(argc, argv, na_test_short_opt_g, na_test_opt_g)) != EOF) { switch (opt) { case 'h': na_test_usage(argv[0]); exit(0); case 'c': /* NA class name */ na_class_name = strdup(na_test_opt_arg_g); if (strcmp("mpi", na_class_name) == 0) na_test_use_mpi_g = NA_TRUE; if (strcmp("cci", na_class_name) == 0) na_test_use_cci_g = NA_TRUE; break; case 'p': /* NA protocol name */ na_protocol_name = strdup(na_test_opt_arg_g); break; case 's': na_test_use_static_mpi_g = NA_TRUE; if (na_protocol_name) free(na_protocol_name); na_protocol_name = strdup("static"); break; case 'S': na_test_use_self_g = NA_TRUE; break; case 'V': na_test_use_variable_g = NA_TRUE; break; case 'E': na_test_use_extra_g = NA_TRUE; break; default: break; } } memset(info_string, '\0', NA_TEST_MAX_ADDR_NAME); /* Add NA class */ if (na_class_name) info_string_ptr += sprintf(info_string_ptr, "%s+", na_class_name); /* Use default if nothing specified */ na_protocol_name = (na_protocol_name) ? na_protocol_name : strdup("tcp"); info_string_ptr += sprintf(info_string_ptr, "%s", na_protocol_name); /* Generate a port number depending on server rank */ na_port += na_test_comm_rank_g; na_test_gethostname(na_hostname, NA_TEST_MAX_ADDR_NAME); sprintf(info_string_ptr, "://%s:%d", na_test_getaddrinfo(na_hostname), na_port); free(na_class_name); free(na_protocol_name); return info_string; }