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