]> git.openfabrics.org - ~ardavis/dapl.git/commitdiff
ucm: modify IB address format to align better with sockaddr_in6
authorArlin Davis <arlin.r.davis@intel.com>
Fri, 2 Oct 2009 19:47:37 +0000 (12:47 -0700)
committerArlin Davis <arlin.r.davis@intel.com>
Fri, 2 Oct 2009 19:47:37 +0000 (12:47 -0700)
Restructure the dcm_addr union to map the IB side
closer to sockaddr6 and initialize family to
AF_INET6 to insure callee allocates enough memory
for ucm dat_ia_address type. Put qpn in flowinfo
and gid in sin6_addr. Change the test suites
to print address information based on AF_INET
or AF_INET6 instead of using specific IB address
union from the provider.

Signed-off-by: Arlin Davis <arlin.r.davis@intel.com>
dapl/openib_common/dapl_ib_common.h
dapl/openib_scm/cm.c
dapl/openib_ucm/cm.c
dapl/openib_ucm/device.c
test/dtest/dtest.c
test/dtest/dtestcm.c
test/dtest/dtestx.c

index 671073b68fbd9d96a7c8388ce8f690d48884275a..0436da762eda500477dc885fc450d48bb908706c 100644 (file)
@@ -61,24 +61,28 @@ typedef ib_hca_handle_t             dapl_ibal_ca_t;
 #define DCM_VER 5
 
 /* CM private data areas, same for all operations */
-#define        DCM_MAX_PDATA_SIZE      128
+#define        DCM_MAX_PDATA_SIZE      118
 
 /*
- * DAPL IB/QP address (type, port, lid, qp_num, gid) mapping to
- * DAT_IA_ADDRESS_PTR, DAT_SOCK_ADDR2 (24 bytes)
+ * UCM DAPL IB/QP address (lid, qp_num, gid) mapping to
+ * DAT_IA_ADDRESS_PTR, DAT_SOCK_ADDR2 (28 bytes)
  * For applications, like MPI, that exchange IA_ADDRESS
  * across the fabric before connecting, it eliminates the
  * overhead of name and address resolution to the destination's
- * CM services. UCM provider uses this for DAT_IA_ADDRESS.
+ * CM services. UCM provider uses the following for 
+ * DAT_IA_ADDRESS. Note: family == AF_INET6 to insure proper
+ * callee storage for address.
  */
 union dcm_addr {
        DAT_SOCK_ADDR6          so;
        struct {
-               uint8_t         qp_type;
-               uint8_t         port_num;
-               uint16_t        lid;
-               uint32_t        qpn;
-               union ibv_gid   gid;
+               uint16_t        family;  /* sin6_family */
+               uint16_t        lid;     /* sin6_port */
+               uint32_t        qpn;     /* sin6_flowinfo */
+               uint8_t         gid[16]; /* sin6_addr */
+               uint16_t        port;    /* sin6_scope_id */
+               uint8_t         sl;
+               uint8_t         qp_type;
        } ib;
 };
 
index dae178176a0445d65d830ab37e7a6a0a8ceae65b..9a7bbd6b72ea9cf07060fd83b436fda78acbf8b0 100644 (file)
@@ -488,18 +488,17 @@ static void dapli_socket_connected(dp_ib_cm_handle_t cm_ptr, int err)
        }
 
        dapl_dbg_log(DAPL_DBG_TYPE_CM,
-                    " CONN_PENDING: sending SRC port=%d lid=0x%x,"
+                    " CONN_PENDING: sending SRC lid=0x%x,"
                     " qpn=0x%x, psize=%d\n",
-                    cm_ptr->msg.saddr.ib.port_num, 
                     ntohs(cm_ptr->msg.saddr.ib.lid),
                     ntohl(cm_ptr->msg.saddr.ib.qpn), 
                     ntohs(cm_ptr->msg.p_size));
        dapl_dbg_log(DAPL_DBG_TYPE_CM,
                     " CONN_PENDING: SRC GID subnet %016llx id %016llx\n",
                     (unsigned long long)
-                    htonll(cm_ptr->msg.saddr.ib.gid.global.subnet_prefix),
+                    htonll(*(uint64_t*)&cm_ptr->msg.saddr.ib.gid[0]),
                     (unsigned long long)
-                    htonll(cm_ptr->msg.saddr.ib.gid.global.interface_id));
+                    htonll(*(uint64_t*)&cm_ptr->msg.saddr.ib.gid[8]));
        return;
 
 bail:
