1*7905Ssam #ifndef lint 2*7905Ssam static char sccsid[] = "@(#)if.c 4.1 82/08/25"; 3*7905Ssam #endif 4*7905Ssam 5*7905Ssam #include <sys/types.h> 6*7905Ssam #include <sys/socket.h> 7*7905Ssam #include <net/in.h> 8*7905Ssam #include <net/if.h> 9*7905Ssam 10*7905Ssam extern int kmem; 11*7905Ssam extern int tflag; 12*7905Ssam extern int nflag; 13*7905Ssam extern char *routename(); 14*7905Ssam 15*7905Ssam /* 16*7905Ssam * Print a description of the network interfaces. 17*7905Ssam * If interval is non-zero, repeat display every 18*7905Ssam * interval seconds, showing statistics collected 19*7905Ssam * over that interval. First line printed is always 20*7905Ssam * cumulative. 21*7905Ssam */ 22*7905Ssam intpr(interval, ifnetaddr) 23*7905Ssam int interval; 24*7905Ssam off_t ifnetaddr; 25*7905Ssam { 26*7905Ssam struct ifnet ifnet; 27*7905Ssam char name[16]; 28*7905Ssam 29*7905Ssam if (ifnetaddr == 0) { 30*7905Ssam printf("ifnet: symbol not defined\n"); 31*7905Ssam return; 32*7905Ssam } 33*7905Ssam if (interval) { 34*7905Ssam sidewaysintpr(interval, ifnetaddr); 35*7905Ssam return; 36*7905Ssam } 37*7905Ssam klseek(kmem, ifnetaddr, 0); 38*7905Ssam read(kmem, &ifnetaddr, sizeof ifnetaddr); 39*7905Ssam printf("%-5.5s %-5.5s %-8.8s %-12.12s %-7.7s %-5.5s %-7.7s %-5.5s", 40*7905Ssam "Name", "Mtu", "Network", "Address", "Ipkts", "Ierrs", 41*7905Ssam "Opkts", "Oerrs"); 42*7905Ssam printf(" %-6.6s", "Collis"); 43*7905Ssam if (tflag) 44*7905Ssam printf(" %-6.6s", "Timer"); 45*7905Ssam putchar('\n'); 46*7905Ssam while (ifnetaddr) { 47*7905Ssam struct sockaddr_in *sin; 48*7905Ssam register char *cp; 49*7905Ssam char *index(); 50*7905Ssam 51*7905Ssam klseek(kmem, ifnetaddr, 0); 52*7905Ssam read(kmem, &ifnet, sizeof ifnet); 53*7905Ssam klseek(kmem, (int)ifnet.if_name, 0); 54*7905Ssam read(kmem, name, 16); 55*7905Ssam name[15] = '\0'; 56*7905Ssam cp = index(name, '\0'); 57*7905Ssam *cp++ = ifnet.if_unit + '0'; 58*7905Ssam if ((ifnet.if_flags&IFF_UP) == 0) 59*7905Ssam *cp++ = '*'; 60*7905Ssam *cp = '\0'; 61*7905Ssam printf("%-5.5s %-5d ", name, ifnet.if_mtu); 62*7905Ssam sin = (struct sockaddr_in *)&ifnet.if_addr; 63*7905Ssam printf("%-8.8s ", routename(ifnet.if_net)); 64*7905Ssam printf("%-12.12s %-7d %-5d %-7d %-5d %-6d", 65*7905Ssam routename(sin->sin_addr), 66*7905Ssam ifnet.if_ipackets, ifnet.if_ierrors, 67*7905Ssam ifnet.if_opackets, ifnet.if_oerrors, 68*7905Ssam ifnet.if_collisions); 69*7905Ssam if (tflag) 70*7905Ssam printf(" %-6d", ifnet.if_timer); 71*7905Ssam putchar('\n'); 72*7905Ssam ifnetaddr = (off_t) ifnet.if_next; 73*7905Ssam } 74*7905Ssam } 75*7905Ssam 76*7905Ssam sidewaysintpr(interval, off) 77*7905Ssam int interval; 78*7905Ssam off_t off; 79*7905Ssam { 80*7905Ssam struct ifnet ifnet; 81*7905Ssam char name[16]; 82*7905Ssam 83*7905Ssam klseek(kmem, off, 0); 84*7905Ssam read(kmem, &off, sizeof (off_t)); 85*7905Ssam return; 86*7905Ssam /*NOTREACHED*/ 87*7905Ssam printf("%-5.5s\t%-5.5s %-10.10s %-10.10s %-7.7s %-5.5s %-7.7s %-5.5s", 88*7905Ssam "Name", "Ipkts", "Ierrs", "Opkts", "Oerrs"); 89*7905Ssam printf(" %-6.6s", "collis"); 90*7905Ssam while (off) { 91*7905Ssam struct sockaddr_in *sin; 92*7905Ssam 93*7905Ssam klseek(kmem, off, 0); 94*7905Ssam read(kmem, &ifnet, sizeof ifnet); 95*7905Ssam klseek(kmem, (int)ifnet.if_name, 0); 96*7905Ssam read(kmem, name, 16); 97*7905Ssam sin = (struct sockaddr_in *)&ifnet.if_addr; 98*7905Ssam printf("%s%d%c:\t%5d ", 99*7905Ssam name, ifnet.if_unit, ifnet.if_flags & IFF_UP ? '\0' : '*', 100*7905Ssam ifnet.if_mtu); 101*7905Ssam printf("%-10.10s %-10.10s %7d %5d %7d %5d %6d", 102*7905Ssam inetname(ifnet.if_net), 103*7905Ssam inetname(sin->sin_addr), 104*7905Ssam ifnet.if_ipackets, ifnet.if_ierrors, 105*7905Ssam ifnet.if_opackets, ifnet.if_oerrors, 106*7905Ssam ifnet.if_collisions); 107*7905Ssam putchar('\n'); 108*7905Ssam off = (off_t) ifnet.if_next; 109*7905Ssam } 110*7905Ssam } 111