+ submit (0, "interrupt", cpuinfo[CP_INTR]);
+/* #endif HAVE_SYSCTLBYNAME */
+
+#elif defined __OpenBSD__
+ int64_t **cpuinfo;
+ size_t cpuinfo_size;
+ int i;
+
+ cpuinfo = (int64_t **) calloc (numcpu, sizeof(int64_t *));
+ if(cpuinfo == NULL) {
+ ERROR ("cpu plugin: calloc failed.");
+ return (-1);
+ }
+ for (i = 0; i < numcpu; i++) {
+ cpuinfo[i] = (int64_t *) calloc (CPUSTATES, sizeof(int64_t));
+ if (cpuinfo[i] == NULL) {
+ ERROR ("cpu plugin: calloc failed.");
+ return (-1);
+ }
+ }
+
+ if (numcpu > 1) {
+ cpuinfo_size = CPUSTATES * sizeof(int64_t);
+
+ for (i = 0; i < numcpu; i++) {
+ int mib[] = {CTL_KERN, KERN_CPTIME2, i};
+
+ if (sysctl(mib, 3, cpuinfo[i], &cpuinfo_size, NULL, 0) < 0) {
+ char errbuf[1024];
+ ERROR ("cpu plugin: sysctl failed: %s.",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ return (-1);
+ }
+ }
+ } else {
+ int mib[] = {CTL_KERN, KERN_CPTIME};
+ long cpuinfo_tmp[CPUSTATES];
+
+ cpuinfo_size = sizeof(cpuinfo_tmp);
+
+ if (sysctl(mib, 2, &cpuinfo_tmp, &cpuinfo_size, NULL, 0) < 0)
+ {
+ char errbuf[1024];
+ ERROR ("cpu plugin: sysctl failed: %s.",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ return (-1);
+ }
+ for(i = 0; i < CPUSTATES; i++) {
+ cpuinfo[0][i] = cpuinfo_tmp[i];
+ }
+ }
+
+ for (i = 0; i < numcpu; i++) {
+ cpuinfo[i][CP_SYS] += cpuinfo[i][CP_INTR];
+
+ submit (i, "user", cpuinfo[i][CP_USER]);
+ submit (i, "nice", cpuinfo[i][CP_NICE]);
+ submit (i, "system", cpuinfo[i][CP_SYS]);
+ submit (i, "idle", cpuinfo[i][CP_IDLE]);
+
+ free (cpuinfo[i]);
+ }
+ free (cpuinfo);
+/* #endif __OpenBSD__ */
+
+#elif defined(HAVE_LIBSTATGRAB)
+ sg_cpu_stats *cs;
+ cs = sg_get_cpu_stats ();
+
+ if (cs == NULL)
+ {
+ ERROR ("cpu plugin: sg_get_cpu_stats failed.");
+ return (-1);
+ }
+
+ submit (0, "idle", (counter_t) cs->idle);
+ submit (0, "nice", (counter_t) cs->nice);
+ submit (0, "swap", (counter_t) cs->swap);
+ submit (0, "system", (counter_t) cs->kernel);
+ submit (0, "user", (counter_t) cs->user);
+ submit (0, "wait", (counter_t) cs->iowait);
+#endif /* HAVE_LIBSTATGRAB */