Annotation of Net2/netimp/if_imp.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms, with or without
                      6:  * modification, are permitted provided that the following conditions
                      7:  * are met:
                      8:  * 1. Redistributions of source code must retain the above copyright
                      9:  *    notice, this list of conditions and the following disclaimer.
                     10:  * 2. Redistributions in binary form must reproduce the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer in the
                     12:  *    documentation and/or other materials provided with the distribution.
                     13:  * 3. All advertising materials mentioning features or use of this software
                     14:  *    must display the following acknowledgement:
                     15:  *     This product includes software developed by the University of
                     16:  *     California, Berkeley and its contributors.
                     17:  * 4. Neither the name of the University nor the names of its contributors
                     18:  *    may be used to endorse or promote products derived from this software
                     19:  *    without specific prior written permission.
                     20:  *
                     21:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     31:  * SUCH DAMAGE.
                     32:  *
                     33:  *     @(#)if_imp.h    7.7 (Berkeley) 6/28/90
                     34:  */
                     35: 
                     36: /*
                     37:  * Structure of IMP 1822 long leader.
                     38:  */
                     39: struct control_leader {
                     40:        u_char  dl_format;      /* 1-8   leader format */
                     41:        u_char  dl_network;     /* 9-16  src/dest network */
                     42:        u_char  dl_flags;       /* 17-24 leader flags */
                     43:        u_char  dl_mtype;       /* 25-32 message type */
                     44:        u_char  dl_htype;       /* 33-40 handling type */
                     45:        u_char  dl_host;        /* 41-48 host number */
                     46:        u_short dl_imp;         /* 49-64 imp field */
                     47:        u_char  dl_link;        /* 65-72 link number */
                     48:        u_char  dl_subtype;     /* 73-80 message subtype */
                     49: };
                     50: 
                     51: struct imp_leader {
                     52:        struct  control_leader il_dl;
                     53: #define        il_format       il_dl.dl_format
                     54: #define        il_network      il_dl.dl_network
                     55: #define        il_flags        il_dl.dl_flags
                     56: #define        il_mtype        il_dl.dl_mtype
                     57: #define        il_htype        il_dl.dl_htype
                     58: #define        il_host         il_dl.dl_host
                     59: #define        il_imp          il_dl.dl_imp
                     60: #define        il_link         il_dl.dl_link
                     61: #define        il_subtype      il_dl.dl_subtype
                     62:        u_short il_length;      /* message length */
                     63: };
                     64: 
                     65: #define        IMP_MAXHOSTMSG  8       /* max messages in flight to a host */
                     66: #define        IMP_NOOPCNT     3       /* # of noops to send imp on reset */
                     67: /* insure things are even... */
                     68: #define        IMPMTU          ((8159 / NBBY) & ~01)
                     69: #define        IMP_RCVBUF      ((8159 / NBBY + 2) & ~01)
                     70: 
                     71: /*
                     72:  * IMP-host flags
                     73:  */
                     74: #define        IMP_1822L_H2I   0xd     /* 1822L host-to-imp, 96-bit format */
                     75: #define        IMP_1822L_I2H   0xe     /* 1822L imp-to-host, 96-bit format */
                     76: #define        IMP_NFF         0xf     /* 96-bit (new) format */
                     77: #define        IMP_TRACE       0x8     /* trace message route */
                     78: 
                     79: /*
                     80:  * IMP-host message types.
                     81:  */
                     82: #define        IMPTYPE_DATA            0       /* data for protocol */
                     83: #define        IMPTYPE_BADLEADER       1       /* leader error */
                     84: #define        IMPTYPE_DOWN            2       /* imp going down */
                     85: #define        IMPTYPE_NOOP            4       /* noop seen during initialization */
                     86: #define        IMPTYPE_RFNM            5       /* request for new messages */
                     87: #define        IMPTYPE_HOSTDEAD        6       /* host doesn't respond */
                     88: #define        IMPTYPE_HOSTUNREACH     7       /* host unreachable */
                     89: #define        IMPTYPE_BADDATA         8       /* data error */
                     90: #define        IMPTYPE_INCOMPLETE      9       /* incomplete message, send rest */
                     91: #define        IMPTYPE_RESET           10      /* reset complete */
                     92: /* non-blocking IMP interface */
                     93: #define        IMPTYPE_RETRY           11      /* IMP refused, try again */
                     94: #define        IMPTYPE_NOTIFY          12      /* IMP refused, will notify */
                     95: #define        IMPTYPE_TRYING          13      /* IMP refused, still rexmt'ng */
                     96: #define        IMPTYPE_READY           14      /* ready for next message */
                     97: 
                     98: /*
                     99:  * Link numbers
                    100:  */
                    101: #define        IMPLINK_IP              155
                    102: #define        IMPLINK_LOWEXPER        156
                    103: #define        IMPLINK_HIGHEXPER       158
                    104: 
                    105: /*
                    106:  * IMPTYPE_DOWN subtypes, in link number field.
                    107:  */
                    108: #define        IMP_DMASK               0x3     /* host going down mask */
                    109: #define        IMPDOWN_GOING           0       /* 30 secs */
                    110: #define        IMPDOWN_PM              1       /* hardware PM */
                    111: #define        IMPDOWN_RELOAD          2       /* software reload */
                    112: #define        IMPDOWN_RESTART         3       /* emergency restart */
                    113: #define        IMPDOWN_WHENMASK        0x3c    /* mask for "how soon" */
                    114: #define        IMPDOWN_WHENSHIFT       2       /* shift for "how soon" */
                    115: #define        IMPDOWN_WHENUNIT        5       /* unit for "how soon", 5 min. */
                    116: 
                    117: #define        IMPTV_DOWN      30              /* going down timer 30 secs */
                    118: 
                    119: #ifdef IMPMESSAGES
                    120: /*
                    121:  * Messages from IMP regarding why
                    122:  * it's going down.
                    123:  */
                    124: char *impmessage[] = {
                    125:        "in 30 seconds",
                    126:        "for hardware PM",
                    127:        "to reload software",
                    128:        "for emergency reset"
                    129: };
                    130: #endif
                    131: 
                    132: /*
                    133:  * IMPTYPE_BADLEADER subtypes.
                    134:  */
                    135: #define        IMPLEADER_ERR           0       /* error flip-flop set */
                    136: #define        IMPLEADER_SHORT         1       /* leader < 80 bits */
                    137: #define        IMPLEADER_TYPE          2       /* illegal type field */
                    138: #define        IMPLEADER_OPPOSITE      3       /* opposite leader type */
                    139: 
                    140: /*
                    141:  * IMPTYPE_HOSTDEAD subtypes.
                    142:  */
                    143: #define        IMPHOST_NORDY           1       /* ready-line negated */
                    144: #define        IMPHOST_TARDY           2       /* tardy receiving mesgs */
                    145: #define        IMPHOST_NOEXIST         3       /* NCC doesn't know host */
                    146: #define        IMPHOST_IMPSOFT         4       /* IMP software won't allow mesgs */
                    147: #define        IMPHOST_PM              5       /* host down for scheduled PM */
                    148: #define        IMPHOST_HARDSCHED       6       /* " " " " hardware work */
                    149: #define        IMPHOST_SOFTSCHED       7       /* " " " " software work */
                    150: #define        IMPHOST_RESTART         8       /* host down for emergency restart */
                    151: #define        IMPHOST_POWER           9       /* down because of power outage */
                    152: #define        IMPHOST_BREAKPOINT      10      /* host stopped at a breakpoint */
                    153: #define        IMPHOST_HARDWARE        11      /* hardware failure */
                    154: #define        IMPHOST_NOTUP           12      /* host not scheduled to be up */
                    155: /* 13-14 currently unused */
                    156: #define        IMPHOST_COMINGUP        15      /* host in process of coming up */
                    157: 
                    158: /*
                    159:  * IMPTYPE_HOSTUNREACH subtypes.
                    160:  */
                    161: #define        IMPREACH_IMP            0       /* destination IMP can't be reached */
                    162: #define        IMPREACH_HOSTUP         1       /* destination host isn't up */
                    163: #define        IMPREACH_LEADER         2       /* host doesn't support long leader */
                    164: #define        IMPREACH_PROHIBITED     3       /* communication is prohibited */
                    165: 
                    166: /*
                    167:  * IMPTYPE_INCOMPLETE subtypes.
                    168:  */
                    169: #define        IMPCOMPLETE_SLOW        0       /* host didn't take data fast enough */
                    170: #define        IMPCOMPLETE_TOOLONG     1       /* message was too long */
                    171: #define        IMPCOMPLETE_TIMEOUT     2       /* mesg transmission time > 15 sec. */
                    172: #define        IMPCOMPLETE_FAILURE     3       /* IMP/circuit failure */
                    173: #define        IMPCOMPLETE_NOSPACE     4       /* no resources within 15 sec. */
                    174: #define        IMPCOMPLETE_IMPIO       5       /* src IMP I/O failure during receipt */
                    175: 
                    176: /*
                    177:  * IMPTYPE_RETRY subtypes.
                    178:  */
                    179: #define        IMPRETRY_BUFFER         0       /* IMP buffer wasn't available */
                    180: #define        IMPRETRY_BLOCK          1       /* connection block unavailable */
                    181: 
                    182: #define        RFNMTIMER       (120*PR_SLOWHZ)  /* time to wait for RFNM for msg. */
                    183: #define        IMP_OTIMER      (5*IFNET_SLOWHZ) /* max output time unless blocked */
                    184: 
                    185: /*
                    186:  * Data structure shared between IMP protocol module and hardware
                    187:  * interface driver.  Used to allow layering of IMP routines on top
                    188:  * of varying device drivers.
                    189:  */
                    190: struct impcb {
                    191:        int     ic_hwunit;              /* H/W unit number */
                    192:        char    *ic_hwname;             /* H/W type name */
                    193:        char    ic_oactive;             /* output in progress */
                    194:        int     (*ic_init)();           /* hardware init routine */
                    195:        int     (*ic_output)();         /* hardware output routine */
                    196:        int     (*ic_down)();           /* hardware "drop ready" routine */
                    197: };
                    198: 
                    199: /*
                    200:  * IMP software status per interface.
                    201:  * (partially shared with the hardware specific module)
                    202:  *
                    203:  * Each interface is referenced by a network interface structure,
                    204:  * imp_if, which the routing code uses to locate the interface.
                    205:  * This structure contains the output queue for the interface, its
                    206:  * address, ...  IMP specific structures used in connecting the
                    207:  * IMP software modules to the hardware specific interface routines
                    208:  * are stored here.  The common structures are made visible to the
                    209:  * interface driver by passing a pointer to the hardware routine
                    210:  * at "attach" time.
                    211:  */
                    212: struct imp_softc {
                    213:        struct  ifnet imp_if;           /* network visible interface */
                    214:        struct  impcb imp_cb;           /* hooks to hardware module */
                    215:        int     imp_state;              /* current state of IMP */
                    216:        int     imp_dropcnt;            /* used during initialization */
                    217:        struct  mbuf *imp_hosts;        /* Head of host table hash chains. */
                    218:        struct  mbuf *imp_hostq;        /* current round-robin-output mark */
                    219:        u_int   imp_hostent;            /* current round-robin-output mark */
                    220:        int     imp_msgready;           /* number of messages ready to send */
                    221:        u_long  imp_block;              /* times imp blocked output */
                    222:        u_long  imp_lostrfnm;           /* rfnm's timed out */
                    223:        u_long  imp_badrfnm;            /* rfnm/incompl after timeout/bogus */
                    224:        u_long  imp_incomplete;         /* incomplete's received */
                    225:        u_long  imp_garbage;            /* bad messages received */
                    226: };
                    227: 
                    228: struct imp_softc *impattach();
                    229: 
                    230: /*
                    231:  * State of an IMP.
                    232:  */
                    233: #define        IMPS_DOWN       0               /* unavailable, host not ready */
                    234: #define        IMPS_WINIT      1               /* imp not ready, waiting for init */
                    235: #define        IMPS_INIT       2               /* coming up */
                    236: #define        IMPS_UP         3               /* ready to go */
                    237: #define        IMPS_GOINGDOWN  4               /* been told we go down soon */
                    238: 
                    239: #define        IMPS_RUNNING(s) ((s) >= IMPS_UP)        /* ready for messages */
                    240: #define        IMPS_IMPREADY(s) ((s) >= IMPS_INIT)     /* IMP ready line on */
                    241: 
                    242: #ifdef IMPLEADERS
                    243: char *impleaders[IMPTYPE_READY+1] = {
                    244:        "DATA", "BADLEADER", "DOWN", "bad", "NOOP", "RFNM", "HOSTDEAD",
                    245:        "HOSTUNREACH", "BADDATA", "INCOMPLETE", "RESET", "RETRY",
                    246:        "NOTIFY", "TRYING", "READY"
                    247: };
                    248: #endif

unix.superglobalmegacorp.com

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