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