From: Sean Hefty Date: Thu, 22 Aug 2013 19:00:54 +0000 (-0700) Subject: cmtime: Add retry support for route resolution X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=143f167d596257d18bf5a31829d70aa871a90e19;p=~shefty%2Flibrdmacm.git cmtime: Add retry support for route resolution Signed-off-by: Sean Hefty --- diff --git a/examples/cmtime.c b/examples/cmtime.c index 5ed83b59..220e675c 100644 --- a/examples/cmtime.c +++ b/examples/cmtime.c @@ -52,6 +52,7 @@ static char *port = "7471"; static char *dst_addr; static char *src_addr; static int timeout = 2000; +static int retries = 2; enum step { STEP_CREATE_ID, @@ -80,6 +81,7 @@ struct node { struct rdma_cm_id *id; struct timeval times[STEP_CNT][2]; int error; + int retries; }; static struct node *nodes; @@ -205,11 +207,22 @@ static void cma_handler(struct rdma_cm_id *id, struct rdma_cm_event *event) conn_handler(n); break; case RDMA_CM_EVENT_ADDR_ERROR: + if (n->retries--) { + ret = rdma_resolve_addr(n->id, rai->ai_src_addr, + rai->ai_dst_addr, timeout); + if (!ret) + break; + } printf("RDMA_CM_EVENT_ADDR_ERROR, error: %d\n", event->status); addr_handler(n); n->error = 1; break; case RDMA_CM_EVENT_ROUTE_ERROR: + if (n->retries--) { + ret = rdma_resolve_route(n->id, timeout); + if (!ret) + break; + } printf("RDMA_CM_EVENT_ROUTE_ERROR, error: %d\n", event->status); route_handler(n); n->error = 1; @@ -375,6 +388,7 @@ static int run_client(void) for (i = 0; i < connections; i++) { if (nodes[i].error) continue; + nodes[i].retries = retries; start_perf(&nodes[i], STEP_RESOLVE_ADDR); ret = rdma_resolve_addr(nodes[i].id, rai->ai_src_addr, rai->ai_dst_addr, timeout); @@ -395,6 +409,7 @@ static int run_client(void) for (i = 0; i < connections; i++) { if (nodes[i].error) continue; + nodes[i].retries = retries; start_perf(&nodes[i], STEP_RESOLVE_ROUTE); ret = rdma_resolve_route(nodes[i].id, timeout); if (ret) { @@ -467,7 +482,7 @@ int main(int argc, char **argv) hints.ai_port_space = RDMA_PS_TCP; hints.ai_qp_type = IBV_QPT_RC; - while ((op = getopt(argc, argv, "s:b:c:p:t:")) != -1) { + while ((op = getopt(argc, argv, "s:b:c:p:r:t:")) != -1) { switch (op) { case 's': dst_addr = optarg; @@ -481,6 +496,9 @@ int main(int argc, char **argv) case 'p': port = optarg; break; + case 'r': + retries = atoi(optarg); + break; case 't': timeout = atoi(optarg); break;