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

unix.superglobalmegacorp.com

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