xref: /csrg-svn/sys/netccitt/pk.h (revision 63216)
142007Ssklower /*
242007Ssklower  * Copyright (c) University of British Columbia, 1984
3*63216Sbostic  * Copyright (c) 1990, 1992, 1993
4*63216Sbostic  *	The Regents of the University of California.  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*63216Sbostic  *	@(#)pk.h	8.1 (Berkeley) 06/10/93
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 
4357022Ssklower #define X25_RESTART_DTE_ORIGINATED	  0
4441590Ssklower #define X25_RESTART_LOCAL_PROCEDURE_ERROR 1
4541590Ssklower #define X25_RESTART_NETWORK_CONGESTION	  3
4641590Ssklower #define X25_RESTART_NETWORK_OPERATIONAL	  7
4757022Ssklower #define X25_RESTART_DTE_ORIGINATED2	  128
4841590Ssklower 
4957022Ssklower 
5041590Ssklower /* Miscellaneous definitions. */
5141590Ssklower 
5241590Ssklower #define DATA_PACKET_DESIGNATOR		0x01
5341590Ssklower #define RR_OR_RNR_PACKET_DESIGNATOR	0x02
5441590Ssklower #define RR_PACKET_DESIGNATOR		0x04
5541590Ssklower 
5641590Ssklower #define DEFAULT_WINDOW_SIZE		2
5741590Ssklower #define MODULUS				8
5841590Ssklower 
5941590Ssklower #define ADDRLN				1
6041590Ssklower #define MAXADDRLN			15
6141590Ssklower #define FACILITIESLN			1
6241590Ssklower #define MAXFACILITIESLN			10
6341590Ssklower #define MAXUSERDATA			16
6441590Ssklower #define MAXCALLINFOLN			1+15+1+10+16
6541590Ssklower 
6641590Ssklower #define PACKET_OK			0
6741590Ssklower #define IGNORE_PACKET			1
6841590Ssklower #define ERROR_PACKET			2
6941590Ssklower 
7041590Ssklower typedef char    bool;
7141590Ssklower #define FALSE	0
7241590Ssklower #define TRUE	1
7341590Ssklower 
7441590Ssklower /*
7541590Ssklower  *  X.25 Packet format definitions
7642007Ssklower  *  This will eventually have to be rewritten without reference
7742007Ssklower  *  to bit fields, to be ansi C compliant and allignment safe.
7841590Ssklower  */
7941590Ssklower 
8042007Ssklower typedef u_char octet;
8141590Ssklower 
8242007Ssklower struct x25_calladdr {
8357022Ssklower 	octet addrlens;
8442007Ssklower 	octet address_field[MAXADDRLN];
8545165Ssklower };
8641590Ssklower 
8741590Ssklower struct x25_packet {
8857022Ssklower 	octet bits;
8941590Ssklower 	octet logical_channel_number;
9041590Ssklower 	octet packet_type;
9141590Ssklower 	octet packet_data;
9241590Ssklower };
9357022Ssklower #define packet_cause packet_data
9441590Ssklower 
9541590Ssklower struct data_packet {
9657022Ssklower 	octet bits;
9741590Ssklower };
9841590Ssklower 
9942007Ssklower #define FACILITIES_REVERSE_CHARGE	0x1
10042007Ssklower #define FACILITIES_THROUGHPUT		0x2
10142007Ssklower #define FACILITIES_PACKETSIZE		0x42
10242007Ssklower #define FACILITIES_WINDOWSIZE		0x43
10342007Ssklower 
10442007Ssklower #define PKHEADERLN	3
10542007Ssklower 
10657022Ssklower #define DP(xp)          (((struct data_packet *)&(xp) -> packet_type) -> bits)
10757022Ssklower #define PS(xp)           X25GBITS(DP(xp), p_s)
10857022Ssklower #define PR(xp)           X25GBITS(DP(xp), p_r)
10957022Ssklower #define MBIT(xp)         X25GBITS(DP(xp), m_bit)
11057022Ssklower #define SPR(xp, v)       X25SBITS(DP(xp), p_r, (v))
11157022Ssklower #define SPS(xp, v)       X25SBITS(DP(xp), p_s, (v))
11257022Ssklower #define SMBIT(xp, v)     X25SBITS(DP(xp), m_bit, (v))
11342007Ssklower 
11445451Ssklower #define LCN(xp)		(xp -> logical_channel_number + \
11557022Ssklower 	(X25GBITS(xp -> bits, lc_group_number) ? (X25GBITS(xp -> bits, lc_group_number) << 8) : 0))
11645451Ssklower #define SET_LCN(xp, lcn) ((xp -> logical_channel_number = lcn), \
11757022Ssklower 	(X25SBITS(xp -> bits, lc_group_number, lcn > 255 ? lcn >> 8 : 0)))
11841590Ssklower 
11945891Ssklower struct mbuf *pk_template ();
12041590Ssklower 
12141590Ssklower /* Define X.25 packet level states. */
12241590Ssklower 
12341590Ssklower /* Call setup and clearing substates.  */
12441590Ssklower 
12541590Ssklower #define LISTEN           0
12641590Ssklower #define READY            1
12741590Ssklower #define RECEIVED_CALL    2
12841590Ssklower #define SENT_CALL        3
12941590Ssklower #define DATA_TRANSFER    4
13041590Ssklower #define RECEIVED_CLEAR   5
13141590Ssklower #define SENT_CLEAR       6
13241590Ssklower 
13341590Ssklower /* DTE states. */
13441590Ssklower 
13541590Ssklower #define DTE_WAITING		7
13641590Ssklower #define DTE_RECEIVED_RESTART	8
13741590Ssklower #define DTE_SENT_RESTART	9
13841590Ssklower #define DTE_READY		0
13941590Ssklower 
14057022Ssklower /* Cleaning out ... */
14141590Ssklower 
14257022Ssklower #define LCN_ZOMBIE 		10
14357022Ssklower 
14457022Ssklower #define MAXSTATES		11
14557022Ssklower 
14641590Ssklower /*
14741590Ssklower  *  The following definitions are used in a switch statement after
14841590Ssklower  *  determining the packet type.  These values are returned by the
14941590Ssklower  *  pk_decode procedure.
15041590Ssklower  */
15141590Ssklower 
15241590Ssklower #define CALL             0 * MAXSTATES
15341590Ssklower #define CALL_ACCEPTED    1 * MAXSTATES
15441590Ssklower #define CLEAR            2 * MAXSTATES
15541590Ssklower #define CLEAR_CONF       3 * MAXSTATES
15641590Ssklower #define DATA             4 * MAXSTATES
15741590Ssklower #define INTERRUPT        5 * MAXSTATES
15841590Ssklower #define INTERRUPT_CONF   6 * MAXSTATES
15941590Ssklower #define RR               7 * MAXSTATES
16041590Ssklower #define RNR              8 * MAXSTATES
16141590Ssklower #define RESET            9 * MAXSTATES
16241590Ssklower #define RESET_CONF      10 * MAXSTATES
16341590Ssklower #define RESTART         11 * MAXSTATES
16441590Ssklower #define RESTART_CONF    12 * MAXSTATES
16547264Ssklower #define REJECT          13 * MAXSTATES
16648873Ssklower #define DIAG_TYPE       14 * MAXSTATES
16747264Ssklower #define INVALID_PACKET  15 * MAXSTATES
16841590Ssklower #define DELETE_PACKET	INVALID_PACKET
16957022Ssklower 
17057022Ssklower /*
17157022Ssklower  * The following definitions are used by the restart procedures
17257022Ssklower  * for noting wether the PLE is supposed to behave as DTE or DCE
17357022Ssklower  * (essentially necessary for operation over LLC2)
17457022Ssklower  */
17557022Ssklower #define	DTE_DXERESOLVING	0x0001
17657022Ssklower #define	DTE_PLAYDTE		0x0002
17757022Ssklower #define	DTE_PLAYDCE		0x0004
17857022Ssklower #define DTE_CONNECTPENDING	0x0010
17957022Ssklower #define	DTE_PRETENDDTE		0x0020
18057022Ssklower 
18157022Ssklower #define MAXRESTARTCOLLISIONS	10
182