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