From nobody Mon Apr 29 16:17:51 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; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1596579386; cv=none; d=zohomail.com; s=zohoarc; b=QP9hqY0RON38LEe8i+jHTFDxDqAa8ktBxswITIJLFe/tdD7JpeLOGbCH71iuhdT7dCPV5Y68t6IVp65hStvOigAsB0oFeKCDwQwENWiRFno3b0y+GIUNMPArhkH2BXD3+5qPuKnmzwFxn3yNbuJlU7FialKxWMMCqhGiPbBvgEc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1596579386; 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=zUFf8SlJ6ayVVA6D8v3VcOFWDF4tY6WW+DdD1LSIKaA=; b=WuQKidzWFI5bo967jBeWBw5hat/6H9PM8QvUaXb9a/zRXNh2XP5vy3cqzP50eCKGeHrCEZ9Gj/JaBfLfCaNhAlp45fd5UZPpARp4lckLOoH4Kven9Rsck1WENXARdtYMiE+zOCpjVqieO5h4vT4T2I0QdR1QIBfs9d8WkLSalN0= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com 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 159657938611280.55237803064222; Tue, 4 Aug 2020 15:16:26 -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-360-UdvHinaxOm6s8pxBuWxSLQ-1; Tue, 04 Aug 2020 18:16:20 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id EE6E179EC0; Tue, 4 Aug 2020 22:16:12 +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 CDE4B71765; Tue, 4 Aug 2020 22:16:12 +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 9E9341809554; Tue, 4 Aug 2020 22:16:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 074MDtgD004666 for ; Tue, 4 Aug 2020 18:13:55 -0400 Received: by smtp.corp.redhat.com (Postfix) id E566E2026D69; Tue, 4 Aug 2020 22:13:54 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast05.extmail.prod.ext.rdu2.redhat.com [10.11.55.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DBD6120316D6 for ; Tue, 4 Aug 2020 22:13:53 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 199B2805F40 for ; Tue, 4 Aug 2020 22:13:53 +0000 (UTC) Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [62.140.7.102]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-45-xxog63zSMv6iUbHihClNBw-1; Tue, 04 Aug 2020 18:13:50 -0400 Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-db5eur03lp2052.outbound.protection.outlook.com [104.47.10.52]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-16-LHpbzUenNc-acIQkG9x89g-2; Wed, 05 Aug 2020 00:13:48 +0200 Received: from VI1PR0401MB2429.eurprd04.prod.outlook.com (2603:10a6:800:2c::13) by VE1PR04MB6461.eurprd04.prod.outlook.com (2603:10a6:803:120::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3239.20; Tue, 4 Aug 2020 22:13:46 +0000 Received: from VI1PR0401MB2429.eurprd04.prod.outlook.com ([fe80::7cc0:b0a4:b951:90e2]) by VI1PR0401MB2429.eurprd04.prod.outlook.com ([fe80::7cc0:b0a4:b951:90e2%11]) with mapi id 15.20.3239.022; Tue, 4 Aug 2020 22:13:46 +0000 Received: from linux-tbji.devlab.prv.suse.com (75.169.39.245) by AM0PR10CA0036.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:150::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3239.20 via Frontend Transport; Tue, 4 Aug 2020 22:13:45 +0000 X-MC-Unique: UdvHinaxOm6s8pxBuWxSLQ-1 X-MC-Unique: xxog63zSMv6iUbHihClNBw-1 X-MC-Unique: LHpbzUenNc-acIQkG9x89g-2 From: Jim Fehlig To: libvir-list@redhat.com Subject: [PATCH V2 1/3] Xen: Add support for qemu command-line passthrough Date: Tue, 4 Aug 2020 16:13:07 -0600 Message-ID: <20200804221309.11961-2-jfehlig@suse.com> In-Reply-To: <20200804221309.11961-1-jfehlig@suse.com> References: <20200804221309.11961-1-jfehlig@suse.com> X-ClientProxiedBy: AM0PR10CA0036.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:150::16) To VI1PR0401MB2429.eurprd04.prod.outlook.com (2603:10a6:800:2c::13) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Originating-IP: [75.169.39.245] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: edbe7fd0-df94-415c-605d-08d838c3a81e X-MS-TrafficTypeDiagnostic: VE1PR04MB6461: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:765; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sRIDIatLdT4Kq120qkwWVqZ4YhMyuFkHiR8twcnQFrKYfiHhCVT2gyJlLRS/dtGDyukD4U/11v0JeyzjFfIGDpBaQ//7N0F26mLkKrWdtVvJrxDOVTJYSQHoHAbX09bByAJxvgs9LQrivhXMbV/JRxSiVedealAp7XpTexMG6L3RGoocALI+mouIptpQCrDS9NroOBsQ89olAiHBhIKKcnTyR24aL7PjCFO4wEQKNPvZLC08Eg1PD+ECaUcjkaBPVsgVx9ZvnK5UFz1xEG2ca96bsdRO4mSSp5sRsvjChaLp65IcuzFVTpSh/J62tEUe3glr1lFQZ/Gsoumku+M/gYNOAXC7PZOIK7NhiZjzgkCANkb7WwgN8lMkLuw/lKLx2/QJnLfNqyXbtQ6z3sg8PA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR0401MB2429.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(136003)(366004)(396003)(376002)(39860400002)(346002)(316002)(5660300002)(478600001)(26005)(83380400001)(186003)(52116002)(8936002)(86362001)(16526019)(7696005)(6916009)(66476007)(36756003)(107886003)(66556008)(8676002)(956004)(6486002)(2616005)(4326008)(1076003)(6666004)(2906002)(66946007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: RRx1yB1xDs1E26xx2Yvxt9gof/0+nQHMBFO0PVdmP18cDrXdVEVNT2iOCkhCiv5AyEFiithSp1U5VbDCvwYC3Db6coTNb1/GKRG7oIsgCmtd59w2WuRtAsjdwPjezBS9I6zVstOGD/+V0ahizththdCe7xX3EyiVxf5TdICWziZImd5aXweLu4k/Odv340Gcd/Pse+C5zzupS1RXyqPc4nbjBMtTNB8gRSXQ7Px7jK5pdVtF5h4hy+mKcy4d8zojmA0jw51hnXJC8yjlWr9aZorFDUj356aIm1u04iRHb3bBDkC6Own9gwpyJDQgZs6ozc9JkGSdbml4K8tQ+6DKBjXPde/aizM1DiX6YtBh3ersy4iWiaxT3Ju6Vegi+QAS6UslDxQmX6pTE+YxoEzNbrgUMRMLtTMtP9ulj+ezEIxL2LsFFr37j8IZ2UYL1Sj+c3BGR9a3AeYocpJOrrMFTw/E+Kz7rpJc0ioYmjsOVYZM3WbGMVe+6Z5M/17nvSlWdgqR/tWR1Z7WBMg8Me4XWpT3M2z+PaVah2ShcJ0/oyJEmWxcpOe99ln6eJGLOIh9rSOawJeyw9aViAlC0aYpuRQTFY+4XbTEn0opVPB+1Dwmnm9xEPRxKjzOPOg9kwaplndelSX4h5KWGGYsOTMkYw== X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: edbe7fd0-df94-415c-605d-08d838c3a81e X-MS-Exchange-CrossTenant-AuthSource: VI1PR0401MB2429.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Aug 2020 22:13:46.7234 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: B6M+DYnPusvrvsjnRNYpR37uRnAJ7b8YybzQkM5GNCy/4xh4cHk5+ZUJwAYEtO8DSnt9na7FJLT7JbM3PqjyHQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6461 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false; X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 074MDtgD004666 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.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Xen supports passing arbitrary arguments to the QEMU device model via the 'extra' member of the public libxl_domain_build_info structure. This patch adds a 'xen' namespace extension, similar to the QEMU and bhyve drivers, to map arbitrary arguments to the 'extra' member. Only passthrough of arguments is supported. Passthrough of environment variables or capabilities adjustments is not supported. Signed-off-by: Jim Fehlig Reviewed-by: Michal Privoznik --- docs/drvxen.html.in | 29 ++++++++++++ docs/schemas/domaincommon.rng | 17 +++++++ src/libxl/libxl_conf.c | 10 ++++- src/libxl/libxl_conf.h | 8 ++++ src/libxl/libxl_domain.c | 84 +++++++++++++++++++++++++++++++++++ src/libxl/libxl_domain.h | 1 + 6 files changed, 148 insertions(+), 1 deletion(-) diff --git a/docs/drvxen.html.in b/docs/drvxen.html.in index b2f41c1763..45a9329fcf 100644 --- a/docs/drvxen.html.in +++ b/docs/drvxen.html.in @@ -141,6 +141,35 @@ vnclisten =3D "0.0.0.0" disk =3D [ "tap:aio:/var/lib/xen/images/rhel5pv.img,xvda,w", "tap:qcow:/ro= ot/qcow1-xen.img,xvdd,w" ] vif =3D [ "mac=3D00:16:3e:60:36:ba,bridge=3Dvirbr0,script=3Dvif-bridge,vif= name=3Dvif5.0" ] =20 +

Pass-through of arbitrary command-line argume= nts + to the qemu device model

+ +

Since 6.7.0, the Xen driver supports p= assing + arbitrary command-line arguments to the qemu device model used by Xe= n with + the <xen:commandline> element under domain<= /code>. + In order to use command-line pass-through, an XML namespace request = must be + issued that pulls in http://libvirt.org/schemas/domain/xen/1.0= . + With the namespace in place, it is then possible to add + <xen:arg>sub-elements to + <xen:commandline> describing each argument passed= to + the device model when starting the domain. +

+

The following example illustrates passing agruments to the QEMU dev= ice + model that define a floppy drive, which Xen does not support through= its + public APIs: +

+
+<domain type=3D"xen" xmlns:xen=3D"http://libvirt.org/schemas/domain/xen=
/1.0">
+  ...
+  <xen:commandline>
+    <xen:arg value=3D'-drive'/>
+    <xen:arg value=3D'file=3D/path/to/image,format=3Draw,if=3Dnone,id=
=3Ddrive-fdc0-0-0'/>
+    <xen:arg value=3D'-global'/>
+    <xen:arg value=3D'isa-fdc.driveA=3Ddrive-fdc0-0-0'/>
+  </xen:commandline>
+</domain>
+    
+

Example domain XML config

=20

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 0d0dcbc5ce..7954696dce 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -87,6 +87,9 @@ + + + @@ -6799,6 +6802,20 @@ =20 + + + + + + + + + + + diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 7c2c015015..e7c7022b69 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -760,6 +760,13 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, libxl_get_required_shadow_memory(b_info->max_memkb, b_info->max_vcpus); =20 + if (def->namespaceData) { + libxlDomainXmlNsDefPtr nsdata =3D def->namespaceData; + + if (nsdata->num_args > 0) + b_info->extra =3D g_strdupv(nsdata->args); + } + return 0; } =20 @@ -2513,5 +2520,6 @@ libxlCreateXMLConf(libxlDriverPrivatePtr driver) libxlDomainDefParserConfig.priv =3D driver; return virDomainXMLOptionNew(&libxlDomainDefParserConfig, &libxlDomainXMLPrivateDataCallbacks, - NULL, NULL, NULL); + &libxlDriverDomainXMLNamespace, + NULL, NULL); } diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h index b057a9e4ba..fc652df61e 100644 --- a/src/libxl/libxl_conf.h +++ b/src/libxl/libxl_conf.h @@ -168,6 +168,14 @@ struct _libxlSavefileHeader { uint32_t unused[10]; }; =20 + +typedef struct _libxlDomainXmlNsDef libxlDomainXmlNsDef; +typedef libxlDomainXmlNsDef *libxlDomainXmlNsDefPtr; +struct _libxlDomainXmlNsDef { + size_t num_args; + char **args; +}; + libxlDriverConfigPtr libxlDriverConfigNew(void); int diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index d9fcde4364..f6bc8211b3 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -1573,3 +1573,87 @@ libxlDomainDefCheckABIStability(libxlDriverPrivatePt= r driver, virDomainDefFree(migratableDefDst); return ret; } + + +static void +libxlDomainDefNamespaceFree(void *nsdata) +{ + libxlDomainXmlNsDefPtr def =3D nsdata; + + if (!def) + return; + + g_strfreev(def->args); + g_free(def); +} + + +static int +libxlDomainDefNamespaceParse(xmlXPathContextPtr ctxt, + void **data) +{ + libxlDomainXmlNsDefPtr nsdata =3D NULL; + g_autofree xmlNodePtr *nodes =3D NULL; + ssize_t nnodes; + size_t i; + int ret =3D -1; + + if ((nnodes =3D virXPathNodeSet("./xen:commandline/xen:arg", ctxt, &no= des)) < 0) + return -1; + + if (nnodes =3D=3D 0) + return 0; + + nsdata =3D g_new0(libxlDomainXmlNsDef, 1); + nsdata->args =3D g_new0(char *, nnodes + 1); + + for (i =3D 0; i < nnodes; i++) { + if (!(nsdata->args[nsdata->num_args++] =3D virXMLPropString(nodes[= i], "value"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("No device model command-line argument specif= ied")); + goto cleanup; + } + } + + if (nsdata->num_args > 0) + *data =3D g_steal_pointer(&nsdata); + + ret =3D 0; + + cleanup: + libxlDomainDefNamespaceFree(nsdata); + return ret; +} + + +static int +libxlDomainDefNamespaceFormatXML(virBufferPtr buf, + void *nsdata) +{ + libxlDomainXmlNsDefPtr cmd =3D nsdata; + size_t i; + + if (!cmd->num_args) + return 0; + + virBufferAddLit(buf, "\n"); + virBufferAdjustIndent(buf, 2); + + for (i =3D 0; i < cmd->num_args; i++) + virBufferEscapeString(buf, "\n", + cmd->args[i]); + + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); + + return 0; +} + + +virXMLNamespace libxlDriverDomainXMLNamespace =3D { + .parse =3D libxlDomainDefNamespaceParse, + .free =3D libxlDomainDefNamespaceFree, + .format =3D libxlDomainDefNamespaceFormatXML, + .prefix =3D "xen", + .uri =3D "http://libvirt.org/schemas/domain/xen/1.0", +}; diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h index 7e28093722..00682546e0 100644 --- a/src/libxl/libxl_domain.h +++ b/src/libxl/libxl_domain.h @@ -77,6 +77,7 @@ struct _libxlDomainObjPrivate { =20 extern virDomainXMLPrivateDataCallbacks libxlDomainXMLPrivateDataCallbacks; extern virDomainDefParserConfig libxlDomainDefParserConfig; +extern virXMLNamespace libxlDriverDomainXMLNamespace; extern const struct libxl_event_hooks ev_hooks; =20 int --=20 2.26.2 From nobody Mon Apr 29 16:17:51 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; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1596579255; cv=none; d=zohomail.com; s=zohoarc; b=DbKbDqwrBw+I1PjC9EstXLB3NW82m96qvfQQjkD5SZacKvF/XCCIcEo0RfP6DWKKvVSfhPmhVCCLXBYMpbdFAWH/tf6qjth3XvBToVTeWK2gAb+CxbJLrH9YzXhawFRGvpeD2IoLA93/m96Wl+w6RjhEChvAFgzN4dEzoJNT1x0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1596579255; 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=/2AxXFbi2bZ1/D0CvMQ4VYVFBzvERbrQzAXGxh/QTtA=; b=gdC+HFjCaDkFvWlij+5RFNNvon3yU1cSGjb6Ou9qBfJcyjI14nXR8PSTt8vz9EGjfiyJYtTjgSYA+sFw2kt1ovFELr3GLwXaSf/vGFQV10RSaUOjTVMlIys/dq/OjLaHoVmRPUgp3eF4jAA2BRJQIQgo4mUY/syuK34uH/Oat28= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com 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 1596579255785900.9398303517276; Tue, 4 Aug 2020 15:14:15 -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-506-HoZ1HAWXPJ60Lgoh4uTLMA-1; Tue, 04 Aug 2020 18:14:12 -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 4EBDF79EC0; Tue, 4 Aug 2020 22:14:05 +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 AD64D5D9F7; Tue, 4 Aug 2020 22:14:04 +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 EB0FB1809554; Tue, 4 Aug 2020 22:14:02 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 074MDupv004681 for ; Tue, 4 Aug 2020 18:13:56 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9F69A217B437; Tue, 4 Aug 2020 22:13:56 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9757C2156890 for ; Tue, 4 Aug 2020 22:13:54 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6818E800050 for ; Tue, 4 Aug 2020 22:13:54 +0000 (UTC) Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [62.140.7.102]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-330-HrVMjWCSPVm-aJ-DMrelmw-1; Tue, 04 Aug 2020 18:13:52 -0400 Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-db5eur03lp2052.outbound.protection.outlook.com [104.47.10.52]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-16-5Aiy7YCwMROfr77ZaNgDgA-3; Wed, 05 Aug 2020 00:13:49 +0200 Received: from VI1PR0401MB2429.eurprd04.prod.outlook.com (2603:10a6:800:2c::13) by VE1PR04MB6461.eurprd04.prod.outlook.com (2603:10a6:803:120::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3239.20; Tue, 4 Aug 2020 22:13:48 +0000 Received: from VI1PR0401MB2429.eurprd04.prod.outlook.com ([fe80::7cc0:b0a4:b951:90e2]) by VI1PR0401MB2429.eurprd04.prod.outlook.com ([fe80::7cc0:b0a4:b951:90e2%11]) with mapi id 15.20.3239.022; Tue, 4 Aug 2020 22:13:48 +0000 Received: from linux-tbji.devlab.prv.suse.com (75.169.39.245) by AM0PR10CA0036.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:150::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3239.20 via Frontend Transport; Tue, 4 Aug 2020 22:13:47 +0000 X-MC-Unique: HoZ1HAWXPJ60Lgoh4uTLMA-1 X-MC-Unique: HrVMjWCSPVm-aJ-DMrelmw-1 X-MC-Unique: 5Aiy7YCwMROfr77ZaNgDgA-3 From: Jim Fehlig To: libvir-list@redhat.com Subject: [PATCH V2 2/3] Xen: Add support for qemu commandline passthrough to config converter Date: Tue, 4 Aug 2020 16:13:08 -0600 Message-ID: <20200804221309.11961-3-jfehlig@suse.com> In-Reply-To: <20200804221309.11961-1-jfehlig@suse.com> References: <20200804221309.11961-1-jfehlig@suse.com> X-ClientProxiedBy: AM0PR10CA0036.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:150::16) To VI1PR0401MB2429.eurprd04.prod.outlook.com (2603:10a6:800:2c::13) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Originating-IP: [75.169.39.245] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8b9e0781-e3a5-40d9-7ec0-08d838c3a908 X-MS-TrafficTypeDiagnostic: VE1PR04MB6461: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1332; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NKoDmpL8KtcMIe23mxnAK/RM4tto7+Ecwe8vRvJ2VPtCZ7lhhYv1qQzG+DuRrSkDPEwzWQP0EMG/loUvOnDlLzX8BXRt4M0pJBlfDlLGCqivWUMEL7w0Xlz4gMHwN0zggm198tPDL2KqTJlrbmvnUGHb6RS9vP3X4OfRTazy5KeAc2bFu1Rv3P13Wc/V4anAF2quKLLh50oTApsp03w7o4jSJQAMGzOHtwl+EN8Y8y+IPI07Q5O6+Qd50OIgok/CPwfTxfqKhre0d4oOZg5R5WBobKvchvL4C2I1slgErmBiHLnvyFuzceMsaYFxdS0T3D0Ps6r9jjfV4nubsBoLD1xwgvIGaccqYVmj7euj+3nt8wh5G/XdDd0Sda0msdYm9gDDocwhVsuDYIWx+XLRtg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR0401MB2429.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(136003)(366004)(396003)(376002)(39860400002)(346002)(316002)(5660300002)(478600001)(26005)(83380400001)(186003)(52116002)(8936002)(86362001)(16526019)(7696005)(6916009)(66476007)(36756003)(107886003)(66556008)(8676002)(956004)(6486002)(2616005)(4326008)(1076003)(6666004)(2906002)(66946007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: mXLDZO30BwOzUKKjngWQHClQT/M4ONrtHG+/UbVxgcW3NTUn9+0x+JahbpDazZ3ZAmz6ggYAvX8UAixkPzLl2gQLgf1iO8HYkzLfqxCQRVAZPIlnGx4R9PbmcoPLDdnXXzNEfKMG9Soe56Ib4TZuj0U/dQoQNrCCO2SFCbxTWKprj+gph5KztO2dAWBt1EfdIiz6KRjkMHuuc6taCacwQwK+yvZrQP+m9zntL8z7uEPPMCHQ7/1Hvps6dZrEdSvCSnTq2dmUTuEj0inhmCt8cEH8QA580VNBjyg4CtOJ7Bw3J+Tgo9xmhOk4DfHhxNsCjKlojyuSO+52pC+RqirdlWbilaQeshOijfzeg7KqD6jRHn6hJH5UhSm6cfUZ53jbJn9x68b+ciCWt0Q+y1Bvgq9ifRDuTZHGXLM7GCGe3k86Oz9Uyf9S3EO5XRzg+kliuZ5nbIoXSXp8ZVJqdnukQn8KqkrvQzBwIdTFgpEAQJusBSxp42Hbs0ErZteVBQOR5I57IfXDyNSuSxqrPAxLseSpTGgD5E8HcYO8Khsz115XViGmfExzQxj25Jst2tuc3TdtM9fulATT7NL/AypQzd1BbuybaCadY8VQxVkMfyT2O7YK8Wy9QbCJwMPWqC0/1hvNfXh/CPk77Aqu1WIvTw== X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b9e0781-e3a5-40d9-7ec0-08d838c3a908 X-MS-Exchange-CrossTenant-AuthSource: VI1PR0401MB2429.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Aug 2020 22:13:48.2108 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3DX+XSwoARxDUJxRxlpqUsd3dKGyO3yq0LHjEBOvofNjIpwHiSEw7ECHWqEPYMrA0qzy4/yL+igK+IdTxdJc/Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6461 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false; X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 074MDupv004681 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 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Support qemu commandline passthrough in the domXML to native config converter. Add tests to check the conversion. Signed-off-by: Jim Fehlig Reviewed-by: Michal Privoznik --- src/libxl/xen_xl.c | 91 ++++++++++++++++++++ tests/xlconfigdata/test-qemu-passthrough.cfg | 26 ++++++ tests/xlconfigdata/test-qemu-passthrough.xml | 53 ++++++++++++ tests/xlconfigtest.c | 1 + 4 files changed, 171 insertions(+) diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c index c6aac16de5..258aca5c73 100644 --- a/src/libxl/xen_xl.c +++ b/src/libxl/xen_xl.c @@ -32,6 +32,7 @@ #include "virstoragefile.h" #include "xen_xl.h" #include "libxl_capabilities.h" +#include "libxl_conf.h" #include "cpu/cpu.h" =20 #define VIR_FROM_THIS VIR_FROM_XENXL @@ -1158,6 +1159,42 @@ xenParseXLChannel(virConfPtr conf, virDomainDefPtr d= ef) return -1; } =20 +static int +xenParseXLNamespaceData(virConfPtr conf, virDomainDefPtr def) +{ + virConfValuePtr list =3D virConfGetValue(conf, "device_model_args"); + VIR_AUTOSTRINGLIST args =3D NULL; + size_t nargs; + libxlDomainXmlNsDefPtr nsdata =3D NULL; + + if (list && list->type =3D=3D VIR_CONF_LIST) { + list =3D list->list; + while (list) { + if ((list->type !=3D VIR_CONF_STRING) || (list->str =3D=3D NUL= L)) { + list =3D list->next; + continue; + } + + virStringListAdd(&args, list->str); + list =3D list->next; + } + } + + if (!args) + return 0; + + nargs =3D g_strv_length(args); + if (nargs > 0) { + nsdata =3D g_new0(libxlDomainXmlNsDef, 1); + + nsdata->args =3D g_steal_pointer(&args); + nsdata->num_args =3D nargs; + def->namespaceData =3D nsdata; + } + + return 0; +} + virDomainDefPtr xenParseXL(virConfPtr conf, virCapsPtr caps, @@ -1170,6 +1207,7 @@ xenParseXL(virConfPtr conf, =20 def->virtType =3D VIR_DOMAIN_VIRT_XEN; def->id =3D -1; + def->ns =3D *(virDomainXMLOptionGetNamespace(xmlopt)); =20 if (xenParseConfigCommon(conf, def, caps, XEN_CONFIG_FORMAT_XL, xmlopt) < 0) @@ -1207,6 +1245,9 @@ xenParseXL(virConfPtr conf, if (xenParseXLChannel(conf, def) < 0) goto cleanup; =20 + if (xenParseXLNamespaceData(conf, def) < 0) + goto cleanup; + if (virDomainDefPostParse(def, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, xmlopt, NULL) < 0) goto cleanup; @@ -2165,6 +2206,53 @@ xenFormatXLDomainChannels(virConfPtr conf, virDomain= DefPtr def) return -1; } =20 +static int +xenFormatXLDomainNamespaceData(virConfPtr conf, virDomainDefPtr def) +{ + libxlDomainXmlNsDefPtr nsdata =3D def->namespaceData; + virConfValuePtr args =3D NULL; + size_t i; + + if (!nsdata) + return 0; + + if (nsdata->num_args =3D=3D 0) + return 0; + + if (VIR_ALLOC(args) < 0) + return -1; + + args->type =3D VIR_CONF_LIST; + args->list =3D NULL; + + for (i =3D 0; i < nsdata->num_args; i++) { + virConfValuePtr val, tmp; + + if (VIR_ALLOC(val) < 0) + goto error; + + val->type =3D VIR_CONF_STRING; + val->str =3D g_strdup(nsdata->args[i]); + tmp =3D args->list; + while (tmp && tmp->next) + tmp =3D tmp->next; + if (tmp) + tmp->next =3D val; + else + args->list =3D val; + } + + if (args->list !=3D NULL) + if (virConfSetValue(conf, "device_model_args", args) < 0) + goto error; + + return 0; + + error: + virConfFreeValue(args); + return -1; +} + virConfPtr xenFormatXL(virDomainDefPtr def, virConnectPtr conn) { @@ -2208,5 +2296,8 @@ xenFormatXL(virDomainDefPtr def, virConnectPtr conn) if (xenFormatXLDomainChannels(conf, def) < 0) return NULL; =20 + if (xenFormatXLDomainNamespaceData(conf, def) < 0) + return NULL; + return g_steal_pointer(&conf); } diff --git a/tests/xlconfigdata/test-qemu-passthrough.cfg b/tests/xlconfigd= ata/test-qemu-passthrough.cfg new file mode 100644 index 0000000000..42aad92205 --- /dev/null +++ b/tests/xlconfigdata/test-qemu-passthrough.cfg @@ -0,0 +1,26 @@ +name =3D "XenGuest2" +uuid =3D "c7a5fdb2-cdaf-9455-926a-d65c16db1809" +maxmem =3D 579 +memory =3D 394 +vcpus =3D 1 +pae =3D 1 +acpi =3D 1 +apic =3D 1 +viridian =3D 0 +rtc_timeoffset =3D 0 +localtime =3D 0 +on_poweroff =3D "destroy" +on_reboot =3D "restart" +on_crash =3D "restart" +device_model =3D "/usr/lib/xen/bin/qemu-system-i386" +sdl =3D 0 +vnc =3D 1 +vncunused =3D 1 +vnclisten =3D "127.0.0.1" +vif =3D [ "mac=3D00:16:3e:66:92:9c,bridge=3Dxenbr1,script=3Dvif-bridge,mod= el=3De1000" ] +parallel =3D "none" +serial =3D "none" +builder =3D "hvm" +boot =3D "d" +disk =3D [ "format=3Draw,vdev=3Dhda,access=3Drw,backendtype=3Dqdisk,target= =3D/var/lib/libvirt/images/XenGuest2" ] +device_model_args =3D [ "-debugcon", "file:/tmp/debug.log", "-global", "is= a-debugcon.iobase=3D0x402" ] diff --git a/tests/xlconfigdata/test-qemu-passthrough.xml b/tests/xlconfigd= ata/test-qemu-passthrough.xml new file mode 100644 index 0000000000..5de35143c0 --- /dev/null +++ b/tests/xlconfigdata/test-qemu-passthrough.xml @@ -0,0 +1,53 @@ + + XenGuest2 + c7a5fdb2-cdaf-9455-926a-d65c16db1809 + 592896 + 403456 + 1 + + hvm + /usr/lib/xen/boot/hvmloader + + + + + + + + + destroy + restart + restart + + /usr/lib/xen/bin/qemu-system-i386 + + + + +

+ + + + + + +