summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2008-10-13 03:12:02 +0000
committeraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2008-10-13 03:12:02 +0000
commit5bb7910af031cce09cc619b982d39dc889776f65 (patch)
tree9372820c2f7fd94b418be295e995ebfe4a5db587 /migration.c
parentIntroduce a buffered file wrapper for QEMUFile (diff)
downloadqemu-kvm-5bb7910af031cce09cc619b982d39dc889776f65.tar.gz
qemu-kvm-5bb7910af031cce09cc619b982d39dc889776f65.tar.bz2
qemu-kvm-5bb7910af031cce09cc619b982d39dc889776f65.zip
Introduce UI for live migration
This patch introduces a command line parameter and monitor command for starting a live migration. The next patch will provide an example of how to use these parameters. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5476 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'migration.c')
-rw-r--r--migration.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/migration.c b/migration.c
new file mode 100644
index 000000000..732fe3fe4
--- /dev/null
+++ b/migration.c
@@ -0,0 +1,83 @@
+/*
+ * QEMU live migration
+ *
+ * Copyright IBM, Corp. 2008
+ *
+ * Authors:
+ * Anthony Liguori <aliguori@us.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ *
+ */
+
+#include "qemu-common.h"
+#include "migration.h"
+#include "console.h"
+
+/* Migration speed throttling */
+static uint32_t max_throttle = (32 << 20);
+
+static MigrationState *current_migration;
+
+void qemu_start_incoming_migration(const char *uri)
+{
+ fprintf(stderr, "unknown migration protocol: %s\n", uri);
+}
+
+void do_migrate(int detach, const char *uri)
+{
+ term_printf("unknown migration protocol: %s\n", uri);
+}
+
+void do_migrate_cancel(void)
+{
+ MigrationState *s = current_migration;
+
+ if (s)
+ s->cancel(s);
+}
+
+void do_migrate_set_speed(const char *value)
+{
+ double d;
+ char *ptr;
+
+ d = strtod(value, &ptr);
+ switch (*ptr) {
+ case 'G': case 'g':
+ d *= 1024;
+ case 'M': case 'm':
+ d *= 1024;
+ case 'K': case 'k':
+ d *= 1024;
+ default:
+ break;
+ }
+
+ max_throttle = (uint32_t)d;
+}
+
+void do_info_migrate(void)
+{
+ MigrationState *s = current_migration;
+
+ if (s) {
+ term_printf("Migration status: ");
+ switch (s->get_status(s)) {
+ case MIG_STATE_ACTIVE:
+ term_printf("active\n");
+ break;
+ case MIG_STATE_COMPLETED:
+ term_printf("completed\n");
+ break;
+ case MIG_STATE_ERROR:
+ term_printf("failed\n");
+ break;
+ case MIG_STATE_CANCELLED:
+ term_printf("cancelled\n");
+ break;
+ }
+ }
+}
+