--- projects/libstatgrab/src/statgrab/statgrab.c 2004/02/13 12:52:40 1.18 +++ projects/libstatgrab/src/statgrab/statgrab.c 2004/04/04 21:59:16 1.23 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Id: statgrab.c,v 1.18 2004/02/13 12:52:40 ats Exp $ + * $Id: statgrab.c,v 1.23 2004/04/04 21:59:16 ats Exp $ */ #ifdef HAVE_CONFIG_H @@ -38,6 +38,7 @@ typedef enum { DOUBLE, STRING, INT, + BOOL, DUPLEX } stat_type; @@ -362,6 +363,16 @@ void populate_net() { "net", name, "tx", NULL); add_stat(LONG_LONG, &net[i].rx, "net", name, "rx", NULL); + add_stat(LONG_LONG, &net[i].ipackets, + "net", name, "ipackets", NULL); + add_stat(LONG_LONG, &net[i].opackets, + "net", name, "opackets", NULL); + add_stat(LONG_LONG, &net[i].ierrors, + "net", name, "ierrors", NULL); + add_stat(LONG_LONG, &net[i].oerrors, + "net", name, "oerrors", NULL); + add_stat(LONG_LONG, &net[i].collisions, + "net", name, "collisions", NULL); add_stat(TIME_T, &net[i].systime, "net", name, "systime", NULL); } @@ -374,6 +385,8 @@ void populate_net() { add_stat(INT, &iface[i].speed, "net", name, "speed", NULL); + add_stat(BOOL, &iface[i].up, + "net", name, "up", NULL); add_stat(DUPLEX, &iface[i].dup, "net", name, "duplex", NULL); } @@ -446,12 +459,14 @@ void get_stats() { t->populate(); } - qsort(stats, num_stats, sizeof *stats, stats_compare); + if (stats != NULL) + qsort(stats, num_stats, sizeof *stats, stats_compare); } /* Print the value of a stat. */ void print_stat_value(const stat *s) { void *v = s->stat; + long l; switch (s->type) { case LONG_LONG: @@ -459,7 +474,8 @@ void print_stat_value(const stat *s) { break; case TIME_T: /* FIXME option for formatted time? */ - printf("%ld", *(time_t *)v); + l = *(time_t *)v; + printf("%ld", l); break; case FLOAT: printf("%f", *(float *)v); @@ -474,8 +490,11 @@ void print_stat_value(const stat *s) { case INT: printf("%d", *(int *)v); break; + case BOOL: + printf("%s", *(int *)v ? "true" : "false"); + break; case DUPLEX: - switch (*(duplex *) v) { + switch (*(statgrab_duplex *) v) { case FULL_DUPLEX: printf("full"); break; @@ -529,8 +548,15 @@ void print_stats(int argc, char **argv) { else compare = stats_compare; - s = (const stat *)bsearch(&key, stats, num_stats, - sizeof *stats, compare); + if (stats == NULL) { + s = NULL; + } else { + s = (const stat *)bsearch(&key, stats, + num_stats, + sizeof *stats, + compare); + } + if (s == NULL) { printf("Unknown stat %s\n", name); continue;