xref: /linux/net/ax25/af_ax25.c (revision 87c9c16317882dd6dbbc07e349bc3223e14f3244)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *
4  * Copyright (C) Alan Cox GW4PTS (alan@lxorguk.ukuu.org.uk)
5  * Copyright (C) Jonathan Naylor G4KLX (g4klx@g4klx.demon.co.uk)
6  * Copyright (C) Darryl Miles G7LED (dlm@g7led.demon.co.uk)
7  * Copyright (C) Steven Whitehouse GW7RRM (stevew@acm.org)
8  * Copyright (C) Joerg Reuter DL1BKE (jreuter@yaina.de)
9  * Copyright (C) Hans-Joachim Hetscher DD8NE (dd8ne@bnv-bamberg.de)
10  * Copyright (C) Hans Alblas PE1AYX (hans@esrac.ele.tue.nl)
11  * Copyright (C) Frederic Rible F1OAT (frible@teaser.fr)
12  */
13 #include <linux/capability.h>
14 #include <linux/module.h>
15 #include <linux/errno.h>
16 #include <linux/types.h>
17 #include <linux/socket.h>
18 #include <linux/in.h>
19 #include <linux/kernel.h>
20 #include <linux/sched/signal.h>
21 #include <linux/timer.h>
22 #include <linux/string.h>
23 #include <linux/sockios.h>
24 #include <linux/net.h>
25 #include <linux/slab.h>
26 #include <net/ax25.h>
27 #include <linux/inet.h>
28 #include <linux/netdevice.h>
29 #include <linux/if_arp.h>
30 #include <linux/skbuff.h>
31 #include <net/sock.h>
32 #include <linux/uaccess.h>
33 #include <linux/fcntl.h>
34 #include <linux/termios.h>	/* For TIOCINQ/OUTQ */
35 #include <linux/mm.h>
36 #include <linux/interrupt.h>
37 #include <linux/notifier.h>
38 #include <linux/proc_fs.h>
39 #include <linux/stat.h>
40 #include <linux/sysctl.h>
41 #include <linux/init.h>
42 #include <linux/spinlock.h>
43 #include <net/net_namespace.h>
44 #include <net/tcp_states.h>
45 #include <net/ip.h>
46 #include <net/arp.h>
47 
48 
49 
50 HLIST_HEAD(ax25_list);
51 DEFINE_SPINLOCK(ax25_list_lock);
52 
53 static const struct proto_ops ax25_proto_ops;
54 
55 static void ax25_free_sock(struct sock *sk)
56 {
57 	ax25_cb_put(sk_to_ax25(sk));
58 }
59 
60 /*
61  *	Socket removal during an interrupt is now safe.
62  */
63 static void ax25_cb_del(ax25_cb *ax25)
64 {
65 	if (!hlist_unhashed(&ax25->ax25_node)) {
66 		spin_lock_bh(&ax25_list_lock);
67 		hlist_del_init(&ax25->ax25_node);
68 		spin_unlock_bh(&ax25_list_lock);
69 		ax25_cb_put(ax25);
70 	}
71 }
72 
73 /*
74  *	Kill all bound sockets on a dropped device.
75  */
76 static void ax25_kill_by_device(struct net_device *dev)
77 {
78 	ax25_dev *ax25_dev;
79 	ax25_cb *s;
80 
81 	if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
82 		return;
83 
84 	spin_lock_bh(&ax25_list_lock);
85 again:
86 	ax25_for_each(s, &ax25_list) {
87 		if (s->ax25_dev == ax25_dev) {
88 			s->ax25_dev = NULL;
89 			spin_unlock_bh(&ax25_list_lock);
90 			ax25_disconnect(s, ENETUNREACH);
91 			spin_lock_bh(&ax25_list_lock);
92 
93 			/* The entry could have been deleted from the
94 			 * list meanwhile and thus the next pointer is
95 			 * no longer valid.  Play it safe and restart
96 			 * the scan.  Forward progress is ensured
97 			 * because we set s->ax25_dev to NULL and we
98 			 * are never passed a NULL 'dev' argument.
99 			 */
100 			goto again;
101 		}
102 	}
103 	spin_unlock_bh(&ax25_list_lock);
104 }
105 
106 /*
107  *	Handle device status changes.
108  */
109 static int ax25_device_event(struct notifier_block *this, unsigned long event,
110 			     void *ptr)
111 {
112 	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
113 
114 	if (!net_eq(dev_net(dev), &init_net))
115 		return NOTIFY_DONE;
116 
117 	/* Reject non AX.25 devices */
118 	if (dev->type != ARPHRD_AX25)
119 		return NOTIFY_DONE;
120 
121 	switch (event) {
122 	case NETDEV_UP:
123 		ax25_dev_device_up(dev);
124 		break;
125 	case NETDEV_DOWN:
126 		ax25_kill_by_device(dev);
127 		ax25_rt_device_down(dev);
128 		ax25_dev_device_down(dev);
129 		break;
130 	default:
131 		break;
132 	}
133 
134 	return NOTIFY_DONE;
135 }
136 
137 /*
138  *	Add a socket to the bound sockets list.
139  */
140 void ax25_cb_add(ax25_cb *ax25)
141 {
142 	spin_lock_bh(&ax25_list_lock);
143 	ax25_cb_hold(ax25);
144 	hlist_add_head(&ax25->ax25_node, &ax25_list);
145 	spin_unlock_bh(&ax25_list_lock);
146 }
147 
148 /*
149  *	Find a socket that wants to accept the SABM we have just
150  *	received.
151  */
152 struct sock *ax25_find_listener(ax25_address *addr, int digi,
153 	struct net_device *dev, int type)
154 {
155 	ax25_cb *s;
156 
157 	spin_lock(&ax25_list_lock);
158 	ax25_for_each(s, &ax25_list) {
159 		if ((s->iamdigi && !digi) || (!s->iamdigi && digi))
160 			continue;
161 		if (s->sk && !ax25cmp(&s->source_addr, addr) &&
162 		    s->sk->sk_type == type && s->sk->sk_state == TCP_LISTEN) {
163 			/* If device is null we match any device */
164 			if (s->ax25_dev == NULL || s->ax25_dev->dev == dev) {
165 				sock_hold(s->sk);
166 				spin_unlock(&ax25_list_lock);
167 				return s->sk;
168 			}
169 		}
170 	}
171 	spin_unlock(&ax25_list_lock);
172 
173 	return NULL;
174 }
175 
176 /*
177  *	Find an AX.25 socket given both ends.
178  */
179 struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
180 	int type)
181 {
182 	struct sock *sk = NULL;
183 	ax25_cb *s;
184 
185 	spin_lock(&ax25_list_lock);
186 	ax25_for_each(s, &ax25_list) {
187 		if (s->sk && !ax25cmp(&s->source_addr, my_addr) &&
188 		    !ax25cmp(&s->dest_addr, dest_addr) &&
189 		    s->sk->sk_type == type) {
190 			sk = s->sk;
191 			sock_hold(sk);
192 			break;
193 		}
194 	}
195 
196 	spin_unlock(&ax25_list_lock);
197 
198 	return sk;
199 }
200 
201 /*
202  *	Find an AX.25 control block given both ends. It will only pick up
203  *	floating AX.25 control blocks or non Raw socket bound control blocks.
204  */
205 ax25_cb *ax25_find_cb(ax25_address *src_addr, ax25_address *dest_addr,
206 	ax25_digi *digi, struct net_device *dev)
207 {
208 	ax25_cb *s;
209 
210 	spin_lock_bh(&ax25_list_lock);
211 	ax25_for_each(s, &ax25_list) {
212 		if (s->sk && s->sk->sk_type != SOCK_SEQPACKET)
213 			continue;
214 		if (s->ax25_dev == NULL)
215 			continue;
216 		if (ax25cmp(&s->source_addr, src_addr) == 0 && ax25cmp(&s->dest_addr, dest_addr) == 0 && s->ax25_dev->dev == dev) {
217 			if (digi != NULL && digi->ndigi != 0) {
218 				if (s->digipeat == NULL)
219 					continue;
220 				if (ax25digicmp(s->digipeat, digi) != 0)
221 					continue;
222 			} else {
223 				if (s->digipeat != NULL && s->digipeat->ndigi != 0)
224 					continue;
225 			}
226 			ax25_cb_hold(s);
227 			spin_unlock_bh(&ax25_list_lock);
228 
229 			return s;
230 		}
231 	}
232 	spin_unlock_bh(&ax25_list_lock);
233 
234 	return NULL;
235 }
236 
237 EXPORT_SYMBOL(ax25_find_cb);
238 
239 void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
240 {
241 	ax25_cb *s;
242 	struct sk_buff *copy;
243 
244 	spin_lock(&ax25_list_lock);
245 	ax25_for_each(s, &ax25_list) {
246 		if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 &&
247 		    s->sk->sk_type == SOCK_RAW &&
248 		    s->sk->sk_protocol == proto &&
249 		    s->ax25_dev->dev == skb->dev &&
250 		    atomic_read(&s->sk->sk_rmem_alloc) <= s->sk->sk_rcvbuf) {
251 			if ((copy = skb_clone(skb, GFP_ATOMIC)) == NULL)
252 				continue;
253 			if (sock_queue_rcv_skb(s->sk, copy) != 0)
254 				kfree_skb(copy);
255 		}
256 	}
257 	spin_unlock(&ax25_list_lock);
258 }
259 
260 /*
261  *	Deferred destroy.
262  */
263 void ax25_destroy_socket(ax25_cb *);
264 
265 /*
266  *	Handler for deferred kills.
267  */
268 static void ax25_destroy_timer(struct timer_list *t)
269 {
270 	ax25_cb *ax25 = from_timer(ax25, t, dtimer);
271 	struct sock *sk;
272 
273 	sk=ax25->sk;
274 
275 	bh_lock_sock(sk);
276 	sock_hold(sk);
277 	ax25_destroy_socket(ax25);
278 	bh_unlock_sock(sk);
279 	sock_put(sk);
280 }
281 
282 /*
283  *	This is called from user mode and the timers. Thus it protects itself
284  *	against interrupt users but doesn't worry about being called during
285  *	work. Once it is removed from the queue no interrupt or bottom half
286  *	will touch it and we are (fairly 8-) ) safe.
287  */
288 void ax25_destroy_socket(ax25_cb *ax25)
289 {
290 	struct sk_buff *skb;
291 
292 	ax25_cb_del(ax25);
293 
294 	ax25_stop_heartbeat(ax25);
295 	ax25_stop_t1timer(ax25);
296 	ax25_stop_t2timer(ax25);
297 	ax25_stop_t3timer(ax25);
298 	ax25_stop_idletimer(ax25);
299 
300 	ax25_clear_queues(ax25);	/* Flush the queues */
301 
302 	if (ax25->sk != NULL) {
303 		while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
304 			if (skb->sk != ax25->sk) {
305 				/* A pending connection */
306 				ax25_cb *sax25 = sk_to_ax25(skb->sk);
307 
308 				/* Queue the unaccepted socket for death */
309 				sock_orphan(skb->sk);
310 
311 				/* 9A4GL: hack to release unaccepted sockets */
312 				skb->sk->sk_state = TCP_LISTEN;
313 
314 				ax25_start_heartbeat(sax25);
315 				sax25->state = AX25_STATE_0;
316 			}
317 
318 			kfree_skb(skb);
319 		}
320 		skb_queue_purge(&ax25->sk->sk_write_queue);
321 	}
322 
323 	if (ax25->sk != NULL) {
324 		if (sk_has_allocations(ax25->sk)) {
325 			/* Defer: outstanding buffers */
326 			timer_setup(&ax25->dtimer, ax25_destroy_timer, 0);
327 			ax25->dtimer.expires  = jiffies + 2 * HZ;
328 			add_timer(&ax25->dtimer);
329 		} else {
330 			struct sock *sk=ax25->sk;
331 			ax25->sk=NULL;
332 			sock_put(sk);
333 		}
334 	} else {
335 		ax25_cb_put(ax25);
336 	}
337 }
338 
339 /*
340  * dl1bke 960311: set parameters for existing AX.25 connections,
341  *		  includes a KILL command to abort any connection.
342  *		  VERY useful for debugging ;-)
343  */
344 static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
345 {
346 	struct ax25_ctl_struct ax25_ctl;
347 	ax25_digi digi;
348 	ax25_dev *ax25_dev;
349 	ax25_cb *ax25;
350 	unsigned int k;
351 	int ret = 0;
352 
353 	if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
354 		return -EFAULT;
355 
356 	if ((ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr)) == NULL)
357 		return -ENODEV;
358 
359 	if (ax25_ctl.digi_count > AX25_MAX_DIGIS)
360 		return -EINVAL;
361 
362 	if (ax25_ctl.arg > ULONG_MAX / HZ && ax25_ctl.cmd != AX25_KILL)
363 		return -EINVAL;
364 
365 	digi.ndigi = ax25_ctl.digi_count;
366 	for (k = 0; k < digi.ndigi; k++)
367 		digi.calls[k] = ax25_ctl.digi_addr[k];
368 
369 	if ((ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev)) == NULL)
370 		return -ENOTCONN;
371 
372 	switch (ax25_ctl.cmd) {
373 	case AX25_KILL:
374 		ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
375 #ifdef CONFIG_AX25_DAMA_SLAVE
376 		if (ax25_dev->dama.slave && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
377 			ax25_dama_off(ax25);
378 #endif
379 		ax25_disconnect(ax25, ENETRESET);
380 		break;
381 
382 	case AX25_WINDOW:
383 		if (ax25->modulus == AX25_MODULUS) {
384 			if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
385 				goto einval_put;
386 		} else {
387 			if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
388 				goto einval_put;
389 		}
390 		ax25->window = ax25_ctl.arg;
391 		break;
392 
393 	case AX25_T1:
394 		if (ax25_ctl.arg < 1 || ax25_ctl.arg > ULONG_MAX / HZ)
395 			goto einval_put;
396 		ax25->rtt = (ax25_ctl.arg * HZ) / 2;
397 		ax25->t1  = ax25_ctl.arg * HZ;
398 		break;
399 
400 	case AX25_T2:
401 		if (ax25_ctl.arg < 1 || ax25_ctl.arg > ULONG_MAX / HZ)
402 			goto einval_put;
403 		ax25->t2 = ax25_ctl.arg * HZ;
404 		break;
405 
406 	case AX25_N2:
407 		if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
408 			goto einval_put;
409 		ax25->n2count = 0;
410 		ax25->n2 = ax25_ctl.arg;
411 		break;
412 
413 	case AX25_T3:
414 		if (ax25_ctl.arg > ULONG_MAX / HZ)
415 			goto einval_put;
416 		ax25->t3 = ax25_ctl.arg * HZ;
417 		break;
418 
419 	case AX25_IDLE:
420 		if (ax25_ctl.arg > ULONG_MAX / (60 * HZ))
421 			goto einval_put;
422 
423 		ax25->idle = ax25_ctl.arg * 60 * HZ;
424 		break;
425 
426 	case AX25_PACLEN:
427 		if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
428 			goto einval_put;
429 		ax25->paclen = ax25_ctl.arg;
430 		break;
431 
432 	default:
433 		goto einval_put;
434 	  }
435 
436 out_put:
437 	ax25_cb_put(ax25);
438 	return ret;
439 
440 einval_put:
441 	ret = -EINVAL;
442 	goto out_put;
443 }
444 
445 static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)
446 {
447 	ax25->rtt     = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]) / 2;
448 	ax25->t1      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]);
449 	ax25->t2      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T2]);
450 	ax25->t3      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T3]);
451 	ax25->n2      = ax25_dev->values[AX25_VALUES_N2];
452 	ax25->paclen  = ax25_dev->values[AX25_VALUES_PACLEN];
453 	ax25->idle    = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_IDLE]);
454 	ax25->backoff = ax25_dev->values[AX25_VALUES_BACKOFF];
455 
456 	if (ax25_dev->values[AX25_VALUES_AXDEFMODE]) {
457 		ax25->modulus = AX25_EMODULUS;
458 		ax25->window  = ax25_dev->values[AX25_VALUES_EWINDOW];
459 	} else {
460 		ax25->modulus = AX25_MODULUS;
461 		ax25->window  = ax25_dev->values[AX25_VALUES_WINDOW];
462 	}
463 }
464 
465 /*
466  *	Fill in a created AX.25 created control block with the default
467  *	values for a particular device.
468  */
469 void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
470 {
471 	ax25->ax25_dev = ax25_dev;
472 
473 	if (ax25->ax25_dev != NULL) {
474 		ax25_fillin_cb_from_dev(ax25, ax25_dev);
475 		return;
476 	}
477 
478 	/*
479 	 * No device, use kernel / AX.25 spec default values
480 	 */
481 	ax25->rtt     = msecs_to_jiffies(AX25_DEF_T1) / 2;
482 	ax25->t1      = msecs_to_jiffies(AX25_DEF_T1);
483 	ax25->t2      = msecs_to_jiffies(AX25_DEF_T2);
484 	ax25->t3      = msecs_to_jiffies(AX25_DEF_T3);
485 	ax25->n2      = AX25_DEF_N2;
486 	ax25->paclen  = AX25_DEF_PACLEN;
487 	ax25->idle    = msecs_to_jiffies(AX25_DEF_IDLE);
488 	ax25->backoff = AX25_DEF_BACKOFF;
489 
490 	if (AX25_DEF_AXDEFMODE) {
491 		ax25->modulus = AX25_EMODULUS;
492 		ax25->window  = AX25_DEF_EWINDOW;
493 	} else {
494 		ax25->modulus = AX25_MODULUS;
495 		ax25->window  = AX25_DEF_WINDOW;
496 	}
497 }
498 
499 /*
500  * Create an empty AX.25 control block.
501  */
502 ax25_cb *ax25_create_cb(void)
503 {
504 	ax25_cb *ax25;
505 
506 	if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
507 		return NULL;
508 
509 	refcount_set(&ax25->refcount, 1);
510 
511 	skb_queue_head_init(&ax25->write_queue);
512 	skb_queue_head_init(&ax25->frag_queue);
513 	skb_queue_head_init(&ax25->ack_queue);
514 	skb_queue_head_init(&ax25->reseq_queue);
515 
516 	ax25_setup_timers(ax25);
517 
518 	ax25_fillin_cb(ax25, NULL);
519 
520 	ax25->state = AX25_STATE_0;
521 
522 	return ax25;
523 }
524 
525 /*
526  *	Handling for system calls applied via the various interfaces to an
527  *	AX25 socket object
528  */
529 
530 static int ax25_setsockopt(struct socket *sock, int level, int optname,
531 		sockptr_t optval, unsigned int optlen)
532 {
533 	struct sock *sk = sock->sk;
534 	ax25_cb *ax25;
535 	struct net_device *dev;
536 	char devname[IFNAMSIZ];
537 	unsigned long opt;
538 	int res = 0;
539 
540 	if (level != SOL_AX25)
541 		return -ENOPROTOOPT;
542 
543 	if (optlen < sizeof(unsigned int))
544 		return -EINVAL;
545 
546 	if (copy_from_sockptr(&opt, optval, sizeof(unsigned int)))
547 		return -EFAULT;
548 
549 	lock_sock(sk);
550 	ax25 = sk_to_ax25(sk);
551 
552 	switch (optname) {
553 	case AX25_WINDOW:
554 		if (ax25->modulus == AX25_MODULUS) {
555 			if (opt < 1 || opt > 7) {
556 				res = -EINVAL;
557 				break;
558 			}
559 		} else {
560 			if (opt < 1 || opt > 63) {
561 				res = -EINVAL;
562 				break;
563 			}
564 		}
565 		ax25->window = opt;
566 		break;
567 
568 	case AX25_T1:
569 		if (opt < 1 || opt > ULONG_MAX / HZ) {
570 			res = -EINVAL;
571 			break;
572 		}
573 		ax25->rtt = (opt * HZ) >> 1;
574 		ax25->t1  = opt * HZ;
575 		break;
576 
577 	case AX25_T2:
578 		if (opt < 1 || opt > ULONG_MAX / HZ) {
579 			res = -EINVAL;
580 			break;
581 		}
582 		ax25->t2 = opt * HZ;
583 		break;
584 
585 	case AX25_N2:
586 		if (opt < 1 || opt > 31) {
587 			res = -EINVAL;
588 			break;
589 		}
590 		ax25->n2 = opt;
591 		break;
592 
593 	case AX25_T3:
594 		if (opt < 1 || opt > ULONG_MAX / HZ) {
595 			res = -EINVAL;
596 			break;
597 		}
598 		ax25->t3 = opt * HZ;
599 		break;
600 
601 	case AX25_IDLE:
602 		if (opt > ULONG_MAX / (60 * HZ)) {
603 			res = -EINVAL;
604 			break;
605 		}
606 		ax25->idle = opt * 60 * HZ;
607 		break;
608 
609 	case AX25_BACKOFF:
610 		if (opt > 2) {
611 			res = -EINVAL;
612 			break;
613 		}
614 		ax25->backoff = opt;
615 		break;
616 
617 	case AX25_EXTSEQ:
618 		ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
619 		break;
620 
621 	case AX25_PIDINCL:
622 		ax25->pidincl = opt ? 1 : 0;
623 		break;
624 
625 	case AX25_IAMDIGI:
626 		ax25->iamdigi = opt ? 1 : 0;
627 		break;
628 
629 	case AX25_PACLEN:
630 		if (opt < 16 || opt > 65535) {
631 			res = -EINVAL;
632 			break;
633 		}
634 		ax25->paclen = opt;
635 		break;
636 
637 	case SO_BINDTODEVICE:
638 		if (optlen > IFNAMSIZ - 1)
639 			optlen = IFNAMSIZ - 1;
640 
641 		memset(devname, 0, sizeof(devname));
642 
643 		if (copy_from_sockptr(devname, optval, optlen)) {
644 			res = -EFAULT;
645 			break;
646 		}
647 
648 		if (sk->sk_type == SOCK_SEQPACKET &&
649 		   (sock->state != SS_UNCONNECTED ||
650 		    sk->sk_state == TCP_LISTEN)) {
651 			res = -EADDRNOTAVAIL;
652 			break;
653 		}
654 
655 		rtnl_lock();
656 		dev = __dev_get_by_name(&init_net, devname);
657 		if (!dev) {
658 			rtnl_unlock();
659 			res = -ENODEV;
660 			break;
661 		}
662 
663 		ax25->ax25_dev = ax25_dev_ax25dev(dev);
664 		if (!ax25->ax25_dev) {
665 			rtnl_unlock();
666 			res = -ENODEV;
667 			break;
668 		}
669 		ax25_fillin_cb(ax25, ax25->ax25_dev);
670 		rtnl_unlock();
671 		break;
672 
673 	default:
674 		res = -ENOPROTOOPT;
675 	}
676 	release_sock(sk);
677 
678 	return res;
679 }
680 
681 static int ax25_getsockopt(struct socket *sock, int level, int optname,
682 	char __user *optval, int __user *optlen)
683 {
684 	struct sock *sk = sock->sk;
685 	ax25_cb *ax25;
686 	struct ax25_dev *ax25_dev;
687 	char devname[IFNAMSIZ];
688 	void *valptr;
689 	int val = 0;
690 	int maxlen, length;
691 
692 	if (level != SOL_AX25)
693 		return -ENOPROTOOPT;
694 
695 	if (get_user(maxlen, optlen))
696 		return -EFAULT;
697 
698 	if (maxlen < 1)
699 		return -EFAULT;
700 
701 	valptr = (void *) &val;
702 	length = min_t(unsigned int, maxlen, sizeof(int));
703 
704 	lock_sock(sk);
705 	ax25 = sk_to_ax25(sk);
706 
707 	switch (optname) {
708 	case AX25_WINDOW:
709 		val = ax25->window;
710 		break;
711 
712 	case AX25_T1:
713 		val = ax25->t1 / HZ;
714 		break;
715 
716 	case AX25_T2:
717 		val = ax25->t2 / HZ;
718 		break;
719 
720 	case AX25_N2:
721 		val = ax25->n2;
722 		break;
723 
724 	case AX25_T3:
725 		val = ax25->t3 / HZ;
726 		break;
727 
728 	case AX25_IDLE:
729 		val = ax25->idle / (60 * HZ);
730 		break;
731 
732 	case AX25_BACKOFF:
733 		val = ax25->backoff;
734 		break;
735 
736 	case AX25_EXTSEQ:
737 		val = (ax25->modulus == AX25_EMODULUS);
738 		break;
739 
740 	case AX25_PIDINCL:
741 		val = ax25->pidincl;
742 		break;
743 
744 	case AX25_IAMDIGI:
745 		val = ax25->iamdigi;
746 		break;
747 
748 	case AX25_PACLEN:
749 		val = ax25->paclen;
750 		break;
751 
752 	case SO_BINDTODEVICE:
753 		ax25_dev = ax25->ax25_dev;
754 
755 		if (ax25_dev != NULL && ax25_dev->dev != NULL) {
756 			strlcpy(devname, ax25_dev->dev->name, sizeof(devname));
757 			length = strlen(devname) + 1;
758 		} else {
759 			*devname = '\0';
760 			length = 1;
761 		}
762 
763 		valptr = (void *) devname;
764 		break;
765 
766 	default:
767 		release_sock(sk);
768 		return -ENOPROTOOPT;
769 	}
770 	release_sock(sk);
771 
772 	if (put_user(length, optlen))
773 		return -EFAULT;
774 
775 	return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
776 }
777 
778 static int ax25_listen(struct socket *sock, int backlog)
779 {
780 	struct sock *sk = sock->sk;
781 	int res = 0;
782 
783 	lock_sock(sk);
784 	if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_LISTEN) {
785 		sk->sk_max_ack_backlog = backlog;
786 		sk->sk_state           = TCP_LISTEN;
787 		goto out;
788 	}
789 	res = -EOPNOTSUPP;
790 
791 out:
792 	release_sock(sk);
793 
794 	return res;
795 }
796 
797 /*
798  * XXX: when creating ax25_sock we should update the .obj_size setting
799  * below.
800  */
801 static struct proto ax25_proto = {
802 	.name	  = "AX25",
803 	.owner	  = THIS_MODULE,
804 	.obj_size = sizeof(struct ax25_sock),
805 };
806 
807 static int ax25_create(struct net *net, struct socket *sock, int protocol,
808 		       int kern)
809 {
810 	struct sock *sk;
811 	ax25_cb *ax25;
812 
813 	if (protocol < 0 || protocol > U8_MAX)
814 		return -EINVAL;
815 
816 	if (!net_eq(net, &init_net))
817 		return -EAFNOSUPPORT;
818 
819 	switch (sock->type) {
820 	case SOCK_DGRAM:
821 		if (protocol == 0 || protocol == PF_AX25)
822 			protocol = AX25_P_TEXT;
823 		break;
824 
825 	case SOCK_SEQPACKET:
826 		switch (protocol) {
827 		case 0:
828 		case PF_AX25:	/* For CLX */
829 			protocol = AX25_P_TEXT;
830 			break;
831 		case AX25_P_SEGMENT:
832 #ifdef CONFIG_INET
833 		case AX25_P_ARP:
834 		case AX25_P_IP:
835 #endif
836 #ifdef CONFIG_NETROM
837 		case AX25_P_NETROM:
838 #endif
839 #ifdef CONFIG_ROSE
840 		case AX25_P_ROSE:
841 #endif
842 			return -ESOCKTNOSUPPORT;
843 #ifdef CONFIG_NETROM_MODULE
844 		case AX25_P_NETROM:
845 			if (ax25_protocol_is_registered(AX25_P_NETROM))
846 				return -ESOCKTNOSUPPORT;
847 			break;
848 #endif
849 #ifdef CONFIG_ROSE_MODULE
850 		case AX25_P_ROSE:
851 			if (ax25_protocol_is_registered(AX25_P_ROSE))
852 				return -ESOCKTNOSUPPORT;
853 			break;
854 #endif
855 		default:
856 			break;
857 		}
858 		break;
859 
860 	case SOCK_RAW:
861 		if (!capable(CAP_NET_RAW))
862 			return -EPERM;
863 		break;
864 	default:
865 		return -ESOCKTNOSUPPORT;
866 	}
867 
868 	sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto, kern);
869 	if (sk == NULL)
870 		return -ENOMEM;
871 
872 	ax25 = ax25_sk(sk)->cb = ax25_create_cb();
873 	if (!ax25) {
874 		sk_free(sk);
875 		return -ENOMEM;
876 	}
877 
878 	sock_init_data(sock, sk);
879 
880 	sk->sk_destruct = ax25_free_sock;
881 	sock->ops    = &ax25_proto_ops;
882 	sk->sk_protocol = protocol;
883 
884 	ax25->sk    = sk;
885 
886 	return 0;
887 }
888 
889 struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
890 {
891 	struct sock *sk;
892 	ax25_cb *ax25, *oax25;
893 
894 	sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC, osk->sk_prot, 0);
895 	if (sk == NULL)
896 		return NULL;
897 
898 	if ((ax25 = ax25_create_cb()) == NULL) {
899 		sk_free(sk);
900 		return NULL;
901 	}
902 
903 	switch (osk->sk_type) {
904 	case SOCK_DGRAM:
905 		break;
906 	case SOCK_SEQPACKET:
907 		break;
908 	default:
909 		sk_free(sk);
910 		ax25_cb_put(ax25);
911 		return NULL;
912 	}
913 
914 	sock_init_data(NULL, sk);
915 
916 	sk->sk_type     = osk->sk_type;
917 	sk->sk_priority = osk->sk_priority;
918 	sk->sk_protocol = osk->sk_protocol;
919 	sk->sk_rcvbuf   = osk->sk_rcvbuf;
920 	sk->sk_sndbuf   = osk->sk_sndbuf;
921 	sk->sk_state    = TCP_ESTABLISHED;
922 	sock_copy_flags(sk, osk);
923 
924 	oax25 = sk_to_ax25(osk);
925 
926 	ax25->modulus = oax25->modulus;
927 	ax25->backoff = oax25->backoff;
928 	ax25->pidincl = oax25->pidincl;
929 	ax25->iamdigi = oax25->iamdigi;
930 	ax25->rtt     = oax25->rtt;
931 	ax25->t1      = oax25->t1;
932 	ax25->t2      = oax25->t2;
933 	ax25->t3      = oax25->t3;
934 	ax25->n2      = oax25->n2;
935 	ax25->idle    = oax25->idle;
936 	ax25->paclen  = oax25->paclen;
937 	ax25->window  = oax25->window;
938 
939 	ax25->ax25_dev    = ax25_dev;
940 	ax25->source_addr = oax25->source_addr;
941 
942 	if (oax25->digipeat != NULL) {
943 		ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi),
944 					 GFP_ATOMIC);
945 		if (ax25->digipeat == NULL) {
946 			sk_free(sk);
947 			ax25_cb_put(ax25);
948 			return NULL;
949 		}
950 	}
951 
952 	ax25_sk(sk)->cb = ax25;
953 	sk->sk_destruct = ax25_free_sock;
954 	ax25->sk    = sk;
955 
956 	return sk;
957 }
958 
959 static int ax25_release(struct socket *sock)
960 {
961 	struct sock *sk = sock->sk;
962 	ax25_cb *ax25;
963 
964 	if (sk == NULL)
965 		return 0;
966 
967 	sock_hold(sk);
968 	sock_orphan(sk);
969 	lock_sock(sk);
970 	ax25 = sk_to_ax25(sk);
971 
972 	if (sk->sk_type == SOCK_SEQPACKET) {
973 		switch (ax25->state) {
974 		case AX25_STATE_0:
975 			release_sock(sk);
976 			ax25_disconnect(ax25, 0);
977 			lock_sock(sk);
978 			ax25_destroy_socket(ax25);
979 			break;
980 
981 		case AX25_STATE_1:
982 		case AX25_STATE_2:
983 			ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
984 			release_sock(sk);
985 			ax25_disconnect(ax25, 0);
986 			lock_sock(sk);
987 			if (!sock_flag(ax25->sk, SOCK_DESTROY))
988 				ax25_destroy_socket(ax25);
989 			break;
990 
991 		case AX25_STATE_3:
992 		case AX25_STATE_4:
993 			ax25_clear_queues(ax25);
994 			ax25->n2count = 0;
995 
996 			switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
997 			case AX25_PROTO_STD_SIMPLEX:
998 			case AX25_PROTO_STD_DUPLEX:
999 				ax25_send_control(ax25,
1000 						  AX25_DISC,
1001 						  AX25_POLLON,
1002 						  AX25_COMMAND);
1003 				ax25_stop_t2timer(ax25);
1004 				ax25_stop_t3timer(ax25);
1005 				ax25_stop_idletimer(ax25);
1006 				break;
1007 #ifdef CONFIG_AX25_DAMA_SLAVE
1008 			case AX25_PROTO_DAMA_SLAVE:
1009 				ax25_stop_t3timer(ax25);
1010 				ax25_stop_idletimer(ax25);
1011 				break;
1012 #endif
1013 			}
1014 			ax25_calculate_t1(ax25);
1015 			ax25_start_t1timer(ax25);
1016 			ax25->state = AX25_STATE_2;
1017 			sk->sk_state                = TCP_CLOSE;
1018 			sk->sk_shutdown            |= SEND_SHUTDOWN;
1019 			sk->sk_state_change(sk);
1020 			sock_set_flag(sk, SOCK_DESTROY);
1021 			break;
1022 
1023 		default:
1024 			break;
1025 		}
1026 	} else {
1027 		sk->sk_state     = TCP_CLOSE;
1028 		sk->sk_shutdown |= SEND_SHUTDOWN;
1029 		sk->sk_state_change(sk);
1030 		ax25_destroy_socket(ax25);
1031 	}
1032 
1033 	sock->sk   = NULL;
1034 	release_sock(sk);
1035 	sock_put(sk);
1036 
1037 	return 0;
1038 }
1039 
1040 /*
1041  *	We support a funny extension here so you can (as root) give any callsign
1042  *	digipeated via a local address as source. This hack is obsolete now
1043  *	that we've implemented support for SO_BINDTODEVICE. It is however small
1044  *	and trivially backward compatible.
1045  */
1046 static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1047 {
1048 	struct sock *sk = sock->sk;
1049 	struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
1050 	ax25_dev *ax25_dev = NULL;
1051 	ax25_uid_assoc *user;
1052 	ax25_address call;
1053 	ax25_cb *ax25;
1054 	int err = 0;
1055 
1056 	if (addr_len != sizeof(struct sockaddr_ax25) &&
1057 	    addr_len != sizeof(struct full_sockaddr_ax25))
1058 		/* support for old structure may go away some time
1059 		 * ax25_bind(): uses old (6 digipeater) socket structure.
1060 		 */
1061 		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1062 		    (addr_len > sizeof(struct full_sockaddr_ax25)))
1063 			return -EINVAL;
1064 
1065 	if (addr->fsa_ax25.sax25_family != AF_AX25)
1066 		return -EINVAL;
1067 
1068 	user = ax25_findbyuid(current_euid());
1069 	if (user) {
1070 		call = user->call;
1071 		ax25_uid_put(user);
1072 	} else {
1073 		if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
1074 			return -EACCES;
1075 
1076 		call = addr->fsa_ax25.sax25_call;
1077 	}
1078 
1079 	lock_sock(sk);
1080 
1081 	ax25 = sk_to_ax25(sk);
1082 	if (!sock_flag(sk, SOCK_ZAPPED)) {
1083 		err = -EINVAL;
1084 		goto out;
1085 	}
1086 
1087 	ax25->source_addr = call;
1088 
1089 	/*
1090 	 * User already set interface with SO_BINDTODEVICE
1091 	 */
1092 	if (ax25->ax25_dev != NULL)
1093 		goto done;
1094 
1095 	if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {
1096 		if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&
1097 		    (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {
1098 			err = -EADDRNOTAVAIL;
1099 			goto out;
1100 		}
1101 	} else {
1102 		if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1103 			err = -EADDRNOTAVAIL;
1104 			goto out;
1105 		}
1106 	}
1107 
1108 	if (ax25_dev != NULL)
1109 		ax25_fillin_cb(ax25, ax25_dev);
1110 
1111 done:
1112 	ax25_cb_add(ax25);
1113 	sock_reset_flag(sk, SOCK_ZAPPED);
1114 
1115 out:
1116 	release_sock(sk);
1117 
1118 	return err;
1119 }
1120 
1121 /*
1122  *	FIXME: nonblock behaviour looks like it may have a bug.
1123  */
1124 static int __must_check ax25_connect(struct socket *sock,
1125 	struct sockaddr *uaddr, int addr_len, int flags)
1126 {
1127 	struct sock *sk = sock->sk;
1128 	ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;
1129 	struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1130 	ax25_digi *digi = NULL;
1131 	int ct = 0, err = 0;
1132 
1133 	/*
1134 	 * some sanity checks. code further down depends on this
1135 	 */
1136 
1137 	if (addr_len == sizeof(struct sockaddr_ax25))
1138 		/* support for this will go away in early 2.5.x
1139 		 * ax25_connect(): uses obsolete socket structure
1140 		 */
1141 		;
1142 	else if (addr_len != sizeof(struct full_sockaddr_ax25))
1143 		/* support for old structure may go away some time
1144 		 * ax25_connect(): uses old (6 digipeater) socket structure.
1145 		 */
1146 		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1147 		    (addr_len > sizeof(struct full_sockaddr_ax25)))
1148 			return -EINVAL;
1149 
1150 
1151 	if (fsa->fsa_ax25.sax25_family != AF_AX25)
1152 		return -EINVAL;
1153 
1154 	lock_sock(sk);
1155 
1156 	/* deal with restarts */
1157 	if (sock->state == SS_CONNECTING) {
1158 		switch (sk->sk_state) {
1159 		case TCP_SYN_SENT: /* still trying */
1160 			err = -EINPROGRESS;
1161 			goto out_release;
1162 
1163 		case TCP_ESTABLISHED: /* connection established */
1164 			sock->state = SS_CONNECTED;
1165 			goto out_release;
1166 
1167 		case TCP_CLOSE: /* connection refused */
1168 			sock->state = SS_UNCONNECTED;
1169 			err = -ECONNREFUSED;
1170 			goto out_release;
1171 		}
1172 	}
1173 
1174 	if (sk->sk_state == TCP_ESTABLISHED && sk->sk_type == SOCK_SEQPACKET) {
1175 		err = -EISCONN;	/* No reconnect on a seqpacket socket */
1176 		goto out_release;
1177 	}
1178 
1179 	sk->sk_state   = TCP_CLOSE;
1180 	sock->state = SS_UNCONNECTED;
1181 
1182 	kfree(ax25->digipeat);
1183 	ax25->digipeat = NULL;
1184 
1185 	/*
1186 	 *	Handle digi-peaters to be used.
1187 	 */
1188 	if (addr_len > sizeof(struct sockaddr_ax25) &&
1189 	    fsa->fsa_ax25.sax25_ndigis != 0) {
1190 		/* Valid number of digipeaters ? */
1191 		if (fsa->fsa_ax25.sax25_ndigis < 1 ||
1192 		    fsa->fsa_ax25.sax25_ndigis > AX25_MAX_DIGIS ||
1193 		    addr_len < sizeof(struct sockaddr_ax25) +
1194 		    sizeof(ax25_address) * fsa->fsa_ax25.sax25_ndigis) {
1195 			err = -EINVAL;
1196 			goto out_release;
1197 		}
1198 
1199 		if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1200 			err = -ENOBUFS;
1201 			goto out_release;
1202 		}
1203 
1204 		digi->ndigi      = fsa->fsa_ax25.sax25_ndigis;
1205 		digi->lastrepeat = -1;
1206 
1207 		while (ct < fsa->fsa_ax25.sax25_ndigis) {
1208 			if ((fsa->fsa_digipeater[ct].ax25_call[6] &
1209 			     AX25_HBIT) && ax25->iamdigi) {
1210 				digi->repeated[ct] = 1;
1211 				digi->lastrepeat   = ct;
1212 			} else {
1213 				digi->repeated[ct] = 0;
1214 			}
1215 			digi->calls[ct] = fsa->fsa_digipeater[ct];
1216 			ct++;
1217 		}
1218 	}
1219 
1220 	/*
1221 	 *	Must bind first - autobinding in this may or may not work. If
1222 	 *	the socket is already bound, check to see if the device has
1223 	 *	been filled in, error if it hasn't.
1224 	 */
1225 	if (sock_flag(sk, SOCK_ZAPPED)) {
1226 		/* check if we can remove this feature. It is broken. */
1227 		printk(KERN_WARNING "ax25_connect(): %s uses autobind, please contact jreuter@yaina.de\n",
1228 			current->comm);
1229 		if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1230 			kfree(digi);
1231 			goto out_release;
1232 		}
1233 
1234 		ax25_fillin_cb(ax25, ax25->ax25_dev);
1235 		ax25_cb_add(ax25);
1236 	} else {
1237 		if (ax25->ax25_dev == NULL) {
1238 			kfree(digi);
1239 			err = -EHOSTUNREACH;
1240 			goto out_release;
1241 		}
1242 	}
1243 
1244 	if (sk->sk_type == SOCK_SEQPACKET &&
1245 	    (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1246 			 ax25->ax25_dev->dev))) {
1247 		kfree(digi);
1248 		err = -EADDRINUSE;		/* Already such a connection */
1249 		ax25_cb_put(ax25t);
1250 		goto out_release;
1251 	}
1252 
1253 	ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1254 	ax25->digipeat  = digi;
1255 
1256 	/* First the easy one */
1257 	if (sk->sk_type != SOCK_SEQPACKET) {
1258 		sock->state = SS_CONNECTED;
1259 		sk->sk_state   = TCP_ESTABLISHED;
1260 		goto out_release;
1261 	}
1262 
1263 	/* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1264 	sock->state        = SS_CONNECTING;
1265 	sk->sk_state          = TCP_SYN_SENT;
1266 
1267 	switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1268 	case AX25_PROTO_STD_SIMPLEX:
1269 	case AX25_PROTO_STD_DUPLEX:
1270 		ax25_std_establish_data_link(ax25);
1271 		break;
1272 
1273 #ifdef CONFIG_AX25_DAMA_SLAVE
1274 	case AX25_PROTO_DAMA_SLAVE:
1275 		ax25->modulus = AX25_MODULUS;
1276 		ax25->window  = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1277 		if (ax25->ax25_dev->dama.slave)
1278 			ax25_ds_establish_data_link(ax25);
1279 		else
1280 			ax25_std_establish_data_link(ax25);
1281 		break;
1282 #endif
1283 	}
1284 
1285 	ax25->state = AX25_STATE_1;
1286 
1287 	ax25_start_heartbeat(ax25);
1288 
1289 	/* Now the loop */
1290 	if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1291 		err = -EINPROGRESS;
1292 		goto out_release;
1293 	}
1294 
1295 	if (sk->sk_state == TCP_SYN_SENT) {
1296 		DEFINE_WAIT(wait);
1297 
1298 		for (;;) {
1299 			prepare_to_wait(sk_sleep(sk), &wait,
1300 					TASK_INTERRUPTIBLE);
1301 			if (sk->sk_state != TCP_SYN_SENT)
1302 				break;
1303 			if (!signal_pending(current)) {
1304 				release_sock(sk);
1305 				schedule();
1306 				lock_sock(sk);
1307 				continue;
1308 			}
1309 			err = -ERESTARTSYS;
1310 			break;
1311 		}
1312 		finish_wait(sk_sleep(sk), &wait);
1313 
1314 		if (err)
1315 			goto out_release;
1316 	}
1317 
1318 	if (sk->sk_state != TCP_ESTABLISHED) {
1319 		/* Not in ABM, not in WAIT_UA -> failed */
1320 		sock->state = SS_UNCONNECTED;
1321 		err = sock_error(sk);	/* Always set at this point */
1322 		goto out_release;
1323 	}
1324 
1325 	sock->state = SS_CONNECTED;
1326 
1327 	err = 0;
1328 out_release:
1329 	release_sock(sk);
1330 
1331 	return err;
1332 }
1333 
1334 static int ax25_accept(struct socket *sock, struct socket *newsock, int flags,
1335 		       bool kern)
1336 {
1337 	struct sk_buff *skb;
1338 	struct sock *newsk;
1339 	DEFINE_WAIT(wait);
1340 	struct sock *sk;
1341 	int err = 0;
1342 
1343 	if (sock->state != SS_UNCONNECTED)
1344 		return -EINVAL;
1345 
1346 	if ((sk = sock->sk) == NULL)
1347 		return -EINVAL;
1348 
1349 	lock_sock(sk);
1350 	if (sk->sk_type != SOCK_SEQPACKET) {
1351 		err = -EOPNOTSUPP;
1352 		goto out;
1353 	}
1354 
1355 	if (sk->sk_state != TCP_LISTEN) {
1356 		err = -EINVAL;
1357 		goto out;
1358 	}
1359 
1360 	/*
1361 	 *	The read queue this time is holding sockets ready to use
1362 	 *	hooked into the SABM we saved
1363 	 */
1364 	for (;;) {
1365 		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1366 		skb = skb_dequeue(&sk->sk_receive_queue);
1367 		if (skb)
1368 			break;
1369 
1370 		if (flags & O_NONBLOCK) {
1371 			err = -EWOULDBLOCK;
1372 			break;
1373 		}
1374 		if (!signal_pending(current)) {
1375 			release_sock(sk);
1376 			schedule();
1377 			lock_sock(sk);
1378 			continue;
1379 		}
1380 		err = -ERESTARTSYS;
1381 		break;
1382 	}
1383 	finish_wait(sk_sleep(sk), &wait);
1384 
1385 	if (err)
1386 		goto out;
1387 
1388 	newsk		 = skb->sk;
1389 	sock_graft(newsk, newsock);
1390 
1391 	/* Now attach up the new socket */
1392 	kfree_skb(skb);
1393 	sk_acceptq_removed(sk);
1394 	newsock->state = SS_CONNECTED;
1395 
1396 out:
1397 	release_sock(sk);
1398 
1399 	return err;
1400 }
1401 
1402 static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1403 	int peer)
1404 {
1405 	struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1406 	struct sock *sk = sock->sk;
1407 	unsigned char ndigi, i;
1408 	ax25_cb *ax25;
1409 	int err = 0;
1410 
1411 	memset(fsa, 0, sizeof(*fsa));
1412 	lock_sock(sk);
1413 	ax25 = sk_to_ax25(sk);
1414 
1415 	if (peer != 0) {
1416 		if (sk->sk_state != TCP_ESTABLISHED) {
1417 			err = -ENOTCONN;
1418 			goto out;
1419 		}
1420 
1421 		fsa->fsa_ax25.sax25_family = AF_AX25;
1422 		fsa->fsa_ax25.sax25_call   = ax25->dest_addr;
1423 
1424 		if (ax25->digipeat != NULL) {
1425 			ndigi = ax25->digipeat->ndigi;
1426 			fsa->fsa_ax25.sax25_ndigis = ndigi;
1427 			for (i = 0; i < ndigi; i++)
1428 				fsa->fsa_digipeater[i] =
1429 						ax25->digipeat->calls[i];
1430 		}
1431 	} else {
1432 		fsa->fsa_ax25.sax25_family = AF_AX25;
1433 		fsa->fsa_ax25.sax25_call   = ax25->source_addr;
1434 		fsa->fsa_ax25.sax25_ndigis = 1;
1435 		if (ax25->ax25_dev != NULL) {
1436 			memcpy(&fsa->fsa_digipeater[0],
1437 			       ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1438 		} else {
1439 			fsa->fsa_digipeater[0] = null_ax25_address;
1440 		}
1441 	}
1442 	err = sizeof (struct full_sockaddr_ax25);
1443 
1444 out:
1445 	release_sock(sk);
1446 
1447 	return err;
1448 }
1449 
1450 static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
1451 {
1452 	DECLARE_SOCKADDR(struct sockaddr_ax25 *, usax, msg->msg_name);
1453 	struct sock *sk = sock->sk;
1454 	struct sockaddr_ax25 sax;
1455 	struct sk_buff *skb;
1456 	ax25_digi dtmp, *dp;
1457 	ax25_cb *ax25;
1458 	size_t size;
1459 	int lv, err, addr_len = msg->msg_namelen;
1460 
1461 	if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1462 		return -EINVAL;
1463 
1464 	lock_sock(sk);
1465 	ax25 = sk_to_ax25(sk);
1466 
1467 	if (sock_flag(sk, SOCK_ZAPPED)) {
1468 		err = -EADDRNOTAVAIL;
1469 		goto out;
1470 	}
1471 
1472 	if (sk->sk_shutdown & SEND_SHUTDOWN) {
1473 		send_sig(SIGPIPE, current, 0);
1474 		err = -EPIPE;
1475 		goto out;
1476 	}
1477 
1478 	if (ax25->ax25_dev == NULL) {
1479 		err = -ENETUNREACH;
1480 		goto out;
1481 	}
1482 
1483 	if (len > ax25->ax25_dev->dev->mtu) {
1484 		err = -EMSGSIZE;
1485 		goto out;
1486 	}
1487 
1488 	if (usax != NULL) {
1489 		if (usax->sax25_family != AF_AX25) {
1490 			err = -EINVAL;
1491 			goto out;
1492 		}
1493 
1494 		if (addr_len == sizeof(struct sockaddr_ax25))
1495 			/* ax25_sendmsg(): uses obsolete socket structure */
1496 			;
1497 		else if (addr_len != sizeof(struct full_sockaddr_ax25))
1498 			/* support for old structure may go away some time
1499 			 * ax25_sendmsg(): uses old (6 digipeater)
1500 			 * socket structure.
1501 			 */
1502 			if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1503 			    (addr_len > sizeof(struct full_sockaddr_ax25))) {
1504 				err = -EINVAL;
1505 				goto out;
1506 			}
1507 
1508 
1509 		if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1510 			int ct           = 0;
1511 			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1512 
1513 			/* Valid number of digipeaters ? */
1514 			if (usax->sax25_ndigis < 1 ||
1515 			    usax->sax25_ndigis > AX25_MAX_DIGIS ||
1516 			    addr_len < sizeof(struct sockaddr_ax25) +
1517 			    sizeof(ax25_address) * usax->sax25_ndigis) {
1518 				err = -EINVAL;
1519 				goto out;
1520 			}
1521 
1522 			dtmp.ndigi      = usax->sax25_ndigis;
1523 
1524 			while (ct < usax->sax25_ndigis) {
1525 				dtmp.repeated[ct] = 0;
1526 				dtmp.calls[ct]    = fsa->fsa_digipeater[ct];
1527 				ct++;
1528 			}
1529 
1530 			dtmp.lastrepeat = 0;
1531 		}
1532 
1533 		sax = *usax;
1534 		if (sk->sk_type == SOCK_SEQPACKET &&
1535 		    ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1536 			err = -EISCONN;
1537 			goto out;
1538 		}
1539 		if (usax->sax25_ndigis == 0)
1540 			dp = NULL;
1541 		else
1542 			dp = &dtmp;
1543 	} else {
1544 		/*
1545 		 *	FIXME: 1003.1g - if the socket is like this because
1546 		 *	it has become closed (not started closed) and is VC
1547 		 *	we ought to SIGPIPE, EPIPE
1548 		 */
1549 		if (sk->sk_state != TCP_ESTABLISHED) {
1550 			err = -ENOTCONN;
1551 			goto out;
1552 		}
1553 		sax.sax25_family = AF_AX25;
1554 		sax.sax25_call   = ax25->dest_addr;
1555 		dp = ax25->digipeat;
1556 	}
1557 
1558 	/* Build a packet */
1559 	/* Assume the worst case */
1560 	size = len + ax25->ax25_dev->dev->hard_header_len;
1561 
1562 	skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1563 	if (skb == NULL)
1564 		goto out;
1565 
1566 	skb_reserve(skb, size - len);
1567 
1568 	/* User data follows immediately after the AX.25 data */
1569 	if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1570 		err = -EFAULT;
1571 		kfree_skb(skb);
1572 		goto out;
1573 	}
1574 
1575 	skb_reset_network_header(skb);
1576 
1577 	/* Add the PID if one is not supplied by the user in the skb */
1578 	if (!ax25->pidincl)
1579 		*(u8 *)skb_push(skb, 1) = sk->sk_protocol;
1580 
1581 	if (sk->sk_type == SOCK_SEQPACKET) {
1582 		/* Connected mode sockets go via the LAPB machine */
1583 		if (sk->sk_state != TCP_ESTABLISHED) {
1584 			kfree_skb(skb);
1585 			err = -ENOTCONN;
1586 			goto out;
1587 		}
1588 
1589 		/* Shove it onto the queue and kick */
1590 		ax25_output(ax25, ax25->paclen, skb);
1591 
1592 		err = len;
1593 		goto out;
1594 	}
1595 
1596 	skb_push(skb, 1 + ax25_addr_size(dp));
1597 
1598 	/* Building AX.25 Header */
1599 
1600 	/* Build an AX.25 header */
1601 	lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1602 			     dp, AX25_COMMAND, AX25_MODULUS);
1603 
1604 	skb_set_transport_header(skb, lv);
1605 
1606 	*skb_transport_header(skb) = AX25_UI;
1607 
1608 	/* Datagram frames go straight out of the door as UI */
1609 	ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1610 
1611 	err = len;
1612 
1613 out:
1614 	release_sock(sk);
1615 
1616 	return err;
1617 }
1618 
1619 static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
1620 			int flags)
1621 {
1622 	struct sock *sk = sock->sk;
1623 	struct sk_buff *skb;
1624 	int copied;
1625 	int err = 0;
1626 
1627 	lock_sock(sk);
1628 	/*
1629 	 * 	This works for seqpacket too. The receiver has ordered the
1630 	 *	queue for us! We do one quick check first though
1631 	 */
1632 	if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1633 		err =  -ENOTCONN;
1634 		goto out;
1635 	}
1636 
1637 	/* Now we can treat all alike */
1638 	skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1639 				flags & MSG_DONTWAIT, &err);
1640 	if (skb == NULL)
1641 		goto out;
1642 
1643 	if (!sk_to_ax25(sk)->pidincl)
1644 		skb_pull(skb, 1);		/* Remove PID */
1645 
1646 	skb_reset_transport_header(skb);
1647 	copied = skb->len;
1648 
1649 	if (copied > size) {
1650 		copied = size;
1651 		msg->msg_flags |= MSG_TRUNC;
1652 	}
1653 
1654 	skb_copy_datagram_msg(skb, 0, msg, copied);
1655 
1656 	if (msg->msg_name) {
1657 		ax25_digi digi;
1658 		ax25_address src;
1659 		const unsigned char *mac = skb_mac_header(skb);
1660 		DECLARE_SOCKADDR(struct sockaddr_ax25 *, sax, msg->msg_name);
1661 
1662 		memset(sax, 0, sizeof(struct full_sockaddr_ax25));
1663 		ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1664 				&digi, NULL, NULL);
1665 		sax->sax25_family = AF_AX25;
1666 		/* We set this correctly, even though we may not let the
1667 		   application know the digi calls further down (because it
1668 		   did NOT ask to know them).  This could get political... **/
1669 		sax->sax25_ndigis = digi.ndigi;
1670 		sax->sax25_call   = src;
1671 
1672 		if (sax->sax25_ndigis != 0) {
1673 			int ct;
1674 			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1675 
1676 			for (ct = 0; ct < digi.ndigi; ct++)
1677 				fsa->fsa_digipeater[ct] = digi.calls[ct];
1678 		}
1679 		msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1680 	}
1681 
1682 	skb_free_datagram(sk, skb);
1683 	err = copied;
1684 
1685 out:
1686 	release_sock(sk);
1687 
1688 	return err;
1689 }
1690 
1691 static int ax25_shutdown(struct socket *sk, int how)
1692 {
1693 	/* FIXME - generate DM and RNR states */
1694 	return -EOPNOTSUPP;
1695 }
1696 
1697 static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1698 {
1699 	struct sock *sk = sock->sk;
1700 	void __user *argp = (void __user *)arg;
1701 	int res = 0;
1702 
1703 	lock_sock(sk);
1704 	switch (cmd) {
1705 	case TIOCOUTQ: {
1706 		long amount;
1707 
1708 		amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1709 		if (amount < 0)
1710 			amount = 0;
1711 		res = put_user(amount, (int __user *)argp);
1712 		break;
1713 	}
1714 
1715 	case TIOCINQ: {
1716 		struct sk_buff *skb;
1717 		long amount = 0L;
1718 		/* These two are safe on a single CPU system as only user tasks fiddle here */
1719 		if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1720 			amount = skb->len;
1721 		res = put_user(amount, (int __user *) argp);
1722 		break;
1723 	}
1724 
1725 	case SIOCAX25ADDUID:	/* Add a uid to the uid/call map table */
1726 	case SIOCAX25DELUID:	/* Delete a uid from the uid/call map table */
1727 	case SIOCAX25GETUID: {
1728 		struct sockaddr_ax25 sax25;
1729 		if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1730 			res = -EFAULT;
1731 			break;
1732 		}
1733 		res = ax25_uid_ioctl(cmd, &sax25);
1734 		break;
1735 	}
1736 
1737 	case SIOCAX25NOUID: {	/* Set the default policy (default/bar) */
1738 		long amount;
1739 		if (!capable(CAP_NET_ADMIN)) {
1740 			res = -EPERM;
1741 			break;
1742 		}
1743 		if (get_user(amount, (long __user *)argp)) {
1744 			res = -EFAULT;
1745 			break;
1746 		}
1747 		if (amount < 0 || amount > AX25_NOUID_BLOCK) {
1748 			res = -EINVAL;
1749 			break;
1750 		}
1751 		ax25_uid_policy = amount;
1752 		res = 0;
1753 		break;
1754 	}
1755 
1756 	case SIOCADDRT:
1757 	case SIOCDELRT:
1758 	case SIOCAX25OPTRT:
1759 		if (!capable(CAP_NET_ADMIN)) {
1760 			res = -EPERM;
1761 			break;
1762 		}
1763 		res = ax25_rt_ioctl(cmd, argp);
1764 		break;
1765 
1766 	case SIOCAX25CTLCON:
1767 		if (!capable(CAP_NET_ADMIN)) {
1768 			res = -EPERM;
1769 			break;
1770 		}
1771 		res = ax25_ctl_ioctl(cmd, argp);
1772 		break;
1773 
1774 	case SIOCAX25GETINFO:
1775 	case SIOCAX25GETINFOOLD: {
1776 		ax25_cb *ax25 = sk_to_ax25(sk);
1777 		struct ax25_info_struct ax25_info;
1778 
1779 		ax25_info.t1        = ax25->t1   / HZ;
1780 		ax25_info.t2        = ax25->t2   / HZ;
1781 		ax25_info.t3        = ax25->t3   / HZ;
1782 		ax25_info.idle      = ax25->idle / (60 * HZ);
1783 		ax25_info.n2        = ax25->n2;
1784 		ax25_info.t1timer   = ax25_display_timer(&ax25->t1timer)   / HZ;
1785 		ax25_info.t2timer   = ax25_display_timer(&ax25->t2timer)   / HZ;
1786 		ax25_info.t3timer   = ax25_display_timer(&ax25->t3timer)   / HZ;
1787 		ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1788 		ax25_info.n2count   = ax25->n2count;
1789 		ax25_info.state     = ax25->state;
1790 		ax25_info.rcv_q     = sk_rmem_alloc_get(sk);
1791 		ax25_info.snd_q     = sk_wmem_alloc_get(sk);
1792 		ax25_info.vs        = ax25->vs;
1793 		ax25_info.vr        = ax25->vr;
1794 		ax25_info.va        = ax25->va;
1795 		ax25_info.vs_max    = ax25->vs; /* reserved */
1796 		ax25_info.paclen    = ax25->paclen;
1797 		ax25_info.window    = ax25->window;
1798 
1799 		/* old structure? */
1800 		if (cmd == SIOCAX25GETINFOOLD) {
1801 			static int warned = 0;
1802 			if (!warned) {
1803 				printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1804 					current->comm);
1805 				warned=1;
1806 			}
1807 
1808 			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1809 				res = -EFAULT;
1810 				break;
1811 			}
1812 		} else {
1813 			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1814 				res = -EINVAL;
1815 				break;
1816 			}
1817 		}
1818 		res = 0;
1819 		break;
1820 	}
1821 
1822 	case SIOCAX25ADDFWD:
1823 	case SIOCAX25DELFWD: {
1824 		struct ax25_fwd_struct ax25_fwd;
1825 		if (!capable(CAP_NET_ADMIN)) {
1826 			res = -EPERM;
1827 			break;
1828 		}
1829 		if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1830 			res = -EFAULT;
1831 			break;
1832 		}
1833 		res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1834 		break;
1835 	}
1836 
1837 	case SIOCGIFADDR:
1838 	case SIOCSIFADDR:
1839 	case SIOCGIFDSTADDR:
1840 	case SIOCSIFDSTADDR:
1841 	case SIOCGIFBRDADDR:
1842 	case SIOCSIFBRDADDR:
1843 	case SIOCGIFNETMASK:
1844 	case SIOCSIFNETMASK:
1845 	case SIOCGIFMETRIC:
1846 	case SIOCSIFMETRIC:
1847 		res = -EINVAL;
1848 		break;
1849 
1850 	default:
1851 		res = -ENOIOCTLCMD;
1852 		break;
1853 	}
1854 	release_sock(sk);
1855 
1856 	return res;
1857 }
1858 
1859 #ifdef CONFIG_PROC_FS
1860 
1861 static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1862 	__acquires(ax25_list_lock)
1863 {
1864 	spin_lock_bh(&ax25_list_lock);
1865 	return seq_hlist_start(&ax25_list, *pos);
1866 }
1867 
1868 static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1869 {
1870 	return seq_hlist_next(v, &ax25_list, pos);
1871 }
1872 
1873 static void ax25_info_stop(struct seq_file *seq, void *v)
1874 	__releases(ax25_list_lock)
1875 {
1876 	spin_unlock_bh(&ax25_list_lock);
1877 }
1878 
1879 static int ax25_info_show(struct seq_file *seq, void *v)
1880 {
1881 	ax25_cb *ax25 = hlist_entry(v, struct ax25_cb, ax25_node);
1882 	char buf[11];
1883 	int k;
1884 
1885 
1886 	/*
1887 	 * New format:
1888 	 * magic dev src_addr dest_addr,digi1,digi2,.. st vs vr va t1 t1 t2 t2 t3 t3 idle idle n2 n2 rtt window paclen Snd-Q Rcv-Q inode
1889 	 */
1890 
1891 	seq_printf(seq, "%p %s %s%s ",
1892 		   ax25,
1893 		   ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1894 		   ax2asc(buf, &ax25->source_addr),
1895 		   ax25->iamdigi? "*":"");
1896 	seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1897 
1898 	for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1899 		seq_printf(seq, ",%s%s",
1900 			   ax2asc(buf, &ax25->digipeat->calls[k]),
1901 			   ax25->digipeat->repeated[k]? "*":"");
1902 	}
1903 
1904 	seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
1905 		   ax25->state,
1906 		   ax25->vs, ax25->vr, ax25->va,
1907 		   ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1908 		   ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1909 		   ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1910 		   ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1911 		   ax25->idle / (60 * HZ),
1912 		   ax25->n2count, ax25->n2,
1913 		   ax25->rtt / HZ,
1914 		   ax25->window,
1915 		   ax25->paclen);
1916 
1917 	if (ax25->sk != NULL) {
1918 		seq_printf(seq, " %d %d %lu\n",
1919 			   sk_wmem_alloc_get(ax25->sk),
1920 			   sk_rmem_alloc_get(ax25->sk),
1921 			   sock_i_ino(ax25->sk));
1922 	} else {
1923 		seq_puts(seq, " * * *\n");
1924 	}
1925 	return 0;
1926 }
1927 
1928 static const struct seq_operations ax25_info_seqops = {
1929 	.start = ax25_info_start,
1930 	.next = ax25_info_next,
1931 	.stop = ax25_info_stop,
1932 	.show = ax25_info_show,
1933 };
1934 #endif
1935 
1936 static const struct net_proto_family ax25_family_ops = {
1937 	.family =	PF_AX25,
1938 	.create =	ax25_create,
1939 	.owner	=	THIS_MODULE,
1940 };
1941 
1942 static const struct proto_ops ax25_proto_ops = {
1943 	.family		= PF_AX25,
1944 	.owner		= THIS_MODULE,
1945 	.release	= ax25_release,
1946 	.bind		= ax25_bind,
1947 	.connect	= ax25_connect,
1948 	.socketpair	= sock_no_socketpair,
1949 	.accept		= ax25_accept,
1950 	.getname	= ax25_getname,
1951 	.poll		= datagram_poll,
1952 	.ioctl		= ax25_ioctl,
1953 	.gettstamp	= sock_gettstamp,
1954 	.listen		= ax25_listen,
1955 	.shutdown	= ax25_shutdown,
1956 	.setsockopt	= ax25_setsockopt,
1957 	.getsockopt	= ax25_getsockopt,
1958 	.sendmsg	= ax25_sendmsg,
1959 	.recvmsg	= ax25_recvmsg,
1960 	.mmap		= sock_no_mmap,
1961 	.sendpage	= sock_no_sendpage,
1962 };
1963 
1964 /*
1965  *	Called by socket.c on kernel start up
1966  */
1967 static struct packet_type ax25_packet_type __read_mostly = {
1968 	.type	=	cpu_to_be16(ETH_P_AX25),
1969 	.func	=	ax25_kiss_rcv,
1970 };
1971 
1972 static struct notifier_block ax25_dev_notifier = {
1973 	.notifier_call = ax25_device_event,
1974 };
1975 
1976 static int __init ax25_init(void)
1977 {
1978 	int rc = proto_register(&ax25_proto, 0);
1979 
1980 	if (rc != 0)
1981 		goto out;
1982 
1983 	sock_register(&ax25_family_ops);
1984 	dev_add_pack(&ax25_packet_type);
1985 	register_netdevice_notifier(&ax25_dev_notifier);
1986 
1987 	proc_create_seq("ax25_route", 0444, init_net.proc_net, &ax25_rt_seqops);
1988 	proc_create_seq("ax25", 0444, init_net.proc_net, &ax25_info_seqops);
1989 	proc_create_seq("ax25_calls", 0444, init_net.proc_net,
1990 			&ax25_uid_seqops);
1991 out:
1992 	return rc;
1993 }
1994 module_init(ax25_init);
1995 
1996 
1997 MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
1998 MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
1999 MODULE_LICENSE("GPL");
2000 MODULE_ALIAS_NETPROTO(PF_AX25);
2001 
2002 static void __exit ax25_exit(void)
2003 {
2004 	remove_proc_entry("ax25_route", init_net.proc_net);
2005 	remove_proc_entry("ax25", init_net.proc_net);
2006 	remove_proc_entry("ax25_calls", init_net.proc_net);
2007 
2008 	unregister_netdevice_notifier(&ax25_dev_notifier);
2009 
2010 	dev_remove_pack(&ax25_packet_type);
2011 
2012 	sock_unregister(PF_AX25);
2013 	proto_unregister(&ax25_proto);
2014 
2015 	ax25_rt_free();
2016 	ax25_uid_free();
2017 	ax25_dev_free();
2018 }
2019 module_exit(ax25_exit);
2020