1*5686Ssam /* if_imp.h 4.1 82/02/03 */ 2*5686Ssam 3*5686Ssam /* 4*5686Ssam * Structure of IMP 1822 long leader. 5*5686Ssam */ 6*5686Ssam struct imp_leader { 7*5686Ssam u_char il_format; /* leader format */ 8*5686Ssam u_char il_network; /* src/dest network */ 9*5686Ssam u_char il_flags; /* leader flags */ 10*5686Ssam u_char il_mtype; /* message type */ 11*5686Ssam u_char il_htype; /* handling type */ 12*5686Ssam u_char il_host; /* host number */ 13*5686Ssam union { 14*5686Ssam u_short il_short; 15*5686Ssam u_char il_char[2]; 16*5686Ssam } ilun; 17*5686Ssam #define il_imp ilun.il_short /* imp field */ 18*5686Ssam #define il_impno ilun.il_char[1] /* imp number */ 19*5686Ssam #define il_lh ilun.il_char[0] /* logical host */ 20*5686Ssam u_char il_link; /* link number */ 21*5686Ssam u_char il_subtype; /* message subtype */ 22*5686Ssam u_short il_length; /* message length */ 23*5686Ssam }; 24*5686Ssam 25*5686Ssam #define IMP_DROPCNT 3 /* # of noops from imp to ignore */ 26*5686Ssam #define IMP_MTU 1019 /* max message size (bytes) */ 27*5686Ssam 28*5686Ssam /* 29*5686Ssam * IMP-host flags 30*5686Ssam */ 31*5686Ssam #define IMP_NFF 0xf /* 96-bit (new) format */ 32*5686Ssam #define IMP_TRACE 0x8 /* trace message route */ 33*5686Ssam 34*5686Ssam #define IMP_DMASK 0x3 /* host going down mask */ 35*5686Ssam 36*5686Ssam /* 37*5686Ssam * IMP-host message types. 38*5686Ssam */ 39*5686Ssam #define IMPTYPE_DATA 0 /* data for protocol */ 40*5686Ssam #define IMPTYPE_BADLEADER 1 /* leader error */ 41*5686Ssam #define IMPTYPE_DOWN 2 /* imp going down */ 42*5686Ssam #define IMPTYPE_NOOP 4 /* noop seen during initialization */ 43*5686Ssam #define IMPTYPE_RFNM 5 /* request for new messages */ 44*5686Ssam #define IMPTYPE_HOSTDEAD 6 /* host doesn't respond */ 45*5686Ssam #define IMPTYPE_HOSTUNREACH 7 /* host unreachable */ 46*5686Ssam #define IMPTYPE_BADDATA 8 /* data error */ 47*5686Ssam #define IMPTYPE_INCOMPLETE 9 /* incomplete message, send rest */ 48*5686Ssam #define IMPTYPE_RESET 10 /* reset complete */ 49*5686Ssam /* non-blocking IMP interface */ 50*5686Ssam #define IMPTYPE_RETRY 11 /* IMP refused, try again */ 51*5686Ssam #define IMPTYPE_NOTIFY 12 /* IMP refused, will notify */ 52*5686Ssam #define IMPTYPE_TRYING 13 /* IMP refused, still rexmt'ng */ 53*5686Ssam #define IMPTYPE_READY 14 /* ready for next message */ 54*5686Ssam 55*5686Ssam /* 56*5686Ssam * IMPTYPE_DOWN subtypes. 57*5686Ssam */ 58*5686Ssam #define IMPDOWN_GOING 0 /* 30 secs */ 59*5686Ssam #define IMPDOWN_PM 1 /* hardware PM */ 60*5686Ssam #define IMPDOWN_RELOAD 2 /* software reload */ 61*5686Ssam #define IMPDOWN_RESTART 3 /* emergency restart */ 62*5686Ssam 63*5686Ssam /* 64*5686Ssam * IMPTYPE_BADLEADER subtypes. 65*5686Ssam */ 66*5686Ssam #define IMPLEADER_ERR 0 /* error flip-flop set */ 67*5686Ssam #define IMPLEADER_SHORT 1 /* leader < 80 bits */ 68*5686Ssam #define IMPLEADER_TYPE 2 /* illegal type field */ 69*5686Ssam #define IMPLEADER_OPPOSITE 3 /* opposite leader type */ 70*5686Ssam 71*5686Ssam /* 72*5686Ssam * IMPTYPE_HOSTDEAD subtypes. 73*5686Ssam */ 74*5686Ssam #define IMPHOST_NORDY 1 /* ready-line negated */ 75*5686Ssam #define IMPHOST_TARDY 2 /* tardy receiving mesgs */ 76*5686Ssam #define IMPHOST_NOEXIST 3 /* NCC doesn't know host */ 77*5686Ssam #define IMPHOST_IMPSOFT 4 /* IMP software won't allow mesgs */ 78*5686Ssam #define IMPHOST_PM 5 /* host down for scheduled PM */ 79*5686Ssam #define IMPHOST_HARDSCHED 6 /* " " " " hardware work */ 80*5686Ssam #define IMPHOST_SOFTSCHED 7 /* " " " " software work */ 81*5686Ssam #define IMPHOST_RESTART 8 /* host down for emergency restart */ 82*5686Ssam #define IMPHOST_POWER 9 /* down because of power outage */ 83*5686Ssam #define IMPHOST_BREAKPOINT 10 /* host stopped at a breakpoint */ 84*5686Ssam #define IMPHOST_HARDWARE 11 /* hardware failure */ 85*5686Ssam #define IMPHOST_NOTUP 12 /* host not scheduled to be up */ 86*5686Ssam /* 13-14 currently unused */ 87*5686Ssam #define IMPHOST_COMINGUP 15 /* host in process of coming up */ 88*5686Ssam 89*5686Ssam /* 90*5686Ssam * IMPTYPE_HOSTUNREACH subtypes. 91*5686Ssam */ 92*5686Ssam #define IMPREACH_IMP 0 /* destination IMP can't be reached */ 93*5686Ssam #define IMPREACH_HOSTUP 1 /* destination host isn't up */ 94*5686Ssam #define IMPREACH_LEADER 2 /* host doesn't support long leader */ 95*5686Ssam #define IMPREACH_PROHIBITED 3 /* communication is prohibited */ 96*5686Ssam 97*5686Ssam /* 98*5686Ssam * IMPTYPE_INCOMPLETE subtypes. 99*5686Ssam */ 100*5686Ssam #define IMPCOMPLETE_SLOW 0 /* host didn't take data fast enough */ 101*5686Ssam #define IMPCOMPLETE_TOOLONG 1 /* message was too long */ 102*5686Ssam #define IMPCOMPLETE_TIMEOUT 2 /* mesg transmission time > 15 sec. */ 103*5686Ssam #define IMPCOMPLETE_FAILURE 3 /* IMP/circuit failure */ 104*5686Ssam #define IMPCOMPLETE_NOSPACE 4 /* no resources within 15 sec. */ 105*5686Ssam #define IMPCOMPLETE_IMPIO 5 /* src IMP I/O failure during receipt */ 106*5686Ssam 107*5686Ssam /* 108*5686Ssam * IMPTYPE_RETRY subtypes. 109*5686Ssam */ 110*5686Ssam #define IMPRETRY_BUFFER 0 /* IMP buffer wasn't available */ 111*5686Ssam #define IMPRETRY_BLOCK 1 /* connection block unavailable */ 112*5686Ssam 113*5686Ssam /* 114*5686Ssam * Data structure shared between IMP protocol module and hardware 115*5686Ssam * interface driver. Used to allow layering of IMP routines on top 116*5686Ssam * of varying device drivers. NOTE: there's a possible problem 117*5686Ssam * with ambiguity in the ``unit'' definition which is implicitly 118*5686Ssam * shared by the both IMP and device code. If we have two IMPs, 119*5686Ssam * with each on top of a device of the same unit, things won't work. 120*5686Ssam * The assumption is if you've got multiple IMPs, then they all run 121*5686Ssam * on top of the same type of device, or they must have different units. 122*5686Ssam */ 123*5686Ssam struct impcb { 124*5686Ssam char ic_oactive; /* output in progress */ 125*5686Ssam int (*ic_init)(); /* hardware init routine */ 126*5686Ssam int (*ic_start)(); /* hardware start output routine */ 127*5686Ssam }; 128*5686Ssam 129*5686Ssam /* 130*5686Ssam * State of an IMP. 131*5686Ssam */ 132*5686Ssam #define IMPS_DOWN 0 /* unavailable, don't use */ 133*5686Ssam #define IMPS_GOINGDOWN 1 /* been told we go down soon */ 134*5686Ssam #define IMPS_INIT 2 /* coming up */ 135*5686Ssam #define IMPS_UP 3 /* ready to go */ 136*5686Ssam #define IMPS_RESET 4 /* reset in progress */ 137*5686Ssam 138*5686Ssam #define IMPTV_DOWN (30*60) /* going down timer 30 secs */ 139