]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
rsocket: Return success for IPV6_V6ONLY option
authorSean Hefty <sean.hefty@intel.com>
Mon, 4 Jun 2012 19:30:15 +0000 (12:30 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 4 Jun 2012 19:30:15 +0000 (12:30 -0700)
Jave Netpipe calls setsockopt for IPV6_V6ONLY.  Return success
to work-around the lack of support.  Problem was reported by
Chet Murthy <chet@watson.ibm.com>.

Note that real support for V6ONLY requires changes to the
kernel rdma_cm.

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

index c11179701833b0b18b2f5b42b9614948e3c6b2f9..8b1e9307509600b49ae314a7676a90a5268ecb50 100644 (file)
@@ -156,6 +156,7 @@ struct rsocket {
        long              fd_flags;
        uint64_t          so_opts;
        uint64_t          tcp_opts;
+       uint64_t          ipv6_opts;
        enum rs_state     state;
        int               cq_armed;
        int               retries;
@@ -1717,6 +1718,17 @@ int rsetsockopt(int socket, int level, int optname,
                        break;
                }
                break;
+       case IPPROTO_IPV6:
+               opts = &rs->ipv6_opts;
+               switch (optname) {
+               case IPV6_V6ONLY:
+                       opt_on = *(int *) optval;
+                       ret = 0;
+                       break;
+               default:
+                       break;
+               }
+               break;
        case SOL_RDMA:
                if (rs->state > rs_listening) {
                        ret = ERR(EINVAL);
@@ -1804,6 +1816,17 @@ int rgetsockopt(int socket, int level, int optname,
                        break;
                }
                break;
+       case IPPROTO_IPV6:
+               switch (optname) {
+               case IPV6_V6ONLY:
+                       *((int *) optval) = !!(rs->ipv6_opts & (1 << optname));
+                       *optlen = sizeof(int);
+                       break;
+               default:
+                       ret = ENOTSUP;
+                       break;
+               }
+               break;
        case SOL_RDMA:
                switch (optname) {
                case RDMA_SQSIZE: