Annotation of lucent/sys/src/9/port/ipdat.h, revision 1.1

1.1     ! root        1: typedef struct Etherhdr        Etherhdr;
        !             2: typedef struct Fragq   Fragq;
        !             3: typedef struct Ilcb    Ilcb;
        !             4: typedef struct Ilhdr   Ilhdr;
        !             5: typedef ulong          Ipaddr;
        !             6: typedef struct Ipconv  Ipconv;
        !             7: typedef struct Ipfrag  Ipfrag;
        !             8: typedef struct Ipifc   Ipifc;
        !             9: typedef struct Ipdevice        Ipdevice;
        !            10: typedef ushort         Port;
        !            11: typedef struct Reseq   Reseq;
        !            12: typedef struct Tcp     Tcp;
        !            13: typedef struct Tcpctl  Tcpctl;
        !            14: typedef struct Tcphdr  Tcphdr;
        !            15: typedef struct Timer   Timer;
        !            16: typedef struct Udphdr  Udphdr;
        !            17: 
        !            18: struct Etherhdr
        !            19: {
        !            20: #define ETHER_HDR      14
        !            21:        uchar   d[6];
        !            22:        uchar   s[6];
        !            23:        uchar   type[2];
        !            24: 
        !            25:        /* Now we have the ip fields */
        !            26: #define ETHER_IPHDR    20
        !            27:        uchar   vihl;           /* Version and header length */
        !            28:        uchar   tos;            /* Type of service */
        !            29:        uchar   length[2];      /* packet length */
        !            30:        uchar   id[2];          /* Identification */
        !            31:        uchar   frag[2];        /* Fragment information */
        !            32:        uchar   ttl;            /* Time to live */
        !            33:        uchar   proto;          /* Protocol */
        !            34:        uchar   cksum[2];       /* Header checksum */
        !            35:        uchar   src[4];         /* Ip source */
        !            36:        uchar   dst[4];         /* Ip destination */
        !            37: };
        !            38: 
        !            39: /* Ethernet packet types */
        !            40: #define ET_IP  0x0800
        !            41: 
        !            42: struct Udphdr
        !            43: {
        !            44: #define UDP_EHSIZE     22
        !            45:        uchar   d[6];           /* Ethernet destination */
        !            46:        uchar   s[6];           /* Ethernet source */
        !            47:        uchar   type[2];        /* Ethernet packet type */
        !            48: 
        !            49:        uchar   vihl;           /* Version and header length */
        !            50:        uchar   tos;            /* Type of service */
        !            51:        uchar   length[2];      /* packet length */
        !            52:        uchar   id[2];          /* Identification */
        !            53:        uchar   frag[2];        /* Fragment information */
        !            54: 
        !            55:        /* Udp pseudo ip really starts here */
        !            56: #define UDP_PHDRSIZE   12
        !            57: #define UDP_HDRSIZE    20
        !            58:        uchar   Unused; 
        !            59:        uchar   udpproto;       /* Protocol */
        !            60:        uchar   udpplen[2];     /* Header plus data length */
        !            61:        uchar   udpsrc[4];      /* Ip source */
        !            62:        uchar   udpdst[4];      /* Ip destination */
        !            63:        uchar   udpsport[2];    /* Source port */
        !            64:        uchar   udpdport[2];    /* Destination port */
        !            65:        uchar   udplen[2];      /* data length */
        !            66:        uchar   udpcksum[2];    /* Checksum */
        !            67: };
        !            68: 
        !            69: struct Ilhdr
        !            70: {
        !            71: #define IL_EHSIZE      34
        !            72:        uchar   d[6];           /* Ethernet destination */
        !            73:        uchar   s[6];           /* Ethernet source */
        !            74:        uchar   type[2];        /* Ethernet packet type */
        !            75: 
        !            76:        uchar   vihl;           /* Version and header length */
        !            77:        uchar   tos;            /* Type of service */
        !            78:        uchar   length[2];      /* packet length */
        !            79:        uchar   id[2];          /* Identification */
        !            80:        uchar   frag[2];        /* Fragment information */
        !            81:        uchar   ttl;            /* Time to live */
        !            82:        uchar   proto;          /* Protocol */
        !            83:        uchar   cksum[2];       /* Header checksum */
        !            84:        uchar   src[4];         /* Ip source */
        !            85:        uchar   dst[4];         /* Ip destination */
        !            86: #define IL_HDRSIZE     18      
        !            87:        uchar   ilsum[2];       /* Checksum including header */
        !            88:        uchar   illen[2];       /* Packet length */
        !            89:        uchar   iltype;         /* Packet type */
        !            90:        uchar   ilspec;         /* Special */
        !            91:        uchar   ilsrc[2];       /* Src port */
        !            92:        uchar   ildst[2];       /* Dst port */
        !            93:        uchar   ilid[4];        /* Sequence id */
        !            94:        uchar   ilack[4];       /* Acked sequence */
        !            95: };
        !            96: 
        !            97: struct Ilcb                    /* Control block */
        !            98: {
        !            99:        int     state;          /* Connection state */
        !           100: 
        !           101:        Rendez  syncer;         /* where syncer waits for a connect */
        !           102: 
        !           103:        QLock   ackq;           /* Unacknowledged queue */
        !           104:        Block   *unacked;
        !           105:        Block   *unackedtail;
        !           106: 
        !           107:        QLock   outo;           /* Out of order packet queue */
        !           108:        Block   *outoforder;
        !           109: 
        !           110:        ulong   next;           /* Id of next to send */
        !           111:        ulong   recvd;          /* Last packet received */
        !           112:        ulong   start;          /* Local start id */
        !           113:        ulong   rstart;         /* Remote start id */
        !           114: 
        !           115:        int     timeout;        /* Time out counter */
        !           116:        int     slowtime;       /* Slow time counter */
        !           117:        int     fasttime;       /* Retransmission timer */
        !           118:        int     acktime;        /* Acknowledge timer */
        !           119:        int     querytime;      /* Query timer */
        !           120:        int     deathtime;      /* Time to kill connection */
        !           121: 
        !           122:        int     rtt;            /* Average round trip time */
        !           123:        ulong   rttack;         /* The ack we are waiting for */
        !           124:        ulong   ackms;          /* Time we issued */
        !           125: 
        !           126:        int     window;         /* Maximum receive window */
        !           127: };
        !           128: 
        !           129: enum                           /* Packet types */
        !           130: {
        !           131:        Ilsync,
        !           132:        Ildata,
        !           133:        Ildataquery,
        !           134:        Ilack,
        !           135:        Ilquerey,
        !           136:        Ilstate,
        !           137:        Ilclose,
        !           138: };
        !           139: 
        !           140: enum                           /* Connection state */
        !           141: {
        !           142:        Ilclosed,
        !           143:        Ilsyncer,
        !           144:        Ilsyncee,
        !           145:        Ilestablished,
        !           146:        Illistening,
        !           147:        Ilclosing,
        !           148: };
        !           149: 
        !           150: #define TCP_PKT        (TCP_EHSIZE+TCP_IPLEN+TCP_PHDRSIZE)
        !           151: 
        !           152: struct Tcphdr
        !           153: {
        !           154: #define TCP_EHSIZE     14
        !           155:        uchar   d[6];           /* Ethernet destination */
        !           156:        uchar   s[6];           /* Ethernet source */
        !           157:        uchar   type[2];        /* Ethernet packet type */
        !           158: #define TCP_IPLEN      8
        !           159:        uchar   vihl;           /* Version and header length */
        !           160:        uchar   tos;            /* Type of service */
        !           161:        uchar   length[2];      /* packet length */
        !           162:        uchar   id[2];          /* Identification */
        !           163:        uchar   frag[2];        /* Fragment information */
        !           164: 
        !           165: #define TCP_PHDRSIZE   12      
        !           166:        uchar   Unused;
        !           167:        uchar   proto;
        !           168:        uchar   tcplen[2];
        !           169:        uchar   tcpsrc[4];
        !           170:        uchar   tcpdst[4];
        !           171: 
        !           172: #define TCP_HDRSIZE    20
        !           173:        uchar   tcpsport[2];
        !           174:        uchar   tcpdport[2];
        !           175:        uchar   tcpseq[4];
        !           176:        uchar   tcpack[4];
        !           177:        uchar   tcpflag[2];
        !           178:        uchar   tcpwin[2];
        !           179:        uchar   tcpcksum[2];
        !           180:        uchar   tcpurg[2];
        !           181: 
        !           182:        /* Options segment */
        !           183:        uchar   tcpopt[2];
        !           184:        uchar   tcpmss[2];
        !           185: };
        !           186: 
        !           187: enum
        !           188: {
        !           189:        TimerOFF        = 0,
        !           190:        TimerON         = 1,
        !           191:        TimerDONE       = 2,
        !           192: };
        !           193: 
        !           194: struct Timer
        !           195: {
        !           196:        Timer   *next;
        !           197:        Timer   *prev;
        !           198:        int     state;
        !           199:        int     start;
        !           200:        int     count;
        !           201:        void    (*func)(void*);
        !           202:        void    *arg;
        !           203: };
        !           204: 
        !           205: struct Tctl
        !           206: {
        !           207:        uchar   state;                  /* Connection state */
        !           208:        uchar   type;                   /* Listening or active connection */
        !           209:        uchar   code;                   /* Icmp code */         
        !           210:        struct {
        !           211:                ulong   una;            /* Unacked data pointer */
        !           212:                ulong   nxt;            /* Next sequence expected */
        !           213:                ulong   ptr;            /* Data pointer */
        !           214:                ushort  wnd;            /* Tcp send window */
        !           215:                ulong   up;             /* Urgent data pointer */
        !           216:                ulong   wl1;
        !           217:                ulong   wl2;
        !           218:        } snd;
        !           219:        struct {
        !           220:                ulong   nxt;            /* Receive pointer to next byte slot */
        !           221:                ushort  wnd;            /* Receive window incoming */
        !           222:                ulong   up;             /* Urgent pointer */
        !           223:        } rcv;
        !           224:        ulong   iss;                    /* Initial sequence number */
        !           225:        ushort  cwind;                  /* Congestion window */
        !           226:        ushort  ssthresh;               /* Slow start threshold */
        !           227:        int     resent;                 /* Bytes just resent */
        !           228:        int     irs;                    /* Initial received squence */
        !           229:        ushort  mss;                    /* Mean segment size */
        !           230:        int     rerecv;                 /* Overlap of data rerecevived */
        !           231:        ushort  window;                 /* Recevive window */
        !           232:        int     max_snd;                /* Max send */
        !           233:        ulong   last_ack;               /* Last acknowledege received */
        !           234:        char    backoff;                /* Exponential backoff counter */
        !           235:        char    flags;                  /* State flags */
        !           236:        char    tos;                    /* Type of service */
        !           237: 
        !           238:        Blist   rcvq;                   /* Received data */
        !           239:        ulong   rcvcnt;                 /* Bytes queued for upstream */
        !           240: 
        !           241:        Block   *sndq;                  /* List of data going out */
        !           242:        ulong   sndcnt;                 /* Amount of data in send queue */
        !           243:        Rendez  sndr;                   /* process flow control */
        !           244:        QLock   sndrlock;
        !           245:        int     sndfull;
        !           246: 
        !           247:        Reseq   *reseq;                 /* Resequencing queue */
        !           248:        Timer   timer;                  /* Activity timer */
        !           249:        Timer   acktimer;               /* Acknoledge timer */
        !           250:        Timer   rtt_timer;              /* Round trip timer */
        !           251:        ulong   rttseq;                 /* Round trip sequence */
        !           252:        int     srtt;                   /* Shortened round trip */
        !           253:        int     mdev;                   /* Mean deviation of round trip */
        !           254:        int     kacounter;              /* when counter goes to zero, hangup */
        !           255: };
        !           256: 
        !           257: struct Tcpctl
        !           258: {
        !           259:        QLock;
        !           260:        Rendez syner;
        !           261:        struct Tctl;
        !           262: };
        !           263: 
        !           264: struct Tcp
        !           265: {
        !           266:        Port    source;
        !           267:        Port    dest;
        !           268:        ulong   seq;
        !           269:        ulong   ack;
        !           270:        char    flags;
        !           271:        ushort  wnd;
        !           272:        ushort  up;
        !           273:        ushort  mss;
        !           274: };
        !           275: 
        !           276: struct Reseq
        !           277: {
        !           278:        Reseq   *next;
        !           279:        Tcp     seg;
        !           280:        Block   *bp;
        !           281:        ushort  length;
        !           282:        char    tos;
        !           283: };
        !           284: 
        !           285: /* An ip interface used for UDP/TCP/IL */
        !           286: struct Ipconv
        !           287: {
        !           288:        QLock;                          /* Ref count lock */
        !           289:        Netprot;                        /* stat info */
        !           290:        int     ref;
        !           291:        Ipaddr  dst;                    /* Destination from connect */
        !           292:        Ipaddr  src;                    /* local address */
        !           293:        Port    psrc;                   /* Source port */
        !           294:        Port    pdst;                   /* Destination port */
        !           295: 
        !           296:        Ipifc   *ifc;                   /* Ip protocol interface */
        !           297:        Queue   *readq;                 /* Pointer to upstream read q */
        !           298:        QLock   listenq;                /* List of people waiting incoming cons */
        !           299:        Rendez  listenr;                /* Some where to sleep while waiting */
        !           300:                
        !           301:        char    *err;                   /* Async protocol error */
        !           302:        int     backlog;                /* Maximum number of waiting connections */
        !           303:        int     headers;                /* include header in packet */
        !           304:        int     curlog;                 /* Number of waiting connections */
        !           305:        Ipconv  *newcon;                /* This is the start of a connection */
        !           306:        char    text[NAMELEN];          /* program announcing/connecting port */
        !           307: 
        !           308:        union {
        !           309:                Tcpctl  tcpctl;         /* Tcp control block */
        !           310:                Ilcb    ilctl;          /* Il control block */
        !           311:        };
        !           312: };
        !           313: 
        !           314: 
        !           315: enum
        !           316: {
        !           317:        MAX_TIME        = (1<<20),      /* Forever */
        !           318:        TCP_ACK         = 50,           /* Timed ack sequence in ms */
        !           319: 
        !           320:        URG             = 0x20,         /* Data marked urgent */
        !           321:        ACK             = 0x10,         /* Aknowledge is valid */
        !           322:        PSH             = 0x08,         /* Whole data pipe is pushed */
        !           323:        RST             = 0x04,         /* Reset connection */
        !           324:        SYN             = 0x02,         /* Pkt. is synchronise */
        !           325:        FIN             = 0x01,         /* Start close down */
        !           326: 
        !           327:        EOL_KIND        = 0,
        !           328:        NOOP_KIND       = 1,
        !           329:        MSS_KIND        = 2,
        !           330: 
        !           331:        MSS_LENGTH      = 4,            /* Mean segment size */
        !           332:        MSL2            = 10,
        !           333:        MSPTICK         = 50,           /* Milliseconds per timer tick */
        !           334:        DEF_MSS         = 512,          /* Default mean segment */
        !           335:        DEF_RTT         = 1000,         /* Default round trip */
        !           336: 
        !           337:        TCP_PASSIVE     = 0,            /* Listen connection */
        !           338:        TCP_ACTIVE      = 1,            /* Outgoing connection */
        !           339:        IL_PASSIVE      = 0,
        !           340:        IL_ACTIVE       = 1,
        !           341: 
        !           342:        MAXBACKOFF      = 12,
        !           343:        FORCE           = 1,
        !           344:        CLONE           = 2,
        !           345:        RETRAN          = 4,
        !           346:        ACTIVE          = 8,
        !           347:        SYNACK          = 16,
        !           348:        AGAIN           = 8,
        !           349:        DGAIN           = 4,
        !           350: };
        !           351: 
        !           352: #define        set_timer(t,x)  (((t)->start) = (x)/MSPTICK)
        !           353: #define        run_timer(t)    ((t)->state == TimerON)
        !           354: 
        !           355: enum                                   /* Tcp connection states */
        !           356: {
        !           357:        Closed          = 0,
        !           358:        Listen,
        !           359:        Syn_sent,
        !           360:        Syn_received,
        !           361:        Established,
        !           362:        Finwait1,
        !           363:        Finwait2,
        !           364:        Close_wait,
        !           365:        Closing,
        !           366:        Last_ack,
        !           367:        Time_wait
        !           368: };
        !           369: 
        !           370: enum
        !           371: {
        !           372:        Nipconv=        512,            /* max conversations per interface */
        !           373:        Udphdrsize=     6,              /* size if a to/from user Udp header */
        !           374:        Nipd=           34,             /* ip hardware interfaces */
        !           375: };
        !           376: 
        !           377: /*
        !           378:  * Ip interface structure. We have one for each active protocol driver
        !           379:  */
        !           380: struct Ipifc 
        !           381: {
        !           382:        QLock;
        !           383:        Network;                                /* user level network interface */
        !           384:        Ipifc           *next;
        !           385:        int             inited;
        !           386:        uchar           protocol;               /* Ip header protocol number */
        !           387:        void (*iprcv)   (Ipifc*, Block*);       /* Receive demultiplexor */
        !           388:        ulong           chkerrs;                /* checksum errors */
        !           389:        Ipconv          **conv;                 /* conversations */
        !           390: };
        !           391: 
        !           392: /*
        !           393:  * Ip hardare interface structure. We have one for each physical interface
        !           394:  */
        !           395: struct Ipdevice
        !           396: {
        !           397:        Queue   *q;
        !           398: 
        !           399:        Ipaddr          Myip[7];
        !           400:        Ipaddr          Mymask;
        !           401:        Ipaddr          Mynetmask;
        !           402:        Ipaddr          Remip;          /* address of remote side */
        !           403:        uchar           Netmyip[4];     /* In Network byte order */
        !           404:        int             maxmtu;         /* Maximum transfer unit */
        !           405:        int             minmtu;         /* Minumum tranfer unit */
        !           406:        int             hsize;          /* Media header size */
        !           407: 
        !           408:        int             type;           /* channel identifier */
        !           409:        int             dev;
        !           410: 
        !           411:        QLock           outl;
        !           412: };
        !           413: 
        !           414: struct Fragq
        !           415: {
        !           416:        QLock;
        !           417:        Block  *blist;
        !           418:        Fragq  *next;
        !           419:        Ipaddr src;
        !           420:        Ipaddr dst;
        !           421:        ushort id;
        !           422:        ulong  age;
        !           423: };
        !           424: 
        !           425: struct Ipfrag
        !           426: {
        !           427:        ushort  foff;
        !           428:        ushort  flen;
        !           429: };
        !           430: 
        !           431: enum {
        !           432:        IP_VER          = 0x40,                 /* Using IP version 4 */
        !           433:        IP_HLEN         = 0x05,                 /* Header length in characters */
        !           434:        IP_DF           = 0x4000,               /* Don't fragment */
        !           435:        IP_MF           = 0x2000,               /* More fragments */
        !           436: 
        !           437:        /* Sizes */
        !           438:        IP_MAX          = (32*1024),            /* Maximum Internet packet size */
        !           439:        UDP_MAX         = (IP_MAX-ETHER_IPHDR), /* Maximum UDP datagram size */
        !           440:        UDP_DATMAX      = (UDP_MAX-UDP_HDRSIZE),/* Maximum amount of udp data */
        !           441:        IL_DATMAX       = (IP_MAX-IL_HDRSIZE),  /* Maximum IL data in one ip packet */
        !           442: 
        !           443:        /* Protocol numbers */
        !           444:        IP_ICMPPROTO    = 1,
        !           445:        IP_UDPPROTO     = 17,
        !           446:        IP_TCPPROTO     = 6,
        !           447:        IP_ILPROTO      = 40,
        !           448: 
        !           449:        /* Psuedo protocol - not on the wire */
        !           450:        IP_ROUTER       = 128,
        !           451: 
        !           452:        /* Protocol port numbers */
        !           453:        PORTALLOC       = 5000,                 /* First automatic allocated port */
        !           454:        PRIVPORTALLOC   = 600,                  /* First priveleged port allocated */
        !           455:        UNPRIVPORTALLOC = 1024,                 /* First unpriveleged port allocated */
        !           456:        PORTMAX         = 30000,                /* Last port to allocte */
        !           457: };
        !           458: 
        !           459: void   add_reseq(Tcpctl *, char, Tcp *, Block *, ushort);
        !           460: int    arp_lookup(uchar*, uchar*);
        !           461: int    backoff(int);
        !           462: Block* btrim(Block*, int, int);
        !           463: void   localclose(Ipconv *, char []);
        !           464: int    dupb(Block **, Block *, int, int);
        !           465: void   extract_oob(Block **, Block **, Tcp *);
        !           466: void   get_reseq(Tcpctl *, char *, Tcp *, Block **, ushort *);
        !           467: Ipaddr ipgetsrc(uchar*);
        !           468: void   hnputl(uchar*, ulong);
        !           469: void   hnputs(uchar*, ushort);
        !           470: Block* htontcp(Tcp *, Block *, Tcphdr *);
        !           471: Block* htontcp(Tcp *, Block *, Tcphdr *);
        !           472: void   iloutoforder(Ipconv*, Ilhdr*, Block*);
        !           473: void   ilstart(Ipconv *, int, int);
        !           474: int    inb_window(Tcpctl *, int);
        !           475: void   init_tcpctl(Ipconv *);
        !           476: void   initfrag(int);
        !           477: void   initipifc(Ipifc*, uchar, void (*)(Ipifc*, Block*));
        !           478: Ipconv*        ip_conn(Ipifc*, Port, Port, Ipaddr dest);
        !           479: ushort ip_csum(uchar*);
        !           480: Block* ip_reassemble(int, Block*, Etherhdr*);
        !           481: int    ipclonecon(Chan *);
        !           482: int    ipconbusy(Ipconv*);
        !           483: Ipconv*        ipcreateconv(Ipifc*, int);
        !           484: int    ipforme(uchar*);
        !           485: Fragq* ipfragallo(void);
        !           486: void   ipfragfree(Fragq*, int);
        !           487: Ipconv*        ipincoming(Ipifc*, Ipconv*);
        !           488: int    iplisten(Chan *);
        !           489: void   iplocalfill(Chan*, char*, int);
        !           490: void   ipmkdir(Qinfo *, Dirtab *, Ipconv *);
        !           491: Ipaddr ipparse(char*);
        !           492: void   ipremotefill(Chan*, char*, int);
        !           493: Ipdevice*      iproute(uchar*, uchar*);
        !           494: void   ipsetaddrs(Ipdevice*);
        !           495: void   ipstatusfill(Chan*, char*, int);
        !           496: Port   nextport(Ipifc*, int);
        !           497: ushort nhgets(uchar*);
        !           498: ulong  nhgetl(uchar*);
        !           499: int    ntohtcp(Tcp *, Block **);
        !           500: int    ntohtcp(Tcp*, Block**);
        !           501: Ipconv*        portused(Ipifc*, Port);
        !           502: void   ppkt(Block*);
        !           503: void   proc_syn(Ipconv*, char, Tcp*);
        !           504: ushort ptcl_csum(Block*bp, int, int);
        !           505: int    pullb(Block **, int);
        !           506: void   reset(Ipaddr, Ipaddr, char, ushort, Tcp*);
        !           507: void   tcpsndsyn(Tcpctl*);
        !           508: int    seq_ge(ulong, ulong);
        !           509: int    seq_gt(ulong, ulong);
        !           510: int    seq_gt(ulong, ulong);
        !           511: int    seq_le(ulong, ulong);
        !           512: int    seq_lt(ulong, ulong);
        !           513: int    seq_within(ulong, ulong, ulong);
        !           514: int    seq_within(ulong, ulong, ulong);
        !           515: void   tcpsetstate(Ipconv *, char);
        !           516: void   tcpgo(Timer *);
        !           517: void   tcphalt(Timer *);
        !           518: void   tcpxstate(Ipconv*, char oldstate, char newstate);
        !           519: void   tcpacktimer(void *);
        !           520: void   tcpinput(Ipifc*, Block *);
        !           521: void   tcpoutput(Ipconv*);
        !           522: void   tcptimeout(void *);
        !           523: void   tcpackproc(void*);
        !           524: void   tcpflow(void*);
        !           525: void   tcpflushincoming(Ipconv*);
        !           526: void   tcprcvwin(Ipconv *);
        !           527: void   tcpstart(Ipconv *, int, ushort, char);
        !           528: int    trim(Tcpctl *, Tcp *, Block **, ushort *);
        !           529: void   udprcvmsg(Ipifc*, Block*);
        !           530: void   update(Ipconv *, Tcp *);
        !           531: 
        !           532: #define        fmtaddr(xx)     (xx>>24)&0xff,(xx>>16)&0xff,(xx>>8)&0xff,xx&0xff
        !           533: #define        MIN(a, b)       ((a) < (b) ? (a) : (b))
        !           534: #define MAX(a, b)      ((a) > (b) ? (a) : (b))
        !           535: #define BLKIP(xp)      ((Etherhdr *)((xp)->rptr))
        !           536: #define BLKFRAG(xp)    ((Ipfrag *)((xp)->base))
        !           537: #define PREC(x)                ((x)>>5 & 7)
        !           538: 
        !           539: extern Ipaddr Myip[7];
        !           540: extern Ipaddr Mymask;
        !           541: extern Ipaddr Mynetmask;
        !           542: extern Ipaddr classmask[4];
        !           543: extern Ipifc *ipifc[];
        !           544: extern Ipdevice ipd[Nipd];
        !           545: extern char *tcpstate[];
        !           546: extern char *ilstate[];
        !           547: extern Rendez tcpflowr;
        !           548: extern Qinfo tcpinfo;
        !           549: extern Qinfo ipinfo;
        !           550: extern Qinfo ipconvinfo;
        !           551: extern Qinfo udpinfo;
        !           552: extern Qinfo ilinfo;
        !           553: extern Qinfo arpinfo;
        !           554: extern Queue *Ipoutput;
        !           555: 
        !           556: /* offsets into Myip */
        !           557: enum
        !           558: {
        !           559:        Myself          = 0,
        !           560:        Mybcast         = 1,
        !           561:        Mynet           = 3,
        !           562:        Mysubnet        = 5,
        !           563: };

unix.superglobalmegacorp.com

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