This document describes how to test each device, which is required when
modifying the common I/O infrastructure.


9P
--

  CONFIG_NET_9P_VIRTIO

Without a --disk parameter, kvmtool shares part of the host filesystem
with the guest using 9p. Otherwise, use the `--9p <directory>,<tag>`
parameter to share a directory with the guest, and mount it in the guest
with:

	$ mount -t 9p <tag> <mountpoint>


BALLOON
-------

  CONFIG_VIRTIO_BALLOON

	$ lkvm run ... --balloon

Display memory statistics:

	$ lkvm stat -a -m
		*** Guest memory statistics ***
		...

Remove 20MB of memory from the guest:

	$ lkvm balloon -n guest-$(pidof lkvm) -i 20


BLOCK
-----

  CONFIG_VIRTIO_BLK

	$ lkvm run ... --disk <raw or qcow2 image>


CONSOLE
-------

	$ lkvm run ... --console virtio

See also virtio-console.txt


NET
---

  CONFIG_VIRTIO_NET	(guest)
  CONFIG_VHOST_NET	(host)

By default kvmtool instantiates a user network device. In order to test
both tap and vhost, setup a tap interface on a local network.

In the host:

	# ip tuntap add tap0 mode tap user $USER
	# ip link set tap0 up
	# ip link add br0 type bridge
	# ip link set tap0 master br0
	# ip link set br0 up
	# ip addr add 192.168.3.1/24 dev br0

	$ lkvm run ... -n mode=tap,tapif=tap0,vhost=1

In the guest:

	# ip link set eth0 up
	# ip addr add 192.168.3.12/24 dev eth0
	$ ping -c 1 192.168.3.1
	64 bytes from 192.168.3.1: seq=0 ttl=64 time=0.303 ms


RNG
---

  CONFIG_HW_RANDOM_VIRTIO

	$ lkvm run ... --rng

In the guest:

	$ cat /sys/devices/virtual/misc/hw_random/rng_available
	virtio_rng.0


SCSI
----

  CONFIG_SCSI_VIRTIO	(guest)
  CONFIG_TCM_FILEIO	(host)
  CONFIG_VHOST_SCSI	(host)

In the host, create a fileio backstore and a target:

	# targetcli (https://github.com/open-iscsi/targetcli-fb)
	/> cd backstores/fileio
	/backstores/fileio> create kvmtool_1 /srv/kvmtool_1 2M
	Created fileio kvmtool_1 with size 2097152
	/backstores/fileio> cd /vhost
	/vhost> create
	Created target naa.500140571c9308aa.
	Created TPG 1.
	/vhost> cd naa.500140571c9308aa/tpg1/luns
	/vhost/naa.50...8aa/tpg1/luns> create /backstores/fileio/kvmtool_1
	Created LUN 0.

	$ lkvm run ... --disk scsi:naa.500140571c9308aa
	[    0.479644] scsi host0: Virtio SCSI HBA
	[    0.483009] scsi 0:0:1:0: Direct-Access     LIO-ORG  kvmtool_1        4.0  PQ: 0 ANSI: 6

	[    1.242833] sd 0:0:1:0: [sda] 4096 512-byte logical blocks: (2.10 MB/2.00 MiB)


VSOCK
-----

  CONFIG_VSOCKETS
  CONFIG_VIRTIO_VSOCKETS	(guest)
  CONFIG_VHOST_VSOCK		(host)

In the host, start a vsock server:

	$ socat - VSOCK-LISTEN:1234

We pick 12 as the guest ID. 0 and 1 are reserved, and the host has default
ID 2.

	$ lkvm run ... --vsock 12

In the guest, send a message to the host:

	$ echo Hello | socat - VSOCK-CONNECT:2:1234

The host server should display "Hello".
