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