I was just looking at the new vmchannel feature in QEMU and was
wondering if we could make this available in libvirt.
Firstly, since there isn't much documentation, I should explain how
vmchannel works:
[1] You pass an extra parameter on the qemu command line:
qemu [...] -vmchannel <port>:<dev>
where <port> is the TCP port number (see below) and <dev> is
a standard qemu device description. As an example:
qemu [...] -vmchannel 600:unix:/some/path
[2] A new character device appears in the host, eg. Unix domain
socket called "/some/path".
[3] In the host, a userspace program should open a socket, bind(2)
it to /some/path and listen(2) and accept(2) on it.
[4] In the guest, any process may connect(2) to TCP 10.0.2.4:600
(or whatever port was selected). Each connection in the guest
causes the listener in the host to accept(2).
[5] This is only designed for low-bandwidth, low-performance
applications.
[6] Multiple vmchannels are supported.
[7] Host cannot initiate a connection.
My plan to implement this would be to add a new network interface type
to the domain XML:
<interface type='vmchannel'>
<source port='600'/>
<target path='/some/path'/>
</interface>
Only Unix domain socket paths would be allowed on the host side, and
the path would be expected to exist already with suitable permissions.
Note that I think this would also allow guests to communicate with the
libvirtd on the host (not by default, of course, but if users wanted
to configure it that way), for example:
<interface type='vmchannel'>
<source port='600'/>
<target path='/var/run/libvirt/libvirt-sock'/>
</interface>
One problem is that it is qemu/kvm-only. It is built on top of
virtio, and virtio is meant to become a standard driver subsystem for
all full virtualization systems.
Thoughts?
Rich.
--
Richard Jones, Emerging Technologies, Red Hat
http://et.redhat.com/~rjones
virt-p2v converts physical machines to virtual machines. Boot with a
live CD or over the network (PXE) and turn machines into Xen guests.
http://et.redhat.com/~rjones/virt-p2v