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