|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)if.c 4.4 82/11/14"; ! 3: #endif ! 4: ! 5: #include <sys/types.h> ! 6: #include <sys/socket.h> ! 7: ! 8: #include <net/if.h> ! 9: #include <netinet/in.h> ! 10: ! 11: #include <stdio.h> ! 12: ! 13: extern int kmem; ! 14: extern int tflag; ! 15: extern int nflag; ! 16: extern char *routename(); ! 17: ! 18: /* ! 19: * Print a description of the network interfaces. ! 20: */ ! 21: intpr(interval, ifnetaddr) ! 22: int interval; ! 23: off_t ifnetaddr; ! 24: { ! 25: struct ifnet ifnet; ! 26: char name[16]; ! 27: ! 28: if (ifnetaddr == 0) { ! 29: printf("ifnet: symbol not defined\n"); ! 30: return; ! 31: } ! 32: if (interval) { ! 33: sidewaysintpr(interval, ifnetaddr); ! 34: return; ! 35: } ! 36: klseek(kmem, ifnetaddr, 0); ! 37: read(kmem, &ifnetaddr, sizeof ifnetaddr); ! 38: printf("%-5.5s %-5.5s %-10.10s %-12.12s %-7.7s %-5.5s %-7.7s %-5.5s", ! 39: "Name", "Mtu", "Network", "Address", "Ipkts", "Ierrs", ! 40: "Opkts", "Oerrs"); ! 41: printf(" %-6.6s", "Collis"); ! 42: if (tflag) ! 43: printf(" %-6.6s", "Timer"); ! 44: putchar('\n'); ! 45: while (ifnetaddr) { ! 46: struct sockaddr_in *sin; ! 47: register char *cp; ! 48: char *index(); ! 49: struct in_addr in, inet_makeaddr(); ! 50: ! 51: klseek(kmem, ifnetaddr, 0); ! 52: read(kmem, &ifnet, sizeof ifnet); ! 53: klseek(kmem, (int)ifnet.if_name, 0); ! 54: read(kmem, name, 16); ! 55: name[15] = '\0'; ! 56: cp = index(name, '\0'); ! 57: *cp++ = ifnet.if_unit + '0'; ! 58: if ((ifnet.if_flags&IFF_UP) == 0) ! 59: *cp++ = '*'; ! 60: *cp = '\0'; ! 61: printf("%-5.5s %-5d ", name, ifnet.if_mtu); ! 62: sin = (struct sockaddr_in *)&ifnet.if_addr; ! 63: in = inet_makeaddr(ifnet.if_net, INADDR_ANY); ! 64: printf("%-10.10s ", routename(in)); ! 65: printf("%-12.12s %-7d %-5d %-7d %-5d %-6d", ! 66: routename(sin->sin_addr), ! 67: ifnet.if_ipackets, ifnet.if_ierrors, ! 68: ifnet.if_opackets, ifnet.if_oerrors, ! 69: ifnet.if_collisions); ! 70: if (tflag) ! 71: printf(" %-6d", ifnet.if_timer); ! 72: putchar('\n'); ! 73: ifnetaddr = (off_t) ifnet.if_next; ! 74: } ! 75: } ! 76: ! 77: #define MAXIF 10 ! 78: struct iftot { ! 79: char ift_name[16]; /* interface name */ ! 80: int ift_ip; /* input packets */ ! 81: int ift_ie; /* input errors */ ! 82: int ift_op; /* output packets */ ! 83: int ift_oe; /* output errors */ ! 84: int ift_co; /* collisions */ ! 85: } iftot[MAXIF]; ! 86: ! 87: /* ! 88: * Print a running summary of interface statistics. ! 89: * Repeat display every interval seconds, showing ! 90: * statistics collected over that interval. First ! 91: * line printed at top of screen is always cumulative. ! 92: */ ! 93: sidewaysintpr(interval, off) ! 94: int interval; ! 95: off_t off; ! 96: { ! 97: struct ifnet ifnet; ! 98: off_t firstifnet; ! 99: extern char _sobuf[]; ! 100: register struct iftot *ip, *total; ! 101: register int line; ! 102: struct iftot *lastif, *sum, *interesting; ! 103: int maxtraffic; ! 104: ! 105: setbuf(stdout, _sobuf); ! 106: klseek(kmem, off, 0); ! 107: read(kmem, &firstifnet, sizeof (off_t)); ! 108: lastif = iftot; ! 109: sum = iftot + MAXIF - 1; ! 110: total = sum - 1; ! 111: for (off = firstifnet, ip = iftot; off;) { ! 112: char *cp; ! 113: ! 114: klseek(kmem, off, 0); ! 115: read(kmem, &ifnet, sizeof ifnet); ! 116: klseek(kmem, (int)ifnet.if_name, 0); ! 117: ip->ift_name[0] = '('; ! 118: read(kmem, ip->ift_name + 1, 15); ! 119: ip->ift_name[15] = '\0'; ! 120: cp = index(ip->ift_name, '\0'); ! 121: sprintf(cp, "%d)", ifnet.if_unit); ! 122: ip++; ! 123: if (ip >= iftot + MAXIF - 2) ! 124: break; ! 125: off = (off_t) ifnet.if_next; ! 126: } ! 127: lastif = ip; ! 128: interesting = iftot; ! 129: banner: ! 130: printf(" input %-6.6s output ", interesting->ift_name); ! 131: if (lastif - iftot > 0) ! 132: printf(" input (Total) output "); ! 133: for (ip = iftot; ip < iftot + MAXIF; ip++) { ! 134: ip->ift_ip = 0; ! 135: ip->ift_ie = 0; ! 136: ip->ift_op = 0; ! 137: ip->ift_oe = 0; ! 138: ip->ift_co = 0; ! 139: } ! 140: putchar('\n'); ! 141: printf("%-7.7s %-5.5s %-7.7s %-5.5s %-5.5s ", ! 142: "packets", "errs", "packets", "errs", "colls"); ! 143: if (lastif - iftot > 0) ! 144: printf("%-7.7s %-5.5s %-7.7s %-5.5s %-5.5s ", ! 145: "packets", "errs", "packets", "errs", "colls"); ! 146: putchar('\n'); ! 147: fflush(stdout); ! 148: line = 0; ! 149: loop: ! 150: sum->ift_ip = 0; ! 151: sum->ift_ie = 0; ! 152: sum->ift_op = 0; ! 153: sum->ift_oe = 0; ! 154: sum->ift_co = 0; ! 155: for (off = firstifnet, ip = iftot; off && ip < lastif; ip++) { ! 156: klseek(kmem, off, 0); ! 157: read(kmem, &ifnet, sizeof ifnet); ! 158: if (ip == interesting) ! 159: printf("%-7d %-5d %-7d %-5d %-5d ", ! 160: ifnet.if_ipackets - ip->ift_ip, ! 161: ifnet.if_ierrors - ip->ift_ie, ! 162: ifnet.if_opackets - ip->ift_op, ! 163: ifnet.if_oerrors - ip->ift_oe, ! 164: ifnet.if_collisions - ip->ift_co); ! 165: ip->ift_ip = ifnet.if_ipackets; ! 166: ip->ift_ie = ifnet.if_ierrors; ! 167: ip->ift_op = ifnet.if_opackets; ! 168: ip->ift_oe = ifnet.if_oerrors; ! 169: ip->ift_co = ifnet.if_collisions; ! 170: sum->ift_ip += ip->ift_ip; ! 171: sum->ift_ie += ip->ift_ie; ! 172: sum->ift_op += ip->ift_op; ! 173: sum->ift_oe += ip->ift_oe; ! 174: sum->ift_co += ip->ift_co; ! 175: off = (off_t) ifnet.if_next; ! 176: } ! 177: if (lastif - iftot > 0) ! 178: printf("%-7d %-5d %-7d %-5d %-5d\n", ! 179: sum->ift_ip - total->ift_ip, ! 180: sum->ift_ie - total->ift_ie, ! 181: sum->ift_op - total->ift_op, ! 182: sum->ift_oe - total->ift_oe, ! 183: sum->ift_co - total->ift_co); ! 184: *total = *sum; ! 185: fflush(stdout); ! 186: line++; ! 187: if (interval) ! 188: sleep(interval); ! 189: if (line == 21) ! 190: goto banner; ! 191: goto loop; ! 192: /*NOTREACHED*/ ! 193: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.