示例#1
0
文件: na_test.c 项目: carns/mercury
/*---------------------------------------------------------------------------*/
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 */
}
示例#2
0
文件: na_test.c 项目: ifadams/mercury
/*---------------------------------------------------------------------------*/
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;
}