xref: /openbmc/linux/net/ax25/af_ax25.c (revision 52fb57e7)
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 socket *sock, struct msghdr *msg, size_t len)
1436 {
1437 	DECLARE_SOCKADDR(struct sockaddr_ax25 *, usax, 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 	/* Assume the worst case */
1542 	size = len + ax25->ax25_dev->dev->hard_header_len;
1543 
1544 	skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1545 	if (skb == NULL)
1546 		goto out;
1547 
1548 	skb_reserve(skb, size - len);
1549 
1550 	/* User data follows immediately after the AX.25 data */
1551 	if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1552 		err = -EFAULT;
1553 		kfree_skb(skb);
1554 		goto out;
1555 	}
1556 
1557 	skb_reset_network_header(skb);
1558 
1559 	/* Add the PID if one is not supplied by the user in the skb */
1560 	if (!ax25->pidincl)
1561 		*skb_push(skb, 1) = sk->sk_protocol;
1562 
1563 	if (sk->sk_type == SOCK_SEQPACKET) {
1564 		/* Connected mode sockets go via the LAPB machine */
1565 		if (sk->sk_state != TCP_ESTABLISHED) {
1566 			kfree_skb(skb);
1567 			err = -ENOTCONN;
1568 			goto out;
1569 		}
1570 
1571 		/* Shove it onto the queue and kick */
1572 		ax25_output(ax25, ax25->paclen, skb);
1573 
1574 		err = len;
1575 		goto out;
1576 	}
1577 
1578 	skb_push(skb, 1 + ax25_addr_size(dp));
1579 
1580 	/* Building AX.25 Header */
1581 
1582 	/* Build an AX.25 header */
1583 	lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1584 			     dp, AX25_COMMAND, AX25_MODULUS);
1585 
1586 	skb_set_transport_header(skb, lv);
1587 
1588 	*skb_transport_header(skb) = AX25_UI;
1589 
1590 	/* Datagram frames go straight out of the door as UI */
1591 	ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1592 
1593 	err = len;
1594 
1595 out:
1596 	release_sock(sk);
1597 
1598 	return err;
1599 }
1600 
1601 static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
1602 			int flags)
1603 {
1604 	struct sock *sk = sock->sk;
1605 	struct sk_buff *skb;
1606 	int copied;
1607 	int err = 0;
1608 
1609 	lock_sock(sk);
1610 	/*
1611 	 * 	This works for seqpacket too. The receiver has ordered the
1612 	 *	queue for us! We do one quick check first though
1613 	 */
1614 	if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1615 		err =  -ENOTCONN;
1616 		goto out;
1617 	}
1618 
1619 	/* Now we can treat all alike */
1620 	skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1621 				flags & MSG_DONTWAIT, &err);
1622 	if (skb == NULL)
1623 		goto out;
1624 
1625 	if (!ax25_sk(sk)->pidincl)
1626 		skb_pull(skb, 1);		/* Remove PID */
1627 
1628 	skb_reset_transport_header(skb);
1629 	copied = skb->len;
1630 
1631 	if (copied > size) {
1632 		copied = size;
1633 		msg->msg_flags |= MSG_TRUNC;
1634 	}
1635 
1636 	skb_copy_datagram_msg(skb, 0, msg, copied);
1637 
1638 	if (msg->msg_name) {
1639 		ax25_digi digi;
1640 		ax25_address src;
1641 		const unsigned char *mac = skb_mac_header(skb);
1642 		DECLARE_SOCKADDR(struct sockaddr_ax25 *, sax, msg->msg_name);
1643 
1644 		memset(sax, 0, sizeof(struct full_sockaddr_ax25));
1645 		ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1646 				&digi, NULL, NULL);
1647 		sax->sax25_family = AF_AX25;
1648 		/* We set this correctly, even though we may not let the
1649 		   application know the digi calls further down (because it
1650 		   did NOT ask to know them).  This could get political... **/
1651 		sax->sax25_ndigis = digi.ndigi;
1652 		sax->sax25_call   = src;
1653 
1654 		if (sax->sax25_ndigis != 0) {
1655 			int ct;
1656 			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1657 
1658 			for (ct = 0; ct < digi.ndigi; ct++)
1659 				fsa->fsa_digipeater[ct] = digi.calls[ct];
1660 		}
1661 		msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1662 	}
1663 
1664 	skb_free_datagram(sk, skb);
1665 	err = copied;
1666 
1667 out:
1668 	release_sock(sk);
1669 
1670 	return err;
1671 }
1672 
1673 static int ax25_shutdown(struct socket *sk, int how)
1674 {
1675 	/* FIXME - generate DM and RNR states */
1676 	return -EOPNOTSUPP;
1677 }
1678 
1679 static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1680 {
1681 	struct sock *sk = sock->sk;
1682 	void __user *argp = (void __user *)arg;
1683 	int res = 0;
1684 
1685 	lock_sock(sk);
1686 	switch (cmd) {
1687 	case TIOCOUTQ: {
1688 		long amount;
1689 
1690 		amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1691 		if (amount < 0)
1692 			amount = 0;
1693 		res = put_user(amount, (int __user *)argp);
1694 		break;
1695 	}
1696 
1697 	case TIOCINQ: {
1698 		struct sk_buff *skb;
1699 		long amount = 0L;
1700 		/* These two are safe on a single CPU system as only user tasks fiddle here */
1701 		if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1702 			amount = skb->len;
1703 		res = put_user(amount, (int __user *) argp);
1704 		break;
1705 	}
1706 
1707 	case SIOCGSTAMP:
1708 		res = sock_get_timestamp(sk, argp);
1709 		break;
1710 
1711 	case SIOCGSTAMPNS:
1712 		res = sock_get_timestampns(sk, argp);
1713 		break;
1714 
1715 	case SIOCAX25ADDUID:	/* Add a uid to the uid/call map table */
1716 	case SIOCAX25DELUID:	/* Delete a uid from the uid/call map table */
1717 	case SIOCAX25GETUID: {
1718 		struct sockaddr_ax25 sax25;
1719 		if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1720 			res = -EFAULT;
1721 			break;
1722 		}
1723 		res = ax25_uid_ioctl(cmd, &sax25);
1724 		break;
1725 	}
1726 
1727 	case SIOCAX25NOUID: {	/* Set the default policy (default/bar) */
1728 		long amount;
1729 		if (!capable(CAP_NET_ADMIN)) {
1730 			res = -EPERM;
1731 			break;
1732 		}
1733 		if (get_user(amount, (long __user *)argp)) {
1734 			res = -EFAULT;
1735 			break;
1736 		}
1737 		if (amount < 0 || amount > AX25_NOUID_BLOCK) {
1738 			res = -EINVAL;
1739 			break;
1740 		}
1741 		ax25_uid_policy = amount;
1742 		res = 0;
1743 		break;
1744 	}
1745 
1746 	case SIOCADDRT:
1747 	case SIOCDELRT:
1748 	case SIOCAX25OPTRT:
1749 		if (!capable(CAP_NET_ADMIN)) {
1750 			res = -EPERM;
1751 			break;
1752 		}
1753 		res = ax25_rt_ioctl(cmd, argp);
1754 		break;
1755 
1756 	case SIOCAX25CTLCON:
1757 		if (!capable(CAP_NET_ADMIN)) {
1758 			res = -EPERM;
1759 			break;
1760 		}
1761 		res = ax25_ctl_ioctl(cmd, argp);
1762 		break;
1763 
1764 	case SIOCAX25GETINFO:
1765 	case SIOCAX25GETINFOOLD: {
1766 		ax25_cb *ax25 = ax25_sk(sk);
1767 		struct ax25_info_struct ax25_info;
1768 
1769 		ax25_info.t1        = ax25->t1   / HZ;
1770 		ax25_info.t2        = ax25->t2   / HZ;
1771 		ax25_info.t3        = ax25->t3   / HZ;
1772 		ax25_info.idle      = ax25->idle / (60 * HZ);
1773 		ax25_info.n2        = ax25->n2;
1774 		ax25_info.t1timer   = ax25_display_timer(&ax25->t1timer)   / HZ;
1775 		ax25_info.t2timer   = ax25_display_timer(&ax25->t2timer)   / HZ;
1776 		ax25_info.t3timer   = ax25_display_timer(&ax25->t3timer)   / HZ;
1777 		ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1778 		ax25_info.n2count   = ax25->n2count;
1779 		ax25_info.state     = ax25->state;
1780 		ax25_info.rcv_q     = sk_rmem_alloc_get(sk);
1781 		ax25_info.snd_q     = sk_wmem_alloc_get(sk);
1782 		ax25_info.vs        = ax25->vs;
1783 		ax25_info.vr        = ax25->vr;
1784 		ax25_info.va        = ax25->va;
1785 		ax25_info.vs_max    = ax25->vs; /* reserved */
1786 		ax25_info.paclen    = ax25->paclen;
1787 		ax25_info.window    = ax25->window;
1788 
1789 		/* old structure? */
1790 		if (cmd == SIOCAX25GETINFOOLD) {
1791 			static int warned = 0;
1792 			if (!warned) {
1793 				printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1794 					current->comm);
1795 				warned=1;
1796 			}
1797 
1798 			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1799 				res = -EFAULT;
1800 				break;
1801 			}
1802 		} else {
1803 			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1804 				res = -EINVAL;
1805 				break;
1806 			}
1807 		}
1808 		res = 0;
1809 		break;
1810 	}
1811 
1812 	case SIOCAX25ADDFWD:
1813 	case SIOCAX25DELFWD: {
1814 		struct ax25_fwd_struct ax25_fwd;
1815 		if (!capable(CAP_NET_ADMIN)) {
1816 			res = -EPERM;
1817 			break;
1818 		}
1819 		if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1820 			res = -EFAULT;
1821 			break;
1822 		}
1823 		res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1824 		break;
1825 	}
1826 
1827 	case SIOCGIFADDR:
1828 	case SIOCSIFADDR:
1829 	case SIOCGIFDSTADDR:
1830 	case SIOCSIFDSTADDR:
1831 	case SIOCGIFBRDADDR:
1832 	case SIOCSIFBRDADDR:
1833 	case SIOCGIFNETMASK:
1834 	case SIOCSIFNETMASK:
1835 	case SIOCGIFMETRIC:
1836 	case SIOCSIFMETRIC:
1837 		res = -EINVAL;
1838 		break;
1839 
1840 	default:
1841 		res = -ENOIOCTLCMD;
1842 		break;
1843 	}
1844 	release_sock(sk);
1845 
1846 	return res;
1847 }
1848 
1849 #ifdef CONFIG_PROC_FS
1850 
1851 static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1852 	__acquires(ax25_list_lock)
1853 {
1854 	spin_lock_bh(&ax25_list_lock);
1855 	return seq_hlist_start(&ax25_list, *pos);
1856 }
1857 
1858 static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1859 {
1860 	return seq_hlist_next(v, &ax25_list, pos);
1861 }
1862 
1863 static void ax25_info_stop(struct seq_file *seq, void *v)
1864 	__releases(ax25_list_lock)
1865 {
1866 	spin_unlock_bh(&ax25_list_lock);
1867 }
1868 
1869 static int ax25_info_show(struct seq_file *seq, void *v)
1870 {
1871 	ax25_cb *ax25 = hlist_entry(v, struct ax25_cb, ax25_node);
1872 	char buf[11];
1873 	int k;
1874 
1875 
1876 	/*
1877 	 * New format:
1878 	 * 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
1879 	 */
1880 
1881 	seq_printf(seq, "%8.8lx %s %s%s ",
1882 		   (long) ax25,
1883 		   ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1884 		   ax2asc(buf, &ax25->source_addr),
1885 		   ax25->iamdigi? "*":"");
1886 	seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1887 
1888 	for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1889 		seq_printf(seq, ",%s%s",
1890 			   ax2asc(buf, &ax25->digipeat->calls[k]),
1891 			   ax25->digipeat->repeated[k]? "*":"");
1892 	}
1893 
1894 	seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
1895 		   ax25->state,
1896 		   ax25->vs, ax25->vr, ax25->va,
1897 		   ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1898 		   ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1899 		   ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1900 		   ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1901 		   ax25->idle / (60 * HZ),
1902 		   ax25->n2count, ax25->n2,
1903 		   ax25->rtt / HZ,
1904 		   ax25->window,
1905 		   ax25->paclen);
1906 
1907 	if (ax25->sk != NULL) {
1908 		seq_printf(seq, " %d %d %lu\n",
1909 			   sk_wmem_alloc_get(ax25->sk),
1910 			   sk_rmem_alloc_get(ax25->sk),
1911 			   sock_i_ino(ax25->sk));
1912 	} else {
1913 		seq_puts(seq, " * * *\n");
1914 	}
1915 	return 0;
1916 }
1917 
1918 static const struct seq_operations ax25_info_seqops = {
1919 	.start = ax25_info_start,
1920 	.next = ax25_info_next,
1921 	.stop = ax25_info_stop,
1922 	.show = ax25_info_show,
1923 };
1924 
1925 static int ax25_info_open(struct inode *inode, struct file *file)
1926 {
1927 	return seq_open(file, &ax25_info_seqops);
1928 }
1929 
1930 static const struct file_operations ax25_info_fops = {
1931 	.owner = THIS_MODULE,
1932 	.open = ax25_info_open,
1933 	.read = seq_read,
1934 	.llseek = seq_lseek,
1935 	.release = seq_release,
1936 };
1937 
1938 #endif
1939 
1940 static const struct net_proto_family ax25_family_ops = {
1941 	.family =	PF_AX25,
1942 	.create =	ax25_create,
1943 	.owner	=	THIS_MODULE,
1944 };
1945 
1946 static const struct proto_ops ax25_proto_ops = {
1947 	.family		= PF_AX25,
1948 	.owner		= THIS_MODULE,
1949 	.release	= ax25_release,
1950 	.bind		= ax25_bind,
1951 	.connect	= ax25_connect,
1952 	.socketpair	= sock_no_socketpair,
1953 	.accept		= ax25_accept,
1954 	.getname	= ax25_getname,
1955 	.poll		= datagram_poll,
1956 	.ioctl		= ax25_ioctl,
1957 	.listen		= ax25_listen,
1958 	.shutdown	= ax25_shutdown,
1959 	.setsockopt	= ax25_setsockopt,
1960 	.getsockopt	= ax25_getsockopt,
1961 	.sendmsg	= ax25_sendmsg,
1962 	.recvmsg	= ax25_recvmsg,
1963 	.mmap		= sock_no_mmap,
1964 	.sendpage	= sock_no_sendpage,
1965 };
1966 
1967 /*
1968  *	Called by socket.c on kernel start up
1969  */
1970 static struct packet_type ax25_packet_type __read_mostly = {
1971 	.type	=	cpu_to_be16(ETH_P_AX25),
1972 	.func	=	ax25_kiss_rcv,
1973 };
1974 
1975 static struct notifier_block ax25_dev_notifier = {
1976 	.notifier_call = ax25_device_event,
1977 };
1978 
1979 static int __init ax25_init(void)
1980 {
1981 	int rc = proto_register(&ax25_proto, 0);
1982 
1983 	if (rc != 0)
1984 		goto out;
1985 
1986 	sock_register(&ax25_family_ops);
1987 	dev_add_pack(&ax25_packet_type);
1988 	register_netdevice_notifier(&ax25_dev_notifier);
1989 
1990 	proc_create("ax25_route", S_IRUGO, init_net.proc_net,
1991 		    &ax25_route_fops);
1992 	proc_create("ax25", S_IRUGO, init_net.proc_net, &ax25_info_fops);
1993 	proc_create("ax25_calls", S_IRUGO, init_net.proc_net, &ax25_uid_fops);
1994 out:
1995 	return rc;
1996 }
1997 module_init(ax25_init);
1998 
1999 
2000 MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
2001 MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
2002 MODULE_LICENSE("GPL");
2003 MODULE_ALIAS_NETPROTO(PF_AX25);
2004 
2005 static void __exit ax25_exit(void)
2006 {
2007 	remove_proc_entry("ax25_route", init_net.proc_net);
2008 	remove_proc_entry("ax25", init_net.proc_net);
2009 	remove_proc_entry("ax25_calls", init_net.proc_net);
2010 
2011 	unregister_netdevice_notifier(&ax25_dev_notifier);
2012 
2013 	dev_remove_pack(&ax25_packet_type);
2014 
2015 	sock_unregister(PF_AX25);
2016 	proto_unregister(&ax25_proto);
2017 
2018 	ax25_rt_free();
2019 	ax25_uid_free();
2020 	ax25_dev_free();
2021 }
2022 module_exit(ax25_exit);
2023