@@ -561,10 +560,10 @@ dapli_socket_connect(DAPL_EP * ep_ptr,
        cm_ptr->msg.op = ntohs(DCM_REQ);
        cm_ptr->msg.saddr.ib.qpn = htonl(ep_ptr->qp_handle->qp_num);
        cm_ptr->msg.saddr.ib.qp_type = ep_ptr->qp_handle->qp_type;
-       cm_ptr->msg.saddr.ib.port_num = ia_ptr->hca_ptr->port_num;
        cm_ptr->msg.saddr.ib.lid = ia_ptr->hca_ptr->ib_trans.lid;
-       cm_ptr->msg.saddr.ib.gid = ia_ptr->hca_ptr->ib_trans.gid;
-
+       dapl_os_memcpy(&cm_ptr->msg.saddr.ib.gid[0], 
+                      &ia_ptr->hca_ptr->ib_trans.gid, 16);
+       
        /* save references */
        cm_ptr->hca = ia_ptr->hca_ptr;
        cm_ptr->ep = ep_ptr;
@@ -638,13 +637,12 @@ static void dapli_socket_connect_rtu(dp_ib_cm_handle_t cm_ptr)
                       sizeof(union dcm_addr));
 
        dapl_dbg_log(DAPL_DBG_TYPE_EP,
-                    " CONN_RTU: DST %s %d port=0x%x lid=0x%x,"
+                    " CONN_RTU: DST %s %d lid=0x%x,"
                     " qpn=0x%x, qp_type=%d, psize=%d\n",
                     inet_ntoa(((struct sockaddr_in *)
                                &cm_ptr->msg.daddr.so)->sin_addr),
                     ntohs(((struct sockaddr_in *)
                                &cm_ptr->msg.daddr.so)->sin_port),
-                    cm_ptr->msg.saddr.ib.port_num, 
                     ntohs(cm_ptr->msg.saddr.ib.lid),
                     ntohl(cm_ptr->msg.saddr.ib.qpn), 
                     cm_ptr->msg.saddr.ib.qp_type, 
@@ -967,12 +965,11 @@ static void dapli_socket_accept_data(ib_cm_srvc_handle_t acm_ptr)
        acm_ptr->state = DCM_ACCEPTING_DATA;
 
        dapl_dbg_log(DAPL_DBG_TYPE_EP,
-                    " ACCEPT: DST %s %d port=%d lid=0x%x, qpn=0x%x, psz=%d\n",
+                    " ACCEPT: DST %s %d lid=0x%x, qpn=0x%x, psz=%d\n",
                     inet_ntoa(((struct sockaddr_in *)
                                &acm_ptr->msg.daddr.so)->sin_addr), 
                     ntohs(((struct sockaddr_in *)
                             &acm_ptr->msg.daddr.so)->sin_port),
-                    acm_ptr->msg.saddr.ib.port_num, 
                     ntohs(acm_ptr->msg.saddr.ib.lid), 
                     ntohl(acm_ptr->msg.saddr.ib.qpn), exp);
 
@@ -1026,9 +1023,8 @@ dapli_socket_accept_usr(DAPL_EP * ep_ptr,
                return DAT_INTERNAL_ERROR;
 
        dapl_dbg_log(DAPL_DBG_TYPE_EP,
-                    " ACCEPT_USR: remote port=%d lid=0x%x"
+                    " ACCEPT_USR: remote lid=0x%x"
                     " qpn=0x%x qp_type %d, psize=%d\n",
-                    cm_ptr->msg.saddr.ib.port_num, 
                     ntohs(cm_ptr->msg.saddr.ib.lid),
                     ntohl(cm_ptr->msg.saddr.ib.qpn), 
                     cm_ptr->msg.saddr.ib.qp_type, 
@@ -1084,9 +1080,9 @@ dapli_socket_accept_usr(DAPL_EP * ep_ptr,
        local.op = htons(DCM_REP);
        local.saddr.ib.qpn = htonl(ep_ptr->qp_handle->qp_num);
        local.saddr.ib.qp_type = ep_ptr->qp_handle->qp_type;
-       local.saddr.ib.port_num = ia_ptr->hca_ptr->port_num;
        local.saddr.ib.lid = ia_ptr->hca_ptr->ib_trans.lid;
-       local.saddr.ib.gid = ia_ptr->hca_ptr->ib_trans.gid;
+       dapl_os_memcpy(&local.saddr.ib.gid[0], 
+                      &ia_ptr->hca_ptr->ib_trans.gid, 16);
        local.daddr.so = ia_ptr->hca_ptr->hca_address;
        ((struct sockaddr_in *)&local.daddr.so)->sin_port = 
                                htons((uint16_t)cm_ptr->sp->conn_qual);
@@ -1115,15 +1111,15 @@ dapli_socket_accept_usr(DAPL_EP * ep_ptr,
        }
 
        dapl_dbg_log(DAPL_DBG_TYPE_CM,
-                    " ACCEPT_USR: local port=%d lid=0x%x qpn=0x%x psz=%d\n",
-                    local.saddr.ib.port_num, ntohs(local.saddr.ib.lid),
+                    " ACCEPT_USR: local lid=0x%x qpn=0x%x psz=%d\n",
+                    ntohs(local.saddr.ib.lid),
                     ntohl(local.saddr.ib.qpn), ntohs(local.p_size));
        dapl_dbg_log(DAPL_DBG_TYPE_CM,
                     " ACCEPT_USR: SRC GID subnet %016llx id %016llx\n",
                     (unsigned long long)
-                    htonll(local.saddr.ib.gid.global.subnet_prefix),
+                    htonll(*(uint64_t*)&local.saddr.ib.gid[0]),
                     (unsigned long long)
-                    htonll(local.saddr.ib.gid.global.interface_id));
+                    htonll(*(uint64_t*)&local.saddr.ib.gid[8]));
 
        dapl_dbg_log(DAPL_DBG_TYPE_EP, " PASSIVE: accepted!\n");
        return DAT_SUCCESS;
index e76e920f412ce50720ec5a297d0b45e2abd3a886..4dc67c918a44ab1f24f28fa1ff76e34eb2f2ace0 100644 (file)
@@ -573,9 +573,9 @@ dp_ib_cm_handle_t dapls_ib_cm_create(DAPL_EP *ep)
                cm->msg.sqpn = htonl(hca->ib_trans.qp->qp_num); /* ucm */
                cm->msg.saddr.ib.qpn = htonl(ep->qp_handle->qp_num); /* ep */
                cm->msg.saddr.ib.qp_type = ep->qp_handle->qp_type;
-               cm->msg.saddr.ib.port_num = hca->port_num;
                 cm->msg.saddr.ib.lid = hca->ib_trans.addr.ib.lid; 
-               cm->msg.saddr.ib.gid = hca->ib_trans.addr.ib.gid; 
+               dapl_os_memcpy(&cm->msg.saddr.ib.gid[0], 
+                              &hca->ib_trans.addr.ib.gid, 16);
         }
        return cm;
 bail:
@@ -857,9 +857,9 @@ static void ucm_connect_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg)
        }
                
        dapl_dbg_log(DAPL_DBG_TYPE_CM,
-                    " CONN_RTU: DST port=%d lid=%x,"
+                    " CONN_RTU: DST lid=%x,"
                     " iqp=%x, qp_type=%d, port=%d psize=%d\n",
-                    cm->msg.daddr.ib.port_num, ntohs(cm->msg.daddr.ib.lid),
+                    ntohs(cm->msg.daddr.ib.lid),
                     ntohl(cm->msg.daddr.ib.qpn), cm->msg.daddr.ib.qp_type,
                     ntohs(msg->sport), ntohs(msg->p_size));
 
