mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06: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,
|
virDomainNetDefCoalesceParseXML(xmlNodePtr node,
|
||||||
xmlXPathContextPtr ctxt)
|
xmlXPathContextPtr ctxt,
|
||||||
|
virNetDevCoalescePtr *coalesce)
|
||||||
{
|
{
|
||||||
virNetDevCoalescePtr ret = NULL;
|
|
||||||
VIR_XPATH_NODE_AUTORESTORE(ctxt)
|
VIR_XPATH_NODE_AUTORESTORE(ctxt)
|
||||||
unsigned long long tmp = 0;
|
unsigned long long tmp = 0;
|
||||||
g_autofree char *str = NULL;
|
g_autofree char *str = NULL;
|
||||||
@ -7611,15 +7611,13 @@ virDomainNetDefCoalesceParseXML(xmlNodePtr node,
|
|||||||
|
|
||||||
str = virXPathString("string(./rx/frames/@max)", ctxt);
|
str = virXPathString("string(./rx/frames/@max)", ctxt);
|
||||||
if (!str)
|
if (!str)
|
||||||
return NULL;
|
return 0;
|
||||||
|
|
||||||
ret = g_new0(virNetDevCoalesce, 1);
|
|
||||||
|
|
||||||
if (virStrToLong_ullp(str, NULL, 10, &tmp) < 0) {
|
if (virStrToLong_ullp(str, NULL, 10, &tmp) < 0) {
|
||||||
virReportError(VIR_ERR_XML_DETAIL,
|
virReportError(VIR_ERR_XML_DETAIL,
|
||||||
_("cannot parse value '%s' for coalesce parameter"),
|
_("cannot parse value '%s' for coalesce parameter"),
|
||||||
str);
|
str);
|
||||||
goto error;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tmp > UINT32_MAX) {
|
if (tmp > UINT32_MAX) {
|
||||||
@ -7627,15 +7625,13 @@ virDomainNetDefCoalesceParseXML(xmlNodePtr node,
|
|||||||
_("value '%llu' is too big for coalesce "
|
_("value '%llu' is too big for coalesce "
|
||||||
"parameter, maximum is '%lu'"),
|
"parameter, maximum is '%lu'"),
|
||||||
tmp, (unsigned long) UINT32_MAX);
|
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:
|
return 0;
|
||||||
VIR_FREE(ret);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -11599,8 +11595,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
|
|||||||
|
|
||||||
node = virXPathNode("./coalesce", ctxt);
|
node = virXPathNode("./coalesce", ctxt);
|
||||||
if (node) {
|
if (node) {
|
||||||
def->coalesce = virDomainNetDefCoalesceParseXML(node, ctxt);
|
if (virDomainNetDefCoalesceParseXML(node, ctxt, &def->coalesce) < 0)
|
||||||
if (!def->coalesce)
|
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +55,15 @@
|
|||||||
</rx>
|
</rx>
|
||||||
</coalesce>
|
</coalesce>
|
||||||
</interface>
|
</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'>
|
<serial type='pty'>
|
||||||
<target port='0'/>
|
<target port='0'/>
|
||||||
</serial>
|
</serial>
|
||||||
|
@ -56,6 +56,12 @@
|
|||||||
<model type='virtio'/>
|
<model type='virtio'/>
|
||||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
||||||
</interface>
|
</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'>
|
<serial type='pty'>
|
||||||
<target type='isa-serial' port='0'>
|
<target type='isa-serial' port='0'>
|
||||||
<model name='isa-serial'/>
|
<model name='isa-serial'/>
|
||||||
@ -68,7 +74,7 @@
|
|||||||
<input type='keyboard' bus='ps2'/>
|
<input type='keyboard' bus='ps2'/>
|
||||||
<audio id='1' type='none'/>
|
<audio id='1' type='none'/>
|
||||||
<memballoon model='virtio'>
|
<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>
|
</memballoon>
|
||||||
</devices>
|
</devices>
|
||||||
</domain>
|
</domain>
|
||||||
|
Loading…
Reference in New Issue
Block a user