xref: /csrg-svn/sys/netccitt/pk.h (revision 45165)
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*45165Ssklower  *	@(#)pk.h	7.3 (Berkeley) 08/30/90
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
3341590Ssklower #define X25_RESET                        27
3441590Ssklower #define X25_RESET_CONFIRM                31
3541590Ssklower 
3641590Ssklower #define X25_RESTART                     251
3741590Ssklower #define X25_RESTART_CONFIRM		255
3841590Ssklower 
3941590Ssklower /* Restart cause field definitions. */
4041590Ssklower 
4141590Ssklower #define X25_RESTART_LOCAL_PROCEDURE_ERROR 1
4241590Ssklower #define X25_RESTART_NETWORK_CONGESTION	  3
4341590Ssklower #define X25_RESTART_NETWORK_OPERATIONAL	  7
4441590Ssklower 
4541590Ssklower /* Miscellaneous definitions. */
4641590Ssklower 
4741590Ssklower #define DATA_PACKET_DESIGNATOR		0x01
4841590Ssklower #define RR_OR_RNR_PACKET_DESIGNATOR	0x02
4941590Ssklower #define RR_PACKET_DESIGNATOR		0x04
5041590Ssklower 
5141590Ssklower #define DEFAULT_WINDOW_SIZE		2
5241590Ssklower #define MODULUS				8
5341590Ssklower 
5441590Ssklower #define ADDRLN				1
5541590Ssklower #define MAXADDRLN			15
5641590Ssklower #define FACILITIESLN			1
5741590Ssklower #define MAXFACILITIESLN			10
5841590Ssklower #define MAXUSERDATA			16
5941590Ssklower #define MAXCALLINFOLN			1+15+1+10+16
6041590Ssklower 
6141590Ssklower #define PACKET_OK			0
6241590Ssklower #define IGNORE_PACKET			1
6341590Ssklower #define ERROR_PACKET			2
6441590Ssklower 
6541590Ssklower typedef char    bool;
6641590Ssklower #define FALSE	0
6741590Ssklower #define TRUE	1
6841590Ssklower 
6941590Ssklower /*
7041590Ssklower  *  X.25 Packet format definitions
7142007Ssklower  *  This will eventually have to be rewritten without reference
7242007Ssklower  *  to bit fields, to be ansi C compliant and allignment safe.
7341590Ssklower  */
7441590Ssklower 
7542007Ssklower #if BYTE_ORDER == BIG_ENDIAN
7642007Ssklower #define ORDER2(a, b) a , b
7742007Ssklower #define ORDER3(a, b, c) a , b , c
7842007Ssklower #define ORDER4(a, b, c, d) a , b , c , d
7942007Ssklower #endif
8041590Ssklower 
8142007Ssklower #if BYTE_ORDER == LITTLE_ENDIAN
8242007Ssklower #define ORDER2(a, b) b , a
8342007Ssklower #define ORDER3(a, b, c) c , 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 {
9042007Ssklower 	octet ORDER2(called_addrlen:4, calling_addrlen:4);
9142007Ssklower 	octet address_field[MAXADDRLN];
92*45165Ssklower };
9341590Ssklower 
9441590Ssklower struct x25_packet {
9542007Ssklower 	octet ORDER3(lc_group_number:4, fmt_identifier:3, q_bit:1);
9641590Ssklower 	octet logical_channel_number;
9741590Ssklower 	octet packet_type;
9841590Ssklower 	octet packet_data;
9941590Ssklower };
10041590Ssklower 
10141590Ssklower struct data_packet {
10242007Ssklower 	octet ORDER4(z:1, ps:3, m_bit:1, pr:3);
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)
11641590Ssklower 
11741590Ssklower struct x25_packet *pk_template ();
11841590Ssklower 
11941590Ssklower /* Define X.25 packet level states. */
12041590Ssklower 
12141590Ssklower /* Call setup and clearing substates.  */
12241590Ssklower 
12341590Ssklower #define LISTEN           0
12441590Ssklower #define READY            1
12541590Ssklower #define RECEIVED_CALL    2
12641590Ssklower #define SENT_CALL        3
12741590Ssklower #define DATA_TRANSFER    4
12841590Ssklower #define RECEIVED_CLEAR   5
12941590Ssklower #define SENT_CLEAR       6
13041590Ssklower 
13141590Ssklower /* DTE states. */
13241590Ssklower 
13341590Ssklower #define DTE_WAITING		7
13441590Ssklower #define DTE_RECEIVED_RESTART	8
13541590Ssklower #define DTE_SENT_RESTART	9
13641590Ssklower #define DTE_READY		0
13741590Ssklower 
13841590Ssklower #define MAXSTATES		10
13941590Ssklower 
14041590Ssklower /*
14141590Ssklower  *  The following definitions are used in a switch statement after
14241590Ssklower  *  determining the packet type.  These values are returned by the
14341590Ssklower  *  pk_decode procedure.
14441590Ssklower  */
14541590Ssklower 
14641590Ssklower #define CALL             0 * MAXSTATES
14741590Ssklower #define CALL_ACCEPTED    1 * MAXSTATES
14841590Ssklower #define CLEAR            2 * MAXSTATES
14941590Ssklower #define CLEAR_CONF       3 * MAXSTATES
15041590Ssklower #define DATA             4 * MAXSTATES
15141590Ssklower #define INTERRUPT        5 * MAXSTATES
15241590Ssklower #define INTERRUPT_CONF   6 * MAXSTATES
15341590Ssklower #define RR               7 * MAXSTATES
15441590Ssklower #define RNR              8 * MAXSTATES
15541590Ssklower #define RESET            9 * MAXSTATES
15641590Ssklower #define RESET_CONF      10 * MAXSTATES
15741590Ssklower #define RESTART         11 * MAXSTATES
15841590Ssklower #define RESTART_CONF    12 * MAXSTATES
15941590Ssklower #define INVALID_PACKET  13 * MAXSTATES
16041590Ssklower #define DELETE_PACKET	INVALID_PACKET
161