xref: /csrg-svn/sys/netccitt/pk.h (revision 48873)
142007Ssklower /*
242007Ssklower  * Copyright (c) University of British Columbia, 1984
342007Ssklower  * Copyright (c) 1990 The Regents of the University of California.
442007Ssklower  * All rights reserved.
542007Ssklower  *
642007Ssklower  * This code is derived from software contributed to Berkeley by
742007Ssklower  * the Laboratory for Computation Vision and the Computer Science Department
842007Ssklower  * of the University of British Columbia.
942007Ssklower  *
1042007Ssklower  * %sccs.include.redist.c%
1142007Ssklower  *
12*48873Ssklower  *	@(#)pk.h	7.8 (Berkeley) 04/30/91
1342007Ssklower  */
1441590Ssklower 
1541590Ssklower /*
1641590Ssklower  *
1741590Ssklower  *  X.25 Packet Level Definitions:
1841590Ssklower  *
1941590Ssklower  */
2041590Ssklower 
2141590Ssklower /* Packet type identifier field defintions. */
2241590Ssklower 
2341590Ssklower #define X25_CALL                         11
2441590Ssklower #define X25_CALL_ACCEPTED                15
2541590Ssklower #define X25_CLEAR                        19
2641590Ssklower #define X25_CLEAR_CONFIRM                23
2741590Ssklower #define X25_DATA                          0
2841590Ssklower #define X25_INTERRUPT                    35
2941590Ssklower #define X25_INTERRUPT_CONFIRM            39
3041590Ssklower 
3141590Ssklower #define X25_RR                            1
3241590Ssklower #define X25_RNR                           5
3347264Ssklower #define X25_REJECT			  9
3441590Ssklower #define X25_RESET                        27
3541590Ssklower #define X25_RESET_CONFIRM                31
3647264Ssklower #define X25_DIAGNOSTIC			241
3741590Ssklower 
3841590Ssklower #define X25_RESTART                     251
3941590Ssklower #define X25_RESTART_CONFIRM		255
4041590Ssklower 
4141590Ssklower /* Restart cause field definitions. */
4241590Ssklower 
4341590Ssklower #define X25_RESTART_LOCAL_PROCEDURE_ERROR 1
4441590Ssklower #define X25_RESTART_NETWORK_CONGESTION	  3
4541590Ssklower #define X25_RESTART_NETWORK_OPERATIONAL	  7
4641590Ssklower 
4741590Ssklower /* Miscellaneous definitions. */
4841590Ssklower 
4941590Ssklower #define DATA_PACKET_DESIGNATOR		0x01
5041590Ssklower #define RR_OR_RNR_PACKET_DESIGNATOR	0x02
5141590Ssklower #define RR_PACKET_DESIGNATOR		0x04
5241590Ssklower 
5341590Ssklower #define DEFAULT_WINDOW_SIZE		2
5441590Ssklower #define MODULUS				8
5541590Ssklower 
5641590Ssklower #define ADDRLN				1
5741590Ssklower #define MAXADDRLN			15
5841590Ssklower #define FACILITIESLN			1
5941590Ssklower #define MAXFACILITIESLN			10
6041590Ssklower #define MAXUSERDATA			16
6141590Ssklower #define MAXCALLINFOLN			1+15+1+10+16
6241590Ssklower 
6341590Ssklower #define PACKET_OK			0
6441590Ssklower #define IGNORE_PACKET			1
6541590Ssklower #define ERROR_PACKET			2
6641590Ssklower 
6741590Ssklower typedef char    bool;
6841590Ssklower #define FALSE	0
6941590Ssklower #define TRUE	1
7041590Ssklower 
7141590Ssklower /*
7241590Ssklower  *  X.25 Packet format definitions
7342007Ssklower  *  This will eventually have to be rewritten without reference
7442007Ssklower  *  to bit fields, to be ansi C compliant and allignment safe.
7541590Ssklower  */
7641590Ssklower 
7742007Ssklower #if BYTE_ORDER == BIG_ENDIAN
7842007Ssklower #define ORDER2(a, b) a , b
7942007Ssklower #define ORDER4(a, b, c, d) a , b , c , d
8042007Ssklower #endif
8141590Ssklower 
8242007Ssklower #if BYTE_ORDER == LITTLE_ENDIAN
8342007Ssklower #define ORDER2(a, b) b , a
8442007Ssklower #define ORDER4(a, b, c, d) d , c , b , a
8541590Ssklower #endif
8641590Ssklower 
8742007Ssklower typedef u_char octet;
8841590Ssklower 
8942007Ssklower struct x25_calladdr {
9045292Ssklower 	octet ORDER2(calling_addrlen:4, called_addrlen:4);
9142007Ssklower 	octet address_field[MAXADDRLN];
9245165Ssklower };
9341590Ssklower 
9441590Ssklower struct x25_packet {
9545292Ssklower 	octet ORDER4(q_bit:1, d_bit:1, fmt_identifier:2, lc_group_number:4);
9641590Ssklower 	octet logical_channel_number;
9741590Ssklower 	octet packet_type;
9841590Ssklower 	octet packet_data;
9941590Ssklower };
10041590Ssklower 
10141590Ssklower struct data_packet {
10245292Ssklower 	octet ORDER4(pr:3, m_bit:1, ps:3, z:1);
10341590Ssklower };
10441590Ssklower 
10542007Ssklower #define FACILITIES_REVERSE_CHARGE	0x1
10642007Ssklower #define FACILITIES_THROUGHPUT		0x2
10742007Ssklower #define FACILITIES_PACKETSIZE		0x42
10842007Ssklower #define FACILITIES_WINDOWSIZE		0x43
10942007Ssklower 
11042007Ssklower #define PKHEADERLN	3
11142007Ssklower 
11242007Ssklower 
11341590Ssklower #define PR(xp)		(((struct data_packet *)&xp -> packet_type)->pr)
11441590Ssklower #define PS(xp)		(((struct data_packet *)&xp -> packet_type)->ps)
11541590Ssklower #define MBIT(xp)	(((struct data_packet *)&xp -> packet_type)->m_bit)
11645451Ssklower #define LCN(xp)		(xp -> logical_channel_number + \
11745451Ssklower 	(xp -> lc_group_number ? (xp -> lc_group_number >> 8) : 0))
11845451Ssklower #define SET_LCN(xp, lcn) ((xp -> logical_channel_number = lcn), \
11945451Ssklower 	(xp -> lc_group_number = lcn > 255 ? lcn >> 8 : 0))
12041590Ssklower 
12145891Ssklower struct mbuf *pk_template ();
12241590Ssklower 
12341590Ssklower /* Define X.25 packet level states. */
12441590Ssklower 
12541590Ssklower /* Call setup and clearing substates.  */
12641590Ssklower 
12741590Ssklower #define LISTEN           0
12841590Ssklower #define READY            1
12941590Ssklower #define RECEIVED_CALL    2
13041590Ssklower #define SENT_CALL        3
13141590Ssklower #define DATA_TRANSFER    4
13241590Ssklower #define RECEIVED_CLEAR   5
13341590Ssklower #define SENT_CLEAR       6
13441590Ssklower 
13541590Ssklower /* DTE states. */
13641590Ssklower 
13741590Ssklower #define DTE_WAITING		7
13841590Ssklower #define DTE_RECEIVED_RESTART	8
13941590Ssklower #define DTE_SENT_RESTART	9
14041590Ssklower #define DTE_READY		0
14141590Ssklower 
14241590Ssklower #define MAXSTATES		10
14341590Ssklower 
14441590Ssklower /*
14541590Ssklower  *  The following definitions are used in a switch statement after
14641590Ssklower  *  determining the packet type.  These values are returned by the
14741590Ssklower  *  pk_decode procedure.
14841590Ssklower  */
14941590Ssklower 
15041590Ssklower #define CALL             0 * MAXSTATES
15141590Ssklower #define CALL_ACCEPTED    1 * MAXSTATES
15241590Ssklower #define CLEAR            2 * MAXSTATES
15341590Ssklower #define CLEAR_CONF       3 * MAXSTATES
15441590Ssklower #define DATA             4 * MAXSTATES
15541590Ssklower #define INTERRUPT        5 * MAXSTATES
15641590Ssklower #define INTERRUPT_CONF   6 * MAXSTATES
15741590Ssklower #define RR               7 * MAXSTATES
15841590Ssklower #define RNR              8 * MAXSTATES
15941590Ssklower #define RESET            9 * MAXSTATES
16041590Ssklower #define RESET_CONF      10 * MAXSTATES
16141590Ssklower #define RESTART         11 * MAXSTATES
16241590Ssklower #define RESTART_CONF    12 * MAXSTATES
16347264Ssklower #define REJECT          13 * MAXSTATES
164*48873Ssklower #define DIAG_TYPE       14 * MAXSTATES
16547264Ssklower #define INVALID_PACKET  15 * MAXSTATES
16641590Ssklower #define DELETE_PACKET	INVALID_PACKET
167