1 /*
2  * These are the public elements of the Linux kernel X.25 implementation.
3  *
4  * 	History
5  *	mar/20/00	Daniela Squassoni Disabling/enabling of facilities
6  *					  negotiation.
7  *	apr/02/05	Shaun Pereira Selective sub address matching with
8  *					call user data
9  */
10 
11 #ifndef	X25_KERNEL_H
12 #define	X25_KERNEL_H
13 
14 #include <linux/types.h>
15 
16 #define	SIOCX25GSUBSCRIP	(SIOCPROTOPRIVATE + 0)
17 #define	SIOCX25SSUBSCRIP	(SIOCPROTOPRIVATE + 1)
18 #define	SIOCX25GFACILITIES	(SIOCPROTOPRIVATE + 2)
19 #define	SIOCX25SFACILITIES	(SIOCPROTOPRIVATE + 3)
20 #define	SIOCX25GCALLUSERDATA	(SIOCPROTOPRIVATE + 4)
21 #define	SIOCX25SCALLUSERDATA	(SIOCPROTOPRIVATE + 5)
22 #define	SIOCX25GCAUSEDIAG	(SIOCPROTOPRIVATE + 6)
23 #define SIOCX25SCUDMATCHLEN	(SIOCPROTOPRIVATE + 7)
24 #define SIOCX25CALLACCPTAPPRV   (SIOCPROTOPRIVATE + 8)
25 #define SIOCX25SENDCALLACCPT    (SIOCPROTOPRIVATE + 9)
26 #define SIOCX25GDTEFACILITIES (SIOCPROTOPRIVATE + 10)
27 #define SIOCX25SDTEFACILITIES (SIOCPROTOPRIVATE + 11)
28 #define SIOCX25SCAUSEDIAG	(SIOCPROTOPRIVATE + 12)
29 
30 /*
31  *	Values for {get,set}sockopt.
32  */
33 #define	X25_QBITINCL		1
34 
35 /*
36  *	X.25 Packet Size values.
37  */
38 #define	X25_PS16		4
39 #define	X25_PS32		5
40 #define	X25_PS64		6
41 #define	X25_PS128		7
42 #define	X25_PS256		8
43 #define	X25_PS512		9
44 #define	X25_PS1024		10
45 #define	X25_PS2048		11
46 #define	X25_PS4096		12
47 
48 /*
49  * An X.121 address, it is held as ASCII text, null terminated, up to 15
50  * digits and a null terminator.
51  */
52 struct x25_address {
53 	char x25_addr[16];
54 };
55 
56 /*
57  *	Linux X.25 Address structure, used for bind, and connect mostly.
58  */
59 struct sockaddr_x25 {
60 	sa_family_t	   sx25_family;		/* Must be AF_X25 */
61 	struct x25_address sx25_addr;		/* X.121 Address */
62 };
63 
64 /*
65  *	DTE/DCE subscription options.
66  *
67  *      As this is missing lots of options, user should expect major
68  *	changes of this structure in 2.5.x which might break compatibilty.
69  *      The somewhat ugly dimension 200-sizeof() is needed to maintain
70  *	backward compatibility.
71  */
72 struct x25_subscrip_struct {
73 	char device[200-sizeof(unsigned long)];
74 	unsigned long	global_facil_mask;	/* 0 to disable negotiation */
75 	unsigned int	extended;
76 };
77 
78 /* values for above global_facil_mask */
79 
80 #define	X25_MASK_REVERSE	0x01
81 #define	X25_MASK_THROUGHPUT	0x02
82 #define	X25_MASK_PACKET_SIZE	0x04
83 #define	X25_MASK_WINDOW_SIZE	0x08
84 
85 #define X25_MASK_CALLING_AE 0x10
86 #define X25_MASK_CALLED_AE 0x20
87 
88 
89 /*
90  *	Routing table control structure.
91  */
92 struct x25_route_struct {
93 	struct x25_address address;
94 	unsigned int	   sigdigits;
95 	char		   device[200];
96 };
97 
98 /*
99  *	Facilities structure.
100  */
101 struct x25_facilities {
102 	unsigned int	winsize_in, winsize_out;
103 	unsigned int	pacsize_in, pacsize_out;
104 	unsigned int	throughput;
105 	unsigned int	reverse;
106 };
107 
108 /*
109 * ITU DTE facilities
110 * Only the called and calling address
111 * extension are currently implemented.
112 * The rest are in place to avoid the struct
113 * changing size if someone needs them later
114 */
115 
116 struct x25_dte_facilities {
117 	__u16 delay_cumul;
118 	__u16 delay_target;
119 	__u16 delay_max;
120 	__u8 min_throughput;
121 	__u8 expedited;
122 	__u8 calling_len;
123 	__u8 called_len;
124 	__u8 calling_ae[20];
125 	__u8 called_ae[20];
126 };
127 
128 /*
129  *	Call User Data structure.
130  */
131 struct x25_calluserdata {
132 	unsigned int	cudlength;
133 	unsigned char	cuddata[128];
134 };
135 
136 /*
137  *	Call clearing Cause and Diagnostic structure.
138  */
139 struct x25_causediag {
140 	unsigned char	cause;
141 	unsigned char	diagnostic;
142 };
143 
144 /*
145  *	Further optional call user data match length selection
146  */
147 struct x25_subaddr {
148 	unsigned int cudmatchlength;
149 };
150 
151 #endif
152