Features/VirtioVsock: Difference between revisions

From QEMU
(add iperf-vscok in →‎Projects using vsock)
Line 27: Line 27:
==Language bindings==
==Language bindings==
* C - use <linux/vm_sockets.h>
* C - use <linux/vm_sockets.h>
* Python - coming in Python 3.7 (already merged upstream)
* Python - starting from Python 3.7
* Go - [https://github.com/mdlayher/vsock Matt Layher's vsock module]
* Go - [https://github.com/mdlayher/vsock Matt Layher's vsock module]
* Rust
** [https://docs.rs/crate/libc libc crate] (libc::sockaddr_vm, libc::VMADDR_*)
** [https://docs.rs/crate/nix nix crate] (nix::sys::socket::VsockAddr)


==Projects using vsock==
==Projects using vsock==

Revision as of 09:41, 15 October 2019

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

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

Projects using vsock

Links