xref: /openbmc/linux/net/ax25/af_ax25.c (revision 726bd223)
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/signal.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 <linux/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 (protocol < 0 || protocol > SK_PROTOCOL_MAX)
809 		return -EINVAL;
810 
811 	if (!net_eq(net, &init_net))
812 		return -EAFNOSUPPORT;
813 
814 	switch (sock->type) {
815 	case SOCK_DGRAM:
816 		if (protocol == 0 || protocol == PF_AX25)
817 			protocol = AX25_P_TEXT;
818 		break;
819 
820 	case SOCK_SEQPACKET:
821 		switch (protocol) {
822 		case 0:
823 		case PF_AX25:	/* For CLX */
824 			protocol = AX25_P_TEXT;
825 			break;
826 		case AX25_P_SEGMENT:
827 #ifdef CONFIG_INET
828 		case AX25_P_ARP:
829 		case AX25_P_IP:
830 #endif
831 #ifdef CONFIG_NETROM
832 		case AX25_P_NETROM:
833 #endif
834 #ifdef CONFIG_ROSE
835 		case AX25_P_ROSE:
836 #endif
837 			return -ESOCKTNOSUPPORT;
838 #ifdef CONFIG_NETROM_MODULE
839 		case AX25_P_NETROM:
840 			if (ax25_protocol_is_registered(AX25_P_NETROM))
841 				return -ESOCKTNOSUPPORT;
842 			break;
843 #endif
844 #ifdef CONFIG_ROSE_MODULE
845 		case AX25_P_ROSE:
846 			if (ax25_protocol_is_registered(AX25_P_ROSE))
847 				return -ESOCKTNOSUPPORT;
848 #endif
849 		default:
850 			break;
851 		}
852 		break;
853 
854 	case SOCK_RAW:
855 		break;
856 	default:
857 		return -ESOCKTNOSUPPORT;
858 	}
859 
860 	sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto, kern);
861 	if (sk == NULL)
862 		return -ENOMEM;
863 
864 	ax25 = ax25_sk(sk)->cb = ax25_create_cb();
865 	if (!ax25) {
866 		sk_free(sk);
867 		return -ENOMEM;
868 	}
869 
870 	sock_init_data(sock, sk);
871 
872 	sk->sk_destruct = ax25_free_sock;
873 	sock->ops    = &ax25_proto_ops;
874 	sk->sk_protocol = protocol;
875 
876 	ax25->sk    = sk;
877 
878 	return 0;
879 }
880 
881 struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
882 {
883 	struct sock *sk;
884 	ax25_cb *ax25, *oax25;
885 
886 	sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC, osk->sk_prot, 0);
887 	if (sk == NULL)
888 		return NULL;
889 
890 	if ((ax25 = ax25_create_cb()) == NULL) {
891 		sk_free(sk);
892 		return NULL;
893 	}
894 
895 	switch (osk->sk_type) {
896 	case SOCK_DGRAM:
897 		break;
898 	case SOCK_SEQPACKET:
899 		break;
900 	default:
901 		sk_free(sk);
902 		ax25_cb_put(ax25);
903 		return NULL;
904 	}
905 
906 	sock_init_data(NULL, sk);
907 
908 	sk->sk_type     = osk->sk_type;
909 	sk->sk_priority = osk->sk_priority;
910 	sk->sk_protocol = osk->sk_protocol;
911 	sk->sk_rcvbuf   = osk->sk_rcvbuf;
912 	sk->sk_sndbuf   = osk->sk_sndbuf;
913 	sk->sk_state    = TCP_ESTABLISHED;
914 	sock_copy_flags(sk, osk);
915 
916 	oax25 = sk_to_ax25(osk);
917 
918 	ax25->modulus = oax25->modulus;
919 	ax25->backoff = oax25->backoff;
920 	ax25->pidincl = oax25->pidincl;
921 	ax25->iamdigi = oax25->iamdigi;
922 	ax25->rtt     = oax25->rtt;
923 	ax25->t1      = oax25->t1;
924 	ax25->t2      = oax25->t2;
925 	ax25->t3      = oax25->t3;
926 	ax25->n2      = oax25->n2;
927 	ax25->idle    = oax25->idle;
928 	ax25->paclen  = oax25->paclen;
929 	ax25->window  = oax25->window;
930 
931 	ax25->ax25_dev    = ax25_dev;
932 	ax25->source_addr = oax25->source_addr;
933 
934 	if (oax25->digipeat != NULL) {
935 		ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi),
936 					 GFP_ATOMIC);
937 		if (ax25->digipeat == NULL) {
938 			sk_free(sk);
939 			ax25_cb_put(ax25);
940 			return NULL;
941 		}
942 	}
943 
944 	ax25_sk(sk)->cb = ax25;
945 	sk->sk_destruct = ax25_free_sock;
946 	ax25->sk    = sk;
947 
948 	return sk;
949 }
950 
951 static int ax25_release(struct socket *sock)
952 {
953 	struct sock *sk = sock->sk;
954 	ax25_cb *ax25;
955 
956 	if (sk == NULL)
957 		return 0;
958 
959 	sock_hold(sk);
960 	sock_orphan(sk);
961 	lock_sock(sk);
962 	ax25 = sk_to_ax25(sk);
963 
964 	if (sk->sk_type == SOCK_SEQPACKET) {
965 		switch (ax25->state) {
966 		case AX25_STATE_0:
967 			release_sock(sk);
968 			ax25_disconnect(ax25, 0);
969 			lock_sock(sk);
970 			ax25_destroy_socket(ax25);
971 			break;
972 
973 		case AX25_STATE_1:
974 		case AX25_STATE_2:
975 			ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
976 			release_sock(sk);
977 			ax25_disconnect(ax25, 0);
978 			lock_sock(sk);
979 			if (!sock_flag(ax25->sk, SOCK_DESTROY))
980 				ax25_destroy_socket(ax25);
981 			break;
982 
983 		case AX25_STATE_3:
984 		case AX25_STATE_4:
985 			ax25_clear_queues(ax25);
986 			ax25->n2count = 0;
987 
988 			switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
989 			case AX25_PROTO_STD_SIMPLEX:
990 			case AX25_PROTO_STD_DUPLEX:
991 				ax25_send_control(ax25,
992 						  AX25_DISC,
993 						  AX25_POLLON,
994 						  AX25_COMMAND);
995 				ax25_stop_t2timer(ax25);
996 				ax25_stop_t3timer(ax25);
997 				ax25_stop_idletimer(ax25);
998 				break;
999 #ifdef CONFIG_AX25_DAMA_SLAVE
1000 			case AX25_PROTO_DAMA_SLAVE:
1001 				ax25_stop_t3timer(ax25);
1002 				ax25_stop_idletimer(ax25);
1003 				break;
1004 #endif
1005 			}
1006 			ax25_calculate_t1(ax25);
1007 			ax25_start_t1timer(ax25);
1008 			ax25->state = AX25_STATE_2;
1009 			sk->sk_state                = TCP_CLOSE;
1010 			sk->sk_shutdown            |= SEND_SHUTDOWN;
1011 			sk->sk_state_change(sk);
1012 			sock_set_flag(sk, SOCK_DESTROY);
1013 			break;
1014 
1015 		default:
1016 			break;
1017 		}
1018 	} else {
1019 		sk->sk_state     = TCP_CLOSE;
1020 		sk->sk_shutdown |= SEND_SHUTDOWN;
1021 		sk->sk_state_change(sk);
1022 		ax25_destroy_socket(ax25);
1023 	}
1024 
1025 	sock->sk   = NULL;
1026 	release_sock(sk);
1027 	sock_put(sk);
1028 
1029 	return 0;
1030 }
1031 
1032 /*
1033  *	We support a funny extension here so you can (as root) give any callsign
1034  *	digipeated via a local address as source. This hack is obsolete now
1035  *	that we've implemented support for SO_BINDTODEVICE. It is however small
1036  *	and trivially backward compatible.
1037  */
1038 static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1039 {
1040 	struct sock *sk = sock->sk;
1041 	struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
1042 	ax25_dev *ax25_dev = NULL;
1043 	ax25_uid_assoc *user;
1044 	ax25_address call;
1045 	ax25_cb *ax25;
1046 	int err = 0;
1047 
1048 	if (addr_len != sizeof(struct sockaddr_ax25) &&
1049 	    addr_len != sizeof(struct full_sockaddr_ax25))
1050 		/* support for old structure may go away some time
1051 		 * ax25_bind(): uses old (6 digipeater) socket structure.
1052 		 */
1053 		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1054 		    (addr_len > sizeof(struct full_sockaddr_ax25)))
1055 			return -EINVAL;
1056 
1057 	if (addr->fsa_ax25.sax25_family != AF_AX25)
1058 		return -EINVAL;
1059 
1060 	user = ax25_findbyuid(current_euid());
1061 	if (user) {
1062 		call = user->call;
1063 		ax25_uid_put(user);
1064 	} else {
1065 		if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
1066 			return -EACCES;
1067 
1068 		call = addr->fsa_ax25.sax25_call;
1069 	}
1070 
1071 	lock_sock(sk);
1072 
1073 	ax25 = sk_to_ax25(sk);
1074 	if (!sock_flag(sk, SOCK_ZAPPED)) {
1075 		err = -EINVAL;
1076 		goto out;
1077 	}
1078 
1079 	ax25->source_addr = call;
1080 
1081 	/*
1082 	 * User already set interface with SO_BINDTODEVICE
1083 	 */
1084 	if (ax25->ax25_dev != NULL)
1085 		goto done;
1086 
1087 	if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {
1088 		if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&
1089 		    (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {
1090 			err = -EADDRNOTAVAIL;
1091 			goto out;
1092 		}
1093 	} else {
1094 		if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1095 			err = -EADDRNOTAVAIL;
1096 			goto out;
1097 		}
1098 	}
1099 
1100 	if (ax25_dev != NULL)
1101 		ax25_fillin_cb(ax25, ax25_dev);
1102 
1103 done:
1104 	ax25_cb_add(ax25);
1105 	sock_reset_flag(sk, SOCK_ZAPPED);
1106 
1107 out:
1108 	release_sock(sk);
1109 
1110 	return err;
1111 }
1112 
1113 /*
1114  *	FIXME: nonblock behaviour looks like it may have a bug.
1115  */
1116 static int __must_check ax25_connect(struct socket *sock,
1117 	struct sockaddr *uaddr, int addr_len, int flags)
1118 {
1119 	struct sock *sk = sock->sk;
1120 	ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;
1121 	struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1122 	ax25_digi *digi = NULL;
1123 	int ct = 0, err = 0;
1124 
1125 	/*
1126 	 * some sanity checks. code further down depends on this
1127 	 */
1128 
1129 	if (addr_len == sizeof(struct sockaddr_ax25))
1130 		/* support for this will go away in early 2.5.x
1131 		 * ax25_connect(): uses obsolete socket structure
1132 		 */
1133 		;
1134 	else if (addr_len != sizeof(struct full_sockaddr_ax25))
1135 		/* support for old structure may go away some time
1136 		 * ax25_connect(): uses old (6 digipeater) socket structure.
1137 		 */
1138 		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1139 		    (addr_len > sizeof(struct full_sockaddr_ax25)))
1140 			return -EINVAL;
1141 
1142 
1143 	if (fsa->fsa_ax25.sax25_family != AF_AX25)
1144 		return -EINVAL;
1145 
1146 	lock_sock(sk);
1147 
1148 	/* deal with restarts */
1149 	if (sock->state == SS_CONNECTING) {
1150 		switch (sk->sk_state) {
1151 		case TCP_SYN_SENT: /* still trying */
1152 			err = -EINPROGRESS;
1153 			goto out_release;
1154 
1155 		case TCP_ESTABLISHED: /* connection established */
1156 			sock->state = SS_CONNECTED;
1157 			goto out_release;
1158 
1159 		case TCP_CLOSE: /* connection refused */
1160 			sock->state = SS_UNCONNECTED;
1161 			err = -ECONNREFUSED;
1162 			goto out_release;
1163 		}
1164 	}
1165 
1166 	if (sk->sk_state == TCP_ESTABLISHED && sk->sk_type == SOCK_SEQPACKET) {
1167 		err = -EISCONN;	/* No reconnect on a seqpacket socket */
1168 		goto out_release;
1169 	}
1170 
1171 	sk->sk_state   = TCP_CLOSE;
1172 	sock->state = SS_UNCONNECTED;
1173 
1174 	kfree(ax25->digipeat);
1175 	ax25->digipeat = NULL;
1176 
1177 	/*
1178 	 *	Handle digi-peaters to be used.
1179 	 */
1180 	if (addr_len > sizeof(struct sockaddr_ax25) &&
1181 	    fsa->fsa_ax25.sax25_ndigis != 0) {
1182 		/* Valid number of digipeaters ? */
1183 		if (fsa->fsa_ax25.sax25_ndigis < 1 || fsa->fsa_ax25.sax25_ndigis > AX25_MAX_DIGIS) {
1184 			err = -EINVAL;
1185 			goto out_release;
1186 		}
1187 
1188 		if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1189 			err = -ENOBUFS;
1190 			goto out_release;
1191 		}
1192 
1193 		digi->ndigi      = fsa->fsa_ax25.sax25_ndigis;
1194 		digi->lastrepeat = -1;
1195 
1196 		while (ct < fsa->fsa_ax25.sax25_ndigis) {
1197 			if ((fsa->fsa_digipeater[ct].ax25_call[6] &
1198 			     AX25_HBIT) && ax25->iamdigi) {
1199 				digi->repeated[ct] = 1;
1200 				digi->lastrepeat   = ct;
1201 			} else {
1202 				digi->repeated[ct] = 0;
1203 			}
1204 			digi->calls[ct] = fsa->fsa_digipeater[ct];
1205 			ct++;
1206 		}
1207 	}
1208 
1209 	/*
1210 	 *	Must bind first - autobinding in this may or may not work. If
1211 	 *	the socket is already bound, check to see if the device has
1212 	 *	been filled in, error if it hasn't.
1213 	 */
1214 	if (sock_flag(sk, SOCK_ZAPPED)) {
1215 		/* check if we can remove this feature. It is broken. */
1216 		printk(KERN_WARNING "ax25_connect(): %s uses autobind, please contact jreuter@yaina.de\n",
1217 			current->comm);
1218 		if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1219 			kfree(digi);
1220 			goto out_release;
1221 		}
1222 
1223 		ax25_fillin_cb(ax25, ax25->ax25_dev);
1224 		ax25_cb_add(ax25);
1225 	} else {
1226 		if (ax25->ax25_dev == NULL) {
1227 			kfree(digi);
1228 			err = -EHOSTUNREACH;
1229 			goto out_release;
1230 		}
1231 	}
1232 
1233 	if (sk->sk_type == SOCK_SEQPACKET &&
1234 	    (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1235 			 ax25->ax25_dev->dev))) {
1236 		kfree(digi);
1237 		err = -EADDRINUSE;		/* Already such a connection */
1238 		ax25_cb_put(ax25t);
1239 		goto out_release;
1240 	}
1241 
1242 	ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1243 	ax25->digipeat  = digi;
1244 
1245 	/* First the easy one */
1246 	if (sk->sk_type != SOCK_SEQPACKET) {
1247 		sock->state = SS_CONNECTED;
1248 		sk->sk_state   = TCP_ESTABLISHED;
1249 		goto out_release;
1250 	}
1251 
1252 	/* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1253 	sock->state        = SS_CONNECTING;
1254 	sk->sk_state          = TCP_SYN_SENT;
1255 
1256 	switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1257 	case AX25_PROTO_STD_SIMPLEX:
1258 	case AX25_PROTO_STD_DUPLEX:
1259 		ax25_std_establish_data_link(ax25);
1260 		break;
1261 
1262 #ifdef CONFIG_AX25_DAMA_SLAVE
1263 	case AX25_PROTO_DAMA_SLAVE:
1264 		ax25->modulus = AX25_MODULUS;
1265 		ax25->window  = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1266 		if (ax25->ax25_dev->dama.slave)
1267 			ax25_ds_establish_data_link(ax25);
1268 		else
1269 			ax25_std_establish_data_link(ax25);
1270 		break;
1271 #endif
1272 	}
1273 
1274 	ax25->state = AX25_STATE_1;
1275 
1276 	ax25_start_heartbeat(ax25);
1277 
1278 	/* Now the loop */
1279 	if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1280 		err = -EINPROGRESS;
1281 		goto out_release;
1282 	}
1283 
1284 	if (sk->sk_state == TCP_SYN_SENT) {
1285 		DEFINE_WAIT(wait);
1286 
1287 		for (;;) {
1288 			prepare_to_wait(sk_sleep(sk), &wait,
1289 					TASK_INTERRUPTIBLE);
1290 			if (sk->sk_state != TCP_SYN_SENT)
1291 				break;
1292 			if (!signal_pending(current)) {
1293 				release_sock(sk);
1294 				schedule();
1295 				lock_sock(sk);
1296 				continue;
1297 			}
1298 			err = -ERESTARTSYS;
1299 			break;
1300 		}
1301 		finish_wait(sk_sleep(sk), &wait);
1302 
1303 		if (err)
1304 			goto out_release;
1305 	}
1306 
1307 	if (sk->sk_state != TCP_ESTABLISHED) {
1308 		/* Not in ABM, not in WAIT_UA -> failed */
1309 		sock->state = SS_UNCONNECTED;
1310 		err = sock_error(sk);	/* Always set at this point */
1311 		goto out_release;
1312 	}
1313 
1314 	sock->state = SS_CONNECTED;
1315 
1316 	err = 0;
1317 out_release:
1318 	release_sock(sk);
1319 
1320 	return err;
1321 }
1322 
1323 static int ax25_accept(struct socket *sock, struct socket *newsock, int flags,
1324 		       bool kern)
1325 {
1326 	struct sk_buff *skb;
1327 	struct sock *newsk;
1328 	DEFINE_WAIT(wait);
1329 	struct sock *sk;
1330 	int err = 0;
1331 
1332 	if (sock->state != SS_UNCONNECTED)
1333 		return -EINVAL;
1334 
1335 	if ((sk = sock->sk) == NULL)
1336 		return -EINVAL;
1337 
1338 	lock_sock(sk);
1339 	if (sk->sk_type != SOCK_SEQPACKET) {
1340 		err = -EOPNOTSUPP;
1341 		goto out;
1342 	}
1343 
1344 	if (sk->sk_state != TCP_LISTEN) {
1345 		err = -EINVAL;
1346 		goto out;
1347 	}
1348 
1349 	/*
1350 	 *	The read queue this time is holding sockets ready to use
1351 	 *	hooked into the SABM we saved
1352 	 */
1353 	for (;;) {
1354 		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1355 		skb = skb_dequeue(&sk->sk_receive_queue);
1356 		if (skb)
1357 			break;
1358 
1359 		if (flags & O_NONBLOCK) {
1360 			err = -EWOULDBLOCK;
1361 			break;
1362 		}
1363 		if (!signal_pending(current)) {
1364 			release_sock(sk);
1365 			schedule();
1366 			lock_sock(sk);
1367 			continue;
1368 		}
1369 		err = -ERESTARTSYS;
1370 		break;
1371 	}
1372 	finish_wait(sk_sleep(sk), &wait);
1373 
1374 	if (err)
1375 		goto out;
1376 
1377 	newsk		 = skb->sk;
1378 	sock_graft(newsk, newsock);
1379 
1380 	/* Now attach up the new socket */
1381 	kfree_skb(skb);
1382 	sk->sk_ack_backlog--;
1383 	newsock->state = SS_CONNECTED;
1384 
1385 out:
1386 	release_sock(sk);
1387 
1388 	return err;
1389 }
1390 
1391 static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1392 	int *uaddr_len, int peer)
1393 {
1394 	struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1395 	struct sock *sk = sock->sk;
1396 	unsigned char ndigi, i;
1397 	ax25_cb *ax25;
1398 	int err = 0;
1399 
1400 	memset(fsa, 0, sizeof(*fsa));
1401 	lock_sock(sk);
1402 	ax25 = sk_to_ax25(sk);
1403 
1404 	if (peer != 0) {
1405 		if (sk->sk_state != TCP_ESTABLISHED) {
1406 			err = -ENOTCONN;
1407 			goto out;
1408 		}
1409 
1410 		fsa->fsa_ax25.sax25_family = AF_AX25;
1411 		fsa->fsa_ax25.sax25_call   = ax25->dest_addr;
1412 
1413 		if (ax25->digipeat != NULL) {
1414 			ndigi = ax25->digipeat->ndigi;
1415 			fsa->fsa_ax25.sax25_ndigis = ndigi;
1416 			for (i = 0; i < ndigi; i++)
1417 				fsa->fsa_digipeater[i] =
1418 						ax25->digipeat->calls[i];
1419 		}
1420 	} else {
1421 		fsa->fsa_ax25.sax25_family = AF_AX25;
1422 		fsa->fsa_ax25.sax25_call   = ax25->source_addr;
1423 		fsa->fsa_ax25.sax25_ndigis = 1;
1424 		if (ax25->ax25_dev != NULL) {
1425 			memcpy(&fsa->fsa_digipeater[0],
1426 			       ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1427 		} else {
1428 			fsa->fsa_digipeater[0] = null_ax25_address;
1429 		}
1430 	}
1431 	*uaddr_len = sizeof (struct full_sockaddr_ax25);
1432 
1433 out:
1434 	release_sock(sk);
1435 
1436 	return err;
1437 }
1438 
1439 static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
1440 {
1441 	DECLARE_SOCKADDR(struct sockaddr_ax25 *, usax, msg->msg_name);
1442 	struct sock *sk = sock->sk;
1443 	struct sockaddr_ax25 sax;
1444 	struct sk_buff *skb;
1445 	ax25_digi dtmp, *dp;
1446 	ax25_cb *ax25;
1447 	size_t size;
1448 	int lv, err, addr_len = msg->msg_namelen;
1449 
1450 	if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1451 		return -EINVAL;
1452 
1453 	lock_sock(sk);
1454 	ax25 = sk_to_ax25(sk);
1455 
1456 	if (sock_flag(sk, SOCK_ZAPPED)) {
1457 		err = -EADDRNOTAVAIL;
1458 		goto out;
1459 	}
1460 
1461 	if (sk->sk_shutdown & SEND_SHUTDOWN) {
1462 		send_sig(SIGPIPE, current, 0);
1463 		err = -EPIPE;
1464 		goto out;
1465 	}
1466 
1467 	if (ax25->ax25_dev == NULL) {
1468 		err = -ENETUNREACH;
1469 		goto out;
1470 	}
1471 
1472 	if (len > ax25->ax25_dev->dev->mtu) {
1473 		err = -EMSGSIZE;
1474 		goto out;
1475 	}
1476 
1477 	if (usax != NULL) {
1478 		if (usax->sax25_family != AF_AX25) {
1479 			err = -EINVAL;
1480 			goto out;
1481 		}
1482 
1483 		if (addr_len == sizeof(struct sockaddr_ax25))
1484 			/* ax25_sendmsg(): uses obsolete socket structure */
1485 			;
1486 		else if (addr_len != sizeof(struct full_sockaddr_ax25))
1487 			/* support for old structure may go away some time
1488 			 * ax25_sendmsg(): uses old (6 digipeater)
1489 			 * socket structure.
1490 			 */
1491 			if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1492 			    (addr_len > sizeof(struct full_sockaddr_ax25))) {
1493 				err = -EINVAL;
1494 				goto out;
1495 			}
1496 
1497 
1498 		if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1499 			int ct           = 0;
1500 			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1501 
1502 			/* Valid number of digipeaters ? */
1503 			if (usax->sax25_ndigis < 1 || usax->sax25_ndigis > AX25_MAX_DIGIS) {
1504 				err = -EINVAL;
1505 				goto out;
1506 			}
1507 
1508 			dtmp.ndigi      = usax->sax25_ndigis;
1509 
1510 			while (ct < usax->sax25_ndigis) {
1511 				dtmp.repeated[ct] = 0;
1512 				dtmp.calls[ct]    = fsa->fsa_digipeater[ct];
1513 				ct++;
1514 			}
1515 
1516 			dtmp.lastrepeat = 0;
1517 		}
1518 
1519 		sax = *usax;
1520 		if (sk->sk_type == SOCK_SEQPACKET &&
1521 		    ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1522 			err = -EISCONN;
1523 			goto out;
1524 		}
1525 		if (usax->sax25_ndigis == 0)
1526 			dp = NULL;
1527 		else
1528 			dp = &dtmp;
1529 	} else {
1530 		/*
1531 		 *	FIXME: 1003.1g - if the socket is like this because
1532 		 *	it has become closed (not started closed) and is VC
1533 		 *	we ought to SIGPIPE, EPIPE
1534 		 */
1535 		if (sk->sk_state != TCP_ESTABLISHED) {
1536 			err = -ENOTCONN;
1537 			goto out;
1538 		}
1539 		sax.sax25_family = AF_AX25;
1540 		sax.sax25_call   = ax25->dest_addr;
1541 		dp = ax25->digipeat;
1542 	}
1543 
1544 	/* Build a packet */
1545 	/* Assume the worst case */
1546 	size = len + ax25->ax25_dev->dev->hard_header_len;
1547 
1548 	skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1549 	if (skb == NULL)
1550 		goto out;
1551 
1552 	skb_reserve(skb, size - len);
1553 
1554 	/* User data follows immediately after the AX.25 data */
1555 	if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1556 		err = -EFAULT;
1557 		kfree_skb(skb);
1558 		goto out;
1559 	}
1560 
1561 	skb_reset_network_header(skb);
1562 
1563 	/* Add the PID if one is not supplied by the user in the skb */
1564 	if (!ax25->pidincl)
1565 		*skb_push(skb, 1) = sk->sk_protocol;
1566 
1567 	if (sk->sk_type == SOCK_SEQPACKET) {
1568 		/* Connected mode sockets go via the LAPB machine */
1569 		if (sk->sk_state != TCP_ESTABLISHED) {
1570 			kfree_skb(skb);
1571 			err = -ENOTCONN;
1572 			goto out;
1573 		}
1574 
1575 		/* Shove it onto the queue and kick */
1576 		ax25_output(ax25, ax25->paclen, skb);
1577 
1578 		err = len;
1579 		goto out;
1580 	}
1581 
1582 	skb_push(skb, 1 + ax25_addr_size(dp));
1583 
1584 	/* Building AX.25 Header */
1585 
1586 	/* Build an AX.25 header */
1587 	lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1588 			     dp, AX25_COMMAND, AX25_MODULUS);
1589 
1590 	skb_set_transport_header(skb, lv);
1591 
1592 	*skb_transport_header(skb) = AX25_UI;
1593 
1594 	/* Datagram frames go straight out of the door as UI */
1595 	ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1596 
1597 	err = len;
1598 
1599 out:
1600 	release_sock(sk);
1601 
1602 	return err;
1603 }
1604 
1605 static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
1606 			int flags)
1607 {
1608 	struct sock *sk = sock->sk;
1609 	struct sk_buff *skb;
1610 	int copied;
1611 	int err = 0;
1612 
1613 	lock_sock(sk);
1614 	/*
1615 	 * 	This works for seqpacket too. The receiver has ordered the
1616 	 *	queue for us! We do one quick check first though
1617 	 */
1618 	if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1619 		err =  -ENOTCONN;
1620 		goto out;
1621 	}
1622 
1623 	/* Now we can treat all alike */
1624 	skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1625 				flags & MSG_DONTWAIT, &err);
1626 	if (skb == NULL)
1627 		goto out;
1628 
1629 	if (!sk_to_ax25(sk)->pidincl)
1630 		skb_pull(skb, 1);		/* Remove PID */
1631 
1632 	skb_reset_transport_header(skb);
1633 	copied = skb->len;
1634 
1635 	if (copied > size) {
1636 		copied = size;
1637 		msg->msg_flags |= MSG_TRUNC;
1638 	}
1639 
1640 	skb_copy_datagram_msg(skb, 0, msg, copied);
1641 
1642 	if (msg->msg_name) {
1643 		ax25_digi digi;
1644 		ax25_address src;
1645 		const unsigned char *mac = skb_mac_header(skb);
1646 		DECLARE_SOCKADDR(struct sockaddr_ax25 *, sax, msg->msg_name);
1647 
1648 		memset(sax, 0, sizeof(struct full_sockaddr_ax25));
1649 		ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1650 				&digi, NULL, NULL);
1651 		sax->sax25_family = AF_AX25;
1652 		/* We set this correctly, even though we may not let the
1653 		   application know the digi calls further down (because it
1654 		   did NOT ask to know them).  This could get political... **/
1655 		sax->sax25_ndigis = digi.ndigi;
1656 		sax->sax25_call   = src;
1657 
1658 		if (sax->sax25_ndigis != 0) {
1659 			int ct;
1660 			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1661 
1662 			for (ct = 0; ct < digi.ndigi; ct++)
1663 				fsa->fsa_digipeater[ct] = digi.calls[ct];
1664 		}
1665 		msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1666 	}
1667 
1668 	skb_free_datagram(sk, skb);
1669 	err = copied;
1670 
1671 out:
1672 	release_sock(sk);
1673 
1674 	return err;
1675 }
1676 
1677 static int ax25_shutdown(struct socket *sk, int how)
1678 {
1679 	/* FIXME - generate DM and RNR states */
1680 	return -EOPNOTSUPP;
1681 }
1682 
1683 static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1684 {
1685 	struct sock *sk = sock->sk;
1686 	void __user *argp = (void __user *)arg;
1687 	int res = 0;
1688 
1689 	lock_sock(sk);
1690 	switch (cmd) {
1691 	case TIOCOUTQ: {
1692 		long amount;
1693 
1694 		amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1695 		if (amount < 0)
1696 			amount = 0;
1697 		res = put_user(amount, (int __user *)argp);
1698 		break;
1699 	}
1700 
1701 	case TIOCINQ: {
1702 		struct sk_buff *skb;
1703 		long amount = 0L;
1704 		/* These two are safe on a single CPU system as only user tasks fiddle here */
1705 		if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1706 			amount = skb->len;
1707 		res = put_user(amount, (int __user *) argp);
1708 		break;
1709 	}
1710 
1711 	case SIOCGSTAMP:
1712 		res = sock_get_timestamp(sk, argp);
1713 		break;
1714 
1715 	case SIOCGSTAMPNS:
1716 		res = sock_get_timestampns(sk, argp);
1717 		break;
1718 
1719 	case SIOCAX25ADDUID:	/* Add a uid to the uid/call map table */
1720 	case SIOCAX25DELUID:	/* Delete a uid from the uid/call map table */
1721 	case SIOCAX25GETUID: {
1722 		struct sockaddr_ax25 sax25;
1723 		if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1724 			res = -EFAULT;
1725 			break;
1726 		}
1727 		res = ax25_uid_ioctl(cmd, &sax25);
1728 		break;
1729 	}
1730 
1731 	case SIOCAX25NOUID: {	/* Set the default policy (default/bar) */
1732 		long amount;
1733 		if (!capable(CAP_NET_ADMIN)) {
1734 			res = -EPERM;
1735 			break;
1736 		}
1737 		if (get_user(amount, (long __user *)argp)) {
1738 			res = -EFAULT;
1739 			break;
1740 		}
1741 		if (amount < 0 || amount > AX25_NOUID_BLOCK) {
1742 			res = -EINVAL;
1743 			break;
1744 		}
1745 		ax25_uid_policy = amount;
1746 		res = 0;
1747 		break;
1748 	}
1749 
1750 	case SIOCADDRT:
1751 	case SIOCDELRT:
1752 	case SIOCAX25OPTRT:
1753 		if (!capable(CAP_NET_ADMIN)) {
1754 			res = -EPERM;
1755 			break;
1756 		}
1757 		res = ax25_rt_ioctl(cmd, argp);
1758 		break;
1759 
1760 	case SIOCAX25CTLCON:
1761 		if (!capable(CAP_NET_ADMIN)) {
1762 			res = -EPERM;
1763 			break;
1764 		}
1765 		res = ax25_ctl_ioctl(cmd, argp);
1766 		break;
1767 
1768 	case SIOCAX25GETINFO:
1769 	case SIOCAX25GETINFOOLD: {
1770 		ax25_cb *ax25 = sk_to_ax25(sk);
1771 		struct ax25_info_struct ax25_info;
1772 
1773 		ax25_info.t1        = ax25->t1   / HZ;
1774 		ax25_info.t2        = ax25->t2   / HZ;
1775 		ax25_info.t3        = ax25->t3   / HZ;
1776 		ax25_info.idle      = ax25->idle / (60 * HZ);
1777 		ax25_info.n2        = ax25->n2;
1778 		ax25_info.t1timer   = ax25_display_timer(&ax25->t1timer)   / HZ;
1779 		ax25_info.t2timer   = ax25_display_timer(&ax25->t2timer)   / HZ;
1780 		ax25_info.t3timer   = ax25_display_timer(&ax25->t3timer)   / HZ;
1781 		ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1782 		ax25_info.n2count   = ax25->n2count;
1783 		ax25_info.state     = ax25->state;
1784 		ax25_info.rcv_q     = sk_rmem_alloc_get(sk);
1785 		ax25_info.snd_q     = sk_wmem_alloc_get(sk);
1786 		ax25_info.vs        = ax25->vs;
1787 		ax25_info.vr        = ax25->vr;
1788 		ax25_info.va        = ax25->va;
1789 		ax25_info.vs_max    = ax25->vs; /* reserved */
1790 		ax25_info.paclen    = ax25->paclen;
1791 		ax25_info.window    = ax25->window;
1792 
1793 		/* old structure? */
1794 		if (cmd == SIOCAX25GETINFOOLD) {
1795 			static int warned = 0;
1796 			if (!warned) {
1797 				printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1798 					current->comm);
1799 				warned=1;
1800 			}
1801 
1802 			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1803 				res = -EFAULT;
1804 				break;
1805 			}
1806 		} else {
1807 			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1808 				res = -EINVAL;
1809 				break;
1810 			}
1811 		}
1812 		res = 0;
1813 		break;
1814 	}
1815 
1816 	case SIOCAX25ADDFWD:
1817 	case SIOCAX25DELFWD: {
1818 		struct ax25_fwd_struct ax25_fwd;
1819 		if (!capable(CAP_NET_ADMIN)) {
1820 			res = -EPERM;
1821 			break;
1822 		}
1823 		if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1824 			res = -EFAULT;
1825 			break;
1826 		}
1827 		res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1828 		break;
1829 	}
1830 
1831 	case SIOCGIFADDR:
1832 	case SIOCSIFADDR:
1833 	case SIOCGIFDSTADDR:
1834 	case SIOCSIFDSTADDR:
1835 	case SIOCGIFBRDADDR:
1836 	case SIOCSIFBRDADDR:
1837 	case SIOCGIFNETMASK:
1838 	case SIOCSIFNETMASK:
1839 	case SIOCGIFMETRIC:
1840 	case SIOCSIFMETRIC:
1841 		res = -EINVAL;
1842 		break;
1843 
1844 	default:
1845 		res = -ENOIOCTLCMD;
1846 		break;
1847 	}
1848 	release_sock(sk);
1849 
1850 	return res;
1851 }
1852 
1853 #ifdef CONFIG_PROC_FS
1854 
1855 static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1856 	__acquires(ax25_list_lock)
1857 {
1858 	spin_lock_bh(&ax25_list_lock);
1859 	return seq_hlist_start(&ax25_list, *pos);
1860 }
1861 
1862 static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1863 {
1864 	return seq_hlist_next(v, &ax25_list, pos);
1865 }
1866 
1867 static void ax25_info_stop(struct seq_file *seq, void *v)
1868 	__releases(ax25_list_lock)
1869 {
1870 	spin_unlock_bh(&ax25_list_lock);
1871 }
1872 
1873 static int ax25_info_show(struct seq_file *seq, void *v)
1874 {
1875 	ax25_cb *ax25 = hlist_entry(v, struct ax25_cb, ax25_node);
1876 	char buf[11];
1877 	int k;
1878 
1879 
1880 	/*
1881 	 * New format:
1882 	 * 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
1883 	 */
1884 
1885 	seq_printf(seq, "%8.8lx %s %s%s ",
1886 		   (long) ax25,
1887 		   ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1888 		   ax2asc(buf, &ax25->source_addr),
1889 		   ax25->iamdigi? "*":"");
1890 	seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1891 
1892 	for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1893 		seq_printf(seq, ",%s%s",
1894 			   ax2asc(buf, &ax25->digipeat->calls[k]),
1895 			   ax25->digipeat->repeated[k]? "*":"");
1896 	}
1897 
1898 	seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
1899 		   ax25->state,
1900 		   ax25->vs, ax25->vr, ax25->va,
1901 		   ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1902 		   ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1903 		   ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1904 		   ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1905 		   ax25->idle / (60 * HZ),
1906 		   ax25->n2count, ax25->n2,
1907 		   ax25->rtt / HZ,
1908 		   ax25->window,
1909 		   ax25->paclen);
1910 
1911 	if (ax25->sk != NULL) {
1912 		seq_printf(seq, " %d %d %lu\n",
1913 			   sk_wmem_alloc_get(ax25->sk),
1914 			   sk_rmem_alloc_get(ax25->sk),
1915 			   sock_i_ino(ax25->sk));
1916 	} else {
1917 		seq_puts(seq, " * * *\n");
1918 	}
1919 	return 0;
1920 }
1921 
1922 static const struct seq_operations ax25_info_seqops = {
1923 	.start = ax25_info_start,
1924 	.next = ax25_info_next,
1925 	.stop = ax25_info_stop,
1926 	.show = ax25_info_show,
1927 };
1928 
1929 static int ax25_info_open(struct inode *inode, struct file *file)
1930 {
1931 	return seq_open(file, &ax25_info_seqops);
1932 }
1933 
1934 static const struct file_operations ax25_info_fops = {
1935 	.owner = THIS_MODULE,
1936 	.open = ax25_info_open,
1937 	.read = seq_read,
1938 	.llseek = seq_lseek,
1939 	.release = seq_release,
1940 };
1941 
1942 #endif
1943 
1944 static const struct net_proto_family ax25_family_ops = {
1945 	.family =	PF_AX25,
1946 	.create =	ax25_create,
1947 	.owner	=	THIS_MODULE,
1948 };
1949 
1950 static const struct proto_ops ax25_proto_ops = {
1951 	.family		= PF_AX25,
1952 	.owner		= THIS_MODULE,
1953 	.release	= ax25_release,
1954 	.bind		= ax25_bind,
1955 	.connect	= ax25_connect,
1956 	.socketpair	= sock_no_socketpair,
1957 	.accept		= ax25_accept,
1958 	.getname	= ax25_getname,
1959 	.poll		= datagram_poll,
1960 	.ioctl		= ax25_ioctl,
1961 	.listen		= ax25_listen,
1962 	.shutdown	= ax25_shutdown,
1963 	.setsockopt	= ax25_setsockopt,
1964 	.getsockopt	= ax25_getsockopt,
1965 	.sendmsg	= ax25_sendmsg,
1966 	.recvmsg	= ax25_recvmsg,
1967 	.mmap		= sock_no_mmap,
1968 	.sendpage	= sock_no_sendpage,
1969 };
1970 
1971 /*
1972  *	Called by socket.c on kernel start up
1973  */
1974 static struct packet_type ax25_packet_type __read_mostly = {
1975 	.type	=	cpu_to_be16(ETH_P_AX25),
1976 	.func	=	ax25_kiss_rcv,
1977 };
1978 
1979 static struct notifier_block ax25_dev_notifier = {
1980 	.notifier_call = ax25_device_event,
1981 };
1982 
1983 static int __init ax25_init(void)
1984 {
1985 	int rc = proto_register(&ax25_proto, 0);
1986 
1987 	if (rc != 0)
1988 		goto out;
1989 
1990 	sock_register(&ax25_family_ops);
1991 	dev_add_pack(&ax25_packet_type);
1992 	register_netdevice_notifier(&ax25_dev_notifier);
1993 
1994 	proc_create("ax25_route", S_IRUGO, init_net.proc_net,
1995 		    &ax25_route_fops);
1996 	proc_create("ax25", S_IRUGO, init_net.proc_net, &ax25_info_fops);
1997 	proc_create("ax25_calls", S_IRUGO, init_net.proc_net, &ax25_uid_fops);
1998 out:
1999 	return rc;
2000 }
2001 module_init(ax25_init);
2002 
2003 
2004 MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
2005 MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
2006 MODULE_LICENSE("GPL");
2007 MODULE_ALIAS_NETPROTO(PF_AX25);
2008 
2009 static void __exit ax25_exit(void)
2010 {
2011 	remove_proc_entry("ax25_route", init_net.proc_net);
2012 	remove_proc_entry("ax25", init_net.proc_net);
2013 	remove_proc_entry("ax25_calls", init_net.proc_net);
2014 
2015 	unregister_netdevice_notifier(&ax25_dev_notifier);
2016 
2017 	dev_remove_pack(&ax25_packet_type);
2018 
2019 	sock_unregister(PF_AX25);
2020 	proto_unregister(&ax25_proto);
2021 
2022 	ax25_rt_free();
2023 	ax25_uid_free();
2024 	ax25_dev_free();
2025 }
2026 module_exit(ax25_exit);
2027