Add -u for UD type QP's during connection setup.
Will setup UD QPs and provide remote AH
in connect establishment event. Measures
setup/exchange rates.

Signed-off-by: Arlin Davis <arlin.r.da...@intel.com>
---
 test/dtest/dtestcm.c |   83 ++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 61 insertions(+), 22 deletions(-)

diff --git a/test/dtest/dtestcm.c b/test/dtest/dtestcm.c
index 62af6a1..932beac 100644
--- a/test/dtest/dtestcm.c
+++ b/test/dtest/dtestcm.c
@@ -97,6 +97,7 @@
 
 /* Header files needed for DAT/uDAPL */
 #include    "dat2/udat.h"
+#include    "dat2/dat_ib_extensions.h"
 
 /* definitions */
 #define SERVER_CONN_QUAL  45248
@@ -149,6 +150,7 @@ struct dt_time time;
 /* defaults */
 static int connected = 0;
 static int multi_listens = 0;
+static int ud_test = 0;
 static int server = 1;
 static int waiting = 0;
 static int verbose = 0;
@@ -191,7 +193,7 @@ int main(int argc, char **argv)
        DAT_RETURN ret;
        
        /* parse arguments */
-       while ((c = getopt(argc, argv, "smwvb:c:d:h:P:p:")) != -1) {
+       while ((c = getopt(argc, argv, "smwvub:c:d:h:P:p:")) != -1) {
                switch (c) {
                case 's':
                        server = 1;
@@ -202,6 +204,9 @@ int main(int argc, char **argv)
                case 'w':
                        waiting = 1;
                        break;
+               case 'u':
+                       ud_test = 1;
+                       break;
                case 'c':
                        connections = atoi(optarg);
                        break;
@@ -246,11 +251,11 @@ int main(int argc, char **argv)
 #endif
 
        if (!server) {
-               printf(" Running client on %s with %d connections\n", 
-                       provider, connections);
+               printf(" Running client on %s with %d %s connections\n", 
+                       provider, connections, ud_test ? "UD" : "RC");
        } else {
-               printf(" Running server on %s with %d connections\n", 
-                       provider, connections);
+               printf(" Running server on %s with %d %s connections\n", 
+                       provider, connections, ud_test ? "UD" : "RC");
        }
        fflush(stdout);
        
@@ -318,8 +323,15 @@ int main(int argc, char **argv)
 
        /* create EP */
        memset(&ep_attr, 0, sizeof(ep_attr));
-       ep_attr.service_type = DAT_SERVICE_TYPE_RC;
-       ep_attr.max_rdma_size = 0x10000;
+       if (ud_test) {
+               ep_attr.service_type = DAT_IB_SERVICE_TYPE_UD;
+               ep_attr.max_message_size = 2048;
+       } else {
+               ep_attr.service_type = DAT_SERVICE_TYPE_RC;
+               ep_attr.max_rdma_size = 0x10000;
+               ep_attr.max_rdma_read_in = 4;
+               ep_attr.max_rdma_read_out = 4;
+       }
        ep_attr.max_recv_dtos = 1;
        ep_attr.max_request_dtos = 1;
        ep_attr.max_recv_iov = 1;
@@ -515,10 +527,10 @@ DAT_RETURN conn_server()
        DAT_RETURN ret;
        DAT_EVENT event;
        DAT_COUNT nmore;
-       DAT_CR_ARRIVAL_EVENT_DATA *cr_event =
-               &event.event_data.cr_arrival_event_data;
        int i,bi;
        unsigned char *buf;
+       DAT_CR_ARRIVAL_EVENT_DATA *cr_event =
+               &event.event_data.cr_arrival_event_data;
        DAT_CR_PARAM cr_param = { 0 };
        
        printf(" Accepting...\n");
@@ -541,24 +553,26 @@ DAT_RETURN conn_server()
                        }
                }
        
-               if (event.event_number != DAT_CONNECTION_REQUEST_EVENT) {
-                       fprintf(stderr, " Error unexpected CR event : %s\n",
-                               DT_EventToSTr(event.event_number));
-                       return (DAT_ABORT);
+               if ((event.event_number != DAT_CONNECTION_REQUEST_EVENT) &&
+                   (ud_test && event.event_number != 
+                    DAT_IB_UD_CONNECTION_REQUEST_EVENT)) {
+                               fprintf(stderr, " Error unexpected CR event : 
%s\n",
+                                       DT_EventToSTr(event.event_number));
+                               return (DAT_ABORT);
                }
 
-
+               
                /* use to test rdma_cma timeout logic */
 #if defined(_WIN32) || defined(_WIN64)
-                   if (delay) {
+               if (delay) {
                        printf(" Accept delayed by %d seconds...\n", delay);
                        Sleep(delay * 1000);
-                   }
+               }
 #else
-                   if (delay) {
+               if (delay) {
                        printf(" Accept delayed by %d seconds...\n", delay);
                        sleep(delay);
-                   }
+               }
 #endif
                /* accept connect request from client */
                h_cr = cr_event->cr_handle;
@@ -622,8 +636,10 @@ DAT_RETURN conn_server()
                                return ret;
                        }
                }
