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