]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
rsockets: Allow user to specify the QP sizes
authorSean Hefty <sean.hefty@intel.com>
Fri, 18 May 2012 23:56:15 +0000 (16:56 -0700)
committerSean Hefty <sean.hefty@intel.com>
Tue, 22 May 2012 00:39:50 +0000 (17:39 -0700)
Add setsockopt options that allow the user to specify the desired
size of the underlying QP.  The provided sizes are used as the
maximum size when creating the QP.  The actual sizes of the QP
are the smaller of the user provided maximum and the maximum
sizes supported by the underlying hardware.

A user may retrieve the actual sizes of the QP through the
getsockopt call.

The send and receive queue sizes are specified separately.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
include/rdma/rsocket.h
src/rsocket.c

index 87ee943ea5e1fd54d5a6d0db521f74a62fe0dd88..9fd99290682811a32cd33a520ed8095eb1e2ddd4 100644 (file)
@@ -73,6 +73,10 @@ int rgetpeername(int socket, struct sockaddr *addr, socklen_t *addrlen);
 int rgetsockname(int socket, struct sockaddr *addr, socklen_t *addrlen);
 
 #define SOL_RDMA 0x10000
+enum {
+       RDMA_SQSIZE,
+       RDMA_RQSIZE
+};
 
 int rsetsockopt(int socket, int level, int optname,
                const void *optval, socklen_t optlen);
index 9d373b96415edf23afff626bb22fa469874876df..893cc579cffd7f484ad9aa7058717aedfd7bf285 100644 (file)
@@ -1695,6 +1695,20 @@ int rsetsockopt(int socket, int level, int optname,
                }
                break;
        case SOL_RDMA:
+               if (rs->state != rs_init && rs->state != rs_bound) {
+
+               switch (optname) {
+               case RDMA_SQSIZE:
+                       *((int *) optval) = rs->sq_size;
+                       *optlen = sizeof(int);
+                       break;
+               case RDMA_RQSIZE:
+                       *((int *) optval) = rs->rq_size;
+                       *optlen = sizeof(int);
+                       break;
+               default:
+                       break;
+               }
                break;
        default:
                break;
@@ -1762,7 +1776,19 @@ int rgetsockopt(int socket, int level, int optname,
                }
                break;
        case SOL_RDMA:
-               ret = ENOTSUP;
+               switch (optname) {
+               case RDMA_SQSIZE:
+                       *((int *) optval) = rs->sq_size;
+                       *optlen = sizeof(int);
+                       break;
+               case RDMA_RQSIZE:
+                       *((int *) optval) = rs->rq_size;
+                       *optlen = sizeof(int);
+                       break;
+               default:
+                       ret = ENOTSUP;
+                       break;
+               }
                break;
        default:
                ret = ENOTSUP;