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