xref: /csrg-svn/sys/netccitt/hdlc.h (revision 41589)
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