Features/VirtioVsock: Difference between revisions
No edit summary |
No edit summary |
||
Line 24: | Line 24: | ||
(host)# qemu-system-x86_64 -device vhost-vsock-pci,guest-cid=3 ... | (host)# qemu-system-x86_64 -device vhost-vsock-pci,guest-cid=3 ... | ||
==Language bindings== | |||
* C - use <linux/vm_sockets.h> | |||
* Python - coming in Python 3.7 (already merged upstream) | |||
* Go - [https://github.com/mdlayher/vsock Matt Layher's vsock module] | |||
==Projects using vsock== | ==Projects using vsock== |
Revision as of 16:22, 23 November 2017
virtio-vsock is a host/guest communications device. It allows applications in the guest and host to communicate. This can be used to implement hypervisor services and guest agents (like qemu-guest-agent or SPICE vdagent).
- POSIX Sockets API so existing networking applications require minimal modification (unlike virtio-serial char devices)
- Listen sockets can accept connections from multiple clients (unlike virtio-serial char devices)
- No address configuration required inside the guest
- No Ethernet or TCP/IP for a reduced attack surface for hypervisor services
- Can be used with VMs that have no network interfaces
Sockets are created with the AF_VSOCK address family. The SOCK_STREAM socket type is currently implemented for in-order, guaranteed stream semantics.
Code
- Virtio specification: HTML or virtio.git
- Linux kernel: Upstream since Linux 4.8, or see stefanha's linux.git
- QEMU: Upstream since QEMU 2.8, or see stefanha's qemu.git
Packages
Quickstart
- Host kernel requirements: CONFIG_VHOST_VSOCK=m
- Guest kernel requirements: CONFIG_VIRTIO_VSOCKETS=m
Launch a guest and assign it CID 3:
(host)# qemu-system-x86_64 -device vhost-vsock-pci,guest-cid=3 ...
Language bindings
- C - use <linux/vm_sockets.h>
- Python - coming in Python 3.7 (already merged upstream)
- Go - Matt Layher's vsock module
Projects using vsock
- nc-vsock - a netcat-like utility for AF_VSOCK
- xpra - X11 persistent remote display server and client
- cloonix_vsock - PTY over AF_VSOCK
Testing
The vhost-vsock-test qtest replays packets from a JSON file and verifies that the expected reply is received.
The JSON test file format is described in a README.
$ cd qemu $ make -j4 $ make tests/vhost-vsock-test $ sudo QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img MALLOC_PERTURB_=${MALLOC_PERTURB_:-$((RANDOM % 255 + 1))} gtester -k --verbose -m=quick tests/vhost-vsock-test -o /dev/stderr
Create and edit test cases in tests/vhost-vsock-test-data/*.json.
Links
- KVM Forum 2015 presentation: virtio-vsock: Zero-configuration host/guest communication (pdf)
- Connectathon 2016 presentation: NFS over virtio-vsock: Host/guest file sharing for virtual machines (pdf)