1 /* Copyright (c) University of British Columbia, 1984 */ 2 3 typedef char bool; 4 #define FALSE 0 5 #define TRUE 1 6 7 typedef u_char octet; 8 9 #define MAX_INFO_LEN 4096+3+4 10 #define ADDRESS_A 3 /* B'00000011' */ 11 #define ADDRESS_B 1 /* B'00000001' */ 12 13 struct Hdlc_iframe { 14 octet address; 15 #ifdef vax 16 unsigned hdlc_0:1; 17 unsigned ns:3; 18 unsigned pf:1; 19 unsigned nr:3; 20 #endif 21 #ifdef sun 22 unsigned nr:3; 23 unsigned pf:1; 24 unsigned ns:3; 25 unsigned hdlc_0:1; 26 #endif 27 char i_field[MAX_INFO_LEN]; 28 }; 29 30 struct Hdlc_sframe { 31 octet address; 32 #ifdef vax 33 unsigned hdlc_01:2; 34 unsigned s2:2; 35 unsigned pf:1; 36 unsigned nr:3; 37 #endif 38 #ifdef sun 39 unsigned nr:3; 40 unsigned pf:1; 41 unsigned s2:2; 42 unsigned hdlc_01:2; 43 #endif 44 }; 45 46 struct Hdlc_uframe { 47 octet address; 48 #ifdef vax 49 unsigned hdlc_11:2; 50 unsigned m2:2; 51 unsigned pf:1; 52 unsigned m3:3; 53 #endif 54 #ifdef sun 55 unsigned m3:3; 56 unsigned pf:1; 57 unsigned m2:2; 58 unsigned hdlc_11:2; 59 #endif 60 }; 61 62 struct Frmr_frame { 63 octet address; 64 octet control; 65 octet frmr_control; 66 #ifdef vax 67 unsigned frmr_f2_0:1; 68 unsigned frmr_ns:3; 69 unsigned frmr_f1_0:1; 70 unsigned frmr_nr:3; 71 #endif 72 #ifdef sun 73 unsigned frmr_nr:3; 74 unsigned frmr_f1_0:1; 75 unsigned frmr_ns:3; 76 unsigned frmr_f2_0:1; 77 #endif 78 #ifdef vax 79 unsigned frmr_w:1; 80 unsigned frmr_x:1; 81 unsigned frmr_y:1; 82 unsigned frmr_z:1; 83 unsigned frmr_0000:4; 84 #endif 85 #ifdef sun 86 unsigned frmr_0000:4; 87 unsigned frmr_z:1; 88 unsigned frmr_y:1; 89 unsigned frmr_x:1; 90 unsigned frmr_w:1; 91 #endif 92 }; 93 94 #define HDHEADERLN 2 95 #define MINFRLN 2 /* Minimum frame length. */ 96 97 struct Hdlc_frame { 98 octet address; 99 octet control; 100 char info[3]; /* min for FRMR */ 101 }; 102 103 #define SABM_CONTROL 057 /* B'00101111' */ 104 #define UA_CONTROL 0143 /* B'01100011' */ 105 #define DISC_CONTROL 0103 /* B'01000011' */ 106 #define DM_CONTROL 017 /* B'00001111' */ 107 #define FRMR_CONTROL 0207 /* B'10000111' */ 108 #define RR_CONTROL 01 /* B'00000001' */ 109 #define RNR_CONTROL 05 /* B'00000101' */ 110 #define REJ_CONTROL 011 /* B'00001001' */ 111 112 #define POLLOFF 0 113 #define POLLON 1 114 115 /* Define Link State constants. */ 116 117 #define INIT 0 118 #define DM_SENT 1 119 #define SABM_SENT 2 120 #define ABM 3 121 #define WAIT_SABM 4 122 #define WAIT_UA 5 123 #define DISC_SENT 6 124 #define DISCONNECTED 7 125 #define MAXSTATE 8 126 127 /* The following constants are used in a switch statement to process 128 frames read from the communications line. */ 129 130 #define SABM 0 * MAXSTATE 131 #define DM 1 * MAXSTATE 132 #define DISC 2 * MAXSTATE 133 #define UA 3 * MAXSTATE 134 #define FRMR 4 * MAXSTATE 135 #define RR 5 * MAXSTATE 136 #define RNR 6 * MAXSTATE 137 #define REJ 7 * MAXSTATE 138 #define IFRAME 8 * MAXSTATE 139 #define ILLEGAL 9 * MAXSTATE 140 141 #define T1 (3 * PR_SLOWHZ) /* IFRAME TIMEOUT - 3 seconds */ 142 #define T3 (T1 / 2) /* RR generate timeout - 1.5 seconds */ 143 #define N2 10 144 #define MODULUS 8 145 #define MAX_WINDOW_SIZE 7 146 147 #define Z 0 148 #define Y 1 149 #define X 2 150 #define W 3 151 #define A 4 152 153 #define TX 0 154 #define RX 1 155 156 bool range_check (); 157 bool valid_nr (); 158 struct mbuf *hd_remove (); 159