xref: /original-bsd/sys/netccitt/pk.h (revision e59fb703)
1 /*
2  * Copyright (c) University of British Columbia, 1984
3  * Copyright (c) 1990 The Regents of the University of California.
4  * All rights reserved.
5  *
6  * This code is derived from software contributed to Berkeley by
7  * the Laboratory for Computation Vision and the Computer Science Department
8  * of the University of British Columbia.
9  *
10  * %sccs.include.redist.c%
11  *
12  *	@(#)pk.h	7.9 (Berkeley) 11/13/91
13  */
14 
15 /*
16  *
17  *  X.25 Packet Level Definitions:
18  *
19  */
20 
21 /* Packet type identifier field defintions. */
22 
23 #define X25_CALL                         11
24 #define X25_CALL_ACCEPTED                15
25 #define X25_CLEAR                        19
26 #define X25_CLEAR_CONFIRM                23
27 #define X25_DATA                          0
28 #define X25_INTERRUPT                    35
29 #define X25_INTERRUPT_CONFIRM            39
30 
31 #define X25_RR                            1
32 #define X25_RNR                           5
33 #define X25_REJECT			  9
34 #define X25_RESET                        27
35 #define X25_RESET_CONFIRM                31
36 #define X25_DIAGNOSTIC			241
37 
38 #define X25_RESTART                     251
39 #define X25_RESTART_CONFIRM		255
40 
41 /* Restart cause field definitions. */
42 
43 #define X25_RESTART_LOCAL_PROCEDURE_ERROR 1
44 #define X25_RESTART_NETWORK_CONGESTION	  3
45 #define X25_RESTART_NETWORK_OPERATIONAL	  7
46 
47 /* Miscellaneous definitions. */
48 
49 #define DATA_PACKET_DESIGNATOR		0x01
50 #define RR_OR_RNR_PACKET_DESIGNATOR	0x02
51 #define RR_PACKET_DESIGNATOR		0x04
52 
53 #define DEFAULT_WINDOW_SIZE		2
54 #define MODULUS				8
55 
56 #define ADDRLN				1
57 #define MAXADDRLN			15
58 #define FACILITIESLN			1
59 #define MAXFACILITIESLN			10
60 #define MAXUSERDATA			16
61 #define MAXCALLINFOLN			1+15+1+10+16
62 
63 #define PACKET_OK			0
64 #define IGNORE_PACKET			1
65 #define ERROR_PACKET			2
66 
67 typedef char    bool;
68 #define FALSE	0
69 #define TRUE	1
70 
71 /*
72  *  X.25 Packet format definitions
73  *  This will eventually have to be rewritten without reference
74  *  to bit fields, to be ansi C compliant and allignment safe.
75  */
76 
77 #if BYTE_ORDER == BIG_ENDIAN
78 #define ORDER2(a, b) a , b
79 #define ORDER4(a, b, c, d) a , b , c , d
80 #endif
81 
82 #if BYTE_ORDER == LITTLE_ENDIAN
83 #define ORDER2(a, b) b , a
84 #define ORDER4(a, b, c, d) d , c , b , a
85 #endif
86 
87 typedef u_char octet;
88 
89 struct x25_calladdr {
90 	octet ORDER2(calling_addrlen:4, called_addrlen:4);
91 	octet address_field[MAXADDRLN];
92 };
93 
94 struct x25_packet {
95 	octet ORDER4(q_bit:1, d_bit:1, fmt_identifier:2, lc_group_number:4);
96 	octet logical_channel_number;
97 	octet packet_type;
98 	octet packet_data;
99 };
100 
101 struct data_packet {
102 	octet ORDER4(pr:3, m_bit:1, ps:3, z:1);
103 };
104 
105 #define FACILITIES_REVERSE_CHARGE	0x1
106 #define FACILITIES_THROUGHPUT		0x2
107 #define FACILITIES_PACKETSIZE		0x42
108 #define FACILITIES_WINDOWSIZE		0x43
109 
110 #define PKHEADERLN	3
111 
112 
113 #define PR(xp)		(((struct data_packet *)&xp -> packet_type)->pr)
114 #define PS(xp)		(((struct data_packet *)&xp -> packet_type)->ps)
115 #define MBIT(xp)	(((struct data_packet *)&xp -> packet_type)->m_bit)
116 #define LCN(xp)		(xp -> logical_channel_number + \
117 	(xp -> lc_group_number ? (xp -> lc_group_number << 8) : 0))
118 #define SET_LCN(xp, lcn) ((xp -> logical_channel_number = lcn), \
119 	(xp -> lc_group_number = (lcn > 255 ? (lcn >> 8) : 0)))
120 
121 struct mbuf *pk_template ();
122 
123 /* Define X.25 packet level states. */
124 
125 /* Call setup and clearing substates.  */
126 
127 #define LISTEN           0
128 #define READY            1
129 #define RECEIVED_CALL    2
130 #define SENT_CALL        3
131 #define DATA_TRANSFER    4
132 #define RECEIVED_CLEAR   5
133 #define SENT_CLEAR       6
134 
135 /* DTE states. */
136 
137 #define DTE_WAITING		7
138 #define DTE_RECEIVED_RESTART	8
139 #define DTE_SENT_RESTART	9
140 #define DTE_READY		0
141 
142 #define MAXSTATES		10
143 
144 /*
145  *  The following definitions are used in a switch statement after
146  *  determining the packet type.  These values are returned by the
147  *  pk_decode procedure.
148  */
149 
150 #define CALL             0 * MAXSTATES
151 #define CALL_ACCEPTED    1 * MAXSTATES
152 #define CLEAR            2 * MAXSTATES
153 #define CLEAR_CONF       3 * MAXSTATES
154 #define DATA             4 * MAXSTATES
155 #define INTERRUPT        5 * MAXSTATES
156 #define INTERRUPT_CONF   6 * MAXSTATES
157 #define RR               7 * MAXSTATES
158 #define RNR              8 * MAXSTATES
159 #define RESET            9 * MAXSTATES
160 #define RESET_CONF      10 * MAXSTATES
161 #define RESTART         11 * MAXSTATES
162 #define RESTART_CONF    12 * MAXSTATES
163 #define REJECT          13 * MAXSTATES
164 #define DIAG_TYPE       14 * MAXSTATES
165 #define INVALID_PACKET  15 * MAXSTATES
166 #define DELETE_PACKET	INVALID_PACKET
167