aboutgitcodebugslistschat
path: root/passt.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-08-11 15:12:29 +1000
committerStefano Brivio <sbrivio@redhat.com>2023-08-13 17:30:20 +0200
commitae5f6c8e1b95580ca3c2f245e02efb28ad11e2aa (patch)
treea789bf944b16d49e4fc0bfba252fa63b078b0e0d /passt.c
parenteda4f1997e57d5c8b8cd668065634fd87495e908 (diff)
downloadpasst-ae5f6c8e1b95580ca3c2f245e02efb28ad11e2aa.tar
passt-ae5f6c8e1b95580ca3c2f245e02efb28ad11e2aa.tar.gz
passt-ae5f6c8e1b95580ca3c2f245e02efb28ad11e2aa.tar.bz2
passt-ae5f6c8e1b95580ca3c2f245e02efb28ad11e2aa.tar.lz
passt-ae5f6c8e1b95580ca3c2f245e02efb28ad11e2aa.tar.xz
passt-ae5f6c8e1b95580ca3c2f245e02efb28ad11e2aa.tar.zst
passt-ae5f6c8e1b95580ca3c2f245e02efb28ad11e2aa.zip
epoll: Use different epoll types for passt and pasta tap fds
Currently we have a single epoll event type for the "tap" fd, which could be either a handle on a /dev/net/tun device (pasta) or a connected Unix socket (passt). However for the two modes we call different handler functions. Simplify this a little by using different epoll types and dispatching directly to the correct handler function. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'passt.c')
-rw-r--r--passt.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/passt.c b/passt.c
index 970426d..ca0acc6 100644
--- a/passt.c
+++ b/passt.c
@@ -63,7 +63,8 @@ char *epoll_type_str[EPOLL_TYPE_MAX + 1] = {
[EPOLL_TYPE_ICMP] = "ICMP socket",
[EPOLL_TYPE_ICMPV6] = "ICMPv6 socket",
[EPOLL_TYPE_NSQUIT] = "namespace inotify",
- [EPOLL_TYPE_TAP] = "tap device",
+ [EPOLL_TYPE_TAP_PASTA] = "/dev/net/tun device",
+ [EPOLL_TYPE_TAP_PASST] = "connected qemu socket",
[EPOLL_TYPE_TAP_LISTEN] = "listening qemu socket",
};
@@ -317,8 +318,11 @@ loop:
EPOLL_TYPE_STR(ref.type), ref.fd, eventmask);
switch (ref.type) {
- case EPOLL_TYPE_TAP:
- tap_handler(&c, events[i].events, &now);
+ case EPOLL_TYPE_TAP_PASTA:
+ tap_handler_pasta(&c, eventmask, &now);
+ break;
+ case EPOLL_TYPE_TAP_PASST:
+ tap_handler_passt(&c, eventmask, &now);
break;
case EPOLL_TYPE_TAP_LISTEN:
tap_listen_handler(&c, eventmask);