# HG changeset patch
# User john.levon@xxxxxxx
# Date 1204039041 28800
# Node ID 472989331ad1f71fa99b8b6418073d4036c802ba
# Parent 6a09ea2f3b4e44a76962f6f62cd43039c1610824
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>
diff --git a/tools/xenstat/libxenstat/src/xenstat_solaris.c
b/tools/xenstat/libxenstat/src/xenstat_solaris.c
--- 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_
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 (dev->type == DEVICE_NIC) {
- if (!parse_nic(dev->name, mod, &inst))
- return 0;
- name = "mac";
- } 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);
+ if (dev->type == DEVICE_NIC) {
+ ksp = kstat_lookup(priv->kc, "link", 0, (char *)dev->name);
+ } else {
+ 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-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|