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