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