xsk: Add getsockopt XDP_OPTIONS
[linux-2.6-block.git] / net / xdp / xsk.c
index b68a380f50b373520fdd06f560149f9702477a93..35ca531ac74e65664e00c3802dc31ad786b8a11f 100644 (file)
@@ -650,6 +650,26 @@ static int xsk_getsockopt(struct socket *sock, int level, int optname,
 
                return 0;
        }
+       case XDP_OPTIONS:
+       {
+               struct xdp_options opts = {};
+
+               if (len < sizeof(opts))
+                       return -EINVAL;
+
+               mutex_lock(&xs->mutex);
+               if (xs->zc)
+                       opts.flags |= XDP_OPTIONS_ZEROCOPY;
+               mutex_unlock(&xs->mutex);
+
+               len = sizeof(opts);
+               if (copy_to_user(optval, &opts, len))
+                       return -EFAULT;
+               if (put_user(len, optlen))
+                       return -EFAULT;
+
+               return 0;
+       }
        default:
                break;
        }