@@ -958,22 +958,16 @@ ud_bail:
                             " ACTIVE: UD xevent ah %p qpn 0x%x lid 0x%x\n",
                             xevent.remote_ah.ah, xevent.remote_ah.qpn, lid);
                dapl_dbg_log(DAPL_DBG_TYPE_EP,
-                            " ACTIVE: UD xevent ia_addr qp_type %d, port %d"
+                            " ACTIVE: UD xevent ia_addr qp_type %d"
                             " lid 0x%x qpn 0x%x gid 0x"F64x" 0x"F64x" \n",
                             ((union dcm_addr*)
                                &xevent.remote_ah.ia_addr)->ib.qp_type,
-                            ((union dcm_addr*)
-                               &xevent.remote_ah.ia_addr)->ib.port_num,
                             ntohs(((union dcm_addr*)
                                &xevent.remote_ah.ia_addr)->ib.lid),
                             ntohl(((union dcm_addr*)
                                &xevent.remote_ah.ia_addr)->ib.qpn),
-                            ntohll(((union dcm_addr*)
-                               &xevent.remote_ah.ia_addr)->
-                                       ib.gid.global.subnet_prefix),
-                            ntohll(((union dcm_addr*)
-                               &xevent.remote_ah.ia_addr)->
-                                       ib.gid.global.interface_id));
+                            ntohll(*(uint64_t*)&cm->msg.daddr.ib.gid[0]),
+                            ntohll(*(uint64_t*)&cm->msg.daddr.ib.gid[8]));
 
                if (event == IB_CME_CONNECTED)
                        event = DAT_IB_UD_CONNECTION_EVENT_ESTABLISHED;
@@ -1137,22 +1131,16 @@ static void ucm_accept_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg)
                             " PASSIVE: UD xevent ah %p qpn 0x%x lid 0x%x\n",
                             xevent.remote_ah.ah, xevent.remote_ah.qpn, lid);
                dapl_dbg_log(DAPL_DBG_TYPE_EP,
-                            " PASSIVE: UD xevent ia_addr qp_type %d, port %d"
+                            " PASSIVE: UD xevent ia_addr qp_type %d"
                             " lid 0x%x qpn 0x%x gid 0x"F64x" 0x"F64x" \n",
                             ((union dcm_addr*)
                                &xevent.remote_ah.ia_addr)->ib.qp_type,
-                            ((union dcm_addr*)
-                               &xevent.remote_ah.ia_addr)->ib.port_num,
                             ntohs(((union dcm_addr*)
                                &xevent.remote_ah.ia_addr)->ib.lid),
                             ntohl(((union dcm_addr*)
                                &xevent.remote_ah.ia_addr)->ib.qpn),
-                            ntohll(((union dcm_addr*)
-                               &xevent.remote_ah.ia_addr)->
-                                       ib.gid.global.subnet_prefix),
-                            ntohll(((union dcm_addr*)
-                               &xevent.remote_ah.ia_addr)->
-                                       ib.gid.global.interface_id));
+                            ntohll(*(uint64_t*)&cm->msg.daddr.ib.gid[0]),
+                            ntohll(*(uint64_t*)&cm->msg.daddr.ib.gid[8]));
 
                dapls_evd_post_connection_event_ext(
                                (DAPL_EVD *)cm->ep->param.connect_evd_handle,
@@ -1201,18 +1189,17 @@ dapli_accept_usr(DAPL_EP *ep, DAPL_CR *cr, DAT_COUNT p_size, DAT_PVOID p_data)
        dapl_os_unlock(&cm->lock);
 
        dapl_dbg_log(DAPL_DBG_TYPE_CM,
-                    " ACCEPT_USR: remote port_num=%d lid=%x"
+                    " ACCEPT_USR: remote lid=%x"
                     " iqp=%x qp_type %d, psize=%d\n",
-                    cm->msg.daddr.ib.port_num, ntohs(cm->msg.daddr.ib.lid),
+                    ntohs(cm->msg.daddr.ib.lid),
                     ntohl(cm->msg.daddr.ib.qpn), cm->msg.daddr.ib.qp_type, 
                     ntohs(cm->msg.p_size));
-
        dapl_dbg_log(DAPL_DBG_TYPE_CM,
                     " ACCEPT_USR: remote GID subnet %016llx id %016llx\n",
                     (unsigned long long)
-                    htonll(cm->msg.daddr.ib.gid.global.subnet_prefix),
+                    htonll(*(uint64_t*)&cm->msg.daddr.ib.gid[0]),
                     (unsigned long long)
-                    htonll(cm->msg.daddr.ib.gid.global.interface_id));
+                    htonll(*(uint64_t*)&cm->msg.daddr.ib.gid[8]));
 
 #ifdef DAT_EXTENSIONS
        if (cm->msg.daddr.ib.qp_type == IBV_QPT_UD &&
@@ -1260,9 +1247,9 @@ dapli_accept_usr(DAPL_EP *ep, DAPL_CR *cr, DAT_COUNT p_size, DAT_PVOID p_data)
        cm->msg.op = htons(DCM_REP);
        cm->msg.saddr.ib.qpn = htonl(ep->qp_handle->qp_num);
        cm->msg.saddr.ib.qp_type = ep->qp_handle->qp_type;
-       cm->msg.saddr.ib.port_num = cm->hca->port_num;
        cm->msg.saddr.ib.lid = cm->hca->ib_trans.addr.ib.lid; 
-       cm->msg.saddr.ib.gid = cm->hca->ib_trans.addr.ib.gid; 
+       dapl_os_memcpy(&cm->msg.saddr.ib.gid[0],
+                      &cm->hca->ib_trans.addr.ib.gid, 16); 
 
        /* 
         * UD: deliver p_data with REQ and EST event, keep REQ p_data in 
@@ -1327,7 +1314,7 @@ dapls_ib_connect(IN DAT_EP_HANDLE ep_handle,
        if (cm == NULL)
                return DAT_INSUFFICIENT_RESOURCES;
 
-       /* remote hca and port: lid, gid, port_num, network order */
+       /* remote hca and port: lid, gid, network order */
        dapl_os_memcpy(&cm->msg.daddr, r_addr, sizeof(union dcm_addr));
 
        /* remote uCM information, comes from consumer provider r_addr */
@@ -1463,9 +1450,9 @@ dapls_ib_setup_conn_listener(IN DAPL_IA *ia,
        cm->msg.sport = htons((uint16_t)sid);
        cm->msg.sqpn = htonl(ia->hca_ptr->ib_trans.qp->qp_num);
        cm->msg.saddr.ib.qp_type = IBV_QPT_UD;
-       cm->msg.saddr.ib.port_num = ia->hca_ptr->port_num;
         cm->msg.saddr.ib.lid = ia->hca_ptr->ib_trans.addr.ib.lid; 
-       cm->msg.saddr.ib.gid = ia->hca_ptr->ib_trans.addr.ib.gid; 
+       dapl_os_memcpy(&cm->msg.saddr.ib.gid[0],
+                      &cm->hca->ib_trans.addr.ib.gid, 16); 
        
        /* save cm_handle reference in service point */
        sp->cm_srvc_handle = cm;
index 243044afa58f5fc327d8ebe096f6d8b8275d8e66..b887186222e76876b110dda55f88d91677d955db 100644 (file)
@@ -205,13 +205,12 @@ found:
                goto err;
        } else {
                hca_ptr->ib_trans.addr.ib.lid = htons(port_attr.lid);
-               hca_ptr->ib_trans.addr.ib.port_num = hca_ptr->port_num;
        }
 
        /* get gid for this hca-port, network order */
        if (ibv_query_gid(hca_ptr->ib_hca_handle,
-                         (uint8_t) hca_ptr->port_num,
-                         0, &hca_ptr->ib_trans.addr.ib.gid)) {
+                         (uint8_t) hca_ptr->port_num, 0,
+                         (union ibv_gid *)&hca_ptr->ib_trans.addr.ib.gid)) {
                dapl_log(DAPL_DBG_TYPE_ERR,
                         " open_hca: query GID ERR for %s, err=%s\n",
                         ibv_get_device_name(hca_ptr->ib_trans.ib_dev),
@@ -284,21 +283,23 @@ found:
                     " open_hca: devname %s, ctx %p port %d, hostname_IP %s\n",
                     ibv_get_device_name(hca_ptr->ib_trans.ib_dev),
                     hca_ptr->ib_hca_handle,
-                    hca_ptr->ib_trans.addr.ib.port_num, 
+                    hca_ptr->port_num, 
                     inet_ntoa(((struct sockaddr_in *)
                               &hca_ptr->hca_address)->sin_addr));
        dapl_dbg_log(DAPL_DBG_TYPE_UTIL,
                     " open_hca: QPN 0x%x LID 0x%x GID Subnet 0x" F64x ""
-                    "ID 0x" F64x "\n", 
+                    " ID 0x" F64x "\n", 
                     ntohl(hca_ptr->ib_trans.addr.ib.qpn),
                     ntohs(hca_ptr->ib_trans.addr.ib.lid), 
                     (unsigned long long)
-                    htonll(hca_ptr->ib_trans.addr.ib.gid.global.subnet_prefix),
+                    ntohll(*(uint64_t*)&hca_ptr->ib_trans.addr.ib.gid[0]),
                     (unsigned long long)
-                    htonll(hca_ptr->ib_trans.addr.ib.gid.global.interface_id));
+                    ntohll(*(uint64_t*)&hca_ptr->ib_trans.addr.ib.gid[8]));
 
        /* save LID, GID, QPN, PORT address information, for ia_queries */
+       /* Set AF_INET6 to insure callee address storage of 28 bytes */
        hca_ptr->ib_trans.hca = hca_ptr;
+       hca_ptr->ib_trans.addr.ib.family = AF_INET6; 
        hca_ptr->ib_trans.addr.ib.qp_type = IBV_QPT_UD;
        memcpy(&hca_ptr->hca_address, 
               &hca_ptr->ib_trans.addr, 
index eb9429c9881aa4ee97fb4cf293c9e8765f5a3b72..d43a09b35fad63591a52670fe55f0dd15ef7e91c 100755 (executable)
@@ -209,21 +209,7 @@ static int recv_msg_index = 0;
 static int burst_msg_posted = 0;
 static int burst_msg_index = 0;
 static int ucm = 0;
-
-/* IB address structure used by DAPL uCM provider */
-union dcm_addr {
-       DAT_SOCK_ADDR6          so;
-       struct {
-               uint8_t         qp_type;
-               uint8_t         port_num;
-               uint16_t        lid;
-               uint32_t        qpn;
-               uint8_t         gid[16];
-       } ib;
-};
-
-static union dcm_addr remote;
-static union dcm_addr local;
+static DAT_SOCK_ADDR6 remote;
 
 /* forward prototypes */
 const char *DT_RetToStr(DAT_RETURN ret_value);
@@ -325,6 +311,27 @@ retry:
        return (ret);
 }
 
