1  /* SPDX-License-Identifier: GPL-2.0 */
2  /*
3   *	Declarations of X.25 Packet Layer type objects.
4   *
5   * 	History
6   *	nov/17/96	Jonathan Naylor	  Initial version.
7   *	mar/20/00	Daniela Squassoni Disabling/enabling of facilities
8   *					  negotiation.
9   */
10  
11  #ifndef _X25_H
12  #define _X25_H
13  #include <linux/x25.h>
14  #include <linux/slab.h>
15  #include <linux/refcount.h>
16  #include <net/sock.h>
17  
18  #define	X25_ADDR_LEN			16
19  
20  #define	X25_MAX_L2_LEN			18	/* 802.2 LLC */
21  
22  #define	X25_STD_MIN_LEN			3
23  #define	X25_EXT_MIN_LEN			4
24  
25  #define	X25_GFI_SEQ_MASK		0x30
26  #define	X25_GFI_STDSEQ			0x10
27  #define	X25_GFI_EXTSEQ			0x20
28  
29  #define	X25_Q_BIT			0x80
30  #define	X25_D_BIT			0x40
31  #define	X25_STD_M_BIT			0x10
32  #define	X25_EXT_M_BIT			0x01
33  
34  #define	X25_CALL_REQUEST		0x0B
35  #define	X25_CALL_ACCEPTED		0x0F
36  #define	X25_CLEAR_REQUEST		0x13
37  #define	X25_CLEAR_CONFIRMATION		0x17
38  #define	X25_DATA			0x00
39  #define	X25_INTERRUPT			0x23
40  #define	X25_INTERRUPT_CONFIRMATION	0x27
41  #define	X25_RR				0x01
42  #define	X25_RNR				0x05
43  #define	X25_REJ				0x09
44  #define	X25_RESET_REQUEST		0x1B
45  #define	X25_RESET_CONFIRMATION		0x1F
46  #define	X25_REGISTRATION_REQUEST	0xF3
47  #define	X25_REGISTRATION_CONFIRMATION	0xF7
48  #define	X25_RESTART_REQUEST		0xFB
49  #define	X25_RESTART_CONFIRMATION	0xFF
50  #define	X25_DIAGNOSTIC			0xF1
51  #define	X25_ILLEGAL			0xFD
52  
53  /* Define the various conditions that may exist */
54  
55  #define	X25_COND_ACK_PENDING	0x01
56  #define	X25_COND_OWN_RX_BUSY	0x02
57  #define	X25_COND_PEER_RX_BUSY	0x04
58  
59  /* Define Link State constants. */
60  enum {
61  	X25_STATE_0,		/* Ready */
62  	X25_STATE_1,		/* Awaiting Call Accepted */
63  	X25_STATE_2,		/* Awaiting Clear Confirmation */
64  	X25_STATE_3,		/* Data Transfer */
65  	X25_STATE_4,		/* Awaiting Reset Confirmation */
66  	X25_STATE_5		/* Call Accepted / Call Connected pending */
67  };
68  
69  enum {
70  	X25_LINK_STATE_0,
71  	X25_LINK_STATE_1,
72  	X25_LINK_STATE_2,
73  	X25_LINK_STATE_3
74  };
75  
76  #define X25_DEFAULT_T20		(180 * HZ)		/* Default T20 value */
77  #define X25_DEFAULT_T21		(200 * HZ)		/* Default T21 value */
78  #define X25_DEFAULT_T22		(180 * HZ)		/* Default T22 value */
79  #define	X25_DEFAULT_T23		(180 * HZ)		/* Default T23 value */
80  #define	X25_DEFAULT_T2		(3   * HZ)		/* Default ack holdback value */
81  
82  #define	X25_DEFAULT_WINDOW_SIZE	2			/* Default Window Size	*/
83  #define	X25_DEFAULT_PACKET_SIZE	X25_PS128		/* Default Packet Size */
84  #define	X25_DEFAULT_THROUGHPUT	0x0A			/* Default Throughput */
85  #define	X25_DEFAULT_REVERSE	0x00			/* Default Reverse Charging */
86  
87  #define X25_SMODULUS 		8
88  #define	X25_EMODULUS		128
89  
90  /*
91   *	X.25 Facilities constants.
92   */
93  
94  #define	X25_FAC_CLASS_MASK	0xC0
95  
96  #define	X25_FAC_CLASS_A		0x00
97  #define	X25_FAC_CLASS_B		0x40
98  #define	X25_FAC_CLASS_C		0x80
99  #define	X25_FAC_CLASS_D		0xC0
100  
101  #define	X25_FAC_REVERSE		0x01			/* also fast select */
102  #define	X25_FAC_THROUGHPUT	0x02
103  #define	X25_FAC_PACKET_SIZE	0x42
104  #define	X25_FAC_WINDOW_SIZE	0x43
105  
106  #define X25_MAX_FAC_LEN 	60
107  #define	X25_MAX_CUD_LEN		128
108  
109  #define X25_FAC_CALLING_AE 	0xCB
110  #define X25_FAC_CALLED_AE 	0xC9
111  
112  #define X25_MARKER 		0x00
113  #define X25_DTE_SERVICES 	0x0F
114  #define X25_MAX_AE_LEN 		40			/* Max num of semi-octets in AE - OSI Nw */
115  #define X25_MAX_DTE_FACIL_LEN	21			/* Max length of DTE facility params */
116  
117  /* Bitset in x25_sock->flags for misc flags */
118  #define X25_Q_BIT_FLAG		0
119  #define X25_INTERRUPT_FLAG	1
120  #define X25_ACCPT_APPRV_FLAG	2
121  
122  /**
123   *	struct x25_route - x25 routing entry
124   *	@node - entry in x25_list_lock
125   *	@address - Start of address range
126   *	@sigdigits - Number of sig digits
127   *	@dev - More than one for MLP
128   *	@refcnt - reference counter
129   */
130  struct x25_route {
131  	struct list_head	node;
132  	struct x25_address	address;
133  	unsigned int		sigdigits;
134  	struct net_device	*dev;
135  	refcount_t		refcnt;
136  };
137  
138  struct x25_neigh {
139  	struct list_head	node;
140  	struct net_device	*dev;
141  	unsigned int		state;
142  	unsigned int		extended;
143  	struct sk_buff_head	queue;
144  	unsigned long		t20;
145  	struct timer_list	t20timer;
146  	unsigned long		global_facil_mask;
147  	refcount_t		refcnt;
148  };
149  
150  struct x25_sock {
151  	struct sock		sk;
152  	struct x25_address	source_addr, dest_addr;
153  	struct x25_neigh	*neighbour;
154  	unsigned int		lci, cudmatchlength;
155  	unsigned char		state, condition;
156  	unsigned short		vs, vr, va, vl;
157  	unsigned long		t2, t21, t22, t23;
158  	unsigned short		fraglen;
159  	unsigned long		flags;
160  	struct sk_buff_head	ack_queue;
161  	struct sk_buff_head	fragment_queue;
162  	struct sk_buff_head	interrupt_in_queue;
163  	struct sk_buff_head	interrupt_out_queue;
164  	struct timer_list	timer;
165  	struct x25_causediag	causediag;
166  	struct x25_facilities	facilities;
167  	struct x25_dte_facilities dte_facilities;
168  	struct x25_calluserdata	calluserdata;
169  	unsigned long 		vc_facil_mask;	/* inc_call facilities mask */
170  };
171  
172  struct x25_forward {
173  	struct list_head	node;
174  	unsigned int		lci;
175  	struct net_device	*dev1;
176  	struct net_device	*dev2;
177  	atomic_t		refcnt;
178  };
179  
180  #define x25_sk(ptr) container_of_const(ptr, struct x25_sock, sk)
181  
182  /* af_x25.c */
183  extern int  sysctl_x25_restart_request_timeout;
184  extern int  sysctl_x25_call_request_timeout;
185  extern int  sysctl_x25_reset_request_timeout;
186  extern int  sysctl_x25_clear_request_timeout;
187  extern int  sysctl_x25_ack_holdback_timeout;
188  extern int  sysctl_x25_forward;
189  
190  int x25_parse_address_block(struct sk_buff *skb,
191  			    struct x25_address *called_addr,
192  			    struct x25_address *calling_addr);
193  
194  int x25_addr_ntoa(unsigned char *, struct x25_address *, struct x25_address *);
195  int x25_addr_aton(unsigned char *, struct x25_address *, struct x25_address *);
196  struct sock *x25_find_socket(unsigned int, struct x25_neigh *);
197  void x25_destroy_socket_from_timer(struct sock *);
198  int x25_rx_call_request(struct sk_buff *, struct x25_neigh *, unsigned int);
199  void x25_kill_by_neigh(struct x25_neigh *);
200  
201  /* x25_dev.c */
202  void x25_send_frame(struct sk_buff *, struct x25_neigh *);
203  int x25_lapb_receive_frame(struct sk_buff *, struct net_device *,
204  			   struct packet_type *, struct net_device *);
205  void x25_establish_link(struct x25_neigh *);
206  void x25_terminate_link(struct x25_neigh *);
207  
208  /* x25_facilities.c */
209  int x25_parse_facilities(struct sk_buff *, struct x25_facilities *,
210  			 struct x25_dte_facilities *, unsigned long *);
211  int x25_create_facilities(unsigned char *, struct x25_facilities *,
212  			  struct x25_dte_facilities *, unsigned long);
213  int x25_negotiate_facilities(struct sk_buff *, struct sock *,
214  			     struct x25_facilities *,
215  			     struct x25_dte_facilities *);
216  void x25_limit_facilities(struct x25_facilities *, struct x25_neigh *);
217  
218  /* x25_forward.c */
219  void x25_clear_forward_by_lci(unsigned int lci);
220  void x25_clear_forward_by_dev(struct net_device *);
221  int x25_forward_data(int, struct x25_neigh *, struct sk_buff *);
222  int x25_forward_call(struct x25_address *, struct x25_neigh *, struct sk_buff *,
223  		     int);
224  
225  /* x25_in.c */
226  int x25_process_rx_frame(struct sock *, struct sk_buff *);
227  int x25_backlog_rcv(struct sock *, struct sk_buff *);
228  
229  /* x25_link.c */
230  void x25_link_control(struct sk_buff *, struct x25_neigh *, unsigned short);
231  void x25_link_device_up(struct net_device *);
232  void x25_link_device_down(struct net_device *);
233  void x25_link_established(struct x25_neigh *);
234  void x25_link_terminated(struct x25_neigh *);
235  void x25_transmit_clear_request(struct x25_neigh *, unsigned int,
236  				unsigned char);
237  void x25_transmit_link(struct sk_buff *, struct x25_neigh *);
238  int x25_subscr_ioctl(unsigned int, void __user *);
239  struct x25_neigh *x25_get_neigh(struct net_device *);
240  void x25_link_free(void);
241  
242  /* x25_neigh.c */
x25_neigh_hold(struct x25_neigh * nb)243  static __inline__ void x25_neigh_hold(struct x25_neigh *nb)
244  {
245  	refcount_inc(&nb->refcnt);
246  }
247  
x25_neigh_put(struct x25_neigh * nb)248  static __inline__ void x25_neigh_put(struct x25_neigh *nb)
249  {
250  	if (refcount_dec_and_test(&nb->refcnt))
251  		kfree(nb);
252  }
253  
254  /* x25_out.c */
255  int x25_output(struct sock *, struct sk_buff *);
256  void x25_kick(struct sock *);
257  void x25_enquiry_response(struct sock *);
258  
259  /* x25_route.c */
260  struct x25_route *x25_get_route(struct x25_address *addr);
261  struct net_device *x25_dev_get(char *);
262  void x25_route_device_down(struct net_device *dev);
263  int x25_route_ioctl(unsigned int, void __user *);
264  void x25_route_free(void);
265  
x25_route_hold(struct x25_route * rt)266  static __inline__ void x25_route_hold(struct x25_route *rt)
267  {
268  	refcount_inc(&rt->refcnt);
269  }
270  
x25_route_put(struct x25_route * rt)271  static __inline__ void x25_route_put(struct x25_route *rt)
272  {
273  	if (refcount_dec_and_test(&rt->refcnt))
274  		kfree(rt);
275  }
276  
277  /* x25_subr.c */
278  void x25_clear_queues(struct sock *);
279  void x25_frames_acked(struct sock *, unsigned short);
280  void x25_requeue_frames(struct sock *);
281  int x25_validate_nr(struct sock *, unsigned short);
282  void x25_write_internal(struct sock *, int);
283  int x25_decode(struct sock *, struct sk_buff *, int *, int *, int *, int *,
284  	       int *);
285  void x25_disconnect(struct sock *, int, unsigned char, unsigned char);
286  
287  /* x25_timer.c */
288  void x25_init_timers(struct sock *sk);
289  void x25_start_heartbeat(struct sock *);
290  void x25_start_t2timer(struct sock *);
291  void x25_start_t21timer(struct sock *);
292  void x25_start_t22timer(struct sock *);
293  void x25_start_t23timer(struct sock *);
294  void x25_stop_heartbeat(struct sock *);
295  void x25_stop_timer(struct sock *);
296  unsigned long x25_display_timer(struct sock *);
297  void x25_check_rbuf(struct sock *);
298  
299  /* sysctl_net_x25.c */
300  #ifdef CONFIG_SYSCTL
301  int x25_register_sysctl(void);
302  void x25_unregister_sysctl(void);
303  #else
x25_register_sysctl(void)304  static inline int x25_register_sysctl(void) { return 0; };
x25_unregister_sysctl(void)305  static inline void x25_unregister_sysctl(void) {};
306  #endif /* CONFIG_SYSCTL */
307  
308  struct x25_skb_cb {
309  	unsigned int flags;
310  };
311  #define X25_SKB_CB(s) ((struct x25_skb_cb *) ((s)->cb))
312  
313  extern struct hlist_head x25_list;
314  extern rwlock_t x25_list_lock;
315  extern struct list_head x25_route_list;
316  extern rwlock_t x25_route_list_lock;
317  extern struct list_head x25_forward_list;
318  extern rwlock_t x25_forward_list_lock;
319  extern struct list_head x25_neigh_list;
320  extern rwlock_t x25_neigh_list_lock;
321  
322  int x25_proc_init(void);
323  void x25_proc_exit(void);
324  #endif
325