summary refs log tree commit diff stats
path: root/migration.c
diff options
context:
space:
mode:
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2008-10-13 03:14:31 +0000
committeraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2008-10-13 03:14:31 +0000
commit34c9dd8eea38e94d97e22ac12c2f2aaa0dca59d8 (patch)
tree059b44291d3bc9196d68c8ecdf8a7b940ef99ff2 /migration.c
parent210f41ba932efb4c32139568930b72d1c2d075be (diff)
downloadfocaccia-qemu-34c9dd8eea38e94d97e22ac12c2f2aaa0dca59d8.tar.gz
focaccia-qemu-34c9dd8eea38e94d97e22ac12c2f2aaa0dca59d8.zip
Introduce TCP live migration protocol
This patch introduces a tcp protocol for live migration.  It can be used as
follows:

qemu-system-x86_64 -hda ~/images/linux-test.img -monitor stdio
 <vm runs for a while>
(qemu) migrate tcp:localhost:1025

On the same system:

qemu-system-x86_64 -hda ~/images/linux-test.img -incoming 
tcp:localhost:1025

The monitor can be interacted with while waiting for an incoming live 
migration.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5478 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'migration.c')
-rw-r--r--migration.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/migration.c b/migration.c
index 732fe3fe4c..684cbae898 100644
--- a/migration.c
+++ b/migration.c
@@ -22,12 +22,32 @@ static MigrationState *current_migration;
 
 void qemu_start_incoming_migration(const char *uri)
 {
-    fprintf(stderr, "unknown migration protocol: %s\n", uri);
+    const char *p;
+
+    if (strstart(uri, "tcp:", &p))
+        tcp_start_incoming_migration(p);
+    else
+        fprintf(stderr, "unknown migration protocol: %s\n", uri);
 }
 
 void do_migrate(int detach, const char *uri)
 {
-    term_printf("unknown migration protocol: %s\n", uri);
+    MigrationState *s = NULL;
+    const char *p;
+
+    if (strstart(uri, "tcp:", &p))
+	s = tcp_start_outgoing_migration(p, max_throttle, detach);
+    else
+        term_printf("unknown migration protocol: %s\n", uri);
+
+    if (s == NULL)
+	term_printf("migration failed\n");
+    else {
+	if (current_migration)
+	    current_migration->release(current_migration);
+
+	current_migration = s;
+    }
 }
 
 void do_migrate_cancel(void)