[libvirt] [PATCH] interface: dumpx inactive xml when interface isn't active

Michal Privoznik mprivozn at redhat.com
Mon Apr 7 12:53:41 UTC 2014


On 07.04.2014 14:32, Laine Stump wrote:
> Other drivers in libvirt (e.g. network, qemu) will automatically
> return the "inactive" (persistent configuration) XML of an object when
> that object is inactive. The netcf backend of the interface driver
> would always try to return the live status XML of the interface, even
> when it was down. Although netcf does return valid XML in that case,
> for bond interfaces it is missing almost all of its content, including
> the <bond> subelement itself, leading to this error message from
> "virsh iface-dumpxml" of a bond interface that is inactive:
>
>    error: XML error: bond interface misses the bond element
>
> (this is because libvirt's validation of the XML returned by netcf
> always requires a <bond> element be present).
>
> This patch modifies the interface driver netcf backend to check if the
> interface is inactive, and in that case always return the inactive XML
> (which will always have a <bond> element, thus eliminating the error
> message, as well as making operation more in line with other drivers.
>
> This fixes the following bug:
>
>    https://bugzilla.redhat.com/show_bug.cgi?id=878394
> ---
>   src/interface/interface_backend_netcf.c | 6 +++++-
>   1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interface_backend_netcf.c
> index 4d55653..36a50bd 100644
> --- a/src/interface/interface_backend_netcf.c
> +++ b/src/interface/interface_backend_netcf.c
> @@ -801,6 +801,7 @@ static char *netcfInterfaceGetXMLDesc(virInterfacePtr ifinfo,
>       char *xmlstr = NULL;
>       virInterfaceDefPtr ifacedef = NULL;
>       char *ret = NULL;
> +    bool active;
>
>       virCheckFlags(VIR_INTERFACE_XML_INACTIVE, NULL);
>
> @@ -812,7 +813,10 @@ static char *netcfInterfaceGetXMLDesc(virInterfacePtr ifinfo,
>           goto cleanup;
>       }
>
> -    if ((flags & VIR_INTERFACE_XML_INACTIVE)) {
> +    if (netcfInterfaceObjIsActive(iface, &active) < 0)
> +       goto cleanup;
> +
> +    if ((flags & VIR_INTERFACE_XML_INACTIVE) || !active) {
>           xmlstr = ncf_if_xml_desc(iface);
>       } else {
>           xmlstr = ncf_if_xml_state(iface);
>


ACK

Michal




More information about the libvir-list mailing list