void print_ucp_config(ucs_config_print_flags_t print_flags) { ucp_config_t *config; ucs_status_t status; status = ucp_config_read(NULL, NULL, &config); if (status != UCS_OK) { printf("<Failed to read UCP configuraton>\n"); return; } ucp_config_print(config, stdout, "protocol layer configuration", print_flags); ucp_config_release(config); }
int main(int argc, char **argv) { /* UCP temporary vars */ ucp_params_t ucp_params; ucp_config_t *config; ucs_status_t status; /* UCP handler objects */ ucp_context_h ucp_context; ucp_worker_h ucp_worker; /* OOB connection vars */ uint64_t addr_len = 0; char *server = NULL; int oob_sock = -1; int ret = -1; /* Parse the command line */ if (parse_cmd(argc, argv, &server) != UCS_OK) { goto err; } /* UCP initialization */ status = ucp_config_read(NULL, NULL, &config); if (status != UCS_OK) { goto err; } ucp_params.features = UCP_FEATURE_TAG; if (ucp_test_mode == TEST_MODE_WAIT || ucp_test_mode == TEST_MODE_EVENTFD) { ucp_params.features |= UCP_FEATURE_WAKEUP; } ucp_params.request_size = sizeof(struct ucx_context); ucp_params.request_init = request_init; ucp_params.request_cleanup = NULL; status = ucp_init(&ucp_params, config, &ucp_context); ucp_config_print(config, stdout, NULL, UCS_CONFIG_PRINT_CONFIG); ucp_config_release(config); if (status != UCS_OK) { goto err; } status = ucp_worker_create(ucp_context, UCS_THREAD_MODE_SINGLE, &ucp_worker); if (status != UCS_OK) { goto err_cleanup; } status = ucp_worker_get_address(ucp_worker, &local_addr, &local_addr_len); if (status != UCS_OK) { goto err_worker; } printf("[0x%x] local address length: %zu\n", (unsigned int)pthread_self(), local_addr_len); /* OOB connection establishment */ if (server) { peer_addr_len = local_addr_len; oob_sock = run_client(server); if (oob_sock < 0) { goto err_addr; } ret = recv(oob_sock, &addr_len, sizeof(addr_len), 0); if (ret < 0) { fprintf(stderr, "failed to receive address length\n"); goto err_addr; } peer_addr_len = addr_len; peer_addr = malloc(peer_addr_len); if (!peer_addr) { fprintf(stderr, "unable to allocate memory\n"); goto err_addr; } ret = recv(oob_sock, peer_addr, peer_addr_len, 0); if (ret < 0) { fprintf(stderr, "failed to receive address\n"); goto err_peer_addr; } } else { oob_sock = run_server(); if (oob_sock < 0) { goto err_peer_addr; } addr_len = local_addr_len; ret = send(oob_sock, &addr_len, sizeof(addr_len), 0); if (ret < 0 || ret != sizeof(addr_len)) { fprintf(stderr, "failed to send address length\n"); goto err_peer_addr; } ret = send(oob_sock, local_addr, local_addr_len, 0); if (ret < 0 || ret != local_addr_len) { fprintf(stderr, "failed to send address\n"); goto err_peer_addr; } } close(oob_sock); ret = run_test(server, ucp_worker); err_peer_addr: free(peer_addr); err_addr: ucp_worker_release_address(ucp_worker, local_addr); err_worker: ucp_worker_destroy(ucp_worker); err_cleanup: ucp_cleanup(ucp_context); err: return ret; }
static int mlx_getinfo ( uint32_t version, const char *node, const char *service, uint64_t flags, const struct fi_info *hints, struct fi_info **info) { int status = -ENODATA; char *configfile_name = NULL; int inject_thresh = -1; mlx_descriptor.config = NULL; status = fi_param_get( &mlx_prov, "mlx_tinject_limit", &inject_thresh); if (!status) inject_thresh = FI_MLX_DEFAULT_INJECT_SIZE; FI_INFO( &mlx_prov, FI_LOG_CORE, "used inlect size = %d \n", inject_thresh); status = fi_param_get( &mlx_prov, "mlx_config", &configfile_name); if (!status) { configfile_name = NULL; } /* NS is disabled by default */ status = fi_param_get( &mlx_prov, "mlx_ns_enable", &mlx_descriptor.use_ns); if (!status) { mlx_descriptor.use_ns = 0; } status = fi_param_get( &mlx_prov, "mlx_ns_port", &mlx_descriptor.ns_port); if (!status) { mlx_descriptor.ns_port = FI_MLX_DEFAULT_NS_PORT; } status = ucp_config_read( NULL, status? NULL: configfile_name, &mlx_descriptor.config); if (status != UCS_OK) { FI_WARN( &mlx_prov, FI_LOG_CORE, "MLX error: invalid config file\n\t%d (%s)\n", status, ucs_status_string(status)); } /*Setup some presets*/ status = ucm_config_modify("MALLOC_HOOKS", "no"); if (status != UCS_OK) { FI_WARN( &mlx_prov, FI_LOG_CORE, "MLX error: failed to switch off UCM memory hooks:\t%d (%s)\n", status, ucs_status_string(status)); } FI_INFO( &mlx_prov, FI_LOG_CORE, "Loaded MLX version %s\n", ucp_get_version_string()); #if ENABLE_DEBUG if (mlx_descriptor.config && fi_log_enabled( &mlx_prov, FI_LOG_INFO, FI_LOG_CORE)) { ucp_config_print( mlx_descriptor.config, stderr, "Used MLX configuration", (1<<4)-1); } #endif *info = NULL; if (node || service) { FI_WARN(&mlx_prov, FI_LOG_CORE, "fi_getinfo with \"node != NULL \" or \"service != NULL \" is temporary not supported\n"); node = service = NULL; flags = 0; } /* Only Pure MLX address and IPv4 are supported */ if (hints->addr_format == FI_ADDR_MLX) { mlx_info.addr_format = FI_ADDR_MLX; } if (hints->addr_format <= FI_SOCKADDR_IN) { mlx_descriptor.use_ns = 1; mlx_info.addr_format = FI_SOCKADDR_IN; } status = util_getinfo( &mlx_util_prov, version, service, node, flags, hints, info); return status; }