All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juan Quintela <quintela@redhat.com>
To: qemu-devel@nongnu.org
Cc: dgilbert@redhat.com, lvivier@redhat.com, peterx@redhat.com
Subject: [Qemu-devel] [PATCH v2 6/6] migration: Set the new port/address in the uri parameter
Date: Wed, 22 Nov 2017 13:42:19 +0100	[thread overview]
Message-ID: <20171122124219.12954-7-quintela@redhat.com> (raw)
In-Reply-To: <20171122124219.12954-1-quintela@redhat.com>

We can set the port parameter as zero.  This patch lets us know what
port the system was choosen for us.  Now we can migrate to this place.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration/socket.c | 37 ++++++++++++++++++++++++++++++++-----
 1 file changed, 32 insertions(+), 5 deletions(-)

diff --git a/migration/socket.c b/migration/socket.c
index 3a8232dd2d..5f9cbaf54a 100644
--- a/migration/socket.c
+++ b/migration/socket.c
@@ -162,17 +162,24 @@ out:
 }
 
 
-static void socket_start_incoming_migration(SocketAddress *saddr,
-                                            Error **errp)
+static SocketAddress *socket_start_incoming_migration(SocketAddress *saddr,
+                                                      Error **errp)
 {
     QIOChannelSocket *listen_ioc = qio_channel_socket_new();
+    SocketAddress *address;
 
     qio_channel_set_name(QIO_CHANNEL(listen_ioc),
                          "migration-socket-listener");
 
     if (qio_channel_socket_listen_sync(listen_ioc, saddr, errp) < 0) {
         object_unref(OBJECT(listen_ioc));
-        return;
+        return NULL;
+    }
+
+    address = qio_channel_socket_get_local_address(listen_ioc, errp);
+    if (address < 0) {
+        object_unref(OBJECT(listen_ioc));
+        return NULL;
     }
 
     qio_channel_add_watch(QIO_CHANNEL(listen_ioc),
@@ -180,14 +187,31 @@ static void socket_start_incoming_migration(SocketAddress *saddr,
                           socket_accept_incoming_migration,
                           listen_ioc,
                           (GDestroyNotify)object_unref);
+    return address;
 }
 
 void tcp_start_incoming_migration(const char *host_port, Error **errp)
 {
     Error *err = NULL;
     SocketAddress *saddr = tcp_build_address(host_port, &err);
+
     if (!err) {
-        socket_start_incoming_migration(saddr, &err);
+        SocketAddress *address = socket_start_incoming_migration(saddr, &err);
+
+        if (address &&
+            (strcmp(address->u.inet.port, saddr->u.inet.port) ||
+             strcmp(address->u.inet.host, saddr->u.inet.host))) {
+            char *new_uri;
+            InetSocketAddress *iaddr = &saddr->u.inet;
+
+            new_uri = g_strdup_printf("tcp:%s:%s%s%s", address->u.inet.host,
+                                      address->u.inet.port,
+                                      iaddr->has_ipv4 ? ",ipv4" : "",
+                                      iaddr->has_ipv6 ? ",ipv6" : "");
+            migrate_set_uri(new_uri, errp);
+            g_free(new_uri);
+            qapi_free_SocketAddress(address);
+        }
     }
     qapi_free_SocketAddress(saddr);
     error_propagate(errp, err);
@@ -196,6 +220,9 @@ void tcp_start_incoming_migration(const char *host_port, Error **errp)
 void unix_start_incoming_migration(const char *path, Error **errp)
 {
     SocketAddress *saddr = unix_build_address(path);
-    socket_start_incoming_migration(saddr, errp);
+    SocketAddress *address;
+
+    address = socket_start_incoming_migration(saddr, errp);
+    qapi_free_SocketAddress(address);
     qapi_free_SocketAddress(saddr);
 }
-- 
2.13.6

  parent reply	other threads:[~2017-11-22 12:42 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-22 12:42 [Qemu-devel] [PATCH v2 0/6] Improve info migrate output on destination Juan Quintela
2017-11-22 12:42 ` [Qemu-devel] [PATCH v2 1/6] migration: print features as on off Juan Quintela
2017-11-22 12:42 ` [Qemu-devel] [PATCH v2 2/6] migration: free addr in the same function that we created it Juan Quintela
2017-11-22 12:42 ` [Qemu-devel] [PATCH v2 3/6] migration: Create uri parameter Juan Quintela
2017-11-22 13:02   ` Daniel P. Berrange
2017-11-22 12:42 ` [Qemu-devel] [PATCH v2 4/6] migration: Now set the migration uri Juan Quintela
2017-11-22 12:42 ` [Qemu-devel] [PATCH v2 5/6] migration: make migrate uri parameter optional Juan Quintela
2017-11-22 12:42 ` Juan Quintela [this message]
2017-11-22 13:25 ` [Qemu-devel] [PATCH v2 0/6] Improve info migrate output on destination no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171122124219.12954-7-quintela@redhat.com \
    --to=quintela@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.