From nobody Fri May 3 01:47:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1598971061; cv=none; d=zohomail.com; s=zohoarc; b=ZiG2D9eYjyVImj0H0O3iU3TxOrfr2RnDmJr4UXLDImjAgLwGxaxVyUKtPEO2Wvnwi9lz69pJKtkrv+6bePtV6B07u5ONJ3Z/p9WrXF8tGOtgRigZvpQqOo8uHihIgKXbtrM8VyeWQ0fzEiWMJNlayqYb5rDFOQvZ+T3W0mM3ZdA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598971061; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5PLs4bOSJqXq6Iw7ApfdsVSCC102/HwYvdbpjxHQIow=; b=QlNhcYzn9J2o+DYlLophEroXE4SL3zK6n4xhXXjHCXeBBKuxsSSKKWme2xfK2chTUAnJTLLn+r4UXiqXP54cWrgF6W/TJ5bW0an08WXD5HAWfsunhIIBxW8CHrwvjYXOjRaWeIe3NOJ97c3wqtmVA2PTuxHarS1UePuYBTuU/Uk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1598971061243712.3593417638805; Tue, 1 Sep 2020 07:37:41 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-287-W2UcUQB2N-6IMvU09Ztf9g-1; Tue, 01 Sep 2020 10:37:37 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 108981005E66; Tue, 1 Sep 2020 14:37:32 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E49A959; Tue, 1 Sep 2020 14:37:31 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id B36587A2F4; Tue, 1 Sep 2020 14:37:31 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 081Eb9mn016570 for ; Tue, 1 Sep 2020 10:37:09 -0400 Received: by smtp.corp.redhat.com (Postfix) id 72CE010023A7; Tue, 1 Sep 2020 14:37:09 +0000 (UTC) Received: from wheatley.localdomain (unknown [10.40.195.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 31A0D1002D52 for ; Tue, 1 Sep 2020 14:37:06 +0000 (UTC) Received: from wheatley.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 597687E0075 for ; Tue, 1 Sep 2020 16:37:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598971060; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=5PLs4bOSJqXq6Iw7ApfdsVSCC102/HwYvdbpjxHQIow=; b=ciOl8Lg4jdg34dvgsmw55bRjHKKKz8Hvuq22JsT8Og73eeKP/UHEbQYbekt0q1DROO16H2 iGQwCqmmEZ7hD5alVLHZ2B+qharLlmcOxFXBnehddfkiaHEKA22ytsbQDNgtPFfH8WQjFb REOjWLxh0G0ph2BRw8zbKMiLdGc4bdY= X-MC-Unique: W2UcUQB2N-6IMvU09Ztf9g-1 From: Martin Kletzander To: libvir-list@redhat.com Subject: [PATCH v2 1/9] qemu: Use g_autofree in qemuMigrationSrcConnect Date: Tue, 1 Sep 2020 16:36:52 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Martin Kletzander Reviewed-by: Jiri Denemark --- src/qemu/qemu_migration.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 142faa2cf997..60ddfde65d46 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3369,7 +3369,7 @@ qemuMigrationSrcConnect(virQEMUDriverPtr driver, { virNetSocketPtr sock; const char *host; - char *port =3D NULL; + g_autofree char *port =3D NULL; int ret =3D -1; =20 host =3D spec->dest.host.name; @@ -3400,7 +3400,6 @@ qemuMigrationSrcConnect(virQEMUDriverPtr driver, ret =3D 0; =20 cleanup: - VIR_FREE(port); if (ret < 0) VIR_FORCE_CLOSE(spec->dest.fd.qemu); return ret; --=20 2.28.0 From nobody Fri May 3 01:47:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) client-ip=205.139.110.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1598971065; cv=none; d=zohomail.com; s=zohoarc; b=niLZ73ew6InwuE6jO2wMpbxXYjwyo5LSqQgQUrXqs0Vu1ds51G5381r+IRBFrTFm/rme/NPKmX8IIBVYcPhzQ3HhvWgSf/PFDOxxkwIVFHzrNk7mcTpM0ShHBUlpWvkaFcbITaS8RUSwquaGGpfhWG0d+hZkwlZMjWLt8++P11M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598971065; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=iklfdl5AH/xUGGgg71Ak1SvK5sx/D1GfbdDUYqPt5ZY=; b=ejRTDzcC3wOihbxUk9x75xNEvl0EB6CMDZAjIt79zhdrvMxo7eRlqsojXD7Oer3q0K/tDszRpCRkKFRnojqucC/8K9I4YJFa5slIZWR4jUvrcy/VknXFelILZyXds2kQqmUYCfnTadoUcxMMppdfhJ9NdgV3Z2K8/5K49t8z3Pc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by mx.zohomail.com with SMTPS id 159897106523043.91333559833629; Tue, 1 Sep 2020 07:37:45 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-530-dNgipLLrO9KU60vBCKkocQ-1; Tue, 01 Sep 2020 10:37:39 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 59881189E604; Tue, 1 Sep 2020 14:37:34 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3B7807EB87; Tue, 1 Sep 2020 14:37:34 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 085A07A317; Tue, 1 Sep 2020 14:37:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 081Eb9Hc016575 for ; Tue, 1 Sep 2020 10:37:09 -0400 Received: by smtp.corp.redhat.com (Postfix) id B13EE7EB8F; Tue, 1 Sep 2020 14:37:09 +0000 (UTC) Received: from wheatley.localdomain (unknown [10.40.195.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8355A7EB87 for ; Tue, 1 Sep 2020 14:37:06 +0000 (UTC) Received: from wheatley.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 5B7B87E0078 for ; Tue, 1 Sep 2020 16:37:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598971063; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=iklfdl5AH/xUGGgg71Ak1SvK5sx/D1GfbdDUYqPt5ZY=; b=IDUvNCNTj6djyehu+ifyuTX4hnUeCKi7iqY4tUC0/3XhLeDrzbVk+NQA5OyETWxhIzD9fo NI2uHwK0a5+PR3Hg01lTtWp7+DghrhogP1fv01623NGXSdETn+Srx81A7b2tKxJ6ZdC8et Jvvis1pclOrnRztRr8gs6Mn+bu5EUEw= X-MC-Unique: dNgipLLrO9KU60vBCKkocQ-1 From: Martin Kletzander To: libvir-list@redhat.com Subject: [PATCH v2 2/9] qemu: Rework qemuMigrationSrcConnect Date: Tue, 1 Sep 2020 16:36:53 +0200 Message-Id: <4a6df3cec0b13e512bf05dbfcb6e1da2749173da.1598970960.git.mkletzan@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Instead of saving some data from a union up front and changing an overlayed struct before using said data, let's just set the new values after they are decided. This will increase the readability of future commit(s). Signed-off-by: Martin Kletzander Reviewed-by: Jiri Denemark --- src/qemu/qemu_migration.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 60ddfde65d46..1a3cdb71f424 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3368,24 +3368,24 @@ qemuMigrationSrcConnect(virQEMUDriverPtr driver, qemuMigrationSpecPtr spec) { virNetSocketPtr sock; - const char *host; g_autofree char *port =3D NULL; + int fd_qemu =3D -1; int ret =3D -1; =20 - host =3D spec->dest.host.name; - port =3D g_strdup_printf("%d", spec->dest.host.port); - - spec->destType =3D MIGRATION_DEST_FD; - spec->dest.fd.qemu =3D -1; - if (qemuSecuritySetSocketLabel(driver->securityManager, vm->def) < 0) goto cleanup; - if (virNetSocketNewConnectTCP(host, port, + port =3D g_strdup_printf("%d", spec->dest.host.port); + if (virNetSocketNewConnectTCP(spec->dest.host.name, + port, AF_UNSPEC, &sock) =3D=3D 0) { - spec->dest.fd.qemu =3D virNetSocketDupFD(sock, true); + fd_qemu =3D virNetSocketDupFD(sock, true); virObjectUnref(sock); } + + spec->destType =3D MIGRATION_DEST_FD; + spec->dest.fd.qemu =3D fd_qemu; + if (qemuSecurityClearSocketLabel(driver->securityManager, vm->def) < 0= || spec->dest.fd.qemu =3D=3D -1) goto cleanup; --=20 2.28.0 From nobody Fri May 3 01:47:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1598971056; cv=none; d=zohomail.com; s=zohoarc; b=lp/E+TBEC7z6j0RbEdjdMX8wd6XX+NQ7TsJDUbIxV1OPi/ICWxh2tGJJbjAHiVHke6A9uKd/tG7ObSwjjq+svslirU7L4GwnvKEiW9c39hXsU2ixt5dlMpPpDik0kk3b1OO8QXKB5UnAXqKaOAOjrhrFiyDhvtZaidEbCWYGpg4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598971056; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=GvdPGyqidhQncoHJxq4LqQXhTvrA9B2q85YP7oWA+Vg=; b=Fy2CkfeAMc/9IKMCRfeaxHHsRuGghlSEyhoQcqFc+EA8dXbiKhSWtMoE1JZU2ddNI2uzzNH5SN2RhN4V8yAwhUOaGyF9iJv2KYKwbhqOdb/OHrstspaD3/YW1rjl8wdjuEM8vTC/5ObL/BCL0Dj00bd7FPjEEktAGOIK3W1yyQw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1598971056310697.388898116356; Tue, 1 Sep 2020 07:37:36 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-161-KolxFQBQNdiTOT70g33eGw-1; Tue, 01 Sep 2020 10:37:33 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3BAFE10ABDAD; Tue, 1 Sep 2020 14:37:27 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1C9306198E; Tue, 1 Sep 2020 14:37:27 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D6C83181A87F; Tue, 1 Sep 2020 14:37:26 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 081Eb9tN016556 for ; Tue, 1 Sep 2020 10:37:09 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4F1E47C5A0; Tue, 1 Sep 2020 14:37:09 +0000 (UTC) Received: from wheatley.localdomain (unknown [10.40.195.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0D3F17DA43 for ; Tue, 1 Sep 2020 14:37:06 +0000 (UTC) Received: from wheatley.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 5D4AD7E007D for ; Tue, 1 Sep 2020 16:37:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598971055; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=GvdPGyqidhQncoHJxq4LqQXhTvrA9B2q85YP7oWA+Vg=; b=YXkqI74ycmOEmuLsyWO7JQ1KbhZHy2192AMjah3FThOmZqsjdLhZMXHcU9bTsCdxSXELdJ XxGYScAeYIK6cBXnYvBs/NPCfvlntrntb7egjQ/AIn+1BwD/UcxrZcgVf70MWrACpzfm63 GLqpyXLtS+0FqHAXo5Ch7bomqi96pgc= X-MC-Unique: KolxFQBQNdiTOT70g33eGw-1 From: Martin Kletzander To: libvir-list@redhat.com Subject: [PATCH v2 3/9] virsh: Reuse existing variable when parsing migrate --disks-port Date: Tue, 1 Sep 2020 16:36:54 +0200 Message-Id: <1e244848c499f9c9fdb252db3083c60b259de387.1598970960.git.mkletzan@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Martin Kletzander Reviewed-by: Jiri Denemark --- tools/virsh-domain.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 36581d2c31d2..8a4a0d172dc9 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -10708,7 +10708,6 @@ doMigrate(void *opaque) virDomainPtr dom =3D NULL; const char *desturi =3D NULL; const char *opt =3D NULL; - int disksPort =3D 0; unsigned int flags =3D 0; virshCtrlData *data =3D opaque; vshControl *ctl =3D data->ctl; @@ -10756,11 +10755,11 @@ doMigrate(void *opaque) VIR_MIGRATE_PARAM_LISTEN_ADDRESS, opt) < 0) goto save_error; =20 - if (vshCommandOptInt(ctl, cmd, "disks-port", &disksPort) < 0) + if (vshCommandOptInt(ctl, cmd, "disks-port", &intOpt) < 0) goto out; - if (disksPort && + if (intOpt && virTypedParamsAddInt(¶ms, &nparams, &maxparams, - VIR_MIGRATE_PARAM_DISKS_PORT, disksPort) < 0) + VIR_MIGRATE_PARAM_DISKS_PORT, intOpt) < 0) goto save_error; =20 if (vshCommandOptStringReq(ctl, cmd, "dname", &opt) < 0) --=20 2.28.0 From nobody Fri May 3 01:47:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1598971058; cv=none; d=zohomail.com; s=zohoarc; b=BbRP55kFFRxS9CwyCWKuGPiJ7CVRlIWW9jUWCOSeGusJiwWQiqKDI4RIxUhYjR11gLepnHsKGC3sO822zfTyd2m7XTRRAAlBxqkoG+etBZVR/JIenU3ZvjsgToACP1TC4e64IBk4mX9VrLpluJPR+PidDhbEri8kxPF9qwFGFhs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598971058; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZT4yys1uXf1ZNpTHGrBV0DO7GCw/C5v0bjhUx6+XZ00=; b=nKzEzsuJHe1HKE9FrD1kIyfkSy94hGJNpQJw4cMSJLCiHN7OeEF0v5G1kfS4CPjNTgsTT05Cqh6hseo/L/zpk1MaHwelilFltaDlrPn/nAdffN33dKXZyhrereetVO+CJakmZXhmakjTDnUgc3HZ1xP0fgpmOlxEp6TLQgT/Gx4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1598971058898363.4865849401707; Tue, 1 Sep 2020 07:37:38 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-3-PvNZK_4vPmu86eSwCpBGoQ-1; Tue, 01 Sep 2020 10:37:35 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A866C10ABDB1; Tue, 1 Sep 2020 14:37:29 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8379610023A7; Tue, 1 Sep 2020 14:37:29 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 54F687A2E7; Tue, 1 Sep 2020 14:37:29 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 081Eb9w0016557 for ; Tue, 1 Sep 2020 10:37:09 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4E57F5C1C4; Tue, 1 Sep 2020 14:37:09 +0000 (UTC) Received: from wheatley.localdomain (unknown [10.40.195.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1140A5C1BB for ; Tue, 1 Sep 2020 14:37:06 +0000 (UTC) Received: from wheatley.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 699077E0080 for ; Tue, 1 Sep 2020 16:37:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598971058; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=ZT4yys1uXf1ZNpTHGrBV0DO7GCw/C5v0bjhUx6+XZ00=; b=Uhqbv2Vl6rqwtvQvJ33hQD+PiIbip/bNApIPpyJeXGhhDBmUkgyDEx0tLLwKAUPsdqv6zW CXdXxPV4Z8axBG6ocMbi0FCpg5ze3ffYrsnF8KfK2z4XwMaVroGfds06ywR9gnO7KUsop7 BYP0ve2LwJqTpjX0DPCe1PcxrK4DppE= X-MC-Unique: PvNZK_4vPmu86eSwCpBGoQ-1 From: Martin Kletzander To: libvir-list@redhat.com Subject: [PATCH v2 4/9] qemu: Rework starting NBD server for migration Date: Tue, 1 Sep 2020 16:36:55 +0200 Message-Id: <34c27488366dee548030b14dfca1950da917786f.1598970960.git.mkletzan@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Clean up the semantics by using one extra self-describing variable. This also fixes the port allocation when the port is specified. Signed-off-by: Martin Kletzander Reviewed-by: Jiri Denemark --- src/qemu/qemu_migration.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 1a3cdb71f424..b887185d012d 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -383,12 +383,13 @@ qemuMigrationDstStartNBDServer(virQEMUDriverPtr drive= r, { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; - unsigned short port =3D 0; size_t i; virStorageNetHostDef server =3D { .name =3D (char *)listenAddr, /* cast away const */ .transport =3D VIR_STORAGE_NET_HOST_TRANS_TCP, + .port =3D nbdPort, }; + bool server_started =3D false; =20 if (nbdPort < 0 || nbdPort > USHRT_MAX) { virReportError(VIR_ERR_INVALID_ARG, "%s", @@ -424,20 +425,27 @@ qemuMigrationDstStartNBDServer(virQEMUDriverPtr drive= r, devicename =3D diskAlias; } =20 + if (!server_started) { + if (server.port) { + if (virPortAllocatorSetUsed(server.port) < 0) + goto cleanup; + } else { + unsigned short port =3D 0; + + if (virPortAllocatorAcquire(driver->migrationPorts, &port)= < 0) + goto cleanup; + + server.port =3D port; + } + } + if (qemuDomainObjEnterMonitorAsync(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN) < = 0) goto cleanup; =20 - if (port =3D=3D 0) { - if (nbdPort) - port =3D nbdPort; - else if (virPortAllocatorAcquire(driver->migrationPorts, &port= ) < 0) - goto exit_monitor; - - server.port =3D port; - if (qemuMonitorNBDServerStart(priv->mon, &server, tls_alias) <= 0) - goto exit_monitor; - } + if (!server_started && + qemuMonitorNBDServerStart(priv->mon, &server, tls_alias) < 0) + goto exit_monitor; =20 if (qemuMonitorNBDServerAdd(priv->mon, devicename, exportname, tru= e, NULL) < 0) goto exit_monitor; @@ -445,12 +453,13 @@ qemuMigrationDstStartNBDServer(virQEMUDriverPtr drive= r, goto cleanup; } =20 - priv->nbdPort =3D port; + priv->nbdPort =3D server.port; + ret =3D 0; =20 cleanup: - if (ret < 0 && nbdPort =3D=3D 0) - virPortAllocatorRelease(port); + if (ret < 0) + virPortAllocatorRelease(server.port); return ret; =20 exit_monitor: --=20 2.28.0 From nobody Fri May 3 01:47:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1598971076; cv=none; d=zohomail.com; s=zohoarc; b=PuNH4MTMk6t8bjTjjRKhigedl0ef256f0VO+1av2mhEk1QCp1nk3d7OF2y5PM/tSuQ9CZB1OTUzSfBjTYEebLQU/KzJ8BqFDRuH9OUb96vrhT4WlaZLgjRsmjOm67RJ7RsgHcg0TmcQsv0tBDWxjkwHNfGFn5Tjot9+jIH6bMGE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598971076; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=q5kVkpfVbfTdJPkOw4wQgcYmP4vFlV7zp0a+ce++HR8=; b=AI/FqSrm0ApAe5Zvqq2rNJnFJcBgpZaYOdeIecIT+iz32/qlwf3qyGUO0kcQXx/nDbGcVqfoFAqF/Iakb6lFitaDZLOVbm3CpY/MQX9AcutH0MQ3SxOKPLf2+R6ZYumTBS938NhpR0WJjNCVpw0KOT6peK58BRAVuO8s78rOrZg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1598971076107919.5449054862707; Tue, 1 Sep 2020 07:37:56 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-455-YOsY-dydOTq4ywYzLTk88g-1; Tue, 01 Sep 2020 10:37:52 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B9ACF1DDF9; Tue, 1 Sep 2020 14:37:44 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 99DE25C1A3; Tue, 1 Sep 2020 14:37:44 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 66EFF1826D2A; Tue, 1 Sep 2020 14:37:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 081EbEUh016648 for ; Tue, 1 Sep 2020 10:37:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3BCA219C59; Tue, 1 Sep 2020 14:37:14 +0000 (UTC) Received: from wheatley.localdomain (unknown [10.40.195.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D89EE19C4F for ; Tue, 1 Sep 2020 14:37:11 +0000 (UTC) Received: from wheatley.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 6BBF97E0082 for ; Tue, 1 Sep 2020 16:37:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598971074; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=q5kVkpfVbfTdJPkOw4wQgcYmP4vFlV7zp0a+ce++HR8=; b=dnpgw1kC3fBxxQ225DH7vqP/8Pb6wiyvXPWl8MJVL9UQNdkjtCkIMMjYfZyJjzg29UE9Rc Gsu9z12nJzBJq0hfJ0tNgnLI6J6ys+yyO8Vf87SBelj6el+pxsEqlN6fAE7uIBgJxtSOV0 SMmL701zfZ57lKsIzJGZgiv9uKcCNH0= X-MC-Unique: YOsY-dydOTq4ywYzLTk88g-1 From: Martin Kletzander To: libvir-list@redhat.com Subject: [PATCH v2 5/9] tests: Add simple test for virDomainMigrateCheckNotLocal Date: Tue, 1 Sep 2020 16:36:56 +0200 Message-Id: <6d1374d5394f734487319050b0105be7f7b5ad0d.1598970960.git.mkletzan@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" For this we need to make the function accessible (at least privately). The behaviour will change in following patches and the test helps explaining the change. Signed-off-by: Martin Kletzander Reviewed-by: Jiri Denemark --- scripts/apibuild.py | 1 + src/libvirt-domain.c | 3 +- src/libvirt_internal.h | 2 + src/libvirt_private.syms | 1 + tests/meson.build | 1 + tests/virmigtest.c | 91 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 tests/virmigtest.c diff --git a/scripts/apibuild.py b/scripts/apibuild.py index 58ae76d29cfc..b94c0f6c09dd 100755 --- a/scripts/apibuild.py +++ b/scripts/apibuild.py @@ -81,6 +81,7 @@ ignored_words =3D { =20 ignored_functions =3D { "virConnectSupportsFeature": "private function for remote access", + "virDomainMigrateCheckNotLocal": "private function for migration", "virDomainMigrateFinish": "private function for migration", "virDomainMigrateFinish2": "private function for migration", "virDomainMigratePerform": "private function for migration", diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index ad60a92da879..da5a21e4c4d4 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -3269,8 +3269,7 @@ virDomainMigrateVersion3Params(virDomainPtr domain, params, nparams, true, flags); } =20 - -static int +int virDomainMigrateCheckNotLocal(const char *dconnuri) { g_autoptr(virURI) tempuri =3D NULL; diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h index 72c61274a74e..cb239b3c1c44 100644 --- a/src/libvirt_internal.h +++ b/src/libvirt_internal.h @@ -129,6 +129,8 @@ typedef enum { =20 int virConnectSupportsFeature(virConnectPtr conn, int feature); =20 +int virDomainMigrateCheckNotLocal(const char *dconnuri); + int virDomainMigratePrepare (virConnectPtr dconn, char **cookie, int *cookielen, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index f950a681792c..2f6d67cebe07 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1481,6 +1481,7 @@ virHostdevUpdateActiveUSBDevices; virConnectSupportsFeature; virDomainMigrateBegin3; virDomainMigrateBegin3Params; +virDomainMigrateCheckNotLocal; virDomainMigrateConfirm3; virDomainMigrateConfirm3Params; virDomainMigrateFinish; diff --git a/tests/meson.build b/tests/meson.build index b5f6e2267aaf..49bcf5eb8a8d 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -331,6 +331,7 @@ tests +=3D [ { 'name': 'virtypedparamtest' }, { 'name': 'viruritest' }, { 'name': 'vshtabletest', 'link_with': [ libvirt_shell_lib ] }, + { 'name': 'virmigtest' }, ] =20 if host_machine.system() =3D=3D 'linux' diff --git a/tests/virmigtest.c b/tests/virmigtest.c new file mode 100644 index 000000000000..df8d51bab94b --- /dev/null +++ b/tests/virmigtest.c @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2020 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#include + +#include "libvirt_internal.h" + +#include "testutils.h" +#include "virlog.h" +#include "viruri.h" + +#define VIR_FROM_THIS VIR_FROM_RPC + +VIR_LOG_INIT("tests.migtest"); + +struct migLocalData { + const char *uri; + bool fail; +}; + + +static int +testMigNotLocal(const void *args) +{ + int ret =3D -1; + const struct migLocalData *data =3D args; + + ret =3D virDomainMigrateCheckNotLocal(data->uri); + + if (ret =3D=3D -1) { + if (data->fail) { + virResetLastError(); + return 0; + } + return -1; + } + + if (data->fail) { + VIR_TEST_DEBUG("passed instead of expected failure"); + return -1; + } + + return ret; +} + + +static int +mymain(void) +{ + int ret =3D 0; + +#define TEST_FULL(uri, fail) \ + do { \ + const struct migLocalData data =3D { \ + uri, fail \ + }; \ + if (virTestRun("Test URI " # uri, testMigNotLocal, &data) < 0) \ + ret =3D -1; \ + } while (0) + +#define TEST(uri) TEST_FULL(uri, false) +#define TEST_FAIL(uri) TEST_FULL(uri, true) + + TEST_FAIL("qemu:///system"); + + TEST_FAIL("//localhost"); + TEST_FAIL("tcp://localhost.localdomain/"); + + TEST("scheme://some.cryptorandom.fqdn.tld"); + + TEST_FAIL("hehe+unix:///?socket=3D/path/to/some-sock"); + + return ret =3D=3D 0 ? EXIT_SUCCESS : EXIT_FAILURE; +} + +VIR_TEST_MAIN(mymain) --=20 2.28.0 From nobody Fri May 3 01:47:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1598971093; cv=none; d=zohomail.com; s=zohoarc; b=etFKmd9mq8Fte0bkIAgLLuBb5P2C8AxRUyXBzW6VdLz8/aNcdB93jtXvN8aE5gpnCBPhiq3Yj/HzTFRf6AJpjJL8O0Cce+eyJnytUW/NbcaGPRBBLyqPYL5fvrl58JcanHoyWrRQxkqXDpH+oSv4bwEzFcIOO0OwDVL8KYSsGc0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598971093; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=zuC5lJhtkG/E6oN1mEN74rrkSOgCDHnPpfqnHuFMAEo=; b=avFA8tuhjY9GkZRTbnjkCVvHHkqPpE1dVVf7IZAm5n6JWWYznKRw7XPX/tPOFn17GgkIauz511CzMQX6FA7kQwoXh7JmmWeLgraNVQUrPcBEil7AfLdws+3P2vpXky5KufRHVSxu1r9Uy2eiFgbhpBz4LWMFvzo0Yf1/+ybbc18= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1598971093168701.7925761991249; Tue, 1 Sep 2020 07:38:13 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-521-0X8LvPWmOQCJFuWE_FZjYg-1; Tue, 01 Sep 2020 10:37:49 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 12D131DDF5; Tue, 1 Sep 2020 14:37:42 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E51EC5D9CC; Tue, 1 Sep 2020 14:37:41 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id B54277A31E; Tue, 1 Sep 2020 14:37:41 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 081EbCnh016619 for ; Tue, 1 Sep 2020 10:37:12 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4F0EB7EB8F; Tue, 1 Sep 2020 14:37:12 +0000 (UTC) Received: from wheatley.localdomain (unknown [10.40.195.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3570B7EB87 for ; Tue, 1 Sep 2020 14:37:11 +0000 (UTC) Received: from wheatley.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 7AF347E0084 for ; Tue, 1 Sep 2020 16:37:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598971092; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=zuC5lJhtkG/E6oN1mEN74rrkSOgCDHnPpfqnHuFMAEo=; b=DcCYhX3QUZlMGUU7PcqrhNSnHCGJUPY01QW0uQQjo3PjQolqtKk09vmM0SYua4xa/SolNo Dc6CWskuiG3blXZIdPhfvJvrHHeqaB40iKzw3/RIs8k4BMCyK6XBhp2QfAGqOaekGphDau V1WuCqkLlz3LecYYtKPfnP4SAJQb+Vk= X-MC-Unique: 0X8LvPWmOQCJFuWE_FZjYg-1 From: Martin Kletzander To: libvir-list@redhat.com Subject: [PATCH v2 6/9] qemu: Allow NBD migration over UNIX socket Date: Tue, 1 Sep 2020 16:36:57 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Adds new typed param for migration and uses this as a UNIX socket path that should be used for the NBD part of migration. And also adds virsh support. Partially resolves: https://bugzilla.redhat.com/1638889 Signed-off-by: Martin Kletzander Reviewed-by: Jiri Denemark --- docs/manpages/virsh.rst | 11 ++ include/libvirt/libvirt-domain.h | 13 +++ src/qemu/qemu_driver.c | 33 +++++- src/qemu/qemu_migration.c | 170 ++++++++++++++++++++++++------- src/qemu/qemu_migration.h | 3 + src/qemu/qemu_migration_cookie.c | 3 +- tools/virsh-domain.c | 12 +++ 7 files changed, 205 insertions(+), 40 deletions(-) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 8e2fb7039046..12357ea4ee86 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -3113,6 +3113,7 @@ migrate [--postcopy-bandwidth bandwidth] [--parallel [--parallel-connections connections]] [--bandwidth bandwidth] [--tls-destination hostname] + [--disks-socket socket-path] =20 Migrate domain to another host. Add *--live* for live migration; <--p2p> for peer-2-peer migration; *--direct* for direct migration; or *--tunnelle= d* @@ -3292,6 +3293,16 @@ error if this parameter is used. Optional *disks-port* sets the port that hypervisor on destination side sh= ould bind to for incoming disks traffic. Currently it is supported only by QEMU. =20 +Optional *disks-uri* can also be specified (mutually exclusive with +*disks-port*) to specify what the remote hypervisor should bind/connect to= when +migrating disks. This can be *tcp://address:port* to specify a listen add= ress +(which overrides *--listen-address* for the disk migration) and a port or +*unix:///path/to/socket* in case you need the disk migration to happen ove= r a +UNIX socket with that specified path. In this case you need to make sure = the +same socket path is accessible to both source and destination hypervisors = and +connecting to the socket on the source (after hypervisor creates it on the +destination) will actually connect to the destination. + =20 migrate-compcache ----------------- diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index 8b9d9c110c19..77f9116675af 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -981,6 +981,19 @@ typedef enum { */ # define VIR_MIGRATE_PARAM_DISKS_PORT "disks_port" =20 +/** + * VIR_MIGRATE_PARAM_DISKS_URI: + * + * virDomainMigrate* params field: URI used for incoming disks migration. = Type + * is VIR_TYPED_PARAM_STRING. Only schemes "tcp" and "unix" are accepted. = TCP + * URI can currently only provide a server and port to listen on (and conn= ect + * to), UNIX URI may only provide a path component for a UNIX socket. This= is + * currently only supported by the QEMU driver. UNIX URI is only usable i= f the + * management application makes sure that socket created with this name on= the + * destination will be reachable from the source under the same exact path. + */ +# define VIR_MIGRATE_PARAM_DISKS_URI "disks_uri" + /** * VIR_MIGRATE_PARAM_COMPRESSION: * diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 3636716ceea1..08b6b853de47 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -11233,7 +11233,7 @@ qemuDomainMigratePrepare2(virConnectPtr dconn, ret =3D qemuMigrationDstPrepareDirect(driver, dconn, NULL, 0, NULL, NULL, /* No cookies= */ uri_in, uri_out, - &def, origname, NULL, 0, NULL, 0, + &def, origname, NULL, 0, NULL, 0, = NULL, migParams, flags); =20 cleanup: @@ -11289,6 +11289,7 @@ qemuDomainMigratePerform(virDomainPtr dom, */ ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, NULL, NULL, dconnuri, uri, NULL, NULL, 0, NULL= , 0, + NULL, migParams, cookie, cookielen, NULL, NULL, /* No output cookies in v2 */ flags, dname, resource, false); @@ -11459,7 +11460,7 @@ qemuDomainMigratePrepare3(virConnectPtr dconn, cookieout, cookieoutlen, uri_in, uri_out, &def, origname, NULL, 0, NULL, 0, - migParams, flags); + NULL, migParams, flags); } =20 static int @@ -11485,6 +11486,7 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, g_autofree const char **migrate_disks =3D NULL; g_autofree char *origname =3D NULL; g_autoptr(qemuMigrationParams) migParams =3D NULL; + const char *nbdSocketPath =3D NULL; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); if (virTypedParamsValidate(params, nparams, QEMU_MIGRATION_PARAMETERS)= < 0) @@ -11502,6 +11504,9 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_LISTEN_ADDRESS, &listenAddress) < 0 || + virTypedParamsGetString(params, nparams, + VIR_MIGRATE_PARAM_DISKS_URI, + &nbdSocketPath) < 0 || virTypedParamsGetInt(params, nparams, VIR_MIGRATE_PARAM_DISKS_PORT, &nbdPort) < 0) @@ -11518,6 +11523,13 @@ qemuDomainMigratePrepare3Params(virConnectPtr dcon= n, QEMU_MIGRATION_DESTINAT= ION))) return -1; =20 + if (nbdSocketPath && nbdPort) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Both port and socket requested for disk migratio= n " + "while being mutually exclusive")); + return -1; + } + if (flags & VIR_MIGRATE_TUNNELLED) { /* this is a logical error; we never should have gotten here with * VIR_MIGRATE_TUNNELLED set @@ -11540,7 +11552,7 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, uri_in, uri_out, &def, origname, listenAddress, nmigrate_disks, migrate_disks, nb= dPort, - migParams, flags); + nbdSocketPath, migParams, flags); } =20 =20 @@ -11682,7 +11694,7 @@ qemuDomainMigratePerform3(virDomainPtr dom, =20 ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, xmlin, NULL, dconnuri, uri, NULL, NULL, 0, NULL, 0, - migParams, + NULL, migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, dname, resource, true); @@ -11716,6 +11728,7 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, unsigned long long bandwidth =3D 0; int nbdPort =3D 0; g_autoptr(qemuMigrationParams) migParams =3D NULL; + const char *nbdSocketPath =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); @@ -11743,11 +11756,21 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, virTypedParamsGetInt(params, nparams, VIR_MIGRATE_PARAM_DISKS_PORT, &nbdPort) < 0 || + virTypedParamsGetString(params, nparams, + VIR_MIGRATE_PARAM_DISKS_URI, + &nbdSocketPath) < 0 || virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_PERSIST_XML, &persist_xml) < 0) goto cleanup; =20 + if (nbdSocketPath && nbdPort) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Both port and socket requested for disk migratio= n " + "while being mutually exclusive")); + goto cleanup; + } + nmigrate_disks =3D virTypedParamsGetStringList(params, nparams, VIR_MIGRATE_PARAM_MIGRATE= _DISKS, &migrate_disks); @@ -11768,7 +11791,7 @@ qemuDomainMigratePerform3Params(virDomainPtr dom, ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, dom_xml, persis= t_xml, dconnuri, uri, graphicsuri, listenAddres= s, nmigrate_disks, migrate_disks, nbdPort, - migParams, + nbdSocketPath, migParams, cookiein, cookieinlen, cookieout, cookie= outlen, flags, dname, bandwidth, true); cleanup: diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index b887185d012d..7277f2f458a2 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -379,6 +379,7 @@ qemuMigrationDstStartNBDServer(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, + const char *nbdURI, const char *tls_alias) { int ret =3D -1; @@ -390,8 +391,44 @@ qemuMigrationDstStartNBDServer(virQEMUDriverPtr driver, .port =3D nbdPort, }; bool server_started =3D false; + g_autoptr(virURI) uri =3D NULL; + + /* Prefer nbdURI */ + if (nbdURI) { + uri =3D virURIParse(nbdURI); =20 - if (nbdPort < 0 || nbdPort > USHRT_MAX) { + if (!uri) + return -1; + + if (STREQ(uri->scheme, "tcp")) { + server.transport =3D VIR_STORAGE_NET_HOST_TRANS_TCP; + if (!uri->server || STREQ(uri->server, "")) { + /* Since tcp://:/ is parsed as server =3D NULL and p= ort =3D 0 + * we should rather error out instead of auto-allocating a= port + * as that would be the exact opposite of what was request= ed. */ + virReportError(VIR_ERR_INVALID_ARG, + _("URI with tcp scheme did not provide a se= rver part: %s"), + nbdURI); + return -1; + } + server.name =3D (char *)uri->server; + if (uri->port) + server.port =3D uri->port; + } else if (STREQ(uri->scheme, "unix")) { + if (!uri->path) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("UNIX disks URI does not include path")); + return -1; + } + server.transport =3D VIR_STORAGE_NET_HOST_TRANS_UNIX; + server.socket =3D (char *)uri->path; + } else { + virReportError(VIR_ERR_INVALID_ARG, + _("Unsupported scheme in disks URI: %s"), + uri->scheme); + return -1; + } + } else if (nbdPort < 0 || nbdPort > USHRT_MAX) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("nbd port must be in range 0-65535")); return -1; @@ -425,7 +462,8 @@ qemuMigrationDstStartNBDServer(virQEMUDriverPtr driver, devicename =3D diskAlias; } =20 - if (!server_started) { + if (!server_started && + server.transport =3D=3D VIR_STORAGE_NET_HOST_TRANS_TCP) { if (server.port) { if (virPortAllocatorSetUsed(server.port) < 0) goto cleanup; @@ -453,7 +491,8 @@ qemuMigrationDstStartNBDServer(virQEMUDriverPtr driver, goto cleanup; } =20 - priv->nbdPort =3D server.port; + if (server.transport =3D=3D VIR_STORAGE_NET_HOST_TRANS_TCP) + priv->nbdPort =3D server.port; =20 ret =3D 0; =20 @@ -793,6 +832,7 @@ static virStorageSourcePtr qemuMigrationSrcNBDStorageCopyBlockdevPrepareSource(virDomainDiskDefPtr di= sk, const char *host, int port, + const char *socket, const char *tlsAlias) { g_autoptr(virStorageSource) copysrc =3D NULL; @@ -813,9 +853,14 @@ qemuMigrationSrcNBDStorageCopyBlockdevPrepareSource(vi= rDomainDiskDefPtr disk, copysrc->hosts =3D g_new0(virStorageNetHostDef, 1); =20 copysrc->nhosts =3D 1; - copysrc->hosts->transport =3D VIR_STORAGE_NET_HOST_TRANS_TCP; - copysrc->hosts->port =3D port; - copysrc->hosts->name =3D g_strdup(host); + if (socket) { + copysrc->hosts->transport =3D VIR_STORAGE_NET_HOST_TRANS_UNIX; + copysrc->hosts->socket =3D g_strdup(socket); + } else { + copysrc->hosts->transport =3D VIR_STORAGE_NET_HOST_TRANS_TCP; + copysrc->hosts->port =3D port; + copysrc->hosts->name =3D g_strdup(host); + } =20 copysrc->tlsAlias =3D g_strdup(tlsAlias); =20 @@ -835,6 +880,7 @@ qemuMigrationSrcNBDStorageCopyBlockdev(virQEMUDriverPtr= driver, bool persistjob, const char *host, int port, + const char *socket, unsigned long long mirror_speed, unsigned int mirror_shallow, const char *tlsAlias) @@ -846,7 +892,7 @@ qemuMigrationSrcNBDStorageCopyBlockdev(virQEMUDriverPtr= driver, =20 VIR_DEBUG("starting blockdev mirror for disk=3D%s to host=3D%s", disk-= >dst, host); =20 - if (!(copysrc =3D qemuMigrationSrcNBDStorageCopyBlockdevPrepareSource(= disk, host, port, tlsAlias))) + if (!(copysrc =3D qemuMigrationSrcNBDStorageCopyBlockdevPrepareSource(= disk, host, port, socket, tlsAlias))) return -1; =20 /* Migration via blockdev-mirror was supported sooner than the auto-re= ad-only @@ -885,13 +931,17 @@ qemuMigrationSrcNBDStorageCopyDriveMirror(virQEMUDriv= erPtr driver, const char *diskAlias, const char *host, int port, + const char *socket, unsigned long long mirror_speed, bool mirror_shallow) { g_autofree char *nbd_dest =3D NULL; int mon_ret; =20 - if (strchr(host, ':')) { + if (socket) { + nbd_dest =3D g_strdup_printf("nbd+unix:///%s?socket=3D%s", + diskAlias, socket); + } else if (strchr(host, ':')) { nbd_dest =3D g_strdup_printf("nbd:[%s]:%d:exportname=3D%s", host, = port, diskAlias); } else { @@ -920,6 +970,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driv= er, virDomainDiskDefPtr disk, const char *host, int port, + const char *socket, unsigned long long mirror_speed, bool mirror_shallow, const char *tlsAlias, @@ -958,13 +1009,13 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr d= river, rc =3D qemuMigrationSrcNBDStorageCopyBlockdev(driver, vm, disk, jobname, sourcename, persistjob, - host, port, + host, port, socket, mirror_speed, mirror_shallow, tlsAlias); } else { rc =3D qemuMigrationSrcNBDStorageCopyDriveMirror(driver, vm, diskA= lias, - host, port, + host, port, socket, mirror_speed, mirror_shallow); } @@ -1014,6 +1065,7 @@ qemuMigrationSrcNBDStorageCopy(virQEMUDriverPtr drive= r, const char **migrate_disks, virConnectPtr dconn, const char *tlsAlias, + const char *nbdURI, unsigned int flags) { qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -1023,6 +1075,8 @@ qemuMigrationSrcNBDStorageCopy(virQEMUDriverPtr drive= r, bool mirror_shallow =3D *migrate_flags & QEMU_MONITOR_MIGRATE_NON_SHAR= ED_INC; int rv; g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); + g_autoptr(virURI) uri =3D NULL; + const char *socket =3D NULL; =20 VIR_DEBUG("Starting drive mirrors for domain %s", vm->def->name); =20 @@ -1038,6 +1092,33 @@ qemuMigrationSrcNBDStorageCopy(virQEMUDriverPtr driv= er, port =3D mig->nbd->port; mig->nbd->port =3D 0; =20 + if (nbdURI) { + uri =3D virURIParse(nbdURI); + if (!uri) + return -1; + + if (STREQ(uri->scheme, "tcp")) { + if (uri->server && STRNEQ(uri->server, "")) + host =3D (char *)uri->server; + if (uri->port) + port =3D uri->port; + } else if (STREQ(uri->scheme, "unix")) { + if (!uri->path) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("UNIX disks URI does not include path")); + return -1; + } + socket =3D uri->path; + + if (qemuSecurityDomainSetPathLabel(driver, vm, socket, false) = < 0) + return -1; + } else { + virReportError(VIR_ERR_INVALID_ARG, + _("Unsupported scheme in disks URI: %s"), + uri->scheme); + } + } + for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; =20 @@ -1046,6 +1127,7 @@ qemuMigrationSrcNBDStorageCopy(virQEMUDriverPtr drive= r, continue; =20 if (qemuMigrationSrcNBDStorageCopyOne(driver, vm, disk, host, port, + socket, mirror_speed, mirror_shallow, tlsAlias, flags) < 0) return -1; @@ -2397,6 +2479,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, + const char *nbdURI, qemuMigrationParamsPtr migParams, unsigned long flags) { @@ -2650,7 +2733,8 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, =20 if (qemuMigrationDstStartNBDServer(driver, vm, incoming->address, nmigrate_disks, migrate_disks, - nbdPort, nbdTLSAlias) < 0) { + nbdPort, nbdURI, + nbdTLSAlias) < 0) { goto stopjob; } cookieFlags |=3D QEMU_MIGRATION_COOKIE_NBD; @@ -2785,7 +2869,7 @@ qemuMigrationDstPrepareTunnel(virQEMUDriverPtr driver, return qemuMigrationDstPrepareAny(driver, dconn, cookiein, cookieinlen, cookieout, cookieoutlen, def, origna= me, st, NULL, 0, false, NULL, 0, NULL, 0, - migParams, flags); + NULL, migParams, flags); } =20 =20 @@ -2826,6 +2910,7 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, + const char *nbdURI, qemuMigrationParamsPtr migParams, unsigned long flags) { @@ -2840,11 +2925,13 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driv= er, VIR_DEBUG("driver=3D%p, dconn=3D%p, cookiein=3D%s, cookieinlen=3D%d, " "cookieout=3D%p, cookieoutlen=3D%p, uri_in=3D%s, uri_out=3D%= p, " "def=3D%p, origname=3D%s, listenAddress=3D%s, " - "nmigrate_disks=3D%zu, migrate_disks=3D%p, nbdPort=3D%d, fla= gs=3D0x%lx", + "nmigrate_disks=3D%zu, migrate_disks=3D%p, nbdPort=3D%d, " + "nbdURI=3D%s, flags=3D0x%lx", driver, dconn, NULLSTR(cookiein), cookieinlen, cookieout, cookieoutlen, NULLSTR(uri_in), uri_out, *def, origname, NULLSTR(listenAddress), - nmigrate_disks, migrate_disks, nbdPort, flags); + nmigrate_disks, migrate_disks, nbdPort, NULLSTR(nbdURI), + flags); =20 *uri_out =3D NULL; =20 @@ -2947,7 +3034,7 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driver, NULL, uri ? uri->scheme : "tcp", port, autoPort, listenAddress, nmigrate_disks, migrate_disks, nbdPor= t, - migParams, flags); + nbdURI, migParams, flags); cleanup: if (ret !=3D 0) { VIR_FREE(*uri_out); @@ -3482,7 +3569,8 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, const char *graphicsuri, size_t nmigrate_disks, const char **migrate_disks, - qemuMigrationParamsPtr migParams) + qemuMigrationParamsPtr migParams, + const char *nbdURI) { int ret =3D -1; unsigned int migrate_flags =3D QEMU_MONITOR_MIGRATE_BACKGROUND; @@ -3614,7 +3702,8 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, &migrate_flags, nmigrate_disks, migrate_disks, - dconn, tlsAlias, flags) < 0= ) { + dconn, tlsAlias, + nbdURI, flags) < 0) { goto error; } } else { @@ -3854,7 +3943,8 @@ qemuMigrationSrcPerformNative(virQEMUDriverPtr driver, const char *graphicsuri, size_t nmigrate_disks, const char **migrate_disks, - qemuMigrationParamsPtr migParams) + qemuMigrationParamsPtr migParams, + const char *nbdURI) { qemuDomainObjPrivatePtr priv =3D vm->privateData; g_autoptr(virURI) uribits =3D NULL; @@ -3908,7 +3998,7 @@ qemuMigrationSrcPerformNative(virQEMUDriverPtr driver, ret =3D qemuMigrationSrcRun(driver, vm, persist_xml, cookiein, cookiei= nlen, cookieout, cookieoutlen, flags, resource, &spec, dconn, graphicsuri, nmigrate_disks, migrate_disks, - migParams); + migParams, nbdURI); =20 if (spec.destType =3D=3D MIGRATION_DEST_FD) VIR_FORCE_CLOSE(spec.dest.fd.qemu); @@ -3971,7 +4061,7 @@ qemuMigrationSrcPerformTunnel(virQEMUDriverPtr driver, ret =3D qemuMigrationSrcRun(driver, vm, persist_xml, cookiein, cookiei= nlen, cookieout, cookieoutlen, flags, resource, &s= pec, dconn, graphicsuri, nmigrate_disks, migrate_= disks, - migParams); + migParams, NULL); =20 cleanup: VIR_FORCE_CLOSE(spec.dest.fd.qemu); @@ -4078,7 +4168,7 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, cookie, cookielen, NULL, NULL, /* No out cookie w= ith v2 migration */ flags, resource, dconn, NULL, = 0, NULL, - migParams); + migParams, NULL); =20 /* Perform failed. Make sure Finish doesn't overwrite the error */ if (ret < 0) @@ -4142,6 +4232,7 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriverPtr dr= iver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, + const char *nbdURI, qemuMigrationParamsPtr migParams, unsigned long long bandwidth, bool useParams, @@ -4226,6 +4317,11 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriverPtr d= river, VIR_MIGRATE_PARAM_DISKS_PORT, nbdPort) < 0) goto cleanup; + if (nbdURI && + virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_MIGRATE_PARAM_DISKS_URI, + nbdURI) < 0) + goto cleanup; =20 if (qemuMigrationParamsDump(migParams, ¶ms, &nparams, &maxparams, &flags) < 0) @@ -4323,7 +4419,7 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriverPtr dr= iver, &cookieout, &cookieoutlen, flags, bandwidth, dconn, graph= icsuri, nmigrate_disks, migrate_disks, - migParams); + migParams, nbdURI); } =20 /* Perform failed. Make sure Finish doesn't overwrite the error */ @@ -4498,6 +4594,7 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriverPtr dri= ver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, + const char *nbdURI, qemuMigrationParamsPtr migParams, unsigned long flags, const char *dname, @@ -4515,12 +4612,12 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriverPtr d= river, =20 VIR_DEBUG("driver=3D%p, sconn=3D%p, vm=3D%p, xmlin=3D%s, dconnuri=3D%s= , uri=3D%s, " "graphicsuri=3D%s, listenAddress=3D%s, nmigrate_disks=3D%zu,= " - "migrate_disks=3D%p, nbdPort=3D%d, flags=3D0x%lx, dname=3D%s= , " - "resource=3D%lu", + "migrate_disks=3D%p, nbdPort=3D%d, nbdURI=3D%s, flags=3D0x%l= x, " + "dname=3D%s, resource=3D%lu", driver, sconn, vm, NULLSTR(xmlin), NULLSTR(dconnuri), NULLSTR(uri), NULLSTR(graphicsuri), NULLSTR(listenAddress), - nmigrate_disks, migrate_disks, nbdPort, flags, NULLSTR(dname= ), - resource); + nmigrate_disks, migrate_disks, nbdPort, NULLSTR(nbdURI), + flags, NULLSTR(dname), resource); =20 if (flags & VIR_MIGRATE_TUNNELLED && uri) { virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", @@ -4618,7 +4715,7 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriverPtr dri= ver, ret =3D qemuMigrationSrcPerformPeer2Peer3(driver, sconn, dconn, dc= onnuri, vm, xmlin, persist_xml, dname, uri, g= raphicsuri, listenAddress, nmigrate_di= sks, migrate_disks, - nbdPort, migParams, resour= ce, + nbdPort, nbdURI, migParams= , resource, useParams, flags); } else { ret =3D qemuMigrationSrcPerformPeer2Peer2(driver, sconn, dconn, vm, @@ -4654,6 +4751,7 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, + const char *nbdURI, qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, @@ -4692,6 +4790,7 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, ret =3D qemuMigrationSrcPerformPeer2Peer(driver, conn, vm, xmlin, = persist_xml, dconnuri, uri, graphicsuri,= listenAddress, nmigrate_disks, migrate_dis= ks, nbdPort, + nbdURI, migParams, flags, dname, re= source, &v3proto); } else { @@ -4699,7 +4798,7 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, ret =3D qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri= , cookiein, cookieinlen, cookieout, cookieoutlen, flags, resource, NULL, NULL, 0= , NULL, - migParams); + migParams, nbdURI); } if (ret < 0) goto endjob; @@ -4765,7 +4864,8 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, char **cookieout, int *cookieoutlen, unsigned long flags, - unsigned long resource) + unsigned long resource, + const char *nbdURI) { qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuDomainJobPrivatePtr jobPriv =3D priv->job.privateData; @@ -4787,7 +4887,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, ret =3D qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri, co= okiein, cookieinlen, cookieout, cookieoutlen, flags, resource, NULL, graphicsuri, - nmigrate_disks, migrate_disks, mig= Params); + nmigrate_disks, migrate_disks, mig= Params, nbdURI); =20 if (ret < 0) { qemuMigrationSrcRestoreDomainState(driver, vm); @@ -4828,6 +4928,7 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, + const char *nbdURI, qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, @@ -4841,11 +4942,12 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, VIR_DEBUG("driver=3D%p, conn=3D%p, vm=3D%p, xmlin=3D%s, dconnuri=3D%s,= " "uri=3D%s, graphicsuri=3D%s, listenAddress=3D%s, " "nmigrate_disks=3D%zu, migrate_disks=3D%p, nbdPort=3D%d, " + "nbdURI=3D%s, " "cookiein=3D%s, cookieinlen=3D%d, cookieout=3D%p, cookieoutl= en=3D%p, " "flags=3D0x%lx, dname=3D%s, resource=3D%lu, v3proto=3D%d", driver, conn, vm, NULLSTR(xmlin), NULLSTR(dconnuri), NULLSTR(uri), NULLSTR(graphicsuri), NULLSTR(listenAddress), - nmigrate_disks, migrate_disks, nbdPort, + nmigrate_disks, migrate_disks, nbdPort, NULLSTR(nbdURI), NULLSTR(cookiein), cookieinlen, cookieout, cookieoutlen, flags, NULLSTR(dname), resource, v3proto); =20 @@ -4859,7 +4961,7 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, return qemuMigrationSrcPerformJob(driver, conn, vm, xmlin, persist= _xml, dconnuri, uri, graphicsuri, listenAddress, nmigrate_disks, migrate_disks, n= bdPort, - migParams, + nbdURI, migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, dname, resource, v3proto); @@ -4877,12 +4979,12 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, migParams, cookiein, cookieinlen, cookieout, cookieoutlen, - flags, resource); + flags, resource, nbdURI); } else { return qemuMigrationSrcPerformJob(driver, conn, vm, xmlin, per= sist_xml, NULL, uri, graphicsuri, listenAddr= ess, nmigrate_disks, migrate_disk= s, nbdPort, - migParams, + nbdURI, migParams, cookiein, cookieinlen, cookieout, cookieoutlen, fla= gs, dname, resource, v3proto); diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index b6f88d3fd9ea..fd9eb7cab0cd 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -84,6 +84,7 @@ VIR_MIGRATE_PARAM_BANDWIDTH_POSTCOPY, VIR_TYPED_PARAM_ULLONG, \ VIR_MIGRATE_PARAM_PARALLEL_CONNECTIONS, VIR_TYPED_PARAM_INT, \ VIR_MIGRATE_PARAM_TLS_DESTINATION, VIR_TYPED_PARAM_STRING, \ + VIR_MIGRATE_PARAM_DISKS_URI, VIR_TYPED_PARAM_STRING, \ NULL =20 =20 @@ -149,6 +150,7 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, + const char *nbdURI, qemuMigrationParamsPtr migParams, unsigned long flags); =20 @@ -165,6 +167,7 @@ qemuMigrationSrcPerform(virQEMUDriverPtr driver, size_t nmigrate_disks, const char **migrate_disks, int nbdPort, + const char *nbdURI, qemuMigrationParamsPtr migParams, const char *cookiein, int cookieinlen, diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_coo= kie.c index cef255598854..c1295b32fc27 100644 --- a/src/qemu/qemu_migration_cookie.c +++ b/src/qemu/qemu_migration_cookie.c @@ -91,6 +91,7 @@ qemuMigrationCookieNBDFree(qemuMigrationCookieNBDPtr nbd) while (nbd->ndisks) VIR_FREE(nbd->disks[--nbd->ndisks].target); VIR_FREE(nbd->disks); + VIR_FREE(nbd); } =20 @@ -992,7 +993,7 @@ qemuMigrationCookieNBDXMLParse(xmlXPathContextPtr ctxt) if (port && virStrToLong_i(port, NULL, 10, &ret->port) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Malformed nbd port '%s'"), - port); + port); goto error; } =20 diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 8a4a0d172dc9..31597ee46972 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -10643,6 +10643,10 @@ static const vshCmdOptDef opts_migrate[] =3D { .type =3D VSH_OT_INT, .help =3D N_("port to use by target server for incoming disks migrati= on") }, + {.name =3D "disks-uri", + .type =3D VSH_OT_STRING, + .help =3D N_("URI to use for disks migration (overrides --disks-port)= ") + }, {.name =3D "comp-methods", .type =3D VSH_OT_STRING, .help =3D N_("comma separated list of compression methods to be used") @@ -10762,6 +10766,14 @@ doMigrate(void *opaque) VIR_MIGRATE_PARAM_DISKS_PORT, intOpt) < 0) goto save_error; =20 + if (vshCommandOptStringReq(ctl, cmd, "disks-uri", &opt) < 0) + goto out; + if (opt && + virTypedParamsAddString(¶ms, &nparams, &maxparams, + VIR_MIGRATE_PARAM_DISKS_URI, + opt) < 0) + goto save_error; + if (vshCommandOptStringReq(ctl, cmd, "dname", &opt) < 0) goto out; if (opt && --=20 2.28.0 From nobody Fri May 3 01:47:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) client-ip=207.211.31.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1598971044; cv=none; d=zohomail.com; s=zohoarc; b=IOed5u/Wpwb4QUoxyUMP1yQQbGwa3GbImUZL+EZodrWzbPKCV/86rU3kgHznjqU4Ini8sAkpoKkocx68T0ioIhGDSVmryUzOIUZiB+cBVK5P37vhSlnEAaD10mv0lMwpcjzXzATBaW2IWR6xgBear4ekoTt0ng2ud7fuZ0U4uDQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598971044; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HdGsub6EEGskeQsWovL3/VuIsNwLbyeaEKbGMDxfQuE=; b=jIjeuEThTe/O7RgGHAEBP2IAmSli0ce4VsIpj/2HIaiyQHEuu1zC6l7T08Yx7pr70T6/GjQRuhtZO1NfM/xBy9t0oNxTc9SSBhV/0vHNahaH3P+B2V4Y31g8vhUkc69haVw3e7ptr5fhPJup6vdESXES4sC7HjVFcAmGfTox+8o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by mx.zohomail.com with SMTPS id 1598971044283457.76533270256425; Tue, 1 Sep 2020 07:37:24 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-211--r_cXcW5ML6HWOGBVmrlqA-1; Tue, 01 Sep 2020 10:37:20 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CD68E10ABDB9; Tue, 1 Sep 2020 14:37:13 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 970CD61983; Tue, 1 Sep 2020 14:37:13 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 966F818095FF; Tue, 1 Sep 2020 14:37:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 081EbBht016611 for ; Tue, 1 Sep 2020 10:37:11 -0400 Received: by smtp.corp.redhat.com (Postfix) id C54371002D40; Tue, 1 Sep 2020 14:37:11 +0000 (UTC) Received: from wheatley.localdomain (unknown [10.40.195.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3677C10023A7 for ; Tue, 1 Sep 2020 14:37:11 +0000 (UTC) Received: from wheatley.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 8D7387E0085 for ; Tue, 1 Sep 2020 16:37:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598971042; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=HdGsub6EEGskeQsWovL3/VuIsNwLbyeaEKbGMDxfQuE=; b=VzM55dc1+DJ2sQY1vOCGzBd670E/cg2+PBI1X7xVFnLiZhQfMe4WH4gqxAqhlX10FFhtO5 hE/akiFc/MxGRHPSqUN/CwmT5sq43oTvs/zHIervPixQYPJYgthUMnNszIEKgS5UxFnZqm l9B4Rl+DrqW47JRfaf5Ow+L8Qmn1nY4= X-MC-Unique: -r_cXcW5ML6HWOGBVmrlqA-1 From: Martin Kletzander To: libvir-list@redhat.com Subject: [PATCH v2 7/9] peer2peer migration: allow connecting to local sockets Date: Tue, 1 Sep 2020 16:36:58 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Local socket connections were outright disabled because there was no "serve= r" part in the URI. However, given how requirements and usage scenarios are evolving, some management apps might need the source libvirt daemon to conn= ect to the destination daemon over a UNIX socket for peer2peer migration. Sinc= e we cannot know where the socket leads (whether the same daemon or not) let's d= ecide that based on whether the socket path is non-standard, or rather explicitly specified in the URI. Checking non-standard path would require to ask the daemon for configuration and the only misuse that it would prevent would be= a pretty weird one. And that's not worth it. The assumption is that whenever someone uses explicit UNIX socket paths in the URI for migration they better know what they are doing. Partially resolves: https://bugzilla.redhat.com/1638889 Signed-off-by: Martin Kletzander Reviewed-by: Jiri Denemark --- docs/manpages/virsh.rst | 9 +++++++++ src/libvirt-domain.c | 8 +++++++- src/remote/remote_driver.c | 8 ++++++-- src/util/viruri.c | 30 ++++++++++++++++++++++++++++++ src/util/viruri.h | 2 ++ tests/virmigtest.c | 2 +- 6 files changed, 55 insertions(+), 4 deletions(-) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 12357ea4ee86..4d66019e750b 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -3235,6 +3235,15 @@ has different semantics: =20 * peer2peer migration: the *desturi* is an address of the target host as s= een from the source machine. =20 +In a special circumstance where you require a complete control of the conn= ection +and/or libvirt does not have network access to the remote side you can use= a +UNIX transport in the URI and specify a socket path in the query, for exam= ple +with the qemu driver you could use this: + +.. code-block:: + + qemu+unix://?socket=3D/path/to/socket + When *migrateuri* is not specified, libvirt will automatically determine t= he hypervisor specific URI. Some hypervisors, including QEMU, have an option= al "migration_host" configuration parameter (useful when the host has multiple diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index da5a21e4c4d4..cde86c77e892 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -3276,7 +3276,13 @@ virDomainMigrateCheckNotLocal(const char *dconnuri) =20 if (!(tempuri =3D virURIParse(dconnuri))) return -1; - if (!tempuri->server || STRPREFIX(tempuri->server, "localhost")) { + + /* + * If someone migrates explicitly to a unix socket, then they have to = know + * what they are doing and it most probably was not a mistake. + */ + if ((tempuri->server && STRPREFIX(tempuri->server, "localhost")) || + (!tempuri->server && !virURICheckUnixSocket(tempuri))) { virReportInvalidArg(dconnuri, "%s", _("Attempt to migrate guest to the same host")= ); return -1; diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 8654046b8ddb..7df995446a3c 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -1429,9 +1429,13 @@ remoteConnectOpen(virConnectPtr conn, =20 /* If there's a driver registered we must defer to that. * If there isn't a driver, we must connect in "direct" - * mode - see doRemoteOpen */ + * mode - see doRemoteOpen. + * One exception is if we are trying to connect to an + * unknown socket path as that might be proxied to remote + * host */ if (!conn->uri->server && - virHasDriverForURIScheme(driver)) { + virHasDriverForURIScheme(driver) && + !virURICheckUnixSocket(conn->uri)) { ret =3D VIR_DRV_OPEN_DECLINED; goto cleanup; } diff --git a/src/util/viruri.c b/src/util/viruri.c index 0112186fdbc4..dd7559662bd2 100644 --- a/src/util/viruri.c +++ b/src/util/viruri.c @@ -393,3 +393,33 @@ virURIGetParam(virURIPtr uri, const char *name) _("Missing URI parameter '%s'"), name); return NULL; } + + +/** + * virURICheckUnixSocket: + * @uri: URI to check + * + * Check if the URI looks like it refers to a non-standard socket path. I= n such + * scenario the socket might be proxied to a remote server even though the= URI + * looks like it is only local. + * + * Returns: true if the URI might be proxied to a remote server + */ +bool +virURICheckUnixSocket(virURIPtr uri) +{ + size_t i =3D 0; + + if (!uri->scheme) + return false; + + if (STRNEQ_NULLABLE(strchr(uri->scheme, '+'), "+unix")) + return false; + + for (i =3D 0; i < uri->paramsCount; i++) { + if (STREQ(uri->params[i].name, "socket")) + return true; + } + + return false; +} diff --git a/src/util/viruri.h b/src/util/viruri.h index e607ecc109e7..dc4907b55059 100644 --- a/src/util/viruri.h +++ b/src/util/viruri.h @@ -62,4 +62,6 @@ int virURIResolveAlias(virConfPtr conf, const char *alias= , char **uri); =20 const char *virURIGetParam(virURIPtr uri, const char *name); =20 +bool virURICheckUnixSocket(virURIPtr uri); + #define VIR_URI_SERVER(uri) ((uri) && (uri)->server ? (uri)->server : "loc= alhost") diff --git a/tests/virmigtest.c b/tests/virmigtest.c index df8d51bab94b..af6643397e90 100644 --- a/tests/virmigtest.c +++ b/tests/virmigtest.c @@ -83,7 +83,7 @@ mymain(void) =20 TEST("scheme://some.cryptorandom.fqdn.tld"); =20 - TEST_FAIL("hehe+unix:///?socket=3D/path/to/some-sock"); + TEST("hehe+unix:///?socket=3D/path/to/some-sock"); =20 return ret =3D=3D 0 ? EXIT_SUCCESS : EXIT_FAILURE; } --=20 2.28.0 From nobody Fri May 3 01:47:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) client-ip=207.211.31.81; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1598971078; cv=none; d=zohomail.com; s=zohoarc; b=YLlPki31ec5NcYr6puRnVSxAoLBZJdvZAQNrUhj4Kv8BR0NMlurh84Cw4sQhWuunjifK0viCABPSb2iGcjUCXGLo+8wxLeRcmyWQ9itcDl6Z08zkVtWKNDXkAAUQQyEvgpP1wb0q+jv0leIdutJDF6gQ2EvVmXUCYkAh0QgCFmA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598971078; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=75A1oIiYg1xUTJlYm48i3VuxxU0A+BaX+/WiWBTNhr8=; b=fdY8/BRf/Yl03G8TwFsBD23JZTvqsEGSCHaqF1p7OlfWDFC+tEn4R9j2aueRZ0J8q0/SzOzYgDhUpS9jUvUmmFEWteKx1be5ALh8esDUkzGfrR3wMVVi+lM4Y9fQa0huubTORJCkcm86Il/t2zLgtR1HywkUmGYf+V/WV7FIzjw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by mx.zohomail.com with SMTPS id 1598971078046650.3866766480779; Tue, 1 Sep 2020 07:37:58 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-209-aTDGDXFrNeWTJ3Of1YtrUg-1; Tue, 01 Sep 2020 10:37:54 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3F7491DDFE; Tue, 1 Sep 2020 14:37:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1B79E10027A6; Tue, 1 Sep 2020 14:37:47 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D763D1826D2E; Tue, 1 Sep 2020 14:37:46 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 081EbEol016653 for ; Tue, 1 Sep 2020 10:37:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 6EA1E6198E; Tue, 1 Sep 2020 14:37:14 +0000 (UTC) Received: from wheatley.localdomain (unknown [10.40.195.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DDDCB60BE2 for ; Tue, 1 Sep 2020 14:37:11 +0000 (UTC) Received: from wheatley.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 940B67E0086 for ; Tue, 1 Sep 2020 16:37:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598971076; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=75A1oIiYg1xUTJlYm48i3VuxxU0A+BaX+/WiWBTNhr8=; b=GU+gwoUMHTX5f2qHo5nieXiDGbMZ//bp8mF61UDHrOBs9yRIKOpewMHSj4FALmI0SyJpmv GH3tx3IF8n504bcnF7HH9EBkNCKh7i2SeUnLWdcWP73YQAR2cAramtcuVvYveAWqqP7vz/ ar3YPODE4i9bVJxdxGJCFjs33J+yAkE= X-MC-Unique: aTDGDXFrNeWTJ3Of1YtrUg-1 From: Martin Kletzander To: libvir-list@redhat.com Subject: [PATCH v2 8/9] qemu: Allow migration over UNIX socket Date: Tue, 1 Sep 2020 16:36:59 +0200 Message-Id: <67fd2ced09d277bf9f1f30e984ad0cf21e24c333.1598970960.git.mkletzan@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.002 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" This allows: a) migration without access to network b) complete control of the migration stream c) easy migration between containerised libvirt daemons on the same host Resolves: https://bugzilla.redhat.com/1638889 Signed-off-by: Martin Kletzander --- docs/manpages/virsh.rst | 15 +++- docs/migration.html.in | 33 ++++++++ src/qemu/qemu_migration.c | 138 +++++++++++++++++++++++-------- src/qemu/qemu_migration_params.c | 9 ++ src/qemu/qemu_migration_params.h | 3 + src/qemu/qemu_monitor.c | 15 ++++ src/qemu/qemu_monitor.h | 4 + 7 files changed, 179 insertions(+), 38 deletions(-) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 4d66019e750b..e3aeaa5c44ea 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -3242,7 +3242,7 @@ with the qemu driver you could use this: =20 .. code-block:: =20 - qemu+unix://?socket=3D/path/to/socket + qemu+unix:///system?socket=3D/path/to/socket =20 When *migrateuri* is not specified, libvirt will automatically determine t= he hypervisor specific URI. Some hypervisors, including QEMU, have an option= al @@ -3270,6 +3270,14 @@ There are a few scenarios where specifying *migrateu= ri* may help: might be specified to choose a specific port number outside the default = range in order to comply with local firewall policies. =20 +* The *desturi* uses UNIX transport method. In this advanced case libvirt + should not guess a *migrateuri* and it should be specified using + UNIX socket path URI: + +.. code-block:: + + unix:///path/to/socket + See `https://libvirt.org/migration.html#uris `_ for more details on migration URIs. =20 @@ -3296,7 +3304,10 @@ specific parameters separated by '&'. Currently reco= gnized parameters are Optional *listen-address* sets the listen address that hypervisor on the destination side should bind to for incoming migration. Both IPv4 and IPv6 addresses are accepted as well as hostnames (the resolving is done on -destination). Some hypervisors do not support this feature and will return= an +destination). In niche scenarios you can also use UNIX socket to make the +hypervisor connection over UNIX socket in which case you must make sure the +source can connect to the destination using the socket path provided by yo= u. +Some hypervisors do not support specifying the listen address and will ret= urn an error if this parameter is used. =20 Optional *disks-port* sets the port that hypervisor on destination side sh= ould diff --git a/docs/migration.html.in b/docs/migration.html.in index e95ee9de6f1b..8585dcab6863 100644 --- a/docs/migration.html.in +++ b/docs/migration.html.in @@ -201,6 +201,9 @@ numbers. In the latter case the management application may wish to choose a specific port number outside the default range in order to comply with local firewall policies. +
  • The second URI uses UNIX transport method. In this advanced case + libvirt should not guess a *migrateuri* and it should be specified= using + UNIX socket path URI: unix:///path/to/socket.
  • =20

    Configuration file handling

    @@ -628,5 +631,35 @@ virsh migrate --p2p --tunnelled web1 qemu+ssh://destho= st/system qemu+ssh://10.0. Supported by QEMU driver

    =20 + +

    Migration using only UNIX sockets=

    + +

    + In niche scenarios where libvirt daemon does not have access to the + network (e.g. running in a restricted container on a host that has + accessible network), when a management application wants to have com= plete + control over the transfer or when migrating between two containers o= n the + same host all the communication can be done using UNIX sockets. This + includes connecting to non-standard socket path for the destination + daemon, using UNIX sockets for hypervisor's communication or for the= NBD + data transfer. All of that can be used with both peer2peer and dire= ct + migration options. +

    + +

    + Example using /tmp/migdir as a directory representing t= he + same path visible from both libvirt daemons. That can be achieved by + bind-mounting the same directory to different containers running sep= arate + daemons or forwarding connections to these sockets manually + (using socat, netcat or a custom piece of + software): +

    +virsh migrate web1 [--p2p] --copy-storage-all 'qemu+unix:///system?socket=
    =3D/tmp/migdir/test-sock-driver' 'unix:///tmp/migdir/test-sock-qemu' [--lis=
    ten-address /tmp/migdir/test-sock-qemu] --disks-uri unix:///tmp/migdir/test=
    -sock-nbd
    +    
    + +

    + Supported by QEMU driver +

    + diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 7277f2f458a2..665b6da90c56 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2411,6 +2411,8 @@ qemuMigrationDstPrepare(virDomainObjPtr vm, =20 if (tunnel) { migrateFrom =3D g_strdup("stdio"); + } else if (g_strcmp0(protocol, "unix") =3D=3D 0) { + migrateFrom =3D g_strdup_printf("%s:%s", protocol, listenAddress); } else { bool encloseAddress =3D false; bool hostIPv6Capable =3D false; @@ -2995,34 +2997,40 @@ qemuMigrationDstPrepareDirect(virQEMUDriverPtr driv= er, } =20 if (STRNEQ(uri->scheme, "tcp") && - STRNEQ(uri->scheme, "rdma")) { + STRNEQ(uri->scheme, "rdma") && + STRNEQ(uri->scheme, "unix")) { virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, _("unsupported scheme %s in migration URI %s"), uri->scheme, uri_in); goto cleanup; } =20 - if (uri->server =3D=3D NULL) { - virReportError(VIR_ERR_INVALID_ARG, _("missing host in migrati= on" - " URI: %s"), uri_in); - goto cleanup; - } - - if (uri->port =3D=3D 0) { - if (virPortAllocatorAcquire(driver->migrationPorts, &port) < 0) + if (STREQ(uri->scheme, "unix")) { + autoPort =3D false; + listenAddress =3D uri->path; + } else { + if (uri->server =3D=3D NULL) { + virReportError(VIR_ERR_INVALID_ARG, _("missing host in mig= ration" + " URI: %s"), uri_in); goto cleanup; + } =20 - /* Send well-formed URI only if uri_in was well-formed */ - if (well_formed_uri) { - uri->port =3D port; - if (!(*uri_out =3D virURIFormat(uri))) + if (uri->port =3D=3D 0) { + if (virPortAllocatorAcquire(driver->migrationPorts, &port)= < 0) goto cleanup; + + /* Send well-formed URI only if uri_in was well-formed */ + if (well_formed_uri) { + uri->port =3D port; + if (!(*uri_out =3D virURIFormat(uri))) + goto cleanup; + } else { + *uri_out =3D g_strdup_printf("%s:%d", uri_in, port); + } } else { - *uri_out =3D g_strdup_printf("%s:%d", uri_in, port); + port =3D uri->port; + autoPort =3D false; } - } else { - port =3D uri->port; - autoPort =3D false; } } =20 @@ -3237,6 +3245,8 @@ qemuMigrationSrcConfirm(virQEMUDriverPtr driver, enum qemuMigrationDestinationType { MIGRATION_DEST_HOST, MIGRATION_DEST_CONNECT_HOST, + MIGRATION_DEST_SOCKET, + MIGRATION_DEST_CONNECT_SOCKET, MIGRATION_DEST_FD, }; =20 @@ -3256,6 +3266,10 @@ struct _qemuMigrationSpec { int port; } host; =20 + struct { + const char *path; + } socket; + struct { int qemu; int local; @@ -3470,13 +3484,30 @@ qemuMigrationSrcConnect(virQEMUDriverPtr driver, =20 if (qemuSecuritySetSocketLabel(driver->securityManager, vm->def) < 0) goto cleanup; - port =3D g_strdup_printf("%d", spec->dest.host.port); - if (virNetSocketNewConnectTCP(spec->dest.host.name, - port, - AF_UNSPEC, - &sock) =3D=3D 0) { - fd_qemu =3D virNetSocketDupFD(sock, true); - virObjectUnref(sock); + + switch (spec->destType) { + case MIGRATION_DEST_CONNECT_HOST: + port =3D g_strdup_printf("%d", spec->dest.host.port); + if (virNetSocketNewConnectTCP(spec->dest.host.name, + port, + AF_UNSPEC, + &sock) =3D=3D 0) { + fd_qemu =3D virNetSocketDupFD(sock, true); + virObjectUnref(sock); + } + break; + case MIGRATION_DEST_CONNECT_SOCKET: + if (virNetSocketNewConnectUNIX(spec->dest.socket.path, + false, NULL, + &sock) =3D=3D 0) { + fd_qemu =3D virNetSocketDupFD(sock, true); + virObjectUnref(sock); + } + break; + case MIGRATION_DEST_HOST: + case MIGRATION_DEST_SOCKET: + case MIGRATION_DEST_FD: + break; } =20 spec->destType =3D MIGRATION_DEST_FD; @@ -3684,6 +3715,14 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, if (migrate_flags & (QEMU_MONITOR_MIGRATE_NON_SHARED_DISK | QEMU_MONITOR_MIGRATE_NON_SHARED_INC)) { if (mig->nbd) { + const char *host =3D ""; + + if (spec->destType =3D=3D MIGRATION_DEST_HOST || + spec->destType =3D=3D MIGRATION_DEST_CONNECT_HOST) { + host =3D spec->dest.host.name; + } + + /* Currently libvirt does not support setting up of the NBD * non-shared storage migration with TLS. As we need to honour= the * VIR_MIGRATE_TLS flag, we need to reject such migration until @@ -3697,7 +3736,7 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, =20 /* This will update migrate_flags on success */ if (qemuMigrationSrcNBDStorageCopy(driver, vm, mig, - spec->dest.host.name, + host, migrate_speed, &migrate_flags, nmigrate_disks, @@ -3745,7 +3784,8 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, goto exit_monitor; =20 /* connect to the destination qemu if needed */ - if (spec->destType =3D=3D MIGRATION_DEST_CONNECT_HOST && + if ((spec->destType =3D=3D MIGRATION_DEST_CONNECT_HOST || + spec->destType =3D=3D MIGRATION_DEST_CONNECT_SOCKET) && qemuMigrationSrcConnect(driver, vm, spec) < 0) { goto exit_monitor; } @@ -3767,7 +3807,14 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, spec->dest.host.port); break; =20 + case MIGRATION_DEST_SOCKET: + qemuSecurityDomainSetPathLabel(driver, vm, spec->dest.socket.path,= false); + rc =3D qemuMonitorMigrateToSocket(priv->mon, migrate_flags, + spec->dest.socket.path); + break; + case MIGRATION_DEST_CONNECT_HOST: + case MIGRATION_DEST_CONNECT_SOCKET: /* handled above and transformed into MIGRATION_DEST_FD */ break; =20 @@ -3983,16 +4030,35 @@ qemuMigrationSrcPerformNative(virQEMUDriverPtr driv= er, } } =20 - /* RDMA and multi-fd migration requires QEMU to connect to the destina= tion - * itself. - */ - if (STREQ(uribits->scheme, "rdma") || (flags & VIR_MIGRATE_PARALLEL)) - spec.destType =3D MIGRATION_DEST_HOST; - else - spec.destType =3D MIGRATION_DEST_CONNECT_HOST; - spec.dest.host.protocol =3D uribits->scheme; - spec.dest.host.name =3D uribits->server; - spec.dest.host.port =3D uribits->port; + if (STREQ(uribits->scheme, "unix")) { + if ((flags & VIR_MIGRATE_TLS) && + !qemuMigrationParamsTLSHostnameIsSet(migParams)) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("Explicit destination hostname is required " + "for TLS migration over UNIX socket")); + return -1; + } + + if (flags & VIR_MIGRATE_PARALLEL) + spec.destType =3D MIGRATION_DEST_SOCKET; + else + spec.destType =3D MIGRATION_DEST_CONNECT_SOCKET; + + spec.dest.socket.path =3D uribits->path; + } else { + /* RDMA and multi-fd migration requires QEMU to connect to the des= tination + * itself. + */ + if (STREQ(uribits->scheme, "rdma") || (flags & VIR_MIGRATE_PARALLE= L)) + spec.destType =3D MIGRATION_DEST_HOST; + else + spec.destType =3D MIGRATION_DEST_CONNECT_HOST; + + spec.dest.host.protocol =3D uribits->scheme; + spec.dest.host.name =3D uribits->server; + spec.dest.host.port =3D uribits->port; + } + spec.fwdType =3D MIGRATION_FWD_DIRECT; =20 ret =3D qemuMigrationSrcRun(driver, vm, persist_xml, cookiein, cookiei= nlen, cookieout, diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 231a8a2ee83e..5fde915963ec 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -1008,6 +1008,15 @@ qemuMigrationParamsDisableTLS(virDomainObjPtr vm, } =20 =20 +bool +qemuMigrationParamsTLSHostnameIsSet(qemuMigrationParamsPtr migParams) +{ + int param =3D QEMU_MIGRATION_PARAM_TLS_HOSTNAME; + return (migParams->params[param].set && + STRNEQ(migParams->params[param].value.s, "")); +} + + /* qemuMigrationParamsResetTLS * @driver: pointer to qemu driver * @vm: domain object diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index 9aea24725f0a..9876101bfc4a 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -113,6 +113,9 @@ int qemuMigrationParamsDisableTLS(virDomainObjPtr vm, qemuMigrationParamsPtr migParams); =20 +bool +qemuMigrationParamsTLSHostnameIsSet(qemuMigrationParamsPtr migParams); + int qemuMigrationParamsFetch(virQEMUDriverPtr driver, virDomainObjPtr vm, diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 718ac50c0898..ab3bcc761e9a 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2555,6 +2555,21 @@ qemuMonitorMigrateToHost(qemuMonitorPtr mon, } =20 =20 +int +qemuMonitorMigrateToSocket(qemuMonitorPtr mon, + unsigned int flags, + const char *socketPath) +{ + g_autofree char *uri =3D g_strdup_printf("unix:%s", socketPath); + + VIR_DEBUG("socketPath=3D%s flags=3D0x%x", socketPath, flags); + + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONMigrate(mon, flags, uri); +} + + int qemuMonitorMigrateCancel(qemuMonitorPtr mon) { diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index d20a15c202db..3e4ef7e821a6 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -853,6 +853,10 @@ int qemuMonitorMigrateToHost(qemuMonitorPtr mon, const char *hostname, int port); =20 +int qemuMonitorMigrateToSocket(qemuMonitorPtr mon, + unsigned int flags, + const char *socketPath); + int qemuMonitorMigrateCancel(qemuMonitorPtr mon); =20 int qemuMonitorGetDumpGuestMemoryCapability(qemuMonitorPtr mon, --=20 2.28.0 From nobody Fri May 3 01:47:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) client-ip=205.139.110.61; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1598971067; cv=none; d=zohomail.com; s=zohoarc; b=VTvkKJSraikSk6fuM0v3monPxSyV/GSHWce5UCwaZz18nhAQhw4FMQqQ1mnZhYSsuxE5Ag5QgR52RurJTXbCe7uyvLDULdL6hYVRJPnqp7eayoPPq7jxBQbEa2DIv3WjYFD9tVE6otnGBFgWY4PfX0K+2Ej5cXajZESknRJU6DI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598971067; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=S2iU0wJ/RjrBoxizp/Km+bnJtfGZD0mVp0kT/N1itS8=; b=fMJI7QOJjt9rsMRQDfYT43lqovxmvS4hbBByeR2oFi9BOJolA7VxjH24WRXBcbTrl6H7caMGQ6NjOiWLoePdTLKLkIx/+f8jhSHLQuUXLuMWOa1AENulbDLIt1+NyJ8DBq25D0RZUJV62e/uA7FwT+PGyoZ6D07v+WU9gHamQk0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) by mx.zohomail.com with SMTPS id 1598971067535393.936667889506; Tue, 1 Sep 2020 07:37:47 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-134-kgHeF6CjPPyW5Z4JnrEPIA-1; Tue, 01 Sep 2020 10:37:42 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id AC8331006708; Tue, 1 Sep 2020 14:37:36 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 88DF95D9CC; Tue, 1 Sep 2020 14:37:36 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5382B181A872; Tue, 1 Sep 2020 14:37:36 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 081EbBjI016606 for ; Tue, 1 Sep 2020 10:37:11 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7AFBB7C564; Tue, 1 Sep 2020 14:37:11 +0000 (UTC) Received: from wheatley.localdomain (unknown [10.40.195.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 356E37DA43 for ; Tue, 1 Sep 2020 14:37:11 +0000 (UTC) Received: from wheatley.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id 9F1D17E0087 for ; Tue, 1 Sep 2020 16:37:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598971066; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=S2iU0wJ/RjrBoxizp/Km+bnJtfGZD0mVp0kT/N1itS8=; b=fehGtgfBe9xpqb9r4L7jZfI9+PmuQ8I3HHRRUIiISmx7xrc15iEmlvHyM+HMSEvS7clLNH gIPINfPOKBgr0417NfKPEuxjBrN1sBjcLtu50rWMBIbUy3IC9phXKJKkmYW6RnYymI/2ne P179xwgkLRqoyldyPKfSbiPJ1mKMVQM= X-MC-Unique: kgHeF6CjPPyW5Z4JnrEPIA-1 From: Martin Kletzander To: libvir-list@redhat.com Subject: [PATCH v2 9/9] news: qemu: Allow migration over UNIX sockets Date: Tue, 1 Sep 2020 16:37:00 +0200 Message-Id: <3435272470626931af08cb0344eaf8e9cb500d38.1598970960.git.mkletzan@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Martin Kletzander Reviewed-by: Jiri Denemark --- NEWS.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/NEWS.rst b/NEWS.rst index 302b7f477904..52781b7e1677 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -71,6 +71,12 @@ v6.7.0 (2020-09-01) forbidden and no size auto-alignment will be made. Instead, libvirt wi= ll suggest an aligned round up size for the user. =20 + * qemu: Allow migration over UNIX sockets + + QEMU migration can now be performed completely over UNIX sockets. This= is + useful for containerised scenarios and can be used in both peer2peer a= nd + direct migrations. + * **Bug fixes** =20 * virdevmapper: Deal with kernels without DM support --=20 2.28.0