+               if ((event.event_number != DAT_CONNECTION_EVENT_ESTABLISHED) &&
+                   (ud_test && event.event_number != 
+                    DAT_IB_UD_CONNECTION_EVENT_ESTABLISHED)) {
 
-               if (event.event_number != DAT_CONNECTION_EVENT_ESTABLISHED) {
                        fprintf(stderr, " Error unexpected CR EST "
                                "event : 0x%x %s\n",
                                 event.event_number,
@@ -748,8 +764,10 @@ DAT_RETURN conn_client()
                        printf("\n Rej Test Done. PASSED\n\n");
                        exit(0);
 #endif
-                       if (event.event_number != 
-                               DAT_CONNECTION_EVENT_ESTABLISHED) {
+                       if ((event.event_number != 
+                           DAT_CONNECTION_EVENT_ESTABLISHED) &&
+                           (ud_test && event.event_number != 
+                           DAT_IB_UD_CONNECTION_EVENT_ESTABLISHED)) {
                                fprintf(stderr, " Error unexpected conn "
                                        "event : 0x%x %s\n",
                                         event.event_number,
@@ -802,8 +820,28 @@ DAT_RETURN disconnect_eps(void)
        DAT_CONNECTION_EVENT_DATA *conn_event =
                &event.event_data.connect_event_data;
 
-       if (!connected) 
+       if (!connected)
                return DAT_SUCCESS;
+
+       /* UD, no connection to disconnect, just free EP's */
+       if (ud_test) {
+               for (i = 0; i < connections; i++) {
+                       ret = dat_ep_free(h_ep[i]);
+                       if (ret != DAT_SUCCESS) {
+                               fprintf(stderr, 
+                                       " ERR free EP[%d] %p: %s\n",
+                                       i, h_ep[i], DT_RetToString(ret));
+                       } else {
+                               LOGPRINTF(" Freed EP[%d] %p\n", 
+                                         i, h_ep[i]);
+                               h_ep[i] = DAT_HANDLE_NULL;
+                       }
+               }
+               stop = get_time();
+               time.epf += ((stop - start) * 1.0e6);
+               time.total += time.epf;
+               return DAT_SUCCESS;
+       }
        
        /* 
         * Only the client needs to call disconnect. The server _should_ be able
@@ -811,6 +849,7 @@ DAT_RETURN disconnect_eps(void)
         * disconnect request and then exit.
         */
        if (!server) {
+               start = get_time();
                for (i = 0; i < connections; i++) {
                        LOGPRINTF(" dat_ep_disconnect\n");
                        ret = dat_ep_disconnect(h_ep[i], 
-- 
1.5.2.5

_______________________________________________
general mailing list
general@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to