+static void print_ia_address(struct sockaddr *sa)
+{
+       char str[INET6_ADDRSTRLEN] = {" ??? "};
+
+       switch(sa->sa_family) {
+       case AF_INET:
+               inet_ntop(AF_INET, &((struct sockaddr_in *)sa)->sin_addr, str, INET6_ADDRSTRLEN);
+               printf("%d Local Address AF_INET - %s port %d\n", getpid(), str, SERVER_CONN_QUAL);
+               break;
+       case AF_INET6:
+               inet_ntop(AF_INET6, &((struct sockaddr_in6 *)sa)->sin6_addr, str, INET6_ADDRSTRLEN);
+               printf("%d Local Address AF_INET6 - %s flowinfo(QPN)=0x%x, port(LID)=0x%x\n",
+                       getpid(), str, 
+                       ntohl(((struct sockaddr_in6 *)sa)->sin6_flowinfo),
+                       ntohs(((struct sockaddr_in6 *)sa)->sin6_port));
+               break;
+       default:
+               printf("%d Local Address UNKOWN FAMILY - port %d\n", getpid(), SERVER_CONN_QUAL);
+       }
+}
+
 int main(int argc, char **argv)
 {
        int i, c;
@@ -359,12 +366,16 @@ int main(int argc, char **argv)
                        fflush(stdout);
                        break;
                case 'q':
-                       remote.ib.qpn = htonl(strtol(optarg,NULL,0));
+                       /* map UCM qpn into AF_INET6 sin6_flowinfo */
+                       remote.sin6_family = AF_INET6;
+                       remote.sin6_flowinfo = htonl(strtol(optarg,NULL,0));
                        ucm = 1;
                        server = 0;
                        break;
                case 'l':
-                       remote.ib.lid = htons(strtol(optarg,NULL,0));
+                       /* map UCM lid into AF_INET6 sin6_port */
+                       remote.sin6_family = AF_INET6;
+                       remote.sin6_port = htons(strtol(optarg,NULL,0));
                        ucm = 1;
                        server = 0;
                        break;
@@ -434,25 +445,13 @@ int main(int argc, char **argv)
        } else
                LOGPRINTF("%d Opened Interface Adaptor\n", getpid());
 
-       printf("%d query \n", getpid());
-
        ret = dat_ia_query(h_ia, 0, DAT_IA_FIELD_ALL, &ia_attr, 0, 0);
        if (ret != DAT_SUCCESS) {
                fprintf(stderr, "%d: Error Adaptor query: %s\n",
                        getpid(), DT_RetToStr(ret));
                exit(1);
        }
