/*---------------------------------------------------------------------------*/ static NA_INLINE int na_test_request_progress(unsigned int timeout, void *arg) { struct na_test_lat_info *na_test_lat_info = (struct na_test_lat_info *) arg; unsigned int timeout_progress = 0; int ret = HG_UTIL_SUCCESS; /* Safe to block */ if (NA_Poll_try_wait(na_test_lat_info->na_class, na_test_lat_info->context)) timeout_progress = timeout; /* Progress */ if (NA_Progress(na_test_lat_info->na_class, na_test_lat_info->context, timeout_progress) != NA_SUCCESS) ret = HG_UTIL_FAIL; return ret; }
int main(int argc, char *argv[]) { struct na_test_info na_test_info = { 0 }; struct na_test_params params; na_return_t na_ret; unsigned int i; int ret = EXIT_SUCCESS; /* Initialize the interface */ NA_Test_init(argc, argv, &na_test_info); params.na_class = na_test_info.na_class; params.context = NA_Context_create(params.na_class); /* Allocate send and recv bufs */ params.send_buf_len = NA_Msg_get_max_unexpected_size(params.na_class); params.recv_buf_len = params.send_buf_len; params.send_buf = (char*)NA_Msg_buf_alloc(params.na_class, params.send_buf_len, ¶ms.send_buf_plugin_data); params.recv_buf = (char*)NA_Msg_buf_alloc(params.na_class, params.recv_buf_len, ¶ms.recv_buf_plugin_data); /* Prepare bulk_buf */ params.bulk_size = NA_TEST_BULK_SIZE; params.bulk_buf = (unsigned int *) malloc( params.bulk_size * sizeof(unsigned int)); for (i = 0; i < params.bulk_size; i++) { params.bulk_buf[i] = i; } /* Perform an address lookup on the target */ na_ret = NA_Addr_lookup(params.na_class, params.context, lookup_cb, ¶ms, na_test_info.target_name, NA_OP_ID_IGNORE); if (na_ret != NA_SUCCESS) { NA_LOG_ERROR("Could not start lookup of addr %s", na_test_info.target_name); ret = EXIT_FAILURE; goto done; } while (1) { na_return_t trigger_ret; unsigned int actual_count = 0; unsigned int timeout = 0; do { trigger_ret = NA_Trigger(params.context, 0, 1, NULL, &actual_count); } while ((trigger_ret == NA_SUCCESS) && actual_count); if (test_msg_done_g && test_bulk_done_g) break; if (NA_Poll_try_wait(params.na_class, params.context)) timeout = NA_MAX_IDLE_TIME; na_ret = NA_Progress(params.na_class, params.context, timeout); if (na_ret != NA_SUCCESS) { ret = EXIT_FAILURE; goto done; } } ret = params.ret; printf("Finalizing...\n"); /* Free memory and addresses */ na_ret = NA_Addr_free(params.na_class, params.server_addr); if (na_ret != NA_SUCCESS) { NA_LOG_ERROR("Could not free addr"); ret = EXIT_FAILURE; goto done; } NA_Msg_buf_free(params.na_class, params.recv_buf, params.recv_buf_plugin_data); NA_Msg_buf_free(params.na_class, params.send_buf, params.send_buf_plugin_data); free(params.bulk_buf); NA_Context_destroy(params.na_class, params.context); NA_Test_finalize(&na_test_info); done: return ret; }
int main(int argc, char **argv) { char server_name[NA_TEST_MAX_ADDR_NAME]; struct na_test_params params; na_return_t na_ret; unsigned int i; /* Initialize the interface */ params.na_class = NA_Test_client_init(argc, argv, server_name, NA_TEST_MAX_ADDR_NAME, NULL); params.context = NA_Context_create(params.na_class); /* Allocate send and recv bufs */ params.send_buf_len = NA_Msg_get_max_unexpected_size(params.na_class); params.recv_buf_len = params.send_buf_len; params.send_buf = (char*) calloc(params.send_buf_len, sizeof(char)); params.recv_buf = (char*) calloc(params.recv_buf_len, sizeof(char)); /* Prepare bulk_buf */ params.bulk_size = NA_TEST_BULK_SIZE; params.bulk_buf = (int*) malloc(params.bulk_size * sizeof(int)); for (i = 0; i < params.bulk_size; i++) { params.bulk_buf[i] = i; } /* Perform an address lookup on the target */ na_ret = NA_Addr_lookup(params.na_class, params.context, lookup_cb, ¶ms, server_name, NA_OP_ID_IGNORE); if (na_ret != NA_SUCCESS) { fprintf(stderr, "Could not start lookup of addr %s\n", server_name); return EXIT_FAILURE; } while (!test_done_g) { na_return_t trigger_ret; unsigned int actual_count = 0; do { trigger_ret = NA_Trigger(params.context, 0, 1, &actual_count); } while ((trigger_ret == NA_SUCCESS) && actual_count); if (test_done_g) break; NA_Progress(params.na_class, params.context, NA_MAX_IDLE_TIME); } printf("Finalizing...\n"); /* Free memory and addresses */ na_ret = NA_Addr_free(params.na_class, params.server_addr); if (na_ret != NA_SUCCESS) { fprintf(stderr, "Could not free addr\n"); return EXIT_FAILURE; } free(params.recv_buf); free(params.send_buf); free(params.bulk_buf); NA_Context_destroy(params.na_class, params.context); NA_Test_finalize(params.na_class); return EXIT_SUCCESS; }
/*---------------------------------------------------------------------------*/ na_return_t NA_Addr_lookup_wait(na_class_t *na_class, const char *name, na_addr_t *addr) { na_addr_t new_addr = NULL; na_bool_t lookup_completed = NA_FALSE; na_context_t *context = NULL; na_return_t ret = NA_SUCCESS; if (!na_class) { NA_LOG_ERROR("NULL NA class"); ret = NA_INVALID_PARAM; goto done; } if (!name) { NA_LOG_ERROR("Lookup name is NULL"); ret = NA_INVALID_PARAM; goto done; } if (!addr) { NA_LOG_ERROR("NULL pointer to na_addr_t"); ret = NA_INVALID_PARAM; goto done; } context = NA_Context_create(na_class); if (!context) { NA_LOG_ERROR("Could not create context"); goto done; } ret = NA_Addr_lookup(na_class, context, &na_addr_lookup_cb, &new_addr, name, NA_OP_ID_IGNORE); if (ret != NA_SUCCESS) { NA_LOG_ERROR("Could not start NA_Addr_lookup"); goto done; } while (!lookup_completed) { na_return_t trigger_ret; unsigned int actual_count = 0; do { trigger_ret = NA_Trigger(context, 0, 1, &actual_count); } while ((trigger_ret == NA_SUCCESS) && actual_count); if (new_addr) { lookup_completed = NA_TRUE; *addr = new_addr; } if (lookup_completed) break; ret = NA_Progress(na_class, context, NA_MAX_IDLE_TIME); if (ret != NA_SUCCESS) { NA_LOG_ERROR("Could not make progress"); goto done; } } ret = NA_Context_destroy(na_class, context); if (ret != NA_SUCCESS) { NA_LOG_ERROR("Could not destroy context"); goto done; } done: return ret; }