# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1204117842 0
# Node ID 368d3774a4b5f629f9eb91c77c4a36a436c341e0
# Parent 2a8eaba24bf0482db8d44aa1c638ffa7e3894f43
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 <john.levon@xxxxxxx>
---
tools/xenstat/libxenstat/src/xenstat_solaris.c | 44 +++++--------------------
1 files changed, 9 insertions(+), 35 deletions(-)
diff -r 2a8eaba24bf0 -r 368d3774a4b5
tools/xenstat/libxenstat/src/xenstat_solaris.c
--- a/tools/xenstat/libxenstat/src/xenstat_solaris.c Tue Feb 26 15:11:51
2008 +0000
+++ b/tools/xenstat/libxenstat/src/xenstat_solaris.c Wed Feb 27 13:10:42
2008 +0000
@@ -113,49 +113,23 @@ static void xenstat_uninit_devs(xenstat_
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";
- }
-
- if (kstat_chain_update(priv->kc) == -1)
- return 0;
-
- ksp = kstat_lookup(priv->kc, mod, inst, (char *)name);
+ ksp = kstat_lookup(priv->kc, "xdb", dev->instance,
+ (char *)"req_statistics");
+ }
+
if (ksp == NULL)
return 0;
+
if (kstat_read(priv->kc, ksp, NULL) == -1)
return 0;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|