]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: don't raise error upon interface update without <frames/> for <rx/> in coalesce
authorKristina Hanicova <khanicov@redhat.com>
Wed, 10 Mar 2021 17:01:17 +0000 (18:01 +0100)
committerMartin Kletzander <mkletzan@redhat.com>
Tue, 23 Mar 2021 14:37:45 +0000 (15:37 +0100)
With this, incomplete XML without <frames/> for <rx/> in coalesce
won't raise error as before. It will leave the coalesce parameter
empty, thanks to passing it as a parameter and return an integer
to indicate error state - previously it returned pointer (or NULL
for both error and incomplete XML).
I also added a test case to test this functionality in the
qemuxml2xmltest.

The code went through some refactoring:
* change of a condition
* addition of a parameter
* change of order, that allowed removal of VIR_FREE
* removal of redundant labels and variables

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1535930
Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
src/conf/domain_conf.c
tests/qemuxml2argvdata/net-coalesce.xml
tests/qemuxml2xmloutdata/net-coalesce.xml

index 9bf12ff599b97975c047adc9e92d1e181c4d166c..b7f9c01e88a94cd722e4a8977c30ecf678f03ccb 100644 (file)
@@ -7598,11 +7598,11 @@ virDomainNetIPInfoParseXML(const char *source,
 }
 
 
-static virNetDevCoalescePtr
+static int
 virDomainNetDefCoalesceParseXML(xmlNodePtr node,
-                                xmlXPathContextPtr ctxt)
+                                xmlXPathContextPtr ctxt,
+                                virNetDevCoalescePtr *coalesce)
 {
-    virNetDevCoalescePtr ret = NULL;
     VIR_XPATH_NODE_AUTORESTORE(ctxt)
     unsigned long long tmp = 0;
     g_autofree char *str = NULL;
@@ -7611,15 +7611,13 @@ virDomainNetDefCoalesceParseXML(xmlNodePtr node,
 
     str = virXPathString("string(./rx/frames/@max)", ctxt);
     if (!str)
-        return NULL;
-
-    ret = g_new0(virNetDevCoalesce, 1);
+        return 0;
 
     if (virStrToLong_ullp(str, NULL, 10, &tmp) < 0) {
         virReportError(VIR_ERR_XML_DETAIL,
                        _("cannot parse value '%s' for coalesce parameter"),
                        str);
-        goto error;
+        return -1;
     }
 
     if (tmp > UINT32_MAX) {
@@ -7627,15 +7625,13 @@ virDomainNetDefCoalesceParseXML(xmlNodePtr node,
                        _("value '%llu' is too big for coalesce "
                          "parameter, maximum is '%lu'"),
                        tmp, (unsigned long) UINT32_MAX);
-        goto error;
+        return -1;
     }
-    ret->rx_max_coalesced_frames = tmp;
 
-    return ret;
+    *coalesce = g_new0(virNetDevCoalesce, 1);
+    (*coalesce)->rx_max_coalesced_frames = tmp;
 
- error:
-    VIR_FREE(ret);
-    return NULL;
+    return 0;
 }
 
 static void
@@ -11599,8 +11595,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
 
     node = virXPathNode("./coalesce", ctxt);
     if (node) {
-        def->coalesce = virDomainNetDefCoalesceParseXML(node, ctxt);
-        if (!def->coalesce)
+        if (virDomainNetDefCoalesceParseXML(node, ctxt, &def->coalesce) < 0)
             goto error;
     }
 
index bdcf7864295345007e662883bf315db61b3750f8..6fa3641e7dfe733c1089f4d638b50117ae1fd604 100644 (file)
         </rx>
       </coalesce>
     </interface>
+    <interface type='network'>
+      <source network='default'/>
+      <mac address='52:54:00:e5:48:60'/>
+      <model type='virtio'/>
+      <coalesce>
+        <rx>
+        </rx>
+      </coalesce>
+    </interface>
     <serial type='pty'>
       <target port='0'/>
     </serial>
index 146fcaae25bf3abc194dfbfa6120e82a5ce605d3..55d08cad1d8073d197de4c43b497782e024f526a 100644 (file)
       <model type='virtio'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
     </interface>
+    <interface type='network'>
+      <mac address='52:54:00:e5:48:60'/>
+      <source network='default'/>
+      <model type='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
+    </interface>
     <serial type='pty'>
       <target type='isa-serial' port='0'>
         <model name='isa-serial'/>
@@ -68,7 +74,7 @@
     <input type='keyboard' bus='ps2'/>
     <audio id='1' type='none'/>
     <memballoon model='virtio'>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
     </memballoon>
   </devices>
 </domain>