Annotation of 43BSDReno/sys/netiso/te.c, revision 1.1

1.1     ! root        1: 
        !             2: /*
        !             3:  * $Header: te.c,v 1.1 88/06/29 15:00:09 hagens Exp $ 
        !             4:  * $Source: /usr/argo/sys/netiso/RCS/te.c,v $ 
        !             5:  *
        !             6:  *     EON rfc 
        !             7:  *  Layer between IP and CLNL
        !             8:  *
        !             9:  * TODO:
        !            10:  * Put together a current rfc986 address format and get the right offset
        !            11:  * for the nsel
        !            12:  */
        !            13: #define RFC986_NSEL_OFFSET 5
        !            14: 
        !            15: #ifndef lint
        !            16: static char *rcsid = "$Header: te.c,v 1.1 88/06/29 15:00:09 hagens Exp $";
        !            17: #endif lint
        !            18: 
        !            19: #include "eon.h"
        !            20: #if NEON>0
        !            21: 
        !            22: #include <stdio.h>
        !            23: 
        !            24: #include "param.h"
        !            25: #include "systm.h"
        !            26: #include "types.h"
        !            27: #include "mbuf.h"
        !            28: #include "buf.h"
        !            29: #include "protosw.h"
        !            30: #include "socket.h"
        !            31: #include "ioctl.h"
        !            32: #include "errno.h"
        !            33: #include "types.h"
        !            34: 
        !            35: #include "machine/io.h"
        !            36: #include "../machineio/ioccvar.h"
        !            37: 
        !            38: #include "../net/if.h"
        !            39: #include "../net/netisr.h"
        !            40: #include "../net/route.h"
        !            41: 
        !            42: #include "../netinet/in.h"
        !            43: #include "../netinet/in_systm.h"
        !            44: #include "../netinet/ip.h"
        !            45: #include "../netinet/ip_var.h"
        !            46: #include "../netinet/if_ether.h"
        !            47: 
        !            48: #include "../netiso/iso.h"
        !            49: #include "../netiso/argo_debug.h"
        !            50: #include "../netiso/iso_errno.h"
        !            51: #include "../netiso/eonvar.h"
        !            52: 
        !            53: #define EOK 0
        !            54: 
        !            55: #undef insque
        !            56: #define        insque(p,q)     _insque((queue_t)q,(queue_t)p)
        !            57: #define        remque(q)       _remque((queue_t)q)
        !            58: 
        !            59: 
        !            60: struct eon_centry {
        !            61:        struct qhdr eonc_q_LINK;
        !            62: #define eonc_nextLINK eonc_q_LINK.link
        !            63: #define eonc_prevLINK eonc_q_LINK.flink
        !            64: 
        !            65:        struct qhdr eonc_q_IS;
        !            66: #define eonc_nextIS eonc_q_IS.link
        !            67: #define eonc_prevIS eonc_q_IS.flink
        !            68: 
        !            69:        struct qhdr eonc_q_ES;
        !            70: #define eonc_nextES eonc_q_ES.link
        !            71: #define eonc_prevES eonc_q_ES.flink
        !            72: 
        !            73:        struct in_addr  eonc_addr;
        !            74:        u_short         eonc_status;
        !            75: };
        !            76: 
        !            77: /* kinda like mtod() but for eon_centries */
        !            78: #define qtocentry(q, off)  ((struct eon_centry *)  (((caddr_t)(q)) - off))
        !            79: #define centrytoq(c, off)  ((struct qhdr *)  (((caddr_t)(c)) + off))
        !            80: 
        !            81: struct qhdr                    eon_LINK_hdr = {
        !            82:        (struct qhdr *)0,
        !            83:        (struct qhdr *)0,
        !            84: };
        !            85: static struct qhdr             eon_IS_hdr = {
        !            86:        (struct qhdr *)0,
        !            87:        (struct qhdr *)0,
        !            88: };
        !            89: static struct qhdr             eon_ES_hdr = {
        !            90:        (struct qhdr *)0,
        !            91:        (struct qhdr *)0,
        !            92: };
        !            93: static struct qhdr             eon_FREE_hdr = {
        !            94:        (struct qhdr *)0,
        !            95:        (struct qhdr *)0,
        !            96: };
        !            97: 
        !            98: eon_dumpcache(which)
        !            99:        int                                             which;
        !           100: {
        !           101:        register int                            off;
        !           102:        register struct eon_centry      *ent;
        !           103:        struct  qhdr                            *hdr;
        !           104: 
        !           105:        switch (which) {
        !           106:                case E_FREE:
        !           107:                        printf("FREE LIST\n");
        !           108:                        off = _offsetof( struct eon_centry, eonc_q_LINK);
        !           109:                        hdr = &eon_FREE_hdr;
        !           110:                        ent = qtocentry( hdr->link, 
        !           111:                                _offsetof( struct eon_centry, eonc_q_LINK));
        !           112:                        break;
        !           113:                case E_ES:
        !           114:                        printf("ES LIST\n");
        !           115:                        off = _offsetof( struct eon_centry, eonc_q_ES);
        !           116:                        hdr = &eon_ES_hdr;
        !           117:                        ent = qtocentry( hdr->link, 
        !           118:                                _offsetof( struct eon_centry, eonc_q_ES));
        !           119:                        break;
        !           120:                case E_IS:
        !           121:                        printf("IS LIST\n");
        !           122:                        off = _offsetof( struct eon_centry, eonc_q_IS);
        !           123:                        hdr = &eon_IS_hdr;
        !           124:                        ent = qtocentry( hdr->link, 
        !           125:                                _offsetof( struct eon_centry, eonc_q_IS));
        !           126:                        break;
        !           127:                case E_LINK:
        !           128:                        printf("LINK LIST\n");
        !           129:                        off = _offsetof( struct eon_centry, eonc_q_LINK);
        !           130:                        hdr = &eon_LINK_hdr;
        !           131:                        ent = qtocentry( hdr->link, 
        !           132:                                _offsetof( struct eon_centry, eonc_q_LINK));
        !           133:                        break;
        !           134:        }
        !           135:        if(hdr == centrytoq(ent, off)->link )
        !           136:                printf("EMPTY\n");
        !           137:        else while(1) {
        !           138:                printf("0x%x: %d.%d.%d.%d, %s %s\n", ent,
        !           139:                        (ent->eonc_addr.s_addr>>24)&0xff,
        !           140:                        (ent->eonc_addr.s_addr>>16)&0xff,
        !           141:                        (ent->eonc_addr.s_addr>>8)&0xff,
        !           142:                        (ent->eonc_addr.s_addr)&0xff,
        !           143:                        ((ent->eonc_status & EON_ESLINK_UP)?"ES^":
        !           144:                                (ent->eonc_status & EON_ESLINK_DOWN)?"es*": "   "),
        !           145:                        ((ent->eonc_status & EON_ISLINK_UP)?"IS^":
        !           146:                                (ent->eonc_status & EON_ISLINK_DOWN)?"is*": "   ")
        !           147:                        );
        !           148:                dump_buf(ent, sizeof(struct eon_centry) );
        !           149: 
        !           150:                {       /* ent = ent.next: */
        !           151:                        register struct qhdr    *q;
        !           152: 
        !           153:                        q = centrytoq(ent, off)->link;
        !           154:                        if( q == hdr)
        !           155:                                break;
        !           156:                        if( q == (struct qhdr *)0) /* panic */ {
        !           157:                                printf("eon0: BAD Q HDR or CENTRY! q 0x%x ent 0x%x off 0x%x\n",
        !           158:                                        q, ent, off);
        !           159:                                break;
        !           160:                        }
        !           161:                        ent = qtocentry( q,  off );
        !           162:                }
        !           163:        }
        !           164: }
        !           165: 
        !           166: initq(q) 
        !           167:        struct qhdr *q;
        !           168: {
        !           169:        q->rlink = q->link = q;
        !           170: }
        !           171: main()
        !           172: {
        !           173:        static struct eon_centry        eoncache[EON_CACHESIZE];
        !           174:        register int                            i;
        !           175:        register struct eon_centry      *ent;
        !           176: 
        !           177:        initq( &eon_FREE_hdr );
        !           178:        initq( &eon_LINK_hdr );
        !           179:        initq( &eon_ES_hdr );
        !           180:        initq( &eon_IS_hdr );
        !           181: 
        !           182:        bzero( eoncache, EON_CACHESIZE*sizeof(struct eon_centry));
        !           183:        ent = eoncache;
        !           184: 
        !           185:        for(i=0; i< EON_CACHESIZE; i++,ent++) {
        !           186:                insque(&eon_FREE_hdr, 
        !           187:                        centrytoq(ent, _offsetof( struct eon_centry, eonc_q_LINK)));
        !           188:        }
        !           189: 
        !           190:        eon_dumpcache(E_FREE);
        !           191:        eon_dumpcache(E_ES);
        !           192: }
        !           193: #endif NEON>0
        !           194: 
        !           195: #define MAX_COLUMNS 8
        !           196: dump_buf(buf, len)
        !           197: char   *buf;
        !           198: int            len;
        !           199: {
        !           200:        int             i,j;
        !           201: 
        !           202:        printf("Dump buf 0x%x len 0x%x\n", buf, len);
        !           203:        for (i = 0; i < len; i += MAX_COLUMNS) {
        !           204:                printf("+%d:\t", i);
        !           205:                for (j = 0; j < MAX_COLUMNS; j++) {
        !           206:                        if (i + j < len) {
        !           207:                                printf("%x/%d\t", buf[i+j], buf[i+j]);
        !           208:                        } else {
        !           209:                                printf("        ");
        !           210:                        }
        !           211:                }
        !           212: 
        !           213:                for (j = 0; j < MAX_COLUMNS; j++) {
        !           214:                        if (i + j < len) {
        !           215:                                if (((buf[i+j]) > 31) && ((buf[i+j]) < 128))
        !           216:                                        printf("%c", buf[i+j]);
        !           217:                                else
        !           218:                                        printf(".");
        !           219:                        }
        !           220:                }
        !           221:                printf("\n");
        !           222:        }
        !           223: }
        !           224: 
        !           225: _insque(new, header)
        !           226:        register struct qhdr *new, *header;
        !           227: {
        !           228:        (*new).link = (*header).link;
        !           229:        (*new).rlink = header;
        !           230:        (*(*header).link).rlink = new;
        !           231:        (*header).link = new;
        !           232: }

unix.superglobalmegacorp.com

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