[libvirt] [PATCH] LXC implement missing lxcDomainInterfaceStats (domifstat)

Daniel P. Berrange berrange at redhat.com
Thu Nov 12 11:18:45 UTC 2009


On Fri, Nov 06, 2009 at 08:33:37AM +0900, Ryota Ozaki wrote:
> Most part of code is just copied from qemu_driver.c.
> 
> * src/lxc/lxc_driver.c: add lxcDomainInterfaceStats
> ---
>  src/lxc/lxc_driver.c |   62 +++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 61 insertions(+), 1 deletions(-)
> 
> diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
> index a917a46..542b382 100644
> --- a/src/lxc/lxc_driver.c
> +++ b/src/lxc/lxc_driver.c
> @@ -48,6 +48,7 @@
>  #include "event.h"
>  #include "nodeinfo.h"
>  #include "uuid.h"
> +#include "stats_linux.h"
>  
>  
>  #define VIR_FROM_THIS VIR_FROM_LXC
> @@ -1939,6 +1940,65 @@ cleanup:
>      return ret;
>  }
>  
> +#ifdef __linux__
> +static int
> +lxcDomainInterfaceStats(virDomainPtr dom,
> +                        const char *path,
> +                        struct _virDomainInterfaceStats *stats)
> +{
> +    lxc_driver_t *driver = dom->conn->privateData;
> +    virDomainObjPtr vm;
> +    int i;
> +    int ret = -1;
> +
> +    lxcDriverLock(driver);
> +    vm = virDomainFindByUUID(&driver->domains, dom->uuid);
> +    lxcDriverUnlock(driver);
> +
> +    if (!vm) {
> +        char uuidstr[VIR_UUID_STRING_BUFLEN];
> +        virUUIDFormat(dom->uuid, uuidstr);
> +        lxcError(dom->conn, dom, VIR_ERR_NO_DOMAIN,
> +                 _("No domain with matching uuid '%s'"), uuidstr);
> +        goto cleanup;
> +    }
> +
> +    if (!virDomainObjIsActive(vm)) {
> +        lxcError(dom->conn, dom, VIR_ERR_OPERATION_INVALID,
> +                 "%s", _("Domain is not running"));
> +        goto cleanup;
> +    }
> +
> +    /* Check the path is one of the domain's network interfaces. */
> +    for (i = 0 ; i < vm->def->nnets ; i++) {
> +        if (vm->def->nets[i]->ifname &&
> +            STREQ(vm->def->nets[i]->ifname, path)) {
> +            ret = 0;
> +            break;
> +        }
> +    }
> +
> +    if (ret == 0)
> +        ret = linuxDomainInterfaceStats(dom->conn, path, stats);
> +    else
> +        lxcError(dom->conn, dom, VIR_ERR_INVALID_ARG,
> +                 _("Invalid path, '%s' is not a known interface"), path);
> +
> +cleanup:
> +    if (vm)
> +        virDomainObjUnlock(vm);
> +    return ret;
> +}
> +#else
> +static int
> +lxcDomainInterfaceStats(virDomainPtr dom,
> +                        const char *path ATTRIBUTE_UNUSED,
> +                        struct _virDomainInterfaceStats *stats ATTRIBUTE_UNUSED)
> +    lxcError(dom->conn, dom, VIR_ERR_NO_SUPPORT, "%s", __FUNCTION__);
> +    return -1;
> +}
> +#endif
> +
>  static int lxcDomainGetAutostart(virDomainPtr dom,
>                                     int *autostart) {
>      lxc_driver_t *driver = dom->conn->privateData;
> @@ -2308,7 +2368,7 @@ static virDriver lxcDriver = {
>      NULL, /* domainMigratePerform */
>      NULL, /* domainMigrateFinish */
>      NULL, /* domainBlockStats */
> -    NULL, /* domainInterfaceStats */
> +    lxcDomainInterfaceStats, /* domainInterfaceStats */
>      NULL, /* domainBlockPeek */
>      NULL, /* domainMemoryPeek */
>      nodeGetCellsFreeMemory, /* nodeGetCellsFreeMemory */

ACK, looks good

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