[libvirt] [PATCH 3/3] qemu: Explicitly error if guest virtual network is inactive

Daniel P. Berrange berrange at redhat.com
Thu Feb 18 12:46:20 UTC 2010


On Tue, Feb 16, 2010 at 02:37:02PM -0500, Cole Robinson wrote:
> Currently we just error with ex. 'virbr0: No such device'.
> 
> Since we are using public API calls here, we need to ensure that any
> raised error is properly saved and restored, since API entry points
> always reset messages.
> 
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
>  src/qemu/qemu_conf.c |   28 +++++++++++++++++++++++++---
>  1 files changed, 25 insertions(+), 3 deletions(-)
> 
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index c9fe55b..6c64deb 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> @@ -1482,17 +1482,39 @@ qemudNetworkIfaceConnect(virConnectPtr conn,
>      int template_ifname = 0;
>  
>      if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
> +        int active, fail = 0;
> +        virErrorPtr errobj;
>          virNetworkPtr network = virNetworkLookupByName(conn,
> -                                                      net->data.network.name);
> +                                                       net->data.network.name);
>          if (!network)
>              return -1;
>  
> -        brname = virNetworkGetBridgeName(network);
> +        active = virNetworkIsActive(network);
> +        if (active != 1) {
> +            fail = 1;
>  
> +            if (active == 0)
> +                qemuReportError(VIR_ERR_INTERNAL_ERROR,
> +                                _("Network '%s' is not active."),
> +                                net->data.network.name);
> +        }
> +
> +        if (!fail) {
> +            brname = virNetworkGetBridgeName(network);
> +            if (brname == NULL)
> +                fail = 1;
> +        }
> +
> +        /* Make sure any above failure is preserved */
> +        errobj = virSaveLastError();
>          virNetworkFree(network);
> +        virSetError(errobj);
> +        virFreeError(errobj);
>  
> -        if (brname == NULL)
> +        errobj = virSaveLastError();
> +        if (fail)
>              return -1;
> +
>      } else if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) {
>          if (!(brname = strdup(net->data.bridge.brname))) {
>              virReportOOMError();
> -- 

ACK


Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list