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