Re: [PATCH net-next V2 2/3] tun: introduce ioctls to set and get steering policies
From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: 2017-11-02 01:16:11
Also in:
lkml
On Tue, Oct 31, 2017 at 7:32 PM, Jason Wang [off-list ref] wrote:
quoted hunk ↗ jump to hunk
This patch introduces new ioctl for change packet steering policy for tun. Only automatic flow steering is supported, more policies will come. Signed-off-by: Jason Wang <jasowang@redhat.com> --- drivers/net/tun.c | 35 ++++++++++++++++++++++++++++++++++- include/uapi/linux/if_tun.h | 7 +++++++ 2 files changed, 41 insertions(+), 1 deletion(-)diff --git a/drivers/net/tun.c b/drivers/net/tun.c index bff6259..ab109ff 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c@@ -122,7 +122,8 @@ do { \ #define TUN_VNET_BE 0x40000000 #define TUN_FEATURES (IFF_NO_PI | IFF_ONE_QUEUE | IFF_VNET_HDR | \ - IFF_MULTI_QUEUE | IFF_NAPI | IFF_NAPI_FRAGS) + IFF_MULTI_QUEUE | IFF_NAPI | IFF_NAPI_FRAGS | \ + IFF_MULTI_STEERING) #define GOODCOPY_LEN 128@@ -2516,6 +2517,7 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, unsigned int ifindex; int le; int ret; + unsigned int steering; if (cmd == TUNSETIFF || cmd == TUNSETQUEUE || _IOC_TYPE(cmd) == SOCK_IOC_TYPE) { if (copy_from_user(&ifr, argp, ifreq_len))@@ -2774,6 +2776,37 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, ret = 0; break; + case TUNSETSTEERING: + ret = -EFAULT; + if (copy_from_user(&steering, argp, sizeof(steering))) + break; + ret = 0; + switch (steering) { + case TUN_STEERING_AUTOMQ: + tun->steering_ops = &tun_automq_ops; + break; + default: + ret = -EFAULT; + } + break; + + case TUNGETSTEERING: + ret = 0; + if (tun->steering_ops == &tun_automq_ops) + steering = TUN_STEERING_AUTOMQ; + else + BUG(); + if (copy_to_user(argp, &steering, sizeof(steering))) + ret = -EFAULT; + break; + + case TUNGETSTEERINGFEATURES: + ret = 0; + steering = TUN_STEERING_AUTOMQ; + if (copy_to_user(argp, &steering, sizeof(steering))) + ret = -EFAULT; + break; +
Similar to my comment in patch 1/3: if only eBPF is used, these calls can be avoided in favor of only TUNSETSTEERINGEBPF from patch 3/3.