Annotation of cci/usr/src/etc/nstat/if.c, revision 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: #include <netinet/if_ether.h>
        !            11: #include <tahoeif/if_enp.h>
        !            12: #include <nlist.h>
        !            13: 
        !            14: #include <stdio.h>
        !            15: #include "nstat.h"
        !            16: 
        !            17: struct nlist   ifnl[] = {
        !            18: #                              define  N_IFNET         0
        !            19:        { "_ifnet" },
        !            20:        { "" },
        !            21: };
        !            22: extern  long   flaggiven;
        !            23: extern int     kmem;
        !            24: extern ENPSTAT enp_stats;
        !            25: extern char    *system;
        !            26: extern char    *routename();
        !            27: char name[16];
        !            28: 
        !            29: /*
        !            30:  * Print a description of the network interfaces.
        !            31:  */
        !            32: intpr(interval)
        !            33:        int interval;
        !            34: {
        !            35:        off_t   ifnetaddr;
        !            36:        struct ifnet ifnet;
        !            37:        static  int     getvm = 0;
        !            38:        int     i, statflag;
        !            39: 
        !            40:        if (!getvm) {
        !            41:                nlist(system, ifnl);
        !            42:                ++getvm;
        !            43:        }
        !            44:        ifnetaddr = ifnl[N_IFNET].n_value;
        !            45:        if (ifnetaddr == 0) {
        !            46:                printf("ifnet: symbol not defined\n");
        !            47:                return;
        !            48:        }
        !            49:        if (interval && !iflag) {
        !            50:                sidewaysintpr(interval, ifnetaddr);
        !            51:                return;
        !            52:        }
        !            53:        printf("%-5.5s %-5.5s %-10.10s  %-12.12s %-7.7s %-5.5s %-7.7s %-5.5s",
        !            54:                "Name", "Mtu", "Network", "Address", "Ipkts", "Ierrs",
        !            55:                "Opkts", "Oerrs");
        !            56:        printf(" %-6.6s", "Collis");
        !            57:        printf(" %-6.6s", "Timer");
        !            58:        putchar('\n');
        !            59:        klseek(kmem, ifnetaddr, 0);
        !            60:        read(kmem, &ifnetaddr, sizeof ifnetaddr);
        !            61:        while (ifnetaddr) {
        !            62:                struct sockaddr_in *sin;
        !            63:                register char *cp;
        !            64:                char *index();
        !            65:                struct in_addr in, inet_makeaddr();
        !            66: 
        !            67:                klseek(kmem, ifnetaddr, 0);
        !            68:                read(kmem, &ifnet, sizeof ifnet);
        !            69:                klseek(kmem, (int)ifnet.if_name, 0);
        !            70:                read(kmem, name, 16);
        !            71:                name[15] = '\0';
        !            72:                cp = index(name, '\0');
        !            73:                if ((ifnet.if_flags&IFF_UP) == 0) {
        !            74:                        *cp++ = ifnet.if_unit + '0';
        !            75:                        *cp++ = '*';
        !            76:                } else {
        !            77:                        if (!strcmp(name, "enp")) {
        !            78:                                if (!enpstat(ifnet.if_unit, 1))
        !            79:                                        get_enpstat(&enp_stats, &ifnet);
        !            80:                        }
        !            81:                        *cp++ = ifnet.if_unit + '0';
        !            82:                }
        !            83:                *cp = '\0';
        !            84:                printf("%-5.5s %-5d ", name, ifnet.if_mtu);
        !            85:                sin = (struct sockaddr_in *)&ifnet.if_addr;
        !            86:                in = inet_makeaddr(ifnet.if_net, INADDR_ANY);
        !            87:                printf("%-10.10s  ", routename(in));
        !            88:                printf("%-12.12s %-7d %-5d %-7d %-5d %-6d",
        !            89:                    routename(sin->sin_addr),
        !            90:                    ifnet.if_ipackets, ifnet.if_ierrors,
        !            91:                    ifnet.if_opackets, ifnet.if_oerrors,
        !            92:                    ifnet.if_collisions);
        !            93:                printf(" %-6d", ifnet.if_timer);
        !            94:                putchar('\n');
        !            95:                ifnetaddr = (off_t) ifnet.if_next;
        !            96:        }
        !            97: }
        !            98: 
        !            99: #define        MAXIF   10
        !           100: struct iftot {
        !           101:        char    ift_name[16];           /* interface name */
        !           102:        int     ift_ip;                 /* input packets */
        !           103:        int     ift_ie;                 /* input errors */
        !           104:        int     ift_op;                 /* output packets */
        !           105:        int     ift_oe;                 /* output errors */
        !           106:        int     ift_co;                 /* collisions */
        !           107: } iftot[MAXIF];
        !           108: 
        !           109: /*
        !           110:  * Print a running summary of interface statistics.
        !           111:  * Repeat display every interval seconds, showing
        !           112:  * statistics collected over that interval.  First
        !           113:  * line printed at top of screen is always cumulative.
        !           114:  */
        !           115: sidewaysintpr(interval, off)
        !           116:        int interval;
        !           117:        off_t off;
        !           118: {
        !           119:        struct ifnet ifnet;
        !           120:        off_t firstifnet;
        !           121:        extern char _sobuf[];
        !           122:        register struct iftot *ip, *total;
        !           123:        register int line;
        !           124:        struct iftot *lastif, *sum, *interesting;
        !           125:        int maxtraffic;
        !           126: 
        !           127:        setbuf(stdout, _sobuf);
        !           128:        klseek(kmem, off, 0);
        !           129:        read(kmem, &firstifnet, sizeof (off_t));
        !           130:        lastif = iftot;
        !           131:        sum = iftot + MAXIF - 1;
        !           132:        total = sum - 1;
        !           133:        for (off = firstifnet, ip = iftot; off;) {
        !           134:                struct  sockaddr_in     *sin;
        !           135:                char *cp;
        !           136: 
        !           137:                klseek(kmem, off, 0);
        !           138:                read(kmem, &ifnet, sizeof ifnet);
        !           139:                sin = (struct sockaddr_in *)&ifnet.if_addr;
        !           140: 
        !           141:                klseek(kmem, (int)ifnet.if_name, 0);
        !           142:                ip->ift_name[0] = '(';
        !           143:                read(kmem, ip->ift_name + 1, 15);
        !           144:                ip->ift_name[15] = '\0';
        !           145:                cp = index(ip->ift_name, '\0');
        !           146:                sprintf(cp, "%d)", ifnet.if_unit);
        !           147: 
        !           148:                ip++;
        !           149:                if (ip >= iftot + MAXIF - 2)
        !           150:                        break;
        !           151:                off = (off_t) ifnet.if_next;
        !           152: 
        !           153:        }
        !           154:        lastif = ip;
        !           155:        interesting = iftot;
        !           156: banner:
        !           157:        printf("    input   %-6.6s    output       ", interesting->ift_name);
        !           158:        if (lastif - iftot > 0)
        !           159:                printf("    input   (Total)    output       ");
        !           160:        for (ip = iftot; ip < iftot + MAXIF; ip++) {
        !           161:                ip->ift_ip = 0;
        !           162:                ip->ift_ie = 0;
        !           163:                ip->ift_op = 0;
        !           164:                ip->ift_oe = 0;
        !           165:                ip->ift_co = 0;
        !           166:        }
        !           167:        putchar('\n');
        !           168:        printf("%-7.7s %-5.5s %-7.7s %-5.5s %-5.5s ",
        !           169:                "packets", "errs", "packets", "errs", "colls");
        !           170:        if (lastif - iftot > 0)
        !           171:                printf("%-7.7s %-5.5s %-7.7s %-5.5s %-5.5s ",
        !           172:                        "packets", "errs", "packets", "errs", "colls");
        !           173:        putchar('\n');
        !           174:        fflush(stdout);
        !           175:        line = 0;
        !           176: loop:
        !           177:        sum->ift_ip = 0;
        !           178:        sum->ift_ie = 0;
        !           179:        sum->ift_op = 0;
        !           180:        sum->ift_oe = 0;
        !           181:        sum->ift_co = 0;
        !           182:        for (off = firstifnet, ip = iftot; off && ip < lastif; ip++) {
        !           183:                klseek(kmem, off, 0);
        !           184:                read(kmem, &ifnet, sizeof ifnet);
        !           185:                klseek(kmem, (int)ifnet.if_name, 0);
        !           186:                read(kmem, name, 16);
        !           187:                name[15] = '\0';
        !           188:                if (!strcmp(name, "enp")) {
        !           189:                        if (!enpstat(ifnet.if_unit, 1))
        !           190:                                get_enpstat(&enp_stats, &ifnet);
        !           191:                }
        !           192:                if (ip == interesting)
        !           193:                        printf("%-7d %-5d %-7d %-5d %-5d ",
        !           194:                                ifnet.if_ipackets - ip->ift_ip,
        !           195:                                ifnet.if_ierrors - ip->ift_ie,
        !           196:                                ifnet.if_opackets - ip->ift_op,
        !           197:                                ifnet.if_oerrors - ip->ift_oe,
        !           198:                                ifnet.if_collisions - ip->ift_co);
        !           199:                ip->ift_ip = ifnet.if_ipackets;
        !           200:                ip->ift_ie = ifnet.if_ierrors;
        !           201:                ip->ift_op = ifnet.if_opackets;
        !           202:                ip->ift_oe = ifnet.if_oerrors;
        !           203:                ip->ift_co = ifnet.if_collisions;
        !           204:                sum->ift_ip += ip->ift_ip;
        !           205:                sum->ift_ie += ip->ift_ie;
        !           206:                sum->ift_op += ip->ift_op;
        !           207:                sum->ift_oe += ip->ift_oe;
        !           208:                sum->ift_co += ip->ift_co;
        !           209:                off = (off_t) ifnet.if_next;
        !           210:        }
        !           211:        if (lastif - iftot > 0)
        !           212:                printf("%-7d %-5d %-7d %-5d %-5d\n",
        !           213:                        sum->ift_ip - total->ift_ip,
        !           214:                        sum->ift_ie - total->ift_ie,
        !           215:                        sum->ift_op - total->ift_op,
        !           216:                        sum->ift_oe - total->ift_oe,
        !           217:                        sum->ift_co - total->ift_co);
        !           218:        *total = *sum;
        !           219:        fflush(stdout);
        !           220:        line++;
        !           221:        if (interval)
        !           222:                sleep(interval);
        !           223:        if (line == 21)
        !           224:                goto banner;
        !           225:        goto loop;
        !           226:        /*NOTREACHED*/
        !           227: }
        !           228: 
        !           229: get_enpstat(stat, ifp)
        !           230: ENPSTAT        *stat;
        !           231: struct         ifnet   *ifp;
        !           232: {
        !           233:        ifp->if_oerrors = stat->e_fail_retry +  
        !           234:                          stat->e_xmit_buff_err + stat->e_silo_underrun +
        !           235:                          stat->e_late_coll + stat->e_lost_carrier +
        !           236:                          stat->e_babble + stat->e_xmit_mem_err;
        !           237: 
        !           238:        ifp->if_collisions = stat->e_mult_retry + stat->e_one_retry +
        !           239:                             stat->e_late_coll;
        !           240: 
        !           241:        ifp->if_ierrors = stat->e_rcv_missed + stat->e_crc_err + 
        !           242:                          stat->e_frame_err + stat->e_rcv_buff_err +    
        !           243:                          stat->e_silo_overrun + stat->e_rcv_mem_err;
        !           244: 
        !           245:        return;
        !           246: }
        !           247: 

unix.superglobalmegacorp.com

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