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