summaryrefslogtreecommitdiff
path: root/src/pmdas/aix/data.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pmdas/aix/data.c')
-rw-r--r--src/pmdas/aix/data.c435
1 files changed, 435 insertions, 0 deletions
diff --git a/src/pmdas/aix/data.c b/src/pmdas/aix/data.c
new file mode 100644
index 0000000..6198e78
--- /dev/null
+++ b/src/pmdas/aix/data.c
@@ -0,0 +1,435 @@
+/*
+ * Data structures that define metrics and control the AIX PMDA
+ *
+ * Copyright (c) 2004 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#include "common.h"
+#include <ctype.h>
+
+/*
+ * List of instance domains ... we expect the *_INDOM macros
+ * to index into this table.
+ */
+pmdaIndom indomtab[] = {
+ { DISK_INDOM, 0, NULL },
+ { CPU_INDOM, 0, NULL },
+ { NETIF_INDOM, 0, NULL }
+};
+int indomtab_sz = sizeof(indomtab) / sizeof(indomtab[0]);
+
+pmdaMetric *metrictab;
+
+method_t methodtab[] = {
+ { cpu_total_init, cpu_total_prefetch, cpu_total_fetch }, // M_CPU_TOTAL
+ { cpu_init, cpu_prefetch, cpu_fetch }, // M_CPU
+ { disk_total_init, disk_total_prefetch, disk_total_fetch }, // M_DISK_TOTAL
+ { disk_init, disk_prefetch, disk_fetch }, // M_DISK
+ { netif_init, netif_prefetch, netif_fetch } // M_NETIF
+ // M_NETBUF - TODO
+ // M_PROTO - TODO
+ // M_MEM_TOTAL - TODO
+};
+int methodtab_sz = sizeof(methodtab) / sizeof(methodtab[0]);
+
+#define CPU_OFF(field) ((int)&((perfstat_cpu_t *)0)->field)
+#define CPU_TOTAL_OFF(field) ((int)&((perfstat_cpu_total_t *)0)->field)
+#define DISK_OFF(field) ((int)&((perfstat_disk_t *)0)->field)
+#define DISK_TOTAL_OFF(field) ((int)&((perfstat_disk_total_t *)0)->field)
+#define NETIF_OFF(field) ((int)&((perfstat_netinterface_t *)0)->field)
+
+/*
+ * all metrics supported in this PMDA - one table entry for each metric
+ */
+metricdesc_t metricdesc[] = {
+
+/* kernel.all.cpu.idle */
+ { { PMDA_PMID(0,0), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(idle) },
+
+/* kernel.all.cpu.user */
+ { { PMDA_PMID(0,1), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(user) },
+
+/* kernel.all.cpu.sys */
+ { { PMDA_PMID(0,2), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(sys) },
+
+/* kernel.all.cpu.wait.total */
+ { { PMDA_PMID(0,3), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(wait) },
+
+/* kernel.percpu.cpu.idle */
+ { { PMDA_PMID(0,4), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU, CPU_OFF(idle) },
+
+/* kernel.percpu.cpu.user */
+ { { PMDA_PMID(0,5), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU, CPU_OFF(user) },
+
+/* kernel.percpu.cpu.sys */
+ { { PMDA_PMID(0,6), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU, CPU_OFF(sys) },
+
+/* kernel.percpu.cpu.wait.total */
+ { { PMDA_PMID(0,7), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU, CPU_OFF(wait) },
+
+/* kernel.all.readch */
+ { { PMDA_PMID(0,8), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(readch) },
+
+/* kernel.all.writech */
+ { { PMDA_PMID(0,9), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(readch) },
+
+/* kernel.all.io.softintrs */
+ { { PMDA_PMID(0,10), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(softintrs) },
+
+/* kernel.percpu.readch */
+ { { PMDA_PMID(0,11), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU, CPU_OFF(readch) },
+
+/* kernel.percpu.writech */
+ { { PMDA_PMID(0,12), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU, CPU_OFF(writech) },
+
+/* kernel.percpu.cpu.intr */
+ { { PMDA_PMID(0,13), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU, OFF_NOVALUES },
+
+/* kernel.all.io.bread */
+ { { PMDA_PMID(0,14), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(bread) },
+
+/* kernel.all.io.bwrite */
+ { { PMDA_PMID(0,15), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(bwrite) },
+
+/* kernel.all.io.lread */
+ { { PMDA_PMID(0,16), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(lread) },
+
+/* kernel.all.io.lwrite */
+ { { PMDA_PMID(0,17), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(lwrite) },
+
+/* kernel.percpu.io.bread */
+ { { PMDA_PMID(0,18), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(bread) },
+
+/* kernel.percpu.io.bwrite */
+ { { PMDA_PMID(0,19), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(bwrite) },
+
+/* kernel.percpu.io.lread */
+ { { PMDA_PMID(0,20), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(lread) },
+
+/* kernel.percpu.io.lwrite */
+ { { PMDA_PMID(0,21), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(lwrite) },
+
+/* kernel.all.syscall */
+ { { PMDA_PMID(0,22), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(syscall) },
+
+/* kernel.all.pswitch */
+ { { PMDA_PMID(0,23), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(pswitch) },
+
+/* kernel.percpu.syscall */
+ { { PMDA_PMID(0,24), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(syscall) },
+
+/* kernel.percpu.pswitch */
+ { { PMDA_PMID(0,25), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(pswitch) },
+
+/* kernel.all.io.phread */
+ { { PMDA_PMID(0,26), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(phread) },
+
+/* kernel.all.io.phwrite */
+ { { PMDA_PMID(0,27), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(phwrite) },
+
+/* kernel.all.io.devintrs */
+ { { PMDA_PMID(0,28), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(devintrs) },
+
+/* kernel.percpu.io.phread */
+ { { PMDA_PMID(0,29), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(phread) },
+
+/* kernel.percpu.io.phwrite */
+ { { PMDA_PMID(0,30), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(phwrite) },
+
+/* kernel.all.cpu.intr */
+ { { PMDA_PMID(0,31), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_MSEC, 0)
+ }, M_CPU_TOTAL, OFF_NOVALUES },
+
+/* kernel.all.trap */
+ { { PMDA_PMID(0,32), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(traps) },
+
+/* kernel.all.sysexec */
+ { { PMDA_PMID(0,33), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(sysexec) },
+
+/* kernel.all.sysfork */
+ { { PMDA_PMID(0,34), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(sysfork) },
+
+/* kernel.all.io.namei */
+ { { PMDA_PMID(0,35), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(namei) },
+
+/* kernel.all.sysread */
+ { { PMDA_PMID(0,36), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(sysread) },
+
+/* kernel.all.syswrite */
+ { { PMDA_PMID(0,37), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(syswrite) },
+
+/* hinv.ncpu_cfg */
+ { { PMDA_PMID(0,38), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(ncpus_cfg) },
+
+/* kernel.percpu.sysexec */
+ { { PMDA_PMID(0,39), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(sysexec) },
+
+/* kernel.percpu.sysfork */
+ { { PMDA_PMID(0,40), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(sysfork) },
+
+/* kernel.percpu.io.namei */
+ { { PMDA_PMID(0,41), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(namei) },
+
+/* kernel.percpu.sysread */
+ { { PMDA_PMID(0,42), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(sysread) },
+
+/* kernel.percpu.syswrite */
+ { { PMDA_PMID(0,43), PM_TYPE_U64, CPU_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU, CPU_OFF(syswrite) },
+
+/* disk.all.read -- not available */
+ { { PMDA_PMID(0,44), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_DISK_TOTAL, OFF_NOVALUES },
+
+/* disk.all.write -- not available */
+ { { PMDA_PMID(0,45), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_DISK_TOTAL, OFF_NOVALUES },
+
+/* disk.all.total */
+ { { PMDA_PMID(0,46), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_DISK_TOTAL, DISK_TOTAL_OFF(xfers) },
+
+/* disk.all.read_bytes */
+ { { PMDA_PMID(0,47), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(1, 0, 0, PM_SPACE_MBYTE, 0, 0)
+ }, M_DISK_TOTAL, DISK_TOTAL_OFF(rblks) },
+
+/* disk.all.write_bytes */
+ { { PMDA_PMID(0,48), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(1, 0, 0, PM_SPACE_MBYTE, 0, 0)
+ }, M_DISK_TOTAL, DISK_TOTAL_OFF(wblks) },
+
+/* disk.all.total_bytes */
+ { { PMDA_PMID(0,49), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ PMDA_PMUNITS(1, 0, 0, PM_SPACE_MBYTE, 0, 0)
+ }, M_DISK_TOTAL, OFF_DERIVED },
+
+/* disk.dev.read -- not available */
+ { { PMDA_PMID(0,50), PM_TYPE_U64, DISK_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_DISK, OFF_NOVALUES },
+
+/* disk.dev.write -- not available */
+ { { PMDA_PMID(0,51), PM_TYPE_U64, DISK_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_DISK, OFF_NOVALUES },
+
+/* disk.dev.total */
+ { { PMDA_PMID(0,52), PM_TYPE_U64, DISK_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_DISK, DISK_OFF(xfers) },
+
+/* disk.dev.read_bytes */
+ { { PMDA_PMID(0,53), PM_TYPE_U64, DISK_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(1, 0, 0, PM_SPACE_MBYTE, 0, 0)
+ }, M_DISK, DISK_OFF(rblks) },
+
+/* disk.dev.write_bytes */
+ { { PMDA_PMID(0,54), PM_TYPE_U64, DISK_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(1, 0, 0, PM_SPACE_MBYTE, 0, 0)
+ }, M_DISK, DISK_OFF(wblks) },
+
+/* disk.dev.total_bytes */
+ { { PMDA_PMID(0,55), PM_TYPE_U64, DISK_INDOM, PM_SEM_COUNTER,
+ PMDA_PMUNITS(1, 0, 0, PM_SPACE_MBYTE, 0, 0)
+ }, M_DISK, OFF_DERIVED },
+
+/* hinv.ncpu */
+ { { PMDA_PMID(0,56), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_CPU_TOTAL, CPU_TOTAL_OFF(ncpus) },
+
+/* hinv.ndisk */
+ { { PMDA_PMID(0,57), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_DISK_TOTAL, DISK_TOTAL_OFF(number) },
+
+/* hinv.nnetif */
+ { { PMDA_PMID(0,58), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_NETIF, OFF_DERIVED },
+
+/* network.interface.in.packets */
+ { { PMDA_PMID(0,59), PM_TYPE_U64, NETIF_INDOM, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_NETIF, NETIF_OFF(ipackets) },
+
+/* network.interface.in.bytes */
+ { { PMDA_PMID(0,60), PM_TYPE_U64, NETIF_INDOM, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(1, 0, 0, PM_SPACE_BYTE, 0, 0)
+ }, M_NETIF, NETIF_OFF(ibytes) },
+
+/* network.interface.in.errors */
+ { { PMDA_PMID(0,61), PM_TYPE_U64, NETIF_INDOM, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_NETIF, NETIF_OFF(ierrors) },
+
+/* network.interface.out.packets */
+ { { PMDA_PMID(0,62), PM_TYPE_U64, NETIF_INDOM, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_NETIF, NETIF_OFF(opackets) },
+
+/* network.interface.out.bytes */
+ { { PMDA_PMID(0,63), PM_TYPE_U64, NETIF_INDOM, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(1, 0, 0, PM_SPACE_BYTE, 0, 0)
+ }, M_NETIF, NETIF_OFF(obytes) },
+
+/* network.interface.out.errors */
+ { { PMDA_PMID(0,64), PM_TYPE_U64, NETIF_INDOM, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_NETIF, NETIF_OFF(oerrors) },
+
+/* network.interface.total.packets */
+ { { PMDA_PMID(0,65), PM_TYPE_U64, NETIF_INDOM, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(0, 0, 1, 0, 0, PM_COUNT_ONE)
+ }, M_NETIF, OFF_DERIVED },
+
+/* network.interface.total.bytes */
+ { { PMDA_PMID(0,66), PM_TYPE_U64, NETIF_INDOM, PM_SEM_DISCRETE,
+ PMDA_PMUNITS(1, 0, 0, PM_SPACE_BYTE, 0, 0)
+ }, M_NETIF, OFF_DERIVED }
+
+/* remember to add trailing comma before adding more entries ... */
+};
+int metrictab_sz = sizeof(metricdesc) / sizeof(metricdesc[0]);
+
+void
+init_data(int domain)
+{
+ int i;
+ int serial;
+ __pmID_int *ip;
+ __pmInDom_int *iip;
+
+ /*
+ * Create the PMDA's metrictab[] version of the per-metric table.
+ *
+ * Also do domain initialization for each pmid and indom element of
+ * the metricdesc[] table ... the PMDA table is fixed up in
+ * libpcp_pmda
+ */
+ if ((metrictab = (pmdaMetric *)malloc(metrictab_sz * sizeof(pmdaMetric))) == NULL) {
+ fprintf(stderr, "init_data: Error: malloc metrictab [%d] failed: %s\n",
+ metrictab_sz * sizeof(pmdaMetric), osstrerror());
+ exit(1);
+ }
+ for (i = 0; i < metrictab_sz; i++) {
+ metrictab[i].m_user = &metricdesc[i];
+ metrictab[i].m_desc = metricdesc[i].md_desc;
+ ip = (__pmID_int *)&metricdesc[i].md_desc.pmid;
+ ip->domain = domain;
+ if (metricdesc[i].md_desc.indom != PM_INDOM_NULL) {
+ serial = metricdesc[i].md_desc.indom;
+ iip = (__pmInDom_int *)&metricdesc[i].md_desc.indom;
+ iip->serial = serial;
+ iip->pad = 0;
+ iip->domain = domain;
+ }
+ }
+
+ /*
+ * initialize each of the methods
+ */
+ for (i = 0; i < methodtab_sz; i++) {
+ methodtab[i].m_init(1);
+ }
+}