# Vhost-user devices

This directory contains the implementation of [vhost-user] devices and [virtio vhost-user] devices.

## Code Locations

- [`vmm`](./vmm/) - Implements vhost-user vmm device; i.e. vhost-user master.
- [`device`](./device/) - Implements vhost-user device backend; i.e. vhost-user slave.
- [`proxy.rs`](./proxy.rs) - Implements [virtio vhost-user] device, which works like a proxy
  forwarding vhost-user messages to the guest via virtqueues.

## Usage

### Vhost-user

First, start a vhost-user device with the `crosvm device` command. Here we use the block device as
an example, but the basic usage is same for all of devices.

```bash
$ crosvm device block --socket /path/to/socket --file /path/to/block.img
```

Then start a VM with a vhost-user block device by specifying the same socket path .

```bash
$ crosvm run -r rootfs.img --vhost-user-blk /path/to/socket 
```

[vhost-user]: https://qemu.readthedocs.io/en/latest/interop/vhost-user.html
[virtio vhost-user]: https://wiki.qemu.org/Features/VirtioVhostUser