int ft_run_test() { int ret; ret = ft_init_control(); if (ret) { FT_PRINTERR("ft_init_control", ret); goto cleanup; } ret = ft_open_control(); if (ret) { FT_PRINTERR("ft_open_control", ret); goto cleanup; } if (test_info.ep_type == FI_EP_MSG && listen_sock >= 0) { ret = ft_open_passive(); if (ret) { FT_PRINTERR("ft_open_passive", ret); goto cleanup; } } else { ret = ft_open_active(); if (ret) { FT_PRINTERR("ft_open_active", ret); goto cleanup; } } ft_sock_sync(0); ret = ft_enable_comm(); if (ret) { FT_PRINTERR("ft_enable_comm", ret); goto cleanup; } switch (test_info.test_type) { case FT_TEST_LATENCY: ret = ft_run_latency(); if (ret) FT_PRINTERR("ft_run_latency", ret); break; case FT_TEST_BANDWIDTH: ret = ft_run_bandwidth(); if (ret) FT_PRINTERR("ft_run_bandwidth", ret); break; default: ret = -FI_ENOSYS; break; } ft_sync_test(0); cleanup: ft_cleanup(); return ret ? ret : -ft_ctrl.error; }
static int ft_sync_test(int value) { int ret; ret = ft_reset_ep(); if (ret) return ret; return ft_sock_sync(value); }
static int run(void) { char *node, *service; uint64_t flags; int ret; size_t i; ret = ft_read_addr_opts(&node, &service, hints, &flags, &opts); if (ret) return ret; ret = opts.dst_addr ? client_setup() : server_setup(); if (ret) { fprintf(stderr, "error: %s\n", fi_strerror(-ret)); return ret; } /* Leave extra space for invalid size test */ cm_data = calloc(1, cm_data_size + 1); if (!cm_data) return -FI_ENOMEM; entry = calloc(1, sizeof(*entry) + cm_data_size); if (!entry) return -FI_ENOMEM; if (opts.dst_addr) { ret = ft_sock_connect(opts.dst_addr, sock_service); if (ret) goto err2; } else { ret = ft_sock_listen(sock_service); if (ret) goto err2; ret = ft_sock_accept(); if (ret) goto err1; } for (i = 1; i <= cm_data_size; i <<= 1) { printf("trying with data size: %zu\n", i); if (opts.dst_addr) ret = client(i); else ret = server(i); if (ret) goto err1; ret = ft_sock_sync(0); if (ret) goto err1; } /* Despite server not being setup to handle this, the client should fail * with -FI_EINVAL since this exceeds its max data size. */ if (opts.dst_addr) { printf("trying with data size exceeding maximum: %zu\n", cm_data_size + 1); /* Don't call client since it produces an error message. */ ret = client_connect(cm_data_size + 1); if (ret != -FI_EINVAL) { FT_ERR("expected -FI_EINVAL, got: [%d]:%s\n", ret, fi_strerror(-ret)); } else { ret = FI_SUCCESS; } } err1: ft_sock_shutdown(sock); err2: free(entry); return ret; }