vscp ==== Command `vscp` provides a `scp`-like utility for copying files over VM sockets. It is meant to show example usage of package `vsock`, but is also useful in scenarios where a virtual machine does not have networking configured, but VM sockets are available. Usage ----- `vscp` has two modes of operation: receiving and sending. ``` $ vscp -h Usage of vscp: -c uint send only: context ID of the remote VM socket -p uint - receive: port ID to listen on (random port by default) - send: port ID to connect to -r receive files from another instance of vscp -s send files to another instance of vscp -v enable verbose logging to stderr ``` For example, let's transfer the contents of `/proc/cpuinfo` from a virtual machine to a hypervisor. First, start a server on the hypervisor. The following command will: - enable verbose logging - start `vscp` as a server to receive data - specify port 1024 as the server's listener port - use `cpuinfo.txt` as an output file ``` hv $ vscp -v -r -p 1024 cpuinfo.txt 2017/03/10 10:51:48 receive: creating file "cpuinfo.txt" for output 2017/03/10 10:51:48 receive: opening listener: 1024 2017/03/10 10:51:48 receive: listening: host(2):1024 # listening for client connection ``` Next, in the virtual machine, start a client to send a file to the server on the hypervisor. The following command will: - enable verbose logging - start `vscp` as a client to send data - specify context ID 2 (host process) as the server's context ID - specify port 1024 as the server's port - use `/proc/cpuinfo` as an input file ``` vm $ vscp -v -s -c 2 -p 1024 /proc/cpuinfo 2017/03/10 10:56:18 send: opening file "/proc/cpuinfo" for input 2017/03/10 10:56:18 send: dialing: 2.1024 2017/03/10 10:56:18 send: client: vm(3):1077 2017/03/10 10:56:18 send: server: host(2):1024 2017/03/10 10:56:18 send: sending data 2017/03/10 10:56:18 send: transfer complete vm $ ``` The transfer is now complete. You should see more output in the hypervisor's terminal, and the server process should have exited. ``` hv $ vscp -v -r -p 1024 cpuinfo.txt 2017/03/10 10:51:48 receive: creating file "cpuinfo.txt" for output 2017/03/10 10:51:48 receive: opening listener: 1024 2017/03/10 10:51:48 receive: listening: host(2):1024 # listening for client connection 2017/03/10 10:55:39 receive: server: host(2):1024 2017/03/10 10:55:39 receive: client: vm(3):1077 2017/03/10 10:55:39 receive: receiving data 2017/03/10 10:55:39 receive: transfer complete hv $ ``` To verify the transfer worked as intended, you can check the hash of the file on both sides using a tool such as `md5sum`. ``` hv $ md5sum cpuinfo.txt cda57941b11f0c82da425eec5d837c26 cpuinfo.txt ``` ``` vm $ md5sum /proc/cpuinfo cda57941b11f0c82da425eec5d837c26 /proc/cpuinfo ```