xref: /aosp_15_r20/external/crosvm/docs/book/src/devices/vsock.md (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker# Vsock device
2*bb4ee6a4SAndroid Build Coastguard Worker
3*bb4ee6a4SAndroid Build Coastguard Workercrosvm supports [virtio-vsock] device for communication between the host and a guest VM.
4*bb4ee6a4SAndroid Build Coastguard Worker
5*bb4ee6a4SAndroid Build Coastguard WorkerAssign a context id to a guest VM by passing it with the `--vsock` flag.
6*bb4ee6a4SAndroid Build Coastguard Worker
7*bb4ee6a4SAndroid Build Coastguard Worker```sh
8*bb4ee6a4SAndroid Build Coastguard WorkerGUEST_CID=3
9*bb4ee6a4SAndroid Build Coastguard Worker
10*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
11*bb4ee6a4SAndroid Build Coastguard Worker  --vsock "${GUEST_CID}" \
12*bb4ee6a4SAndroid Build Coastguard Worker  <usual crosvm arguments>
13*bb4ee6a4SAndroid Build Coastguard Worker  /path/to/bzImage
14*bb4ee6a4SAndroid Build Coastguard Worker```
15*bb4ee6a4SAndroid Build Coastguard Worker
16*bb4ee6a4SAndroid Build Coastguard WorkerThen, the guest and the host can communicate with each other via vsock. Host always has 2 as its
17*bb4ee6a4SAndroid Build Coastguard Workercontext id.
18*bb4ee6a4SAndroid Build Coastguard Worker
19*bb4ee6a4SAndroid Build Coastguard Workercrosvm assumes that the host has a vsock device at `/dev/vhost-vsock`. If you want to use a device
20*bb4ee6a4SAndroid Build Coastguard Workerat a different path or one given as an fd, you can use `--vhost-vsock-device` flag or
21*bb4ee6a4SAndroid Build Coastguard Worker`--vhost-vsock-fd` flag respectively.
22*bb4ee6a4SAndroid Build Coastguard Worker
23*bb4ee6a4SAndroid Build Coastguard Worker## Example usage
24*bb4ee6a4SAndroid Build Coastguard Worker
25*bb4ee6a4SAndroid Build Coastguard WorkerThis example assumes `ncat` is installed. If you are using a VM image created using `virt-builder`,
26*bb4ee6a4SAndroid Build Coastguard Workerit needs to come pre-installed with `ncat`. This can be achieved by running the following command:
27*bb4ee6a4SAndroid Build Coastguard Worker
28*bb4ee6a4SAndroid Build Coastguard Worker```sh
29*bb4ee6a4SAndroid Build Coastguard Worker    # Build a simple ubuntu image and create a user with no password.
30*bb4ee6a4SAndroid Build Coastguard Worker    virt-builder ubuntu-20.04 \
31*bb4ee6a4SAndroid Build Coastguard Worker        --run-command "useradd -m -g sudo -p '' $USER ; chage -d 0 $USER" \
32*bb4ee6a4SAndroid Build Coastguard Worker        -o ./rootfs \
33*bb4ee6a4SAndroid Build Coastguard Worker        --install ncat
34*bb4ee6a4SAndroid Build Coastguard Worker```
35*bb4ee6a4SAndroid Build Coastguard Worker
36*bb4ee6a4SAndroid Build Coastguard WorkerAt host shell:
37*bb4ee6a4SAndroid Build Coastguard Worker
38*bb4ee6a4SAndroid Build Coastguard Worker```sh
39*bb4ee6a4SAndroid Build Coastguard WorkerPORT=11111
40*bb4ee6a4SAndroid Build Coastguard Worker
41*bb4ee6a4SAndroid Build Coastguard Worker# Listen at host
42*bb4ee6a4SAndroid Build Coastguard Workerncat -l --vsock ${PORT}
43*bb4ee6a4SAndroid Build Coastguard Worker```
44*bb4ee6a4SAndroid Build Coastguard Worker
45*bb4ee6a4SAndroid Build Coastguard WorkerAt guest shell:
46*bb4ee6a4SAndroid Build Coastguard Worker
47*bb4ee6a4SAndroid Build Coastguard Worker```sh
48*bb4ee6a4SAndroid Build Coastguard WorkerHOST_CID=2
49*bb4ee6a4SAndroid Build Coastguard WorkerPORT=11111
50*bb4ee6a4SAndroid Build Coastguard Worker
51*bb4ee6a4SAndroid Build Coastguard Worker# Make a connection to the host
52*bb4ee6a4SAndroid Build Coastguard Workerncat --vsock ${HOST_CID} ${PORT}
53*bb4ee6a4SAndroid Build Coastguard Worker```
54*bb4ee6a4SAndroid Build Coastguard Worker
55*bb4ee6a4SAndroid Build Coastguard WorkerIf a vsock device is configured properly in the guest VM, a connection between the host and the
56*bb4ee6a4SAndroid Build Coastguard Workerguest can be established and packets can be sent from both side. In the above example, your inputs
57*bb4ee6a4SAndroid Build Coastguard Workerto a shell on one's side should be shown at the shell on the other side if a connection is
58*bb4ee6a4SAndroid Build Coastguard Workersuccessfully established.
59*bb4ee6a4SAndroid Build Coastguard Worker
60*bb4ee6a4SAndroid Build Coastguard Worker[virtio-vsock]: https://docs.oasis-open.org/virtio/virtio/v1.1/csprd01/virtio-v1.1-csprd01.html#x1-389001r356
61