[libvirt] [PATCH] openvz: add network interface stats
Guido Günther
agx at sigxcpu.org
Mon Apr 23 19:43:23 UTC 2012
On Fri, Apr 20, 2012 at 12:01:51PM -0400, Laine Stump wrote:
> On 04/19/2012 06:32 PM, Guido Günther wrote:
> > This will only work for veth devices since venet devices don't have
> > a target element.
>
>
> Well, there is precedent for having stats work on some types of
> interfaces and not on others - type='user' interfaces in qemu also don't
> get stats (as the gnome-boxes guys found out, much to their
> disappointment). (Anyway, my point is that this shouldn't stop us from
> enabling stats for those interfaces we *can* support :-)
>
>
> > ---
> > src/openvz/openvz_driver.c | 52 ++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 52 insertions(+)
> >
> > diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
> > index 7ec327d..e8b6915 100644
> > --- a/src/openvz/openvz_driver.c
> > +++ b/src/openvz/openvz_driver.c
> > @@ -57,6 +57,7 @@
> > #include "logging.h"
> > #include "command.h"
> > #include "viruri.h"
> > +#include "stats_linux.h"
> >
> > #define VIR_FROM_THIS VIR_FROM_OPENVZ
> >
> > @@ -1672,6 +1673,56 @@ cleanup:
> > return ret;
> > }
> >
> > +static int
> > +openvzDomainInterfaceStats (virDomainPtr dom,
> > + const char *path,
> > + struct _virDomainInterfaceStats *stats)
> > +{
> > + struct openvz_driver *driver = dom->conn->privateData;
> > + virDomainObjPtr vm;
> > + int i;
> > + int ret = -1;
> > +
> > + openvzDriverLock(driver);
> > + vm = virDomainFindByUUID(&driver->domains, dom->uuid);
> > + openvzDriverUnlock(driver);
> > +
> > + if (!vm) {
> > + char uuidstr[VIR_UUID_STRING_BUFLEN];
> > + virUUIDFormat(dom->uuid, uuidstr);
> > + openvzError(VIR_ERR_NO_DOMAIN,
> > + _("no domain with matching uuid '%s'"), uuidstr);
> > + goto cleanup;
> > + }
> > +
> > + if (!virDomainObjIsActive(vm)) {
> > + openvzError(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(path, stats);
> > + else
> > + openvzError(VIR_ERR_INVALID_ARG,
> > + _("invalid path, '%s' is not a known interface"), path);
> > +
> > +cleanup:
> > + if (vm)
> > + virDomainObjUnlock(vm);
> > + return ret;
> > +}
> > +
> > +
> > static virDriver openvzDriver = {
> > .no = VIR_DRV_OPENVZ,
> > .name = "OPENVZ",
> > @@ -1717,6 +1768,7 @@ static virDriver openvzDriver = {
> > .domainUndefineFlags = openvzDomainUndefineFlags, /* 0.9.4 */
> > .domainGetAutostart = openvzDomainGetAutostart, /* 0.4.6 */
> > .domainSetAutostart = openvzDomainSetAutostart, /* 0.4.6 */
> > + .domainInterfaceStats = openvzDomainInterfaceStats, /* 0.9.12 */
> > .isEncrypted = openvzIsEncrypted, /* 0.7.3 */
> > .isSecure = openvzIsSecure, /* 0.7.3 */
> > .domainIsActive = openvzDomainIsActive, /* 0.7.3 */
>
> ACK. This is pretty much verbatim what is in qemuDomainInterfaceStats,
> and they're both operating on a host-side veth/tap.
Pushed. Thanks,
-- Guido
More information about the libvir-list
mailing list