-       memcpy((void*)&local,
-               (void*)ia_attr.ia_address_ptr,
-               sizeof(DAT_SOCK_ADDR6));
-
-       printf("%d Local Address %s port %d\n", getpid(),
-              inet_ntoa(((struct sockaddr_in *)&local)->sin_addr), 
-              SERVER_CONN_QUAL);
-
-       printf("%d Local Address QPN=0x%x, LID=0x%x  <<< ucm provider\n",
-               getpid(), ntohl(local.ib.qpn),
-               ntohs(local.ib.lid));
+       print_ia_address(ia_attr.ia_address_ptr);
 
        /* Create Protection Zone */
        start = get_time();
index 0b4941ab8a792ecb4e0be00177c1a8759597cc5a..d3762c9c5c9aef437e78e3e0f09e50bf0b50a860 100644 (file)
@@ -79,7 +79,7 @@
 #include <unistd.h>
 #include <stdlib.h>
 
-#define DAPL_PROVIDER "ofa-v2-mlx4_0-1"
+#define DAPL_PROVIDER "ofa-v2-ib0"
 
 #define F64x "%"PRIx64""
 #define F64d "%"PRId64""
 #include "dat2/udat.h"
 #include "dat2/dat_ib_extensions.h"
 
-/* IB address structure used by DAPL uCM provider */
-union dcm_addr { 
-       DAT_SOCK_ADDR6          so;
-       struct {
-               uint8_t         qp_type;
-               uint8_t         port_num;
-               uint16_t        lid;
-               uint32_t        qpn;
-               uint8_t         gid[16];
-       } ib;
-};
-
-static union dcm_addr remote;
-static union dcm_addr local;
-
 /* definitions */
 #define SERVER_CONN_QUAL  45248
 #define CONN_TIMEOUT      (1000*1000*100)
@@ -178,6 +163,7 @@ static int connections = 1000;
 static int burst = 100;
 static int port_id = SERVER_CONN_QUAL;
 static int ucm = 0;
+static DAT_SOCK_ADDR6 remote;
 
 /* forward prototypes */
 const char *DT_RetToString(DAT_RETURN ret_value);
@@ -205,6 +191,27 @@ void flush_evds(void)
        }
 }
 
+static void print_ia_address(struct sockaddr *sa)
+{
+       char str[INET6_ADDRSTRLEN] = {" ??? "};
+
+       switch(sa->sa_family) {
+       case AF_INET:
+               inet_ntop(AF_INET, &((struct sockaddr_in *)sa)->sin_addr, str, INET6_ADDRSTRLEN);
+               printf("%d Local Address AF_INET - %s port %d\n", getpid(), str, SERVER_CONN_QUAL);
+               break;
+       case AF_INET6:
+               inet_ntop(AF_INET6, &((struct sockaddr_in6 *)sa)->sin6_addr, str, INET6_ADDRSTRLEN);
+               printf("%d Local Address AF_INET6 - %s flowinfo(QPN)=0x%x, port(LID)=0x%x\n",
+                       getpid(), str,
+                       ntohl(((struct sockaddr_in6 *)sa)->sin6_flowinfo),
+                       ntohs(((struct sockaddr_in6 *)sa)->sin6_port));
+               break;
+       default:
+               printf("%d Local Address UNKOWN FAMILY - port %d\n", getpid(), SERVER_CONN_QUAL);
+       }
+}
+
 int main(int argc, char **argv)
 {
        int i, c, len;
@@ -250,12 +257,16 @@ int main(int argc, char **argv)
                        strcpy(provider, optarg);
                        break;
                case 'q':
-                       remote.ib.qpn = htonl(strtol(optarg,NULL,0));
+                       /* map UCM qpn into AF_INET6 sin6_flowinfo */
+                       remote.sin6_family = AF_INET6;
+                       remote.sin6_flowinfo = htonl(strtol(optarg,NULL,0));
                        ucm = 1;
                        server = 0;
                        break;
                case 'l':
-                       remote.ib.lid = htons(strtol(optarg,NULL,0));
+                       /* map UCM lid into AF_INET6 sin6_port */
+                       remote.sin6_family = AF_INET6;
+                       remote.sin6_port = htons(strtol(optarg,NULL,0));
                        ucm = 1;
                        server = 0;
                        break;
@@ -334,17 +345,7 @@ int main(int argc, char **argv)
                        getpid(), DT_RetToString(ret));
                exit(1);
        }
