From 0d85523cf3c9fce6ef3840bb52cc9887a21d0ccb Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 27 Feb 2008 13:10:42 +0000 Subject: Fix libxenstat on Solaris Recent Solaris enhancements have changed the way virtual NIC statistics are collected - fix libxenstat up for this. Signed-off-by: John Levon --- tools/xenstat/libxenstat/src/xenstat_solaris.c | 40 +++++--------------------- 1 file changed, 7 insertions(+), 33 deletions(-) (limited to 'tools/xenstat') diff --git a/tools/xenstat/libxenstat/src/xenstat_solaris.c b/tools/xenstat/libxenstat/src/xenstat_solaris.c index 719c30d8ac..d79c410f44 100644 --- a/tools/xenstat/libxenstat/src/xenstat_solaris.c +++ b/tools/xenstat/libxenstat/src/xenstat_solaris.c @@ -113,49 +113,23 @@ static void xenstat_uninit_devs(xenstat_handle *handle, int type) priv->kc = NULL; } -static int parse_nic(const char *nic, char *module, int *instance) -{ - const char *c; - - for (c = &nic[strlen(nic) - 1]; c != nic && isdigit(*c); c--) - ; - - if (c == nic) - return 0; - - c++; - - if (sscanf(c, "%d", instance) != 1) - return 0; - - strncpy(module, nic, c - nic); - module[c - nic] = '\0'; - return 1; -} - static int update_dev_stats(priv_data_t *priv, stdevice_t *dev) { - char mod[256]; - const char *name; - int inst; kstat_t *ksp; + if (kstat_chain_update(priv->kc) == -1) + return 0; + if (dev->type == DEVICE_NIC) { - if (!parse_nic(dev->name, mod, &inst)) - return 0; - name = "mac"; + ksp = kstat_lookup(priv->kc, "link", 0, (char *)dev->name); } else { - strcpy(mod, "xdb"); - inst = dev->instance; - name = "req_statistics"; + ksp = kstat_lookup(priv->kc, "xdb", dev->instance, + (char *)"req_statistics"); } - if (kstat_chain_update(priv->kc) == -1) - return 0; - - ksp = kstat_lookup(priv->kc, mod, inst, (char *)name); if (ksp == NULL) return 0; + if (kstat_read(priv->kc, ksp, NULL) == -1) return 0; -- cgit v1.2.3