]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Format managed property of hostdev-pci ports correctly
authorAndrea Bolognani <abologna@redhat.com>
Thu, 24 Mar 2022 18:07:40 +0000 (19:07 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Tue, 5 Apr 2022 11:40:33 +0000 (13:40 +0200)
The property is parsed using virTristateBoolTypeFromString() but
formatted as if it was a regular bool, which results in the
following incorrect conversion:

  BOOL_ABSENT -> managed='no'
  BOOL_YES    -> managed='yes'
  BOOL_NO     -> managed='yes'

Use the virTristateBoolTypeToString() helper to ensure the
setting can survive a roundtrip conversion.

Fixes: 4b4a981d60d3372fb73bb3546ab1052844b2e3d5
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/virnetworkportdef.c
tests/virnetworkportxml2xmldata/plug-hostdev-pci-unmanaged.xml [new file with mode: 0644]
tests/virnetworkportxml2xmltest.c

index fcd9e55a557b2292f054ee917ef4b57a0c5fa165..aa35374fb0bc1578e935511e2d06b311ce87b511 100644 (file)
@@ -384,8 +384,11 @@ virNetworkPortDefFormatBuf(virBuffer *buf,
             break;
 
         case VIR_NETWORK_PORT_PLUG_TYPE_HOSTDEV_PCI:
-            virBufferAsprintf(buf, " managed='%s'>\n",
-                              def->plug.hostdevpci.managed ? "yes" : "no");
+            if (def->plug.hostdevpci.managed) {
+                virBufferAsprintf(buf, " managed='%s'",
+                                  virTristateBoolTypeToString(def->plug.hostdevpci.managed));
+            }
+            virBufferAddLit(buf, ">\n");
             virBufferAdjustIndent(buf, 2);
             if (def->plug.hostdevpci.driver)
                 virBufferEscapeString(buf, "<driver name='%s'/>\n",
diff --git a/tests/virnetworkportxml2xmldata/plug-hostdev-pci-unmanaged.xml b/tests/virnetworkportxml2xmldata/plug-hostdev-pci-unmanaged.xml
new file mode 100644 (file)
index 0000000..da5f568
--- /dev/null
@@ -0,0 +1,12 @@
+<networkport>
+  <uuid>5d744f21-ba4a-4d6e-bdb2-30a35ff3207d</uuid>
+  <owner>
+    <name>memtest</name>
+    <uuid>d54df46f-1ab5-4a22-8618-4560ef5fac2c</uuid>
+  </owner>
+  <mac address='52:54:00:7b:35:93'/>
+  <plug type='hostdev-pci' managed='no'>
+    <driver name='vfio'/>
+    <address domain='0x0001' bus='0x02' slot='0x03' function='0x4'/>
+  </plug>
+</networkport>
index 093d855633e58900a75de317a4a76cdd44613513..176f52d675da3ccac16b2885a7898112cd538cf8 100644 (file)
@@ -85,6 +85,7 @@ mymain(void)
     DO_TEST("plug-bridge-mactbl");
     DO_TEST("plug-direct");
     DO_TEST("plug-hostdev-pci");
+    DO_TEST("plug-hostdev-pci-unmanaged");
     DO_TEST("plug-network");
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;