From: Arlin Davis Date: Wed, 9 May 2007 19:51:53 +0000 (-0700) Subject: Bug Fixes: X-Git-Tag: libdapl-1.2.1~4 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=544fbb873d5320e9606f176c4b71bcba0e257d7d;p=~ardavis%2Fdapl.git Bug Fixes: - 606: Return local and remote ports with dat_ep_query - 585: Add bonding example to dat.conf --- diff --git a/dapl/openib_cma/dapl_ib_cm.c b/dapl/openib_cma/dapl_ib_cm.c index 8bdd0eb..06c1a65 100755 --- a/dapl/openib_cma/dapl_ib_cm.c +++ b/dapl/openib_cma/dapl_ib_cm.c @@ -388,6 +388,10 @@ static void dapli_cm_active_cb(struct dapl_cm_id *conn, ntohl(((struct sockaddr_in *) &conn->cm_id->route.addr.dst_addr)->sin_addr.s_addr)); + /* setup local and remote ports for ep query */ + conn->ep->param.remote_port_qual = rdma_get_dst_port(conn->cm_id); + conn->ep->param.local_port_qual = rdma_get_src_port(conn->cm_id); + dapl_evd_connection_callback(conn, IB_CME_CONNECTED, event->param.conn.private_data, conn->ep); break; @@ -891,6 +895,10 @@ dapls_ib_accept_connection(IN DAT_CR_HANDLE cr_handle, goto bail; } + /* setup local and remote ports for ep query */ + ep_ptr->param.remote_port_qual = rdma_get_dst_port(cr_conn->cm_id); + ep_ptr->param.local_port_qual = rdma_get_src_port(cr_conn->cm_id); + return DAT_SUCCESS; bail: rdma_reject(cr_conn->cm_id, NULL, 0); diff --git a/dapl/openib_cma/dapl_ib_qp.c b/dapl/openib_cma/dapl_ib_qp.c old mode 100644 new mode 100755 index f1e1671..69c49a9 --- a/dapl/openib_cma/dapl_ib_qp.c +++ b/dapl/openib_cma/dapl_ib_qp.c @@ -179,14 +179,19 @@ DAT_RETURN dapls_ib_qp_alloc(IN DAPL_IA *ia_ptr, conn->route_retries = dapl_os_get_env_val("DAPL_CM_ROUTE_RETRY_COUNT", IB_ROUTE_RETRY_COUNT); + /* setup up ep->param to reference the bound local address and port */ + ep_ptr->param.local_ia_address_ptr = &cm_id->route.addr.src_addr; + ep_ptr->param.local_port_qual = rdma_get_src_port(cm_id); + ep_ptr->qp_handle = conn; ep_ptr->qp_state = IB_QP_STATE_INIT; dapl_dbg_log(DAPL_DBG_TYPE_EP, - " qp_alloc: qpn %p sq %d,%d rq %d,%d\n", + " qp_alloc: qpn %p sq %d,%d rq %d,%d port=%d\n", ep_ptr->qp_handle->cm_id->qp->qp_num, qp_create.cap.max_send_wr,qp_create.cap.max_send_sge, - qp_create.cap.max_recv_wr,qp_create.cap.max_recv_sge); + qp_create.cap.max_recv_wr,qp_create.cap.max_recv_sge, + ep_ptr->param.local_port_qual); return DAT_SUCCESS; bail: diff --git a/doc/dat.conf b/doc/dat.conf index e21de51..cb9ff00 100644 --- a/doc/dat.conf +++ b/doc/dat.conf @@ -12,9 +12,10 @@ # Simple (OpenIB-cma) default with netdev name provided first on list # to enable use of same dat.conf version on all nodes # -# Add examples for multiple interfaces and IPoIB HA fail over +# Add examples for multiple interfaces and IPoIB HA fail over, and bonding # OpenIB-cma u1.2 nonthreadsafe default /usr/lib/libdaplcma.so dapl.1.2 "ib0 0" "" OpenIB-cma-1 u1.2 nonthreadsafe default /usr/lib/libdaplcma.so dapl.1.2 "ib1 0" "" OpenIB-cma-2 u1.2 nonthreadsafe default /usr/lib/libdaplcma.so dapl.1.2 "ib2 0" "" OpenIB-cma-3 u1.2 nonthreadsafe default /usr/lib/libdaplcma.so dapl.1.2 "ib3 0" "" +OpenIB-bond u1.2 nonthreadsafe default /usr/lib/libdaplcma.so dapl.1.2 "bond0 0" "" diff --git a/test/dtest/dtest.c b/test/dtest/dtest.c old mode 100644 new mode 100755 index ec8a82e..36f32f3 --- a/test/dtest/dtest.c +++ b/test/dtest/dtest.c @@ -106,8 +106,10 @@ static DAT_RMR_CONTEXT rmr_context_send_msg; static DAT_VLEN registered_size_send_msg; static DAT_VADDR registered_addr_send_msg; static DAT_EP_ATTR ep_attr; +static DAT_EP_PARAM ep_param; char hostname[256] = {0}; char provider[256] = DAPL_PROVIDER; +char addr_str[INET_ADDRSTRLEN]; /* rdma pointers */ char *rbuf = NULL; @@ -341,6 +343,27 @@ main(int argc, char **argv) } else LOGPRINTF("%d connect_ep complete\n", getpid()); + /* query EP for local and remote address information, print */ + ret = dat_ep_query( h_ep, DAT_EP_FIELD_ALL, &ep_param ); + if(ret != DAT_SUCCESS) { + fprintf(stderr, "%d Error dat_ep_query: %s\n", + getpid(),DT_RetToString(ret)); + goto cleanup; + } else + LOGPRINTF("%d EP queried %p \n", getpid(), h_ep); + + inet_ntop(AF_INET, + &((struct sockaddr_in *)ep_param.local_ia_address_ptr)->sin_addr, + addr_str, sizeof(addr_str)); + printf("\n%d Query EP: LOCAL addr %s port %d\n", getpid(), + addr_str, ep_param.local_port_qual); + inet_ntop(AF_INET, + &((struct sockaddr_in *)ep_param.remote_ia_address_ptr)->sin_addr, + addr_str, sizeof(addr_str)); + printf("%d Query EP: REMOTE addr %s port %d\n", getpid(), + addr_str, ep_param.remote_port_qual); + fflush(stdout); + /*********** RDMA write data *************/ ret = do_rdma_write_with_msg(); if(ret != DAT_SUCCESS) {