diff options
author | Laurent Vivier <lvivier@redhat.com> | 2024-11-22 17:43:34 +0100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-11-27 16:47:32 +0100 |
commit | 28997fcb29b560fc0dcfd91bad5eece3ded5eb72 (patch) | |
tree | 34aad38ecc628c37bb88413a3c809498c45ae9cb /passt.c | |
parent | b2e62f7e85ac77a91daf5d77b7f32198ef0e59c2 (diff) | |
download | passt-28997fcb29b560fc0dcfd91bad5eece3ded5eb72.tar passt-28997fcb29b560fc0dcfd91bad5eece3ded5eb72.tar.gz passt-28997fcb29b560fc0dcfd91bad5eece3ded5eb72.tar.bz2 passt-28997fcb29b560fc0dcfd91bad5eece3ded5eb72.tar.lz passt-28997fcb29b560fc0dcfd91bad5eece3ded5eb72.tar.xz passt-28997fcb29b560fc0dcfd91bad5eece3ded5eb72.tar.zst passt-28997fcb29b560fc0dcfd91bad5eece3ded5eb72.zip |
vhost-user: add vhost-user
add virtio and vhost-user functions to connect with QEMU.
$ ./passt --vhost-user
and
# qemu-system-x86_64 ... -m 4G \
-object memory-backend-memfd,id=memfd0,share=on,size=4G \
-numa node,memdev=memfd0 \
-chardev socket,id=chr0,path=/tmp/passt_1.socket \
-netdev vhost-user,id=netdev0,chardev=chr0 \
-device virtio-net,mac=9a:2b:2c:2d:2e:2f,netdev=netdev0 \
...
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
[sbrivio: as suggested by lvivier, include <netinet/if_ether.h>
before including <linux/if_ether.h> as C libraries such as musl
__UAPI_DEF_ETHHDR in <netinet/if_ether.h> if they already have
a definition of struct ethhdr]
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'passt.c')
-rw-r--r-- | passt.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -50,6 +50,7 @@ #include "log.h" #include "tcp_splice.h" #include "ndp.h" +#include "vu_common.h" #define EPOLL_EVENTS 8 @@ -72,6 +73,8 @@ char *epoll_type_str[] = { [EPOLL_TYPE_TAP_PASTA] = "/dev/net/tun device", [EPOLL_TYPE_TAP_PASST] = "connected qemu socket", [EPOLL_TYPE_TAP_LISTEN] = "listening qemu socket", + [EPOLL_TYPE_VHOST_CMD] = "vhost-user command socket", + [EPOLL_TYPE_VHOST_KICK] = "vhost-user kick socket", }; static_assert(ARRAY_SIZE(epoll_type_str) == EPOLL_NUM_TYPES, "epoll_type_str[] doesn't match enum epoll_type"); @@ -347,6 +350,12 @@ loop: case EPOLL_TYPE_PING: icmp_sock_handler(&c, ref); break; + case EPOLL_TYPE_VHOST_CMD: + vu_control_handler(c.vdev, c.fd_tap, eventmask); + break; + case EPOLL_TYPE_VHOST_KICK: + vu_kick_cb(c.vdev, ref, &now); + break; default: /* Can't happen */ ASSERT(0); |