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