-       memcpy((void*)&local, 
-              (void*)ia_attr.ia_address_ptr, 
-               sizeof(DAT_SOCK_ADDR6));
-
-       printf("%d Local Address %s port %d\n", getpid(),
-              inet_ntoa(((struct sockaddr_in *)&local)->sin_addr),
-              SERVER_CONN_QUAL);
-
-       printf("%d Local Address QPN=0x%x, LID=0x%x  <<< ucm provider\n",
-              getpid(), ntohl(local.ib.qpn),
-              ntohs(local.ib.lid));
+       print_ia_address(ia_attr.ia_address_ptr);
 
        /* Create Protection Zone */
        start = get_time();
index 00460dde0cb2d2d3115bfa9dca65ce74c4ae1fc3..32ffe3355654c8c8889aa3e74bfa5244befd9146 100755 (executable)
@@ -180,21 +180,7 @@ int verbose = 0;
 int counters = 0;
 int counters_ok = 0;
 static int ucm = 0;
-
-/* IB address structure used by DAPL uCM provider */
-union dcm_addr {
-       DAT_SOCK_ADDR6          so;
-       struct {
-               uint8_t         qp_type;
-               uint8_t         port_num;
-               uint16_t        lid;
-               uint32_t        qpn;
-               uint8_t         gid[16];
-       } ib;
-};
-
-static union dcm_addr remote;
-static union dcm_addr local;
+static DAT_SOCK_ADDR6 remote;
 
 #define LOGPRINTF if (verbose) printf
 
@@ -225,6 +211,27 @@ static void sleep(int secs)
 #define        _WSACleanup()
 #endif
 
+static void print_ia_address(struct sockaddr *sa)
+{
+       char str[INET6_ADDRSTRLEN] = {" ??? "};
+
+       switch(sa->sa_family) {
+       case AF_INET:
+               inet_ntop(AF_INET, &((struct sockaddr_in *)sa)->sin_addr, str, INET6_ADDRSTRLEN);
+               printf("%d Local Address AF_INET - %s port %d\n", getpid(), str, SERVER_ID);
+               break;
+       case AF_INET6:
+               inet_ntop(AF_INET6, &((struct sockaddr_in6 *)sa)->sin6_addr, str, INET6_ADDRSTRLEN);
+               printf("%d Local Address AF_INET6 - %s flowinfo(QPN)=0x%x, port(LID)=0x%x\n",
+                       getpid(), str,
+                       ntohl(((struct sockaddr_in6 *)sa)->sin6_flowinfo),
+                       ntohs(((struct sockaddr_in6 *)sa)->sin6_port));
+               break;
+       default:
+               printf("%d Local Address UNKOWN FAMILY - port %d\n", getpid(), SERVER_ID);
+       }
+}
+
 void
 send_msg(void *data,
         DAT_COUNT size,
@@ -440,17 +447,7 @@ int connect_ep(char *hostname)
                              DAT_PROVIDER_FIELD_ALL, &prov_attrs);
        _OK(status, "dat_ia_query");
 
-       memcpy((void*)&local,
-               (void*)ia_attr.ia_address_ptr,
-               sizeof(DAT_SOCK_ADDR6));
-
-        printf("%d Local Address %s port %d\n", getpid(),
-               inet_ntoa(((struct sockaddr_in *)&local)->sin_addr),
-               SERVER_ID);
-
-        printf("%d Local Address QPN=0x%x, LID=0x%x <<< ucm provider\n",
-                getpid(), ntohl(local.ib.qpn),
-                ntohs(local.ib.lid));
+       print_ia_address(ia_attr.ia_address_ptr);
 
        if (ucm && ud_test) {
                printf("%d UD test over UCM provider not supported\n",
@@ -1286,12 +1283,16 @@ int main(int argc, char **argv)
                        verbose = 1;
                        break;
                case 'q':
-                       remote.ib.qpn = htonl(strtol(optarg,NULL,0));
+                       /* map UCM qpn into AF_INET6 sin6_flowinfo */
+                       remote.sin6_family = AF_INET6;
+                       remote.sin6_flowinfo = htonl(strtol(optarg,NULL,0));
                        ucm = 1;
                        server = 0;
                        break;
                case 'l':
-                       remote.ib.lid = htons(strtol(optarg,NULL,0));
+                       /* map UCM lid into AF_INET6 sin6_port */
+                       remote.sin6_family = AF_INET6;
+                       remote.sin6_port = htons(strtol(optarg,NULL,0));
                        ucm = 1;
                        server = 0;
                        break;