]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
Refresh of v6only
authorSean Hefty <sean.hefty@intel.com>
Tue, 12 Jun 2012 19:43:39 +0000 (12:43 -0700)
committerSean Hefty <sean.hefty@intel.com>
Tue, 12 Jun 2012 19:43:39 +0000 (12:43 -0700)
include/rdma/rdma_cma.h
src/rsocket.c

index c0f83b1be30edd488d01b557b68ca1ed31003f12..1487f8f0e9a446849a3d8524247fabfaa72424bb 100755 (executable)
@@ -650,6 +650,7 @@ enum {
 enum {
        RDMA_OPTION_ID_TOS       = 0,   /* uint8_t: RFC 2474 */
        RDMA_OPTION_ID_REUSEADDR = 1,   /* int: ~SO_REUSEADDR */
+       RDMA_OPTION_ID_AFONLY    = 2,   /* int: ~IPV6_V6ONLY */
        RDMA_OPTION_IB_PATH      = 1    /* struct ibv_path_data[] */
 };
 
index a3c2c6ac12a612d6ae9f1056efce07b1c282f524..860c63ed04d1543ad8f07d9cb8863a1f6694d7fb 100644 (file)
@@ -161,6 +161,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;
@@ -1817,6 +1818,18 @@ int rsetsockopt(int socket, int level, int optname,
                        break;
                }
                break;
+       case IPPROTO_IPV6:
+               opts = &rs->ipv6_opts;
+               switch (optname) {
+               case IPV6_V6ONLY:
+                       ret = rdma_set_option(rs->cm_id, RDMA_OPTION_ID,
+                                             RDMA_OPTION_ID_AFONLY,
+                                             (void *) optval, optlen);
+                       opt_on = *(int *) optval;
+                       break;
+               default:
+                       break;
+               }
        case SOL_RDMA:
                if (rs->state > rs_listening) {
                        ret = ERR(EINVAL);
@@ -1910,6 +1923,16 @@ 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;
+               }
        case SOL_RDMA:
                switch (optname) {
                case RDMA_SQSIZE: