From nobody Sun May 19 03:54:36 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1702650130579194.7967284854335; Fri, 15 Dec 2023 06:22:10 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 8567B1A3F; Fri, 15 Dec 2023 09:22:09 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id D14B41A77; Fri, 15 Dec 2023 09:19:36 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 8318E19CF; Fri, 15 Dec 2023 09:19:26 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.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 EC49D1A31 for ; Fri, 15 Dec 2023 09:19:25 -0500 (EST) Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-371-jkT-1GeFNtOF9cjWsUEp7g-1; Fri, 15 Dec 2023 09:19:24 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id 297BD2806415 for ; Fri, 15 Dec 2023 14:19:24 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id C7C66C15E6A for ; Fri, 15 Dec 2023 14:19:23 +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=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: jkT-1GeFNtOF9cjWsUEp7g-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH 1/4] vmx: Accept empty fileName for cdrom-image Date: Fri, 15 Dec 2023 15:19:18 +0100 Message-ID: <40b2227adf7f1de5e5b2e319e0f263819376ecb5.1702649888.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: JMZ4R7ONWJYNVI3ZDSCYRR67YNTPANHF X-Message-ID-Hash: JMZ4R7ONWJYNVI3ZDSCYRR67YNTPANHF X-MailFrom: mprivozn@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 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: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1702650131899100001 Turns out, there are two ways to specify an empty CD-ROM drive in a .vmx file: 1) .fileName =3D "emptyBackingString" 2) .fileName =3D "" While we do parse 1) successfully, the code does not accept 2) and an error is reported. Modify the code to treat both cases the same. Resolves: https://issues.redhat.com/browse/RHEL-19380 Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/vmx/vmx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 26b89776e1..af1c1640ae 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2483,7 +2483,8 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= n *xmlopt, virConf *conf, */ goto ignore; } - } else if (fileName && STREQ(fileName, "emptyBackingString")) { + } else if (fileName && (STREQ(fileName, "") || + STREQ(fileName, "emptyBackingString"))) { if (deviceType && STRCASENEQ(deviceType, "cdrom-image")) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Expecting VMX entry '%1$s' to be 'cdrom-= image' but found '%2$s'"), --=20 2.41.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org From nobody Sun May 19 03:54:36 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 17026503584701000.9621991089405; Fri, 15 Dec 2023 06:25:58 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 604F31A59; Fri, 15 Dec 2023 09:25:57 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 1E7F31B51; Fri, 15 Dec 2023 09:19:54 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 647F21A12; Fri, 15 Dec 2023 09:19:28 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.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 4846F19CF for ; Fri, 15 Dec 2023 09:19:27 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-687-RfAXmKiZNKiFq18BgnnYbQ-1; Fri, 15 Dec 2023 09:19:24 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id B4EF9185A782 for ; Fri, 15 Dec 2023 14:19:24 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5E4FAC15A0C for ; Fri, 15 Dec 2023 14:19:24 +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=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: RfAXmKiZNKiFq18BgnnYbQ-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH 2/4] vmx2xmltest: Add another test case Date: Fri, 15 Dec 2023 15:19:19 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: DR3TA2PZABF4FZTJHPSATGRN5O4XSADO X-Message-ID-Hash: DR3TA2PZABF4FZTJHPSATGRN5O4XSADO X-MailFrom: mprivozn@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 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: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1702650360053100001 Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- tests/vmx2xmldata/esx-in-the-wild-12.vmx | 86 ++++++++++++++++++++++++ tests/vmx2xmldata/esx-in-the-wild-12.xml | 39 +++++++++++ tests/vmx2xmltest.c | 1 + 3 files changed, 126 insertions(+) create mode 100644 tests/vmx2xmldata/esx-in-the-wild-12.vmx create mode 100644 tests/vmx2xmldata/esx-in-the-wild-12.xml diff --git a/tests/vmx2xmldata/esx-in-the-wild-12.vmx b/tests/vmx2xmldata/e= sx-in-the-wild-12.vmx new file mode 100644 index 0000000000..31963ffb12 --- /dev/null +++ b/tests/vmx2xmldata/esx-in-the-wild-12.vmx @@ -0,0 +1,86 @@ +.encoding =3D "UTF-8" +config.version =3D "8" +virtualHW.version =3D "20" +vmci0.present =3D "TRUE" +floppy0.present =3D "FALSE" +svga.vramSize =3D "8388608" +memSize =3D "2048" +firmware =3D "efi" +tools.upgrade.policy =3D "manual" +sched.cpu.units =3D "mhz" +vm.createDate =3D "1702444883756312" +scsi0.virtualDev =3D "pvscsi" +scsi0.present =3D "TRUE" +sata0.present =3D "TRUE" +sata0:0.startConnected =3D "FALSE" +sata0:0.deviceType =3D "cdrom-image" +sata0:0.fileName =3D "" +sata0:0.present =3D "TRUE" +scsi0:0.deviceType =3D "scsi-hardDisk" +scsi0:0.fileName =3D "Auto-esx8.0-rhell9.3-efi-with-empty-cdrom.vmdk" +sched.scsi0:0.shares =3D "normal" +sched.scsi0:0.throughputCap =3D "off" +scsi0:0.present =3D "TRUE" +ethernet0.allowGuestConnectionControl =3D "FALSE" +ethernet0.virtualDev =3D "vmxnet3" +ethernet0.networkName =3D "VM Network" +ethernet0.addressType =3D "vpx" +ethernet0.generatedAddress =3D "00:50:56:a0:cf:2f" +ethernet0.uptCompatibility =3D "TRUE" +ethernet0.present =3D "TRUE" +displayName =3D "Auto-esx8.0-rhell9.3-efi-with-empty-cdrom" +guestOS =3D "rhel9-64" +chipset.motherboardLayout =3D "acpi" +uefi.secureBoot.enabled =3D "TRUE" +toolScripts.afterPowerOn =3D "TRUE" +toolScripts.afterResume =3D "TRUE" +toolScripts.beforeSuspend =3D "TRUE" +toolScripts.beforePowerOff =3D "TRUE" +tools.syncTime =3D "FALSE" +tools.guest.desktop.autolock =3D "TRUE" +uuid.bios =3D "42 20 fc a7 11 dd d6 7e-19 cc fc ad 0a 37 c3 42" +vc.uuid =3D "50 20 ca 5b 7a c1 5c 44-cf a1 9e 76 2e 2f 93 3b" +nvram =3D "Auto-esx8.0-rhell9.3-efi-with-empty-cdrom.nvram" +svga.present =3D "TRUE" +hpet0.present =3D "TRUE" +RemoteDisplay.maxConnections =3D "-1" +sched.cpu.latencySensitivity =3D "normal" +numa.autosize.cookie =3D "10012" +numa.autosize.vcpu.maxPerVirtualNode =3D "1" +cpuid.coresPerSocket.cookie =3D "1" +pciBridge1.present =3D "TRUE" +pciBridge1.virtualDev =3D "pciRootBridge" +pciBridge1.functions =3D "1" +pciBridge1:0.pxm =3D "0" +pciBridge0.present =3D "TRUE" +pciBridge0.virtualDev =3D "pciRootBridge" +pciBridge0.functions =3D "1" +pciBridge0.pxm =3D "-1" +scsi0.pciSlotNumber =3D "32" +ethernet0.pciSlotNumber =3D "33" +sata0.pciSlotNumber =3D "34" +scsi0.sasWWID =3D "50 05 05 67 11 dd d6 70" +vmotion.checkpointFBSize =3D "4194304" +vmotion.checkpointSVGAPrimarySize =3D "8388608" +vmotion.svga.mobMaxSize =3D "8388608" +vmotion.svga.graphicsMemoryKB =3D "8192" +monitor.phys_bits_used =3D "45" +softPowerOff =3D "FALSE" +tools.remindInstall =3D "TRUE" +svga.guestBackedPrimaryAware =3D "TRUE" +guestInfo.detailed.data =3D "architecture=3D'X86' bitness=3D'64' cpeString= =3D'cpe:/o:redhat:enterprise_linux:9::baseos' distroAddlVersion=3D'9.3 (Plo= w)' distroName=3D'Red Hat Enterprise Linux' distroVersion=3D'9.3' familyNam= e=3D'Linux' kernelVersion=3D'5.14.0-362.8.1.el9_3.x86_64' prettyName=3D'Red= Hat Enterprise Linux 9.3 (Plow)'" +vmxstats.filename =3D "esx8.0-rhel9.3-x86_64.scoreboard" +migrate.hostLog =3D "Auto-esx8.0-rhell9.3-efi-with-empty-cdrom-3ea47ba9.hl= og" +sched.cpu.min =3D "0" +sched.cpu.shares =3D "normal" +sched.mem.min =3D "0" +sched.mem.minSize =3D "0" +sched.mem.shares =3D "normal" +migrate.encryptionMode =3D "opportunistic" +ftcpt.ftEncryptionMode =3D "ftEncryptionOpportunistic" +viv.moid =3D "e00e5864-a7ed-4b49-b99a-71da911f679c:vm-1008:OCn73UgW4dBwF0s= gk/5SmLb24snLgdgGTDWbdB/O5g4=3D" +sched.swap.derivedName =3D "/vmfs/volumes/c97af7e9-686a74ad/Auto-esx8.0-rh= ell9.3-efi-with-empty-cdrom/Auto-esx8.0-rhell9.3-efi-with-empty-cdrom-155bb= 14b.vswp" +uuid.location =3D "56 4d 4b 9e d2 17 63 9b-98 0e 92 5d 77 2a a3 83" +scsi0:0.redo =3D "" +vmci0.id =3D "171426626" +cleanShutdown =3D "FALSE" diff --git a/tests/vmx2xmldata/esx-in-the-wild-12.xml b/tests/vmx2xmldata/e= sx-in-the-wild-12.xml new file mode 100644 index 0000000000..42184501d0 --- /dev/null +++ b/tests/vmx2xmldata/esx-in-the-wild-12.xml @@ -0,0 +1,39 @@ + + Auto-esx8.0-rhell9.3-efi-with-empty-cdrom + 4220fca7-11dd-d67e-19cc-fcad0a37c342 + 2097152 + 2097152 + 1 + + 1000 + + + hvm + + + destroy + restart + destroy + + + + +
+ + + + +
+ + + + + + + + + + + diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c index a43cab3108..785eee6d30 100644 --- a/tests/vmx2xmltest.c +++ b/tests/vmx2xmltest.c @@ -262,6 +262,7 @@ mymain(void) DO_TEST("esx-in-the-wild-9"); DO_TEST("esx-in-the-wild-10"); DO_TEST("esx-in-the-wild-11"); + DO_TEST("esx-in-the-wild-12"); =20 DO_TEST("gsx-in-the-wild-1"); DO_TEST("gsx-in-the-wild-2"); --=20 2.41.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org From nobody Sun May 19 03:54:36 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1702650247300985.7930008717756; Fri, 15 Dec 2023 06:24:07 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 2FD2919C4; Fri, 15 Dec 2023 09:24:06 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id B79321AF3; Fri, 15 Dec 2023 09:19:42 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id F0BA81A37; Fri, 15 Dec 2023 09:19:27 -0500 (EST) 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 1973C1A12 for ; Fri, 15 Dec 2023 09:19:27 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-154-eQSm2QgKOl-wHFhtIe4iZw-1; Fri, 15 Dec 2023 09:19:25 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4A44685A58A for ; Fri, 15 Dec 2023 14:19:25 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id E8B14C159B0 for ; Fri, 15 Dec 2023 14:19:24 +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=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: eQSm2QgKOl-wHFhtIe4iZw-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH 3/4] vmx: Separate disk target name generation into a function Date: Fri, 15 Dec 2023 15:19:20 +0100 Message-ID: <5ef0359de7c781213418b77ee85bc73e071a3a6d.1702649888.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: SBJ6SUUWQWMJZENYLNWVQQ73TMWUL6LH X-Message-ID-Hash: SBJ6SUUWQWMJZENYLNWVQQ73TMWUL6LH X-MailFrom: mprivozn@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 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: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1702650248063100001 Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/vmx/vmx.c | 175 +++++++++++++++++++++++++++++++------------------- 1 file changed, 110 insertions(+), 65 deletions(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index af1c1640ae..399f03b419 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2136,6 +2136,113 @@ virVMXParseSATAController(virConf *conf, int contro= ller, bool *present) } =20 =20 +static int +virXMXGenerateDiskTarget(virDomainDiskDef *def, + virDomainDef *vmdef, + int controllerOrBus, + int unit) +{ + const char *prefix =3D NULL; + unsigned int idx =3D 0; + + switch (def->bus) { + case VIR_DOMAIN_DISK_BUS_SCSI: + if (controllerOrBus < 0 || controllerOrBus > 3) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("SCSI controller index %1$d out of [0..3] ran= ge"), + controllerOrBus); + return -1; + } + + if (unit < 0 || unit > vmdef->scsiBusMaxUnit || unit =3D=3D 7) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("SCSI unit index %1$d out of [0..6,8..%2$u] r= ange"), + unit, vmdef->scsiBusMaxUnit); + return -1; + } + + idx =3D controllerOrBus * 15 + (unit < 7 ? unit : unit - 1); + prefix =3D "sd"; + break; + + case VIR_DOMAIN_DISK_BUS_SATA: + if (controllerOrBus < 0 || controllerOrBus > 3) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("SATA controller index %1$d out of [0..3] ran= ge"), + controllerOrBus); + return -1; + } + + if (unit < 0 || unit >=3D 30) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("SATA unit index %1$d out of [0..29] range"), + unit); + return -1; + } + + idx =3D controllerOrBus * 30 + unit; + prefix =3D "sd"; + break; + + case VIR_DOMAIN_DISK_BUS_IDE: + if (controllerOrBus < 0 || controllerOrBus > 1) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("IDE bus index %1$d out of [0..1] range"), + controllerOrBus); + return -1; + } + + if (unit < 0 || unit > 1) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("IDE unit index %1$d out of [0..1] range"), u= nit); + return -1; + } + idx =3D controllerOrBus * 2 + unit; + prefix =3D "hd"; + break; + + case VIR_DOMAIN_DISK_BUS_FDC: + if (controllerOrBus !=3D 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("FDC controller index %1$d out of [0] range"), + controllerOrBus); + return -1; + } + + if (unit < 0 || unit > 1) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("FDC unit index %1$d out of [0..1] range"), + unit); + return -1; + } + + idx =3D unit; + prefix =3D "fd"; + break; + + case VIR_DOMAIN_DISK_BUS_VIRTIO: + case VIR_DOMAIN_DISK_BUS_XEN: + case VIR_DOMAIN_DISK_BUS_USB: + case VIR_DOMAIN_DISK_BUS_UML: + case VIR_DOMAIN_DISK_BUS_SD: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Unsupported bus type '%1$s' for device type '%2$= s'"), + virDomainDiskBusTypeToString(def->bus), + virDomainDiskDeviceTypeToString(def->device)); + return -1; + break; + + case VIR_DOMAIN_DISK_BUS_NONE: + case VIR_DOMAIN_DISK_BUS_LAST: + virReportEnumRangeError(virDomainDiskBus, def->bus); + return -1; + break; + } + + def->dst =3D virIndexToDiskName(idx, prefix); + return 0; +} + =20 static int virVMXParseDisk(virVMXContext *ctx, virDomainXMLOption *xmlopt, virConf *c= onf, @@ -2208,60 +2315,11 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOpt= ion *xmlopt, virConf *conf, if (device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK || device =3D=3D VIR_DOMAIN_DISK_DEVICE_CDROM) { if (busType =3D=3D VIR_DOMAIN_DISK_BUS_SCSI) { - if (controllerOrBus < 0 || controllerOrBus > 3) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("SCSI controller index %1$d out of [0..3]= range"), - controllerOrBus); - goto cleanup; - } - - if (unit < 0 || unit > vmdef->scsiBusMaxUnit || unit =3D=3D 7)= { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("SCSI unit index %1$d out of [0..6,8..%2$= u] range"), - unit, vmdef->scsiBusMaxUnit); - goto cleanup; - } - prefix =3D g_strdup_printf("scsi%d:%d", controllerOrBus, unit); - - (*def)->dst =3D - virIndexToDiskName - (controllerOrBus * 15 + (unit < 7 ? unit : unit - 1), "sd= "); } else if (busType =3D=3D VIR_DOMAIN_DISK_BUS_SATA) { - if (controllerOrBus < 0 || controllerOrBus > 3) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("SATA controller index %1$d out of [0..3]= range"), - controllerOrBus); - goto cleanup; - } - - if (unit < 0 || unit >=3D 30) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("SATA unit index %1$d out of [0..29] rang= e"), - unit); - goto cleanup; - } - prefix =3D g_strdup_printf("sata%d:%d", controllerOrBus, unit); - - (*def)->dst =3D virIndexToDiskName(controllerOrBus * 30 + unit= , "sd"); } else if (busType =3D=3D VIR_DOMAIN_DISK_BUS_IDE) { - if (controllerOrBus < 0 || controllerOrBus > 1) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("IDE bus index %1$d out of [0..1] range"), - controllerOrBus); - goto cleanup; - } - - if (unit < 0 || unit > 1) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("IDE unit index %1$d out of [0..1] range"= ), unit); - goto cleanup; - } - prefix =3D g_strdup_printf("ide%d:%d", controllerOrBus, unit); - - (*def)->dst =3D virIndexToDiskName(controllerOrBus * 2 + unit,= "hd"); } else { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported bus type '%1$s' for device type = '%2$s'"), @@ -2271,23 +2329,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOpti= on *xmlopt, virConf *conf, } } else if (device =3D=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY) { if (busType =3D=3D VIR_DOMAIN_DISK_BUS_FDC) { - if (controllerOrBus !=3D 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("FDC controller index %1$d out of [0] ran= ge"), - controllerOrBus); - goto cleanup; - } - - if (unit < 0 || unit > 1) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("FDC unit index %1$d out of [0..1] range"= ), - unit); - goto cleanup; - } - prefix =3D g_strdup_printf("floppy%d", unit); - - (*def)->dst =3D virIndexToDiskName(unit, "fd"); } else { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported bus type '%1$s' for device type = '%2$s'"), @@ -2302,6 +2344,9 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= n *xmlopt, virConf *conf, goto cleanup; } =20 + if (virXMXGenerateDiskTarget(*def, vmdef, controllerOrBus, unit) < 0) + goto cleanup; + VMX_BUILD_NAME(present); VMX_BUILD_NAME(startConnected); VMX_BUILD_NAME(deviceType); --=20 2.41.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org From nobody Sun May 19 03:54:36 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1702650472020105.92804540634847; Fri, 15 Dec 2023 06:27:52 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id EAEDC1A54; Fri, 15 Dec 2023 09:27:50 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 382471ABA; Fri, 15 Dec 2023 09:20:03 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 2C5CC1A12; Fri, 15 Dec 2023 09:19:29 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.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 6991219CF for ; Fri, 15 Dec 2023 09:19:28 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-593-ebrlWojuPM2SOyO_Nf1ldA-1; Fri, 15 Dec 2023 09:19:26 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id D587A85A58B for ; Fri, 15 Dec 2023 14:19:25 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7EFA3C15A0C for ; Fri, 15 Dec 2023 14:19:25 +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=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: ebrlWojuPM2SOyO_Nf1ldA-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH 4/4] vmx: Ensure unique disk targets when parsing Date: Fri, 15 Dec 2023 15:19:21 +0100 Message-ID: <0318ea72daa140a1b7d3c356982f964245f0d7e2.1702649888.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: DM6PQRYAXWKXAKUGQ4JW5WIXSYBKPFHM X-Message-ID-Hash: DM6PQRYAXWKXAKUGQ4JW5WIXSYBKPFHM X-MailFrom: mprivozn@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 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: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1702650472814100001 When parsing disks from a vmx file, the target name is generated based on disk bus, controller the disk is attached to, and its unit. But in case of SCSI and SATA attached disks this does not guarantee the target name uniqueness. If there are two disks, one attached to scsi.0 and the other to sata.0 both end up with the same "sda" target name. And because of the way their drive address is derived, they end up with the same address too. Try harder to generate an unique disk target. Signed-off-by: Michal Privoznik --- src/vmx/vmx.c | 189 +++++++++++++---------- tests/vmx2xmldata/esx-in-the-wild-12.xml | 4 +- tests/vmx2xmldata/esx-in-the-wild-8.xml | 4 +- 3 files changed, 109 insertions(+), 88 deletions(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 399f03b419..7c752c72f9 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2142,105 +2142,126 @@ virXMXGenerateDiskTarget(virDomainDiskDef *def, int controllerOrBus, int unit) { - const char *prefix =3D NULL; - unsigned int idx =3D 0; - - switch (def->bus) { - case VIR_DOMAIN_DISK_BUS_SCSI: - if (controllerOrBus < 0 || controllerOrBus > 3) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("SCSI controller index %1$d out of [0..3] ran= ge"), - controllerOrBus); - return -1; - } + unsigned int tries =3D 0; =20 - if (unit < 0 || unit > vmdef->scsiBusMaxUnit || unit =3D=3D 7) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("SCSI unit index %1$d out of [0..6,8..%2$u] r= ange"), - unit, vmdef->scsiBusMaxUnit); - return -1; - } + for (tries =3D 0; tries < 10; tries++) { + g_autofree char *dst =3D NULL; + const char *prefix =3D NULL; + unsigned int idx =3D 0; + size_t i; =20 - idx =3D controllerOrBus * 15 + (unit < 7 ? unit : unit - 1); - prefix =3D "sd"; - break; + switch (def->bus) { + case VIR_DOMAIN_DISK_BUS_SCSI: + if (controllerOrBus < 0 || controllerOrBus > 3) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("SCSI controller index %1$d out of [0..3]= range"), + controllerOrBus); + return -1; + } =20 - case VIR_DOMAIN_DISK_BUS_SATA: - if (controllerOrBus < 0 || controllerOrBus > 3) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("SATA controller index %1$d out of [0..3] ran= ge"), - controllerOrBus); - return -1; - } + if (unit < 0 || unit > vmdef->scsiBusMaxUnit || unit =3D=3D 7)= { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("SCSI unit index %1$d out of [0..6,8..%2$= u] range"), + unit, vmdef->scsiBusMaxUnit); + return -1; + } =20 - if (unit < 0 || unit >=3D 30) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("SATA unit index %1$d out of [0..29] range"), - unit); - return -1; - } + idx =3D controllerOrBus * 15 + (unit < 7 ? unit : unit - 1); + prefix =3D "sd"; + break; =20 - idx =3D controllerOrBus * 30 + unit; - prefix =3D "sd"; - break; + case VIR_DOMAIN_DISK_BUS_SATA: + if (controllerOrBus < 0 || controllerOrBus > 3) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("SATA controller index %1$d out of [0..3]= range"), + controllerOrBus); + return -1; + } =20 - case VIR_DOMAIN_DISK_BUS_IDE: - if (controllerOrBus < 0 || controllerOrBus > 1) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("IDE bus index %1$d out of [0..1] range"), - controllerOrBus); - return -1; - } + if (unit < 0 || unit >=3D 30) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("SATA unit index %1$d out of [0..29] rang= e"), + unit); + return -1; + } + + idx =3D controllerOrBus * 30 + unit; + prefix =3D "sd"; + break; =20 - if (unit < 0 || unit > 1) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("IDE unit index %1$d out of [0..1] range"), u= nit); + case VIR_DOMAIN_DISK_BUS_IDE: + if (controllerOrBus < 0 || controllerOrBus > 1) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("IDE bus index %1$d out of [0..1] range"), + controllerOrBus); + return -1; + } + + if (unit < 0 || unit > 1) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("IDE unit index %1$d out of [0..1] range"= ), unit); + return -1; + } + idx =3D controllerOrBus * 2 + unit; + prefix =3D "hd"; + break; + + case VIR_DOMAIN_DISK_BUS_FDC: + if (controllerOrBus !=3D 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("FDC controller index %1$d out of [0] ran= ge"), + controllerOrBus); + return -1; + } + + if (unit < 0 || unit > 1) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("FDC unit index %1$d out of [0..1] range"= ), + unit); + return -1; + } + + idx =3D unit; + prefix =3D "fd"; + break; + + case VIR_DOMAIN_DISK_BUS_VIRTIO: + case VIR_DOMAIN_DISK_BUS_XEN: + case VIR_DOMAIN_DISK_BUS_USB: + case VIR_DOMAIN_DISK_BUS_UML: + case VIR_DOMAIN_DISK_BUS_SD: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Unsupported bus type '%1$s' for device type = '%2$s'"), + virDomainDiskBusTypeToString(def->bus), + virDomainDiskDeviceTypeToString(def->device)); return -1; - } - idx =3D controllerOrBus * 2 + unit; - prefix =3D "hd"; - break; - - case VIR_DOMAIN_DISK_BUS_FDC: - if (controllerOrBus !=3D 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("FDC controller index %1$d out of [0] range"), - controllerOrBus); + break; + + case VIR_DOMAIN_DISK_BUS_NONE: + case VIR_DOMAIN_DISK_BUS_LAST: + virReportEnumRangeError(virDomainDiskBus, def->bus); return -1; + break; } =20 - if (unit < 0 || unit > 1) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("FDC unit index %1$d out of [0..1] range"), - unit); - return -1; + /* Now generate target candidate and check for its uniqueness. */ + + dst =3D virIndexToDiskName(idx + tries, prefix); + + for (i =3D 0; i < vmdef->ndisks; i++) { + if (STREQ(vmdef->disks[i]->dst, dst)) + break; } =20 - idx =3D unit; - prefix =3D "fd"; - break; - - case VIR_DOMAIN_DISK_BUS_VIRTIO: - case VIR_DOMAIN_DISK_BUS_XEN: - case VIR_DOMAIN_DISK_BUS_USB: - case VIR_DOMAIN_DISK_BUS_UML: - case VIR_DOMAIN_DISK_BUS_SD: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("Unsupported bus type '%1$s' for device type '%2$= s'"), - virDomainDiskBusTypeToString(def->bus), - virDomainDiskDeviceTypeToString(def->device)); - return -1; - break; - - case VIR_DOMAIN_DISK_BUS_NONE: - case VIR_DOMAIN_DISK_BUS_LAST: - virReportEnumRangeError(virDomainDiskBus, def->bus); - return -1; - break; + if (i =3D=3D vmdef->ndisks) { + def->dst =3D g_steal_pointer(&dst); + return 0; + } } =20 - def->dst =3D virIndexToDiskName(idx, prefix); - return 0; + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to generate disk target name")); + return -1; } =20 =20 diff --git a/tests/vmx2xmldata/esx-in-the-wild-12.xml b/tests/vmx2xmldata/e= sx-in-the-wild-12.xml index 42184501d0..a7730845ee 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-12.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-12.xml @@ -21,9 +21,9 @@
- + -
+
diff --git a/tests/vmx2xmldata/esx-in-the-wild-8.xml b/tests/vmx2xmldata/es= x-in-the-wild-8.xml index 0eea610709..4e3f986e38 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-8.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-8.xml @@ -36,9 +36,9 @@ - + -
+
--=20 2.41.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org