QMP
The basics on QMP can be found here:
QMP Helper
When QEMU is run in dom0 with the toolstack (xl in this case), it will typically be setup to create a UNIX socket that xl can connect to and communicate with QEMU. This is done using a QEMU command line argument like this (where N is the quest's domain ID):
-qmp unix:/var/run/xen/qmp-libxl-N,server,nowait
The argument after unix:
is the name of the UNIX socket that is created and set to listen for connections.
When QEMU is moved to a stub-domain, this communication method is no longer available. The QMP helper is the means by which QMP communications can be established with a QEMU running in a stub-domain. The QMP helper bits work a lot like the other stub-domain helpers in xctools.git
. It consists of two components:
- A chardrv implementation that is introduced into the
qemu-char.c
code. This new type of chardrv can sit below other monitors and consoles and route traffic over V4V. - A proxy process called
qmp_helper
runs indom0
and can talk to the V4V chardrv in QEMU in the stubdom. Theqmp_helper
also creates a UNIX socket exactly as QEMU would have above indom0
. The toolstack (xl
) can then connect directly to the UNIX socket and the rest is invisible to it.
The QMP helper also needs changes to SELinux and the V4V firewall before it will work properly. If those changes are not yet implemented, QMP helper can still be tested by putting SELinux in permissive mode and flushing all the V4V firewall rules:
$ nr
$ setenforce 0
$ viptables -F
NOTE: the implementations currently resides here until it is brought into OpenXT proper:
https://github.com/rossphilipson/xctools/tree/qmp_helper/qmp_helper
QMP Shell
The QMP shell is a great tool for testing QMP stuffs. It is a set of python scripts that can basically send any QMP command to QEMU and receive any asynchronous events of the QMP channel that QEMU sends. First Python must be installed in dom0 to use it. Before doing this, create some space in the rootfs using the instructions here: Create Space on Target.