int initvmstat(void) { static char *intrnamebuf; char *cp; int i; if (intrnamebuf) free(intrnamebuf); if (intrname) free(intrname); if (intrloc) free(intrloc); if (namelist[0].n_type == 0) { if (kvm_nlist(kd, namelist) && namelist[X_ALLEVENTS].n_type == 0) { nlisterr(namelist); return(0); } } hertz = stathz ? stathz : hz; if (!drvinit(1)) return(0); /* Old style interrupt counts - deprecated */ nintr = (namelist[X_EINTRCNT].n_value - namelist[X_INTRCNT].n_value) / sizeof (long); if (nintr) { intrloc = calloc(nintr, sizeof (long)); intrname = calloc(nintr, sizeof (long)); intrnamebuf = malloc(namelist[X_EINTRNAMES].n_value - namelist[X_INTRNAMES].n_value); if (intrnamebuf == NULL || intrname == 0 || intrloc == 0) { error("Out of memory\n"); nintr = 0; return(0); } NREAD(X_INTRNAMES, intrnamebuf, NVAL(X_EINTRNAMES) - NVAL(X_INTRNAMES)); for (cp = intrnamebuf, i = 0; i < nintr; i++) { intrname[i] = cp; cp += strlen(cp) + 1; } } /* event counter interrupt counts */ get_interrupt_events(); nextintsrow = INTSROW + 1; allocinfo(&s); allocinfo(&s1); allocinfo(&s2); allocinfo(&z); getinfo(&s2); copyinfo(&s2, &s1); return(1); }
int inittcp(void) { if (namelist[0].n_type == 0) { if (kvm_nlist(kd, namelist)) { nlisterr(namelist); return(0); } if (namelist[0].n_type == 0) { error("No namelist"); return(0); } } return 1; }
int initip6(void) { int n; if (namelist[0].n_type == 0) { n = kvm_nlist(kd, namelist); if (n < 0) { nlisterr(namelist); return(0); } else if (n == sizeof(namelist) / sizeof(namelist[0]) - 1) { error("No namelist"); return(0); } } return 1; }
int initnetstat(void) { field_view *v; int ret; if (kd) { if ((ret = kvm_nlist(kd, namelist)) == -1) errx(1, "%s", kvm_geterr(kd)); else if (ret) nlisterr(namelist); if (namelist[X_TCBTABLE].n_value == 0) { error("No symbols in namelist"); return(0); } } protos = TCP|UDP; for (v = views_ns; v->name != NULL; v++) add_view(v); return(1); }
int donlist(void) { int64_t physmem; int rval, mib[2]; size_t siz; rval = 0; nlistread = 1; if (kd != NULL && !kvm_sysctl_only) { if (kvm_nlist(kd, psnl)) { nlisterr(psnl); eval = 1; return (1); } if (kread(X_FSCALE, fscale)) { warnx("fscale: %s", kvm_geterr(kd)); eval = rval = 1; } if (kread(X_PHYSMEM, mempages)) { warnx("physmem: %s", kvm_geterr(kd)); eval = rval = 1; } if (kread(X_CCPU, ccpu)) { warnx("ccpu: %s", kvm_geterr(kd)); eval = rval = 1; } if (kread(X_MAXSLP, maxslp)) { warnx("maxslp: %s", kvm_geterr(kd)); eval = rval = 1; } } else { siz = sizeof (fscale); mib[0] = CTL_KERN; mib[1] = KERN_FSCALE; if (sysctl(mib, 2, &fscale, &siz, NULL, 0) < 0) { warnx("fscale: failed to get kern.fscale"); eval = rval = 1; } siz = sizeof (physmem); mib[0] = CTL_HW; mib[1] = HW_PHYSMEM64; if (sysctl(mib, 2, &physmem, &siz, NULL, 0) < 0) { warnx("physmem: failed to get hw.physmem"); eval = rval = 1; } /* translate bytes into page count */ mempages = physmem / getpagesize(); siz = sizeof (ccpu); mib[0] = CTL_KERN; mib[1] = KERN_CCPU; if (sysctl(mib, 2, &ccpu, &siz, NULL, 0) < 0) { warnx("ccpu: failed to get kern.ccpu"); eval = rval = 1; } siz = sizeof (maxslp); mib[0] = CTL_VM; mib[1] = VM_MAXSLP; if (sysctl(mib, 2, &maxslp, &siz, NULL, 0) < 0) { warnx("maxslp: failed to get vm.maxslp"); eval = rval = 1; } } return (rval); }
int initkre(void) { char *intrnamebuf; size_t bytes; size_t b; size_t i; if (namelist[0].n_type == 0) { if (kvm_nlist(kd, namelist)) { nlisterr(namelist); return(0); } if (namelist[0].n_type == 0) { error("No namelist"); return(0); } } if ((num_devices = getnumdevs()) < 0) { warnx("%s", devstat_errbuf); return(0); } cur.dinfo = (struct devinfo *)malloc(sizeof(struct devinfo)); last.dinfo = (struct devinfo *)malloc(sizeof(struct devinfo)); run.dinfo = (struct devinfo *)malloc(sizeof(struct devinfo)); bzero(cur.dinfo, sizeof(struct devinfo)); bzero(last.dinfo, sizeof(struct devinfo)); bzero(run.dinfo, sizeof(struct devinfo)); if (dsinit(MAXDRIVES, &cur, &last, &run) != 1) return(0); if (nintr == 0) { if (sysctlbyname("hw.intrnames", NULL, &bytes, NULL, 0) == 0) { intrnamebuf = malloc(bytes); sysctlbyname("hw.intrnames", intrnamebuf, &bytes, NULL, 0); for (i = 0; i < bytes; ++i) { if (intrnamebuf[i] == 0) ++nintr; } intrname = malloc(nintr * sizeof(char *)); intrloc = malloc(nintr * sizeof(*intrloc)); nintr = 0; for (b = i = 0; i < bytes; ++i) { if (intrnamebuf[i] == 0) { intrname[nintr] = intrnamebuf + b; intrloc[nintr] = 0; b = i + 1; ++nintr; } } } nextintsrow = INTSROW + 2; allocinfo(&s); allocinfo(&s1); allocinfo(&s2); allocinfo(&z); } getinfo(&s2); copyinfo(&s2, &s1); return(1); }