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