Annotation of 42BSD/ucb/netstat/if.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.