summary refs log tree commit diff stats
path: root/net/tap.c
diff options
context:
space:
mode:
authorAndrew Melnychenko <andrew@daynix.com>2021-05-14 14:48:30 +0300
committerJason Wang <jasowang@redhat.com>2021-06-04 15:25:46 +0800
commit8f364e344c3e71d4cc4e683d21241f6c36d62a5e (patch)
tree5ba18bb9310ff32504c4d5bcb48e4c6e2136c698 /net/tap.c
parent78258debe03c6034365884cbfb05679d6938aaac (diff)
downloadfocaccia-qemu-8f364e344c3e71d4cc4e683d21241f6c36d62a5e.tar.gz
focaccia-qemu-8f364e344c3e71d4cc4e683d21241f6c36d62a5e.zip
net: Added SetSteeringEBPF method for NetClientState.
For now, that method supported only by Linux TAP.
Linux TAP uses TUNSETSTEERINGEBPF ioctl.

Signed-off-by: Andrew Melnychenko <andrew@daynix.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'net/tap.c')
-rw-r--r--net/tap.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/net/tap.c b/net/tap.c
index bae895e287..f5686bbf77 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -347,6 +347,14 @@ static void tap_poll(NetClientState *nc, bool enable)
     tap_write_poll(s, enable);
 }
 
+static bool tap_set_steering_ebpf(NetClientState *nc, int prog_fd)
+{
+    TAPState *s = DO_UPCAST(TAPState, nc, nc);
+    assert(nc->info->type == NET_CLIENT_DRIVER_TAP);
+
+    return tap_fd_set_steering_ebpf(s->fd, prog_fd) == 0;
+}
+
 int tap_get_fd(NetClientState *nc)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -372,6 +380,7 @@ static NetClientInfo net_tap_info = {
     .set_vnet_hdr_len = tap_set_vnet_hdr_len,
     .set_vnet_le = tap_set_vnet_le,
     .set_vnet_be = tap_set_vnet_be,
+    .set_steering_ebpf = tap_set_steering_ebpf,
 };
 
 static TAPState *net_tap_fd_init(NetClientState *peer,