All,
Attached is the secure migration patch for libvirt. What this patch
implements is a new remote RPC call for secure migration. On the source of the
migration, we do a migration from the qemu process to the libvirtd on localhost.
As each read() in libvirtd completes, it issues an RPC message to the remote
libvirtd, using the standard libvirt RPC mechanisms. On the destination, we do
essentially the mirror; the libvirtd accepts the data from RPC, and then writes
it to a qemu container process listening on localhost.
In order to actually use this, the command-line is pretty complex. If you want
to use standard live migration, the command-line looks something like:
# virsh -c
qemu+tls://source.example.org/system migrate --live guest
qemu+tls://dest.example.org/system
This says to a live migration of "guest" from "source.example.org" to
"dest.example.org", connecting to each of the remote libvirtd via TLS. Note
that in this model, the virsh process connects to the remote libvirtd's via the
-c argument (source) and the destination argument (dest).
To do secure live migration, this becomes:
# virsh -c
qemu+tls://source.example.org/system migrate --live --secure guest
qemu+tls://dest.example.org/system qemu+tls://dest.example.org/system
This says to do a secure live migration of "guest" from
"source.example.org" to
"dest.example.org". The virsh process figures out how to connect to the remote
libvirtd's via the -c argument (source) and the destination argument (dest).
The second "qemu+tls://dest.example.org/system" is the secure channel from the
source libvirtd to the destination libvirtd.
Signed-off-by: Chris Lalancette <clalance(a)redhat.com>
docs/apibuild.py | 1
include/libvirt/libvirt.h | 1
include/libvirt/libvirt.h.in | 1
qemud/remote.c | 34 +++
qemud/remote_dispatch_args.h | 1
qemud/remote_dispatch_prototypes.h | 7
qemud/remote_dispatch_table.h | 5
qemud/remote_protocol.c | 13 +
qemud/remote_protocol.h | 17 +
qemud/remote_protocol.x | 12 +
src/driver.h | 10 +
src/libvirt.c | 55 ++++-
src/libvirt_internal.h | 5
src/libvirt_private.syms | 1
src/lxc_driver.c | 1
src/openvz_driver.c | 1
src/qemu_driver.c | 367 ++++++++++++++++++++++++++++++++-----
src/remote_internal.c | 33 +++
src/test.c | 1
src/uml_driver.c | 1
src/virsh.c | 4
src/xen_unified.c | 1
22 files changed, 518 insertions(+), 54 deletions(-)