mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 17:34:18 +03:00
qemu: don't raise error upon interface update without <frames/> for <rx/> in coalesce
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>
This commit is contained in:
parent
e2602f2bb1
commit
511bdb0bb2
@ -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;
|
||||
}
|
||||
|
||||
|
@ -55,6 +55,15 @@
|
||||
</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>
|
||||
|
@ -56,6 +56,12 @@
|
||||
<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>
|
||||
|
Loading…
Reference in New Issue
Block a user