[libvirt] [PATCH 09/21] qemu: migration: src: nbdtunnel unix socket

Pavel Boldin pboldin at mirantis.com
Wed Nov 18 18:13:07 UTC 2015


Create a UNIX socket that will be a target for outgoing NBD connection
from the QEMU side.

Signed-off-by: Pavel Boldin <pboldin at mirantis.com>
---
 src/qemu/qemu_migration.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index fb2a216..d587c56 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -4597,7 +4597,7 @@ static int doTunnelMigrate(virQEMUDriverPtr driver,
                            size_t nmigrate_disks,
                            const char **migrate_disks)
 {
-    virNetSocketPtr sock = NULL;
+    virNetSocketPtr sock = NULL, nbdSock = NULL;
     int ret = -1;
     qemuMigrationSpec spec;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
@@ -4613,6 +4613,23 @@ static int doTunnelMigrate(virQEMUDriverPtr driver,
     spec.fwdType = MIGRATION_FWD_STREAM;
     spec.fwd.stream = st;
 
+    if (nmigrate_disks) {
+        spec.nbd_tunnel_unix_socket.sock = -1;
+        spec.nbd_tunnel_unix_socket.file = NULL;
+
+        if (virAsprintf(&spec.nbd_tunnel_unix_socket.file,
+                        "%s/domain-%s/qemu.nbdtunnelmigrate.src",
+                        cfg->libDir, vm->def->name) < 0)
+            goto cleanup;
+
+        if (virNetSocketNewListenUNIX(spec.nbd_tunnel_unix_socket.file, 0700,
+                                      cfg->user, cfg->group,
+                                      &nbdSock) < 0 ||
+            virNetSocketListen(nbdSock, 1) < 0)
+            goto cleanup;
+
+        spec.nbd_tunnel_unix_socket.sock = virNetSocketGetFD(nbdSock);
+    }
 
     spec.destType = MIGRATION_DEST_FD;
     spec.dest.fd.qemu = -1;
@@ -4643,6 +4660,11 @@ static int doTunnelMigrate(virQEMUDriverPtr driver,
         VIR_FREE(spec.dest.unix_socket.file);
     }
 
+    if (nmigrate_disks) {
+        virObjectUnref(nbdSock);
+        VIR_FREE(spec.nbd_tunnel_unix_socket.file);
+    }
+
     virObjectUnref(cfg);
     return ret;
 }
-- 
1.9.1




More information about the libvir-list mailing list