From nobody Tue Dec 16 16:23:45 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1743166457; cv=none; d=zohomail.com; s=zohoarc; b=kxgg7JFz3yp83K9j15jpUnGvLMO/p/OrcWiffWf/PxZkEcG5NbQ4a0ljJ0cvCbc5cGQc6CdlFfhdCcUE1csceW9/HlGZGEGhlS4rUD5WyreJhMxoZskEhlCc/Ao5qRH8BfMSQC/+khu4oslwRrlsdnZfIrXB3ilTS0U1FBPU0ho= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1743166457; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=eML9TtMJueXYM5aoeHaamCwecdvRp33GFwChL6M7cgE=; b=IqKVAiUyJ5ZK3r14YvidNMtj50p3xI7dkBIy9H6OjRzztHCSwDioQixX14bGzD6gAALK7LULUen3tfS/+EpWt3eciE3NiUWAayjnwFz4cKl7DrJmgWVzDE5AL6vW1StHSWV7mixTCJ3MPEHCdA4BOOjwvYko5hAl9aC60xq6zOY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1743166457519898.9079844774706; Fri, 28 Mar 2025 05:54:17 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id DC0591220; Fri, 28 Mar 2025 08:54:16 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id BC7D3121C; Fri, 28 Mar 2025 08:52:55 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 99F461262; Fri, 28 Mar 2025 08:52:51 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 8CDF911B2 for ; Fri, 28 Mar 2025 08:52:45 -0400 (EDT) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-572-YdEs1Bo0Nm6v7Yz8O3ql5A-1; Fri, 28 Mar 2025 08:52:43 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D67EB18009B1 for ; Fri, 28 Mar 2025 12:52:42 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.8]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D464C1828AAA; Fri, 28 Mar 2025 12:52:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1743166365; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=J0hnskZ3n8y+4+7GZeFvGxxUzQqduJ/BRYQMU8Fp2Uw=; b=fC71grd+S4sebXKmcJ6WkePlYP/1vi3GlbJLIhauUflOHIeh3D0q2osYzpi16G7Us8L83I q3qpJ4RQTeuC7eA8rE5MVSJt5Gvk1AkTYXbBEAFr57CcDVr4gO1x35cheshoy0rBv9UDWK uAewlyIdz+uhMNDz72txvwACJB7ZVBc= X-MC-Unique: YdEs1Bo0Nm6v7Yz8O3ql5A-1 X-Mimecast-MFC-AGG-ID: YdEs1Bo0Nm6v7Yz8O3ql5A_1743166363 To: devel@lists.libvirt.org Subject: [PATCH 3/8] conf: Introduce VIR_STORAGE_NET_HOST_TRANS_FD Date: Fri, 28 Mar 2025 13:52:29 +0100 Message-ID: <4ef6bb83559348408d6043faa979e97fcb438f0a.1743166287.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: nRPENhKrtxMA7wQNgJBTmugyAXbfCXTrdXrIZMwCejU_1743166363 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: LZ5E7T6MM35RDVSWK3MMIL5BNTN4O4XG X-Message-ID-Hash: LZ5E7T6MM35RDVSWK3MMIL5BNTN4O4XG X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Peter Krempa X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1743166460181019000 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Prepare the parser code and anything using 'virStorageNetHostTransport' to support passing a FD instead of opening the connection by qemu itself. For now this just preparse the parser and data structures, but the code is dormant. Only code paths which will actually support FD passing will then enable it in the future. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/conf/backup_conf.c | 2 +- src/conf/domain_conf.c | 24 +++++++++++++++++-- src/conf/domain_conf.h | 3 ++- src/conf/storage_source_conf.c | 2 ++ src/conf/storage_source_conf.h | 3 +++ src/qemu/qemu_backup.c | 1 + src/qemu/qemu_block.c | 1 + src/qemu/qemu_monitor_json.c | 1 + .../storage_file_backend_gluster.c | 1 + 9 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/conf/backup_conf.c b/src/conf/backup_conf.c index 1fea6a2be7..1bdfbfa3d6 100644 --- a/src/conf/backup_conf.c +++ b/src/conf/backup_conf.c @@ -228,7 +228,7 @@ virDomainBackupDefParseXML(xmlXPathContextPtr ctxt, def->server =3D g_new0(virStorageNetHostDef, 1); - if (virDomainStorageNetworkParseHost(node, def->server) < 0) + if (virDomainStorageNetworkParseHost(node, def->server, false) < 0) return NULL; if (def->server->transport =3D=3D VIR_STORAGE_NET_HOST_TRANS_RDMA)= { diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 1680da3ea6..c724638180 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6014,7 +6014,8 @@ virDomainHostdevSubsysPCIDefParseXML(xmlNodePtr node, int virDomainStorageNetworkParseHost(xmlNodePtr hostnode, - virStorageNetHostDef *host) + virStorageNetHostDef *host, + bool allow_fd) { g_autofree char *socket =3D NULL; @@ -6064,6 +6065,25 @@ virDomainStorageNetworkParseHost(xmlNodePtr hostnode, } break; + case VIR_STORAGE_NET_HOST_TRANS_FD: + if (!allow_fd) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("transport 'fd' is now allowed")); + return -1; + } + + if (socket) { + virReportError(VIR_ERR_XML_ERROR, + _("transport '%1$s' does not support socket att= ribute"), + virStorageNetHostTransportTypeToString(host->tr= ansport)); + return -1; + } + + if (!(host->fdgroup =3D virXMLPropStringRequired(hostnode, "fdgrou= p"))) + return -1; + + break; + case VIR_STORAGE_NET_HOST_TRANS_LAST: break; } @@ -6092,7 +6112,7 @@ virDomainStorageNetworkParseHosts(xmlNodePtr node, *nhosts =3D nhostnodes; for (i =3D 0; i < nhostnodes; i++) { - if (virDomainStorageNetworkParseHost(hostnodes[i], *hosts + i) < 0) + if (virDomainStorageNetworkParseHost(hostnodes[i], *hosts + i, fal= se) < 0) return -1; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 0d1dd954ae..8dfadbb98d 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -4024,7 +4024,8 @@ virDomainDiskByTarget(virDomainDef *def, void virDomainDiskInsert(virDomainDef *def, virDomainDiskDef *disk); int virDomainStorageNetworkParseHost(xmlNodePtr hostnode, - virStorageNetHostDef *host); + virStorageNetHostDef *host, + bool allow_fd); int virDomainDiskDefAssignAddress(virDomainXMLOption *xmlopt, virDomainDiskDef *def, const virDomainDef *vmdef); diff --git a/src/conf/storage_source_conf.c b/src/conf/storage_source_conf.c index ca956a1b7c..db12dfd961 100644 --- a/src/conf/storage_source_conf.c +++ b/src/conf/storage_source_conf.c @@ -97,6 +97,7 @@ VIR_ENUM_IMPL(virStorageNetHostTransport, "tcp", "unix", "rdma", + "fd", ); @@ -149,6 +150,7 @@ virStorageNetHostDefClear(virStorageNetHostDef *def) VIR_FREE(def->name); VIR_FREE(def->socket); + VIR_FREE(def->fdgroup); } diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h index e6cbb93c06..52ed303657 100644 --- a/src/conf/storage_source_conf.h +++ b/src/conf/storage_source_conf.h @@ -141,6 +141,7 @@ typedef enum { VIR_STORAGE_NET_HOST_TRANS_TCP, VIR_STORAGE_NET_HOST_TRANS_UNIX, VIR_STORAGE_NET_HOST_TRANS_RDMA, + VIR_STORAGE_NET_HOST_TRANS_FD, VIR_STORAGE_NET_HOST_TRANS_LAST } virStorageNetHostTransport; @@ -154,6 +155,8 @@ struct _virStorageNetHostDef { unsigned int port; virStorageNetHostTransport transport; char *socket; /* path to unix socket */ + + char *fdgroup; }; diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c index 43576d135b..2935153cdf 100644 --- a/src/qemu/qemu_backup.c +++ b/src/qemu/qemu_backup.c @@ -87,6 +87,7 @@ qemuBackupPrepare(virDomainBackupDef *def) break; case VIR_STORAGE_NET_HOST_TRANS_RDMA: + case VIR_STORAGE_NET_HOST_TRANS_FD: case VIR_STORAGE_NET_HOST_TRANS_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("unexpected transport in ")); diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index e370411e16..3ed279af28 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -266,6 +266,7 @@ qemuBlockStorageSourceBuildJSONSocketAddress(virStorage= NetHostDef *host) break; case VIR_STORAGE_NET_HOST_TRANS_RDMA: + case VIR_STORAGE_NET_HOST_TRANS_FD: case VIR_STORAGE_NET_HOST_TRANS_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, _("transport protocol '%1$s' is not yet supported"), diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index d0de48fb18..994cf53d9f 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6342,6 +6342,7 @@ qemuMonitorJSONNBDServerStart(qemuMonitor *mon, addr =3D qemuMonitorJSONBuildUnixSocketAddress(server->socket); break; case VIR_STORAGE_NET_HOST_TRANS_RDMA: + case VIR_STORAGE_NET_HOST_TRANS_FD: case VIR_STORAGE_NET_HOST_TRANS_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("invalid server address")); diff --git a/src/storage_file/storage_file_backend_gluster.c b/src/storage_= file/storage_file_backend_gluster.c index 950f8e81fe..df4df0f128 100644 --- a/src/storage_file/storage_file_backend_gluster.c +++ b/src/storage_file/storage_file_backend_gluster.c @@ -74,6 +74,7 @@ virStorageFileBackendGlusterInitServer(virStorageFileBack= endGlusterPriv *priv, hoststr =3D host->socket; break; + case VIR_STORAGE_NET_HOST_TRANS_FD: case VIR_STORAGE_NET_HOST_TRANS_LAST: break; } --=20 2.49.0