From patchwork Fri Mar 11 16:37:48 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= X-Patchwork-Id: 8567661 Return-Path: X-Original-To: patchwork-qemu-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id D5ED09F1C0 for ; Fri, 11 Mar 2016 16:44:51 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2213E201B4 for ; Fri, 11 Mar 2016 16:44:51 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2F8A520268 for ; Fri, 11 Mar 2016 16:44:50 +0000 (UTC) Received: from localhost ([::1]:56428 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aeQBF-0002Qq-I9 for patchwork-qemu-devel@patchwork.kernel.org; Fri, 11 Mar 2016 11:44:49 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53975) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aeQ58-00084C-Je for qemu-devel@nongnu.org; Fri, 11 Mar 2016 11:38:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aeQ57-0005Ol-Bn for qemu-devel@nongnu.org; Fri, 11 Mar 2016 11:38:30 -0500 Received: from mx1.redhat.com ([209.132.183.28]:52198) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aeQ57-0005Of-3U for qemu-devel@nongnu.org; Fri, 11 Mar 2016 11:38:29 -0500 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id B687264D04 for ; Fri, 11 Mar 2016 16:38:28 +0000 (UTC) Received: from t530wlan.home.berrange.com.com (vpn1-6-25.ams2.redhat.com [10.36.6.25]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u2BGc5Oo002899; Fri, 11 Mar 2016 11:38:27 -0500 From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Fri, 11 Mar 2016 16:37:48 +0000 Message-Id: <1457714282-6981-15-git-send-email-berrange@redhat.com> In-Reply-To: <1457714282-6981-1-git-send-email-berrange@redhat.com> References: <1457714282-6981-1-git-send-email-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Fri, 11 Mar 2016 16:38:28 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Cc: Amit Shah , "Dr. David Alan Gilbert" , Juan Quintela Subject: [Qemu-devel] [PATCH v4 14/28] migration: convert tcp socket protocol to use QIOChannel X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Drop the current TCP socket migration driver and extend the new generic socket driver to cope with the TCP address format Reviewed-by: Dr. David Alan Gilbert Signed-off-by: Daniel P. Berrange --- migration/Makefile.objs | 2 +- migration/socket.c | 31 +++++++++++++++ migration/tcp.c | 103 ------------------------------------------------ 3 files changed, 32 insertions(+), 104 deletions(-) delete mode 100644 migration/tcp.c diff --git a/migration/Makefile.objs b/migration/Makefile.objs index 9d83997..59e8c09 100644 --- a/migration/Makefile.objs +++ b/migration/Makefile.objs @@ -1,4 +1,4 @@ -common-obj-y += migration.o tcp.o socket.o +common-obj-y += migration.o socket.o common-obj-y += vmstate.o common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o common-obj-y += qemu-file-channel.o diff --git a/migration/socket.c b/migration/socket.c index ef0a673..7e0d9ee 100644 --- a/migration/socket.c +++ b/migration/socket.c @@ -24,6 +24,23 @@ #include "trace.h" +static SocketAddress *tcp_build_address(const char *host_port, Error **errp) +{ + InetSocketAddress *iaddr = inet_parse(host_port, errp); + SocketAddress *saddr; + + if (!iaddr) { + return NULL; + } + + saddr = g_new0(SocketAddress, 1); + saddr->type = SOCKET_ADDRESS_KIND_INET; + saddr->u.inet = iaddr; + + return saddr; +} + + static SocketAddress *unix_build_address(const char *path) { SocketAddress *saddr; @@ -68,6 +85,14 @@ static void socket_start_outgoing_migration(MigrationState *s, qapi_free_SocketAddress(saddr); } +void tcp_start_outgoing_migration(MigrationState *s, + const char *host_port, + Error **errp) +{ + SocketAddress *saddr = tcp_build_address(host_port, errp); + socket_start_outgoing_migration(s, saddr, errp); +} + void unix_start_outgoing_migration(MigrationState *s, const char *path, Error **errp) @@ -124,6 +149,12 @@ static void socket_start_incoming_migration(SocketAddress *saddr, qapi_free_SocketAddress(saddr); } +void tcp_start_incoming_migration(const char *host_port, Error **errp) +{ + SocketAddress *saddr = tcp_build_address(host_port, errp); + socket_start_incoming_migration(saddr, errp); +} + void unix_start_incoming_migration(const char *path, Error **errp) { SocketAddress *saddr = unix_build_address(path); diff --git a/migration/tcp.c b/migration/tcp.c deleted file mode 100644 index 48904e0..0000000 --- a/migration/tcp.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * QEMU live migration - * - * Copyright IBM, Corp. 2008 - * - * Authors: - * Anthony Liguori - * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. - * - * Contributions after 2012-01-13 are licensed under the terms of the - * GNU GPL, version 2 or (at your option) any later version. - */ - -#include "qemu/osdep.h" - -#include "qemu-common.h" -#include "qemu/error-report.h" -#include "qemu/sockets.h" -#include "migration/migration.h" -#include "migration/qemu-file.h" -#include "block/block.h" -#include "qemu/main-loop.h" - -//#define DEBUG_MIGRATION_TCP - -#ifdef DEBUG_MIGRATION_TCP -#define DPRINTF(fmt, ...) \ - do { printf("migration-tcp: " fmt, ## __VA_ARGS__); } while (0) -#else -#define DPRINTF(fmt, ...) \ - do { } while (0) -#endif - -static void tcp_wait_for_connect(int fd, Error *err, void *opaque) -{ - MigrationState *s = opaque; - - if (fd < 0) { - DPRINTF("migrate connect error: %s\n", error_get_pretty(err)); - s->to_dst_file = NULL; - migrate_fd_error(s, err); - } else { - DPRINTF("migrate connect success\n"); - s->to_dst_file = qemu_fopen_socket(fd, "wb"); - migrate_fd_connect(s); - } -} - -void tcp_start_outgoing_migration(MigrationState *s, const char *host_port, Error **errp) -{ - inet_nonblocking_connect(host_port, tcp_wait_for_connect, s, errp); -} - -static void tcp_accept_incoming_migration(void *opaque) -{ - struct sockaddr_in addr; - socklen_t addrlen = sizeof(addr); - int s = (intptr_t)opaque; - QEMUFile *f; - int c, err; - - do { - c = qemu_accept(s, (struct sockaddr *)&addr, &addrlen); - err = socket_error(); - } while (c < 0 && err == EINTR); - qemu_set_fd_handler(s, NULL, NULL, NULL); - closesocket(s); - - DPRINTF("accepted migration\n"); - - if (c < 0) { - error_report("could not accept migration connection (%s)", - strerror(err)); - return; - } - - f = qemu_fopen_socket(c, "rb"); - if (f == NULL) { - error_report("could not qemu_fopen socket"); - goto out; - } - - process_incoming_migration(f); - return; - -out: - closesocket(c); -} - -void tcp_start_incoming_migration(const char *host_port, Error **errp) -{ - int s; - - s = inet_listen(host_port, NULL, 256, SOCK_STREAM, 0, errp); - if (s < 0) { - return; - } - - qemu_set_fd_handler(s, tcp_accept_incoming_migration, NULL, - (void *)(intptr_t)s); -}