int kif_init(void) { RB_INIT(&kit); if (fetchifs(0) == -1) return (-1); return (0); }
/* * Print a running summary of interface statistics. * Repeat display every interval seconds, showing statistics * collected over that interval. Assumes that interval is non-zero. * First line printed at top of screen is always cumulative. */ static void sidewaysintpr(unsigned int interval, int repeatcount) { sigset_t emptyset; int line; char ibytes[FMT_SCALED_STRSIZE]; char obytes[FMT_SCALED_STRSIZE]; fetchifs(); if (ip_cur.ift_name[0] == '\0') { fprintf(stderr, "%s: %s: unknown interface\n", __progname, interface); exit(1); } (void)signal(SIGALRM, catchalarm); signalled = 0; (void)alarm(interval); banner: if (bflag) printf("%7.7s in %8.8s %6.6s out %5.5s", ip_cur.ift_name, " ", ip_cur.ift_name, " "); else printf("%5.5s in %5.5s%5.5s out %5.5s %5.5s", ip_cur.ift_name, " ", ip_cur.ift_name, " ", " "); if (dflag) printf(" %5.5s", " "); if (bflag) printf(" %7.7s in %8.8s %6.6s out %5.5s", "total", " ", "total", " "); else printf(" %5.5s in %5.5s%5.5s out %5.5s %5.5s", "total", " ", "total", " ", " "); if (dflag) printf(" %5.5s", " "); putchar('\n'); if (bflag) printf("%10.10s %8.8s %10.10s %5.5s", "bytes", " ", "bytes", " "); else printf("%8.8s %5.5s %8.8s %5.5s %5.5s", "packets", "errs", "packets", "errs", "colls"); if (dflag) printf(" %5.5s", "drops"); if (bflag) printf("%10.10s %8.8s %10.10s %5.5s", "bytes", " ", "bytes", " "); else printf(" %8.8s %5.5s %8.8s %5.5s %5.5s", "packets", "errs", "packets", "errs", "colls"); if (dflag) printf(" %5.5s", "drops"); putchar('\n'); fflush(stdout); line = 0; bzero(&ip_old, sizeof(ip_old)); bzero(&sum_old, sizeof(sum_old)); loop: bzero(&sum_cur, sizeof(sum_cur)); fetchifs(); if (bflag) { if (hflag) { fmt_scaled(ip_cur.ift_ib - ip_old.ift_ib, ibytes); fmt_scaled(ip_cur.ift_ob - ip_old.ift_ob, obytes); printf("%10s %8.8s %10s %5.5s", ibytes, " ", obytes, " "); } else printf("%10llu %8.8s %10llu %5.5s", ip_cur.ift_ib - ip_old.ift_ib, " ", ip_cur.ift_ob - ip_old.ift_ob, " "); } else printf("%8llu %5llu %8llu %5llu %5llu", ip_cur.ift_ip - ip_old.ift_ip, ip_cur.ift_ie - ip_old.ift_ie, ip_cur.ift_op - ip_old.ift_op, ip_cur.ift_oe - ip_old.ift_oe, ip_cur.ift_co - ip_old.ift_co); if (dflag) printf(" %5llu", /* XXX ifnet.if_snd.ifq_drops - ip->ift_dr); */ 0LL); ip_old = ip_cur; if (bflag) { if (hflag) { fmt_scaled(sum_cur.ift_ib - sum_old.ift_ib, ibytes); fmt_scaled(sum_cur.ift_ob - sum_old.ift_ob, obytes); printf(" %10s %8.8s %10s %5.5s", ibytes, " ", obytes, " "); } else printf(" %10llu %8.8s %10llu %5.5s", sum_cur.ift_ib - sum_old.ift_ib, " ", sum_cur.ift_ob - sum_old.ift_ob, " "); } else printf(" %8llu %5llu %8llu %5llu %5llu", sum_cur.ift_ip - sum_old.ift_ip, sum_cur.ift_ie - sum_old.ift_ie, sum_cur.ift_op - sum_old.ift_op, sum_cur.ift_oe - sum_old.ift_oe, sum_cur.ift_co - sum_old.ift_co); if (dflag) printf(" %5llu", sum_cur.ift_dr - sum_old.ift_dr); sum_old = sum_cur; putchar('\n'); fflush(stdout); if (repeatcount && --repeatcount == 0) return; line++; sigemptyset(&emptyset); if (!signalled) sigsuspend(&emptyset); signalled = 0; (void)alarm(interval); if (line == 21 && isatty(STDOUT_FILENO)) goto banner; goto loop; }