1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) Alan Cox GW4PTS (alan@lxorguk.ukuu.org.uk)
5 * Copyright (C) Jonathan Naylor G4KLX (g4klx@g4klx.demon.co.uk)
6 * Copyright (C) Darryl Miles G7LED (dlm@g7led.demon.co.uk)
7 * Copyright (C) Steven Whitehouse GW7RRM (stevew@acm.org)
8 * Copyright (C) Joerg Reuter DL1BKE (jreuter@yaina.de)
9 * Copyright (C) Hans-Joachim Hetscher DD8NE (dd8ne@bnv-bamberg.de)
10 * Copyright (C) Hans Alblas PE1AYX (hans@esrac.ele.tue.nl)
11 * Copyright (C) Frederic Rible F1OAT (frible@teaser.fr)
13 #include <linux/capability.h>
14 #include <linux/module.h>
15 #include <linux/errno.h>
16 #include <linux/types.h>
17 #include <linux/socket.h>
19 #include <linux/kernel.h>
20 #include <linux/sched/signal.h>
21 #include <linux/timer.h>
22 #include <linux/string.h>
23 #include <linux/sockios.h>
24 #include <linux/net.h>
25 #include <linux/slab.h>
27 #include <linux/inet.h>
28 #include <linux/netdevice.h>
29 #include <linux/if_arp.h>
30 #include <linux/skbuff.h>
32 #include <linux/uaccess.h>
33 #include <linux/fcntl.h>
34 #include <linux/termios.h> /* For TIOCINQ/OUTQ */
36 #include <linux/interrupt.h>
37 #include <linux/notifier.h>
38 #include <linux/proc_fs.h>
39 #include <linux/stat.h>
40 #include <linux/sysctl.h>
41 #include <linux/init.h>
42 #include <linux/spinlock.h>
43 #include <net/net_namespace.h>
44 #include <net/tcp_states.h>
50 HLIST_HEAD(ax25_list);
51 DEFINE_SPINLOCK(ax25_list_lock);
53 static const struct proto_ops ax25_proto_ops;
55 static void ax25_free_sock(struct sock *sk)
57 ax25_cb_put(sk_to_ax25(sk));
61 * Socket removal during an interrupt is now safe.
63 static void ax25_cb_del(ax25_cb *ax25)
65 if (!hlist_unhashed(&ax25->ax25_node)) {
66 spin_lock_bh(&ax25_list_lock);
67 hlist_del_init(&ax25->ax25_node);
68 spin_unlock_bh(&ax25_list_lock);
74 * Kill all bound sockets on a dropped device.
76 static void ax25_kill_by_device(struct net_device *dev)
82 if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
85 spin_lock_bh(&ax25_list_lock);
87 ax25_for_each(s, &ax25_list) {
88 if (s->ax25_dev == ax25_dev) {
91 spin_unlock_bh(&ax25_list_lock);
94 dev_put_track(ax25_dev->dev, &ax25_dev->dev_tracker);
95 ax25_dev_put(ax25_dev);
96 ax25_disconnect(s, ENETUNREACH);
98 spin_lock_bh(&ax25_list_lock);
100 /* The entry could have been deleted from the
101 * list meanwhile and thus the next pointer is
102 * no longer valid. Play it safe and restart
103 * the scan. Forward progress is ensured
104 * because we set s->ax25_dev to NULL and we
105 * are never passed a NULL 'dev' argument.
110 spin_unlock_bh(&ax25_list_lock);
114 * Handle device status changes.
116 static int ax25_device_event(struct notifier_block *this, unsigned long event,
119 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
121 if (!net_eq(dev_net(dev), &init_net))
124 /* Reject non AX.25 devices */
125 if (dev->type != ARPHRD_AX25)
130 ax25_dev_device_up(dev);
133 ax25_kill_by_device(dev);
134 ax25_rt_device_down(dev);
135 ax25_dev_device_down(dev);
145 * Add a socket to the bound sockets list.
147 void ax25_cb_add(ax25_cb *ax25)
149 spin_lock_bh(&ax25_list_lock);
151 hlist_add_head(&ax25->ax25_node, &ax25_list);
152 spin_unlock_bh(&ax25_list_lock);
156 * Find a socket that wants to accept the SABM we have just
159 struct sock *ax25_find_listener(ax25_address *addr, int digi,
160 struct net_device *dev, int type)
164 spin_lock(&ax25_list_lock);
165 ax25_for_each(s, &ax25_list) {
166 if ((s->iamdigi && !digi) || (!s->iamdigi && digi))
168 if (s->sk && !ax25cmp(&s->source_addr, addr) &&
169 s->sk->sk_type == type && s->sk->sk_state == TCP_LISTEN) {
170 /* If device is null we match any device */
171 if (s->ax25_dev == NULL || s->ax25_dev->dev == dev) {
173 spin_unlock(&ax25_list_lock);
178 spin_unlock(&ax25_list_lock);
184 * Find an AX.25 socket given both ends.
186 struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
189 struct sock *sk = NULL;
192 spin_lock(&ax25_list_lock);
193 ax25_for_each(s, &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) {
203 spin_unlock(&ax25_list_lock);
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.
212 ax25_cb *ax25_find_cb(const ax25_address *src_addr, ax25_address *dest_addr,
213 ax25_digi *digi, struct net_device *dev)
217 spin_lock_bh(&ax25_list_lock);
218 ax25_for_each(s, &ax25_list) {
219 if (s->sk && s->sk->sk_type != SOCK_SEQPACKET)
221 if (s->ax25_dev == NULL)
223 if (ax25cmp(&s->source_addr, src_addr) == 0 && ax25cmp(&s->dest_addr, dest_addr) == 0 && s->ax25_dev->dev == dev) {
224 if (digi != NULL && digi->ndigi != 0) {
225 if (s->digipeat == NULL)
227 if (ax25digicmp(s->digipeat, digi) != 0)
230 if (s->digipeat != NULL && s->digipeat->ndigi != 0)
234 spin_unlock_bh(&ax25_list_lock);
239 spin_unlock_bh(&ax25_list_lock);
244 EXPORT_SYMBOL(ax25_find_cb);
246 void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
249 struct sk_buff *copy;
251 spin_lock(&ax25_list_lock);
252 ax25_for_each(s, &ax25_list) {
253 if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 &&
254 s->sk->sk_type == SOCK_RAW &&
255 s->sk->sk_protocol == proto &&
256 s->ax25_dev->dev == skb->dev &&
257 atomic_read(&s->sk->sk_rmem_alloc) <= s->sk->sk_rcvbuf) {
258 if ((copy = skb_clone(skb, GFP_ATOMIC)) == NULL)
260 if (sock_queue_rcv_skb(s->sk, copy) != 0)
264 spin_unlock(&ax25_list_lock);
270 void ax25_destroy_socket(ax25_cb *);
273 * Handler for deferred kills.
275 static void ax25_destroy_timer(struct timer_list *t)
277 ax25_cb *ax25 = from_timer(ax25, t, dtimer);
284 ax25_destroy_socket(ax25);
290 * This is called from user mode and the timers. Thus it protects itself
291 * against interrupt users but doesn't worry about being called during
292 * work. Once it is removed from the queue no interrupt or bottom half
293 * will touch it and we are (fairly 8-) ) safe.
295 void ax25_destroy_socket(ax25_cb *ax25)
301 ax25_stop_heartbeat(ax25);
302 ax25_stop_t1timer(ax25);
303 ax25_stop_t2timer(ax25);
304 ax25_stop_t3timer(ax25);
305 ax25_stop_idletimer(ax25);
307 ax25_clear_queues(ax25); /* Flush the queues */
309 if (ax25->sk != NULL) {
310 while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
311 if (skb->sk != ax25->sk) {
312 /* A pending connection */
313 ax25_cb *sax25 = sk_to_ax25(skb->sk);
315 /* Queue the unaccepted socket for death */
316 sock_orphan(skb->sk);
318 /* 9A4GL: hack to release unaccepted sockets */
319 skb->sk->sk_state = TCP_LISTEN;
321 ax25_start_heartbeat(sax25);
322 sax25->state = AX25_STATE_0;
327 skb_queue_purge(&ax25->sk->sk_write_queue);
330 if (ax25->sk != NULL) {
331 if (sk_has_allocations(ax25->sk)) {
332 /* Defer: outstanding buffers */
333 timer_setup(&ax25->dtimer, ax25_destroy_timer, 0);
334 ax25->dtimer.expires = jiffies + 2 * HZ;
335 add_timer(&ax25->dtimer);
337 struct sock *sk=ax25->sk;
347 * dl1bke 960311: set parameters for existing AX.25 connections,
348 * includes a KILL command to abort any connection.
349 * VERY useful for debugging ;-)
351 static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
353 struct ax25_ctl_struct ax25_ctl;
360 if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
363 if (ax25_ctl.digi_count > AX25_MAX_DIGIS)
366 if (ax25_ctl.arg > ULONG_MAX / HZ && ax25_ctl.cmd != AX25_KILL)
369 ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr);
373 digi.ndigi = ax25_ctl.digi_count;
374 for (k = 0; k < digi.ndigi; k++)
375 digi.calls[k] = ax25_ctl.digi_addr[k];
377 ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev);
379 ax25_dev_put(ax25_dev);
383 switch (ax25_ctl.cmd) {
385 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
386 #ifdef CONFIG_AX25_DAMA_SLAVE
387 if (ax25_dev->dama.slave && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
390 ax25_disconnect(ax25, ENETRESET);
394 if (ax25->modulus == AX25_MODULUS) {
395 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
398 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
401 ax25->window = ax25_ctl.arg;
405 if (ax25_ctl.arg < 1 || ax25_ctl.arg > ULONG_MAX / HZ)
407 ax25->rtt = (ax25_ctl.arg * HZ) / 2;
408 ax25->t1 = ax25_ctl.arg * HZ;
412 if (ax25_ctl.arg < 1 || ax25_ctl.arg > ULONG_MAX / HZ)
414 ax25->t2 = ax25_ctl.arg * HZ;
418 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
421 ax25->n2 = ax25_ctl.arg;
425 if (ax25_ctl.arg > ULONG_MAX / HZ)
427 ax25->t3 = ax25_ctl.arg * HZ;
431 if (ax25_ctl.arg > ULONG_MAX / (60 * HZ))
434 ax25->idle = ax25_ctl.arg * 60 * HZ;
438 if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
440 ax25->paclen = ax25_ctl.arg;
448 ax25_dev_put(ax25_dev);
457 static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)
459 ax25->rtt = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]) / 2;
460 ax25->t1 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]);
461 ax25->t2 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T2]);
462 ax25->t3 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T3]);
463 ax25->n2 = ax25_dev->values[AX25_VALUES_N2];
464 ax25->paclen = ax25_dev->values[AX25_VALUES_PACLEN];
465 ax25->idle = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_IDLE]);
466 ax25->backoff = ax25_dev->values[AX25_VALUES_BACKOFF];
468 if (ax25_dev->values[AX25_VALUES_AXDEFMODE]) {
469 ax25->modulus = AX25_EMODULUS;
470 ax25->window = ax25_dev->values[AX25_VALUES_EWINDOW];
472 ax25->modulus = AX25_MODULUS;
473 ax25->window = ax25_dev->values[AX25_VALUES_WINDOW];
478 * Fill in a created AX.25 created control block with the default
479 * values for a particular device.
481 void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
483 ax25->ax25_dev = ax25_dev;
485 if (ax25->ax25_dev != NULL) {
486 ax25_fillin_cb_from_dev(ax25, ax25_dev);
491 * No device, use kernel / AX.25 spec default values
493 ax25->rtt = msecs_to_jiffies(AX25_DEF_T1) / 2;
494 ax25->t1 = msecs_to_jiffies(AX25_DEF_T1);
495 ax25->t2 = msecs_to_jiffies(AX25_DEF_T2);
496 ax25->t3 = msecs_to_jiffies(AX25_DEF_T3);
497 ax25->n2 = AX25_DEF_N2;
498 ax25->paclen = AX25_DEF_PACLEN;
499 ax25->idle = msecs_to_jiffies(AX25_DEF_IDLE);
500 ax25->backoff = AX25_DEF_BACKOFF;
502 if (AX25_DEF_AXDEFMODE) {
503 ax25->modulus = AX25_EMODULUS;
504 ax25->window = AX25_DEF_EWINDOW;
506 ax25->modulus = AX25_MODULUS;
507 ax25->window = AX25_DEF_WINDOW;
512 * Create an empty AX.25 control block.
514 ax25_cb *ax25_create_cb(void)
518 if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
521 refcount_set(&ax25->refcount, 1);
523 skb_queue_head_init(&ax25->write_queue);
524 skb_queue_head_init(&ax25->frag_queue);
525 skb_queue_head_init(&ax25->ack_queue);
526 skb_queue_head_init(&ax25->reseq_queue);
528 ax25_setup_timers(ax25);
530 ax25_fillin_cb(ax25, NULL);
532 ax25->state = AX25_STATE_0;
538 * Handling for system calls applied via the various interfaces to an
542 static int ax25_setsockopt(struct socket *sock, int level, int optname,
543 sockptr_t optval, unsigned int optlen)
545 struct sock *sk = sock->sk;
547 struct net_device *dev;
548 char devname[IFNAMSIZ];
552 if (level != SOL_AX25)
555 if (optlen < sizeof(unsigned int))
558 if (copy_from_sockptr(&opt, optval, sizeof(unsigned int)))
562 ax25 = sk_to_ax25(sk);
566 if (ax25->modulus == AX25_MODULUS) {
567 if (opt < 1 || opt > 7) {
572 if (opt < 1 || opt > 63) {
581 if (opt < 1 || opt > UINT_MAX / HZ) {
585 ax25->rtt = (opt * HZ) >> 1;
590 if (opt < 1 || opt > UINT_MAX / HZ) {
598 if (opt < 1 || opt > 31) {
606 if (opt < 1 || opt > UINT_MAX / HZ) {
614 if (opt > UINT_MAX / (60 * HZ)) {
618 ax25->idle = opt * 60 * HZ;
630 ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
634 ax25->pidincl = opt ? 1 : 0;
638 ax25->iamdigi = opt ? 1 : 0;
642 if (opt < 16 || opt > 65535) {
649 case SO_BINDTODEVICE:
650 if (optlen > IFNAMSIZ - 1)
651 optlen = IFNAMSIZ - 1;
653 memset(devname, 0, sizeof(devname));
655 if (copy_from_sockptr(devname, optval, optlen)) {
660 if (sk->sk_type == SOCK_SEQPACKET &&
661 (sock->state != SS_UNCONNECTED ||
662 sk->sk_state == TCP_LISTEN)) {
663 res = -EADDRNOTAVAIL;
668 dev = __dev_get_by_name(&init_net, devname);
675 ax25->ax25_dev = ax25_dev_ax25dev(dev);
676 if (!ax25->ax25_dev) {
681 ax25_fillin_cb(ax25, ax25->ax25_dev);
693 static int ax25_getsockopt(struct socket *sock, int level, int optname,
694 char __user *optval, int __user *optlen)
696 struct sock *sk = sock->sk;
698 struct ax25_dev *ax25_dev;
699 char devname[IFNAMSIZ];
704 if (level != SOL_AX25)
707 if (get_user(maxlen, optlen))
713 valptr = (void *) &val;
714 length = min_t(unsigned int, maxlen, sizeof(int));
717 ax25 = sk_to_ax25(sk);
741 val = ax25->idle / (60 * HZ);
749 val = (ax25->modulus == AX25_EMODULUS);
764 case SO_BINDTODEVICE:
765 ax25_dev = ax25->ax25_dev;
767 if (ax25_dev != NULL && ax25_dev->dev != NULL) {
768 strlcpy(devname, ax25_dev->dev->name, sizeof(devname));
769 length = strlen(devname) + 1;
775 valptr = (void *) devname;
784 if (put_user(length, optlen))
787 return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
790 static int ax25_listen(struct socket *sock, int backlog)
792 struct sock *sk = sock->sk;
796 if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_LISTEN) {
797 sk->sk_max_ack_backlog = backlog;
798 sk->sk_state = TCP_LISTEN;
810 * XXX: when creating ax25_sock we should update the .obj_size setting
813 static struct proto ax25_proto = {
815 .owner = THIS_MODULE,
816 .obj_size = sizeof(struct ax25_sock),
819 static int ax25_create(struct net *net, struct socket *sock, int protocol,
825 if (protocol < 0 || protocol > U8_MAX)
828 if (!net_eq(net, &init_net))
829 return -EAFNOSUPPORT;
831 switch (sock->type) {
833 if (protocol == 0 || protocol == PF_AX25)
834 protocol = AX25_P_TEXT;
840 case PF_AX25: /* For CLX */
841 protocol = AX25_P_TEXT;
854 return -ESOCKTNOSUPPORT;
855 #ifdef CONFIG_NETROM_MODULE
857 if (ax25_protocol_is_registered(AX25_P_NETROM))
858 return -ESOCKTNOSUPPORT;
861 #ifdef CONFIG_ROSE_MODULE
863 if (ax25_protocol_is_registered(AX25_P_ROSE))
864 return -ESOCKTNOSUPPORT;
873 if (!capable(CAP_NET_RAW))
877 return -ESOCKTNOSUPPORT;
880 sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto, kern);
884 ax25 = ax25_sk(sk)->cb = ax25_create_cb();
890 sock_init_data(sock, sk);
892 sk->sk_destruct = ax25_free_sock;
893 sock->ops = &ax25_proto_ops;
894 sk->sk_protocol = protocol;
901 struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
904 ax25_cb *ax25, *oax25;
906 sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC, osk->sk_prot, 0);
910 if ((ax25 = ax25_create_cb()) == NULL) {
915 switch (osk->sk_type) {
926 sock_init_data(NULL, sk);
928 sk->sk_type = osk->sk_type;
929 sk->sk_priority = osk->sk_priority;
930 sk->sk_protocol = osk->sk_protocol;
931 sk->sk_rcvbuf = osk->sk_rcvbuf;
932 sk->sk_sndbuf = osk->sk_sndbuf;
933 sk->sk_state = TCP_ESTABLISHED;
934 sock_copy_flags(sk, osk);
936 oax25 = sk_to_ax25(osk);
938 ax25->modulus = oax25->modulus;
939 ax25->backoff = oax25->backoff;
940 ax25->pidincl = oax25->pidincl;
941 ax25->iamdigi = oax25->iamdigi;
942 ax25->rtt = oax25->rtt;
943 ax25->t1 = oax25->t1;
944 ax25->t2 = oax25->t2;
945 ax25->t3 = oax25->t3;
946 ax25->n2 = oax25->n2;
947 ax25->idle = oax25->idle;
948 ax25->paclen = oax25->paclen;
949 ax25->window = oax25->window;
951 ax25->ax25_dev = ax25_dev;
952 ax25->source_addr = oax25->source_addr;
954 if (oax25->digipeat != NULL) {
955 ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi),
957 if (ax25->digipeat == NULL) {
964 ax25_sk(sk)->cb = ax25;
965 sk->sk_destruct = ax25_free_sock;
971 static int ax25_release(struct socket *sock)
973 struct sock *sk = sock->sk;
982 ax25 = sk_to_ax25(sk);
984 if (sk->sk_type == SOCK_SEQPACKET) {
985 switch (ax25->state) {
988 ax25_disconnect(ax25, 0);
990 ax25_destroy_socket(ax25);
995 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
997 ax25_disconnect(ax25, 0);
999 if (!sock_flag(ax25->sk, SOCK_DESTROY))
1000 ax25_destroy_socket(ax25);
1005 ax25_clear_queues(ax25);
1008 switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1009 case AX25_PROTO_STD_SIMPLEX:
1010 case AX25_PROTO_STD_DUPLEX:
1011 ax25_send_control(ax25,
1015 ax25_stop_t2timer(ax25);
1016 ax25_stop_t3timer(ax25);
1017 ax25_stop_idletimer(ax25);
1019 #ifdef CONFIG_AX25_DAMA_SLAVE
1020 case AX25_PROTO_DAMA_SLAVE:
1021 ax25_stop_t3timer(ax25);
1022 ax25_stop_idletimer(ax25);
1026 ax25_calculate_t1(ax25);
1027 ax25_start_t1timer(ax25);
1028 ax25->state = AX25_STATE_2;
1029 sk->sk_state = TCP_CLOSE;
1030 sk->sk_shutdown |= SEND_SHUTDOWN;
1031 sk->sk_state_change(sk);
1032 sock_set_flag(sk, SOCK_DESTROY);
1039 sk->sk_state = TCP_CLOSE;
1040 sk->sk_shutdown |= SEND_SHUTDOWN;
1041 sk->sk_state_change(sk);
1042 ax25_destroy_socket(ax25);
1053 * We support a funny extension here so you can (as root) give any callsign
1054 * digipeated via a local address as source. This hack is obsolete now
1055 * that we've implemented support for SO_BINDTODEVICE. It is however small
1056 * and trivially backward compatible.
1058 static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1060 struct sock *sk = sock->sk;
1061 struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
1062 ax25_dev *ax25_dev = NULL;
1063 ax25_uid_assoc *user;
1068 if (addr_len != sizeof(struct sockaddr_ax25) &&
1069 addr_len != sizeof(struct full_sockaddr_ax25))
1070 /* support for old structure may go away some time
1071 * ax25_bind(): uses old (6 digipeater) socket structure.
1073 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1074 (addr_len > sizeof(struct full_sockaddr_ax25)))
1077 if (addr->fsa_ax25.sax25_family != AF_AX25)
1080 user = ax25_findbyuid(current_euid());
1085 if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
1088 call = addr->fsa_ax25.sax25_call;
1093 ax25 = sk_to_ax25(sk);
1094 if (!sock_flag(sk, SOCK_ZAPPED)) {
1099 ax25->source_addr = call;
1102 * User already set interface with SO_BINDTODEVICE
1104 if (ax25->ax25_dev != NULL)
1107 if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {
1108 if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&
1109 (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {
1110 err = -EADDRNOTAVAIL;
1114 if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1115 err = -EADDRNOTAVAIL;
1121 ax25_fillin_cb(ax25, ax25_dev);
1122 dev_hold_track(ax25_dev->dev, &ax25_dev->dev_tracker, GFP_ATOMIC);
1127 sock_reset_flag(sk, SOCK_ZAPPED);
1136 * FIXME: nonblock behaviour looks like it may have a bug.
1138 static int __must_check ax25_connect(struct socket *sock,
1139 struct sockaddr *uaddr, int addr_len, int flags)
1141 struct sock *sk = sock->sk;
1142 ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;
1143 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1144 ax25_digi *digi = NULL;
1145 int ct = 0, err = 0;
1148 * some sanity checks. code further down depends on this
1151 if (addr_len == sizeof(struct sockaddr_ax25))
1152 /* support for this will go away in early 2.5.x
1153 * ax25_connect(): uses obsolete socket structure
1156 else if (addr_len != sizeof(struct full_sockaddr_ax25))
1157 /* support for old structure may go away some time
1158 * ax25_connect(): uses old (6 digipeater) socket structure.
1160 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1161 (addr_len > sizeof(struct full_sockaddr_ax25)))
1165 if (fsa->fsa_ax25.sax25_family != AF_AX25)
1170 /* deal with restarts */
1171 if (sock->state == SS_CONNECTING) {
1172 switch (sk->sk_state) {
1173 case TCP_SYN_SENT: /* still trying */
1177 case TCP_ESTABLISHED: /* connection established */
1178 sock->state = SS_CONNECTED;
1181 case TCP_CLOSE: /* connection refused */
1182 sock->state = SS_UNCONNECTED;
1183 err = -ECONNREFUSED;
1188 if (sk->sk_state == TCP_ESTABLISHED && sk->sk_type == SOCK_SEQPACKET) {
1189 err = -EISCONN; /* No reconnect on a seqpacket socket */
1193 sk->sk_state = TCP_CLOSE;
1194 sock->state = SS_UNCONNECTED;
1196 kfree(ax25->digipeat);
1197 ax25->digipeat = NULL;
1200 * Handle digi-peaters to be used.
1202 if (addr_len > sizeof(struct sockaddr_ax25) &&
1203 fsa->fsa_ax25.sax25_ndigis != 0) {
1204 /* Valid number of digipeaters ? */
1205 if (fsa->fsa_ax25.sax25_ndigis < 1 ||
1206 fsa->fsa_ax25.sax25_ndigis > AX25_MAX_DIGIS ||
1207 addr_len < sizeof(struct sockaddr_ax25) +
1208 sizeof(ax25_address) * fsa->fsa_ax25.sax25_ndigis) {
1213 if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1218 digi->ndigi = fsa->fsa_ax25.sax25_ndigis;
1219 digi->lastrepeat = -1;
1221 while (ct < fsa->fsa_ax25.sax25_ndigis) {
1222 if ((fsa->fsa_digipeater[ct].ax25_call[6] &
1223 AX25_HBIT) && ax25->iamdigi) {
1224 digi->repeated[ct] = 1;
1225 digi->lastrepeat = ct;
1227 digi->repeated[ct] = 0;
1229 digi->calls[ct] = fsa->fsa_digipeater[ct];
1235 * Must bind first - autobinding in this may or may not work. If
1236 * the socket is already bound, check to see if the device has
1237 * been filled in, error if it hasn't.
1239 if (sock_flag(sk, SOCK_ZAPPED)) {
1240 /* check if we can remove this feature. It is broken. */
1241 printk(KERN_WARNING "ax25_connect(): %s uses autobind, please contact jreuter@yaina.de\n",
1243 if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1248 ax25_fillin_cb(ax25, ax25->ax25_dev);
1251 if (ax25->ax25_dev == NULL) {
1253 err = -EHOSTUNREACH;
1258 if (sk->sk_type == SOCK_SEQPACKET &&
1259 (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1260 ax25->ax25_dev->dev))) {
1262 err = -EADDRINUSE; /* Already such a connection */
1267 ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1268 ax25->digipeat = digi;
1270 /* First the easy one */
1271 if (sk->sk_type != SOCK_SEQPACKET) {
1272 sock->state = SS_CONNECTED;
1273 sk->sk_state = TCP_ESTABLISHED;
1277 /* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1278 sock->state = SS_CONNECTING;
1279 sk->sk_state = TCP_SYN_SENT;
1281 switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1282 case AX25_PROTO_STD_SIMPLEX:
1283 case AX25_PROTO_STD_DUPLEX:
1284 ax25_std_establish_data_link(ax25);
1287 #ifdef CONFIG_AX25_DAMA_SLAVE
1288 case AX25_PROTO_DAMA_SLAVE:
1289 ax25->modulus = AX25_MODULUS;
1290 ax25->window = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1291 if (ax25->ax25_dev->dama.slave)
1292 ax25_ds_establish_data_link(ax25);
1294 ax25_std_establish_data_link(ax25);
1299 ax25->state = AX25_STATE_1;
1301 ax25_start_heartbeat(ax25);
1304 if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1309 if (sk->sk_state == TCP_SYN_SENT) {
1313 prepare_to_wait(sk_sleep(sk), &wait,
1314 TASK_INTERRUPTIBLE);
1315 if (sk->sk_state != TCP_SYN_SENT)
1317 if (!signal_pending(current)) {
1326 finish_wait(sk_sleep(sk), &wait);
1332 if (sk->sk_state != TCP_ESTABLISHED) {
1333 /* Not in ABM, not in WAIT_UA -> failed */
1334 sock->state = SS_UNCONNECTED;
1335 err = sock_error(sk); /* Always set at this point */
1339 sock->state = SS_CONNECTED;
1348 static int ax25_accept(struct socket *sock, struct socket *newsock, int flags,
1351 struct sk_buff *skb;
1357 if (sock->state != SS_UNCONNECTED)
1360 if ((sk = sock->sk) == NULL)
1364 if (sk->sk_type != SOCK_SEQPACKET) {
1369 if (sk->sk_state != TCP_LISTEN) {
1375 * The read queue this time is holding sockets ready to use
1376 * hooked into the SABM we saved
1379 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1380 skb = skb_dequeue(&sk->sk_receive_queue);
1384 if (flags & O_NONBLOCK) {
1388 if (!signal_pending(current)) {
1397 finish_wait(sk_sleep(sk), &wait);
1403 sock_graft(newsk, newsock);
1405 /* Now attach up the new socket */
1407 sk_acceptq_removed(sk);
1408 newsock->state = SS_CONNECTED;
1416 static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1419 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1420 struct sock *sk = sock->sk;
1421 unsigned char ndigi, i;
1425 memset(fsa, 0, sizeof(*fsa));
1427 ax25 = sk_to_ax25(sk);
1430 if (sk->sk_state != TCP_ESTABLISHED) {
1435 fsa->fsa_ax25.sax25_family = AF_AX25;
1436 fsa->fsa_ax25.sax25_call = ax25->dest_addr;
1438 if (ax25->digipeat != NULL) {
1439 ndigi = ax25->digipeat->ndigi;
1440 fsa->fsa_ax25.sax25_ndigis = ndigi;
1441 for (i = 0; i < ndigi; i++)
1442 fsa->fsa_digipeater[i] =
1443 ax25->digipeat->calls[i];
1446 fsa->fsa_ax25.sax25_family = AF_AX25;
1447 fsa->fsa_ax25.sax25_call = ax25->source_addr;
1448 fsa->fsa_ax25.sax25_ndigis = 1;
1449 if (ax25->ax25_dev != NULL) {
1450 memcpy(&fsa->fsa_digipeater[0],
1451 ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1453 fsa->fsa_digipeater[0] = null_ax25_address;
1456 err = sizeof (struct full_sockaddr_ax25);
1464 static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
1466 DECLARE_SOCKADDR(struct sockaddr_ax25 *, usax, msg->msg_name);
1467 struct sock *sk = sock->sk;
1468 struct sockaddr_ax25 sax;
1469 struct sk_buff *skb;
1470 ax25_digi dtmp, *dp;
1473 int lv, err, addr_len = msg->msg_namelen;
1475 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1479 ax25 = sk_to_ax25(sk);
1481 if (sock_flag(sk, SOCK_ZAPPED)) {
1482 err = -EADDRNOTAVAIL;
1486 if (sk->sk_shutdown & SEND_SHUTDOWN) {
1487 send_sig(SIGPIPE, current, 0);
1492 if (ax25->ax25_dev == NULL) {
1497 if (len > ax25->ax25_dev->dev->mtu) {
1503 if (usax->sax25_family != AF_AX25) {
1508 if (addr_len == sizeof(struct sockaddr_ax25))
1509 /* ax25_sendmsg(): uses obsolete socket structure */
1511 else if (addr_len != sizeof(struct full_sockaddr_ax25))
1512 /* support for old structure may go away some time
1513 * ax25_sendmsg(): uses old (6 digipeater)
1516 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1517 (addr_len > sizeof(struct full_sockaddr_ax25))) {
1523 if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1525 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1527 /* Valid number of digipeaters ? */
1528 if (usax->sax25_ndigis < 1 ||
1529 usax->sax25_ndigis > AX25_MAX_DIGIS ||
1530 addr_len < sizeof(struct sockaddr_ax25) +
1531 sizeof(ax25_address) * usax->sax25_ndigis) {
1536 dtmp.ndigi = usax->sax25_ndigis;
1538 while (ct < usax->sax25_ndigis) {
1539 dtmp.repeated[ct] = 0;
1540 dtmp.calls[ct] = fsa->fsa_digipeater[ct];
1544 dtmp.lastrepeat = 0;
1548 if (sk->sk_type == SOCK_SEQPACKET &&
1549 ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1553 if (usax->sax25_ndigis == 0)
1559 * FIXME: 1003.1g - if the socket is like this because
1560 * it has become closed (not started closed) and is VC
1561 * we ought to SIGPIPE, EPIPE
1563 if (sk->sk_state != TCP_ESTABLISHED) {
1567 sax.sax25_family = AF_AX25;
1568 sax.sax25_call = ax25->dest_addr;
1569 dp = ax25->digipeat;
1572 /* Build a packet */
1573 /* Assume the worst case */
1574 size = len + ax25->ax25_dev->dev->hard_header_len;
1576 skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1580 skb_reserve(skb, size - len);
1582 /* User data follows immediately after the AX.25 data */
1583 if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1589 skb_reset_network_header(skb);
1591 /* Add the PID if one is not supplied by the user in the skb */
1593 *(u8 *)skb_push(skb, 1) = sk->sk_protocol;
1595 if (sk->sk_type == SOCK_SEQPACKET) {
1596 /* Connected mode sockets go via the LAPB machine */
1597 if (sk->sk_state != TCP_ESTABLISHED) {
1603 /* Shove it onto the queue and kick */
1604 ax25_output(ax25, ax25->paclen, skb);
1610 skb_push(skb, 1 + ax25_addr_size(dp));
1612 /* Building AX.25 Header */
1614 /* Build an AX.25 header */
1615 lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1616 dp, AX25_COMMAND, AX25_MODULUS);
1618 skb_set_transport_header(skb, lv);
1620 *skb_transport_header(skb) = AX25_UI;
1622 /* Datagram frames go straight out of the door as UI */
1623 ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1633 static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
1636 struct sock *sk = sock->sk;
1637 struct sk_buff *skb;
1643 * This works for seqpacket too. The receiver has ordered the
1644 * queue for us! We do one quick check first though
1646 if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1651 /* Now we can treat all alike */
1652 skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1653 flags & MSG_DONTWAIT, &err);
1657 if (!sk_to_ax25(sk)->pidincl)
1658 skb_pull(skb, 1); /* Remove PID */
1660 skb_reset_transport_header(skb);
1663 if (copied > size) {
1665 msg->msg_flags |= MSG_TRUNC;
1668 skb_copy_datagram_msg(skb, 0, msg, copied);
1670 if (msg->msg_name) {
1673 const unsigned char *mac = skb_mac_header(skb);
1674 DECLARE_SOCKADDR(struct sockaddr_ax25 *, sax, msg->msg_name);
1676 memset(sax, 0, sizeof(struct full_sockaddr_ax25));
1677 ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1679 sax->sax25_family = AF_AX25;
1680 /* We set this correctly, even though we may not let the
1681 application know the digi calls further down (because it
1682 did NOT ask to know them). This could get political... **/
1683 sax->sax25_ndigis = digi.ndigi;
1684 sax->sax25_call = src;
1686 if (sax->sax25_ndigis != 0) {
1688 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1690 for (ct = 0; ct < digi.ndigi; ct++)
1691 fsa->fsa_digipeater[ct] = digi.calls[ct];
1693 msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1696 skb_free_datagram(sk, skb);
1705 static int ax25_shutdown(struct socket *sk, int how)
1707 /* FIXME - generate DM and RNR states */
1711 static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1713 struct sock *sk = sock->sk;
1714 void __user *argp = (void __user *)arg;
1722 amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1725 res = put_user(amount, (int __user *)argp);
1730 struct sk_buff *skb;
1732 /* These two are safe on a single CPU system as only user tasks fiddle here */
1733 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1735 res = put_user(amount, (int __user *) argp);
1739 case SIOCAX25ADDUID: /* Add a uid to the uid/call map table */
1740 case SIOCAX25DELUID: /* Delete a uid from the uid/call map table */
1741 case SIOCAX25GETUID: {
1742 struct sockaddr_ax25 sax25;
1743 if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1747 res = ax25_uid_ioctl(cmd, &sax25);
1751 case SIOCAX25NOUID: { /* Set the default policy (default/bar) */
1753 if (!capable(CAP_NET_ADMIN)) {
1757 if (get_user(amount, (long __user *)argp)) {
1761 if (amount < 0 || amount > AX25_NOUID_BLOCK) {
1765 ax25_uid_policy = amount;
1773 if (!capable(CAP_NET_ADMIN)) {
1777 res = ax25_rt_ioctl(cmd, argp);
1780 case SIOCAX25CTLCON:
1781 if (!capable(CAP_NET_ADMIN)) {
1785 res = ax25_ctl_ioctl(cmd, argp);
1788 case SIOCAX25GETINFO:
1789 case SIOCAX25GETINFOOLD: {
1790 ax25_cb *ax25 = sk_to_ax25(sk);
1791 struct ax25_info_struct ax25_info;
1793 ax25_info.t1 = ax25->t1 / HZ;
1794 ax25_info.t2 = ax25->t2 / HZ;
1795 ax25_info.t3 = ax25->t3 / HZ;
1796 ax25_info.idle = ax25->idle / (60 * HZ);
1797 ax25_info.n2 = ax25->n2;
1798 ax25_info.t1timer = ax25_display_timer(&ax25->t1timer) / HZ;
1799 ax25_info.t2timer = ax25_display_timer(&ax25->t2timer) / HZ;
1800 ax25_info.t3timer = ax25_display_timer(&ax25->t3timer) / HZ;
1801 ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1802 ax25_info.n2count = ax25->n2count;
1803 ax25_info.state = ax25->state;
1804 ax25_info.rcv_q = sk_rmem_alloc_get(sk);
1805 ax25_info.snd_q = sk_wmem_alloc_get(sk);
1806 ax25_info.vs = ax25->vs;
1807 ax25_info.vr = ax25->vr;
1808 ax25_info.va = ax25->va;
1809 ax25_info.vs_max = ax25->vs; /* reserved */
1810 ax25_info.paclen = ax25->paclen;
1811 ax25_info.window = ax25->window;
1813 /* old structure? */
1814 if (cmd == SIOCAX25GETINFOOLD) {
1815 static int warned = 0;
1817 printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1822 if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1827 if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1836 case SIOCAX25ADDFWD:
1837 case SIOCAX25DELFWD: {
1838 struct ax25_fwd_struct ax25_fwd;
1839 if (!capable(CAP_NET_ADMIN)) {
1843 if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1847 res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1853 case SIOCGIFDSTADDR:
1854 case SIOCSIFDSTADDR:
1855 case SIOCGIFBRDADDR:
1856 case SIOCSIFBRDADDR:
1857 case SIOCGIFNETMASK:
1858 case SIOCSIFNETMASK:
1873 #ifdef CONFIG_PROC_FS
1875 static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1876 __acquires(ax25_list_lock)
1878 spin_lock_bh(&ax25_list_lock);
1879 return seq_hlist_start(&ax25_list, *pos);
1882 static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1884 return seq_hlist_next(v, &ax25_list, pos);
1887 static void ax25_info_stop(struct seq_file *seq, void *v)
1888 __releases(ax25_list_lock)
1890 spin_unlock_bh(&ax25_list_lock);
1893 static int ax25_info_show(struct seq_file *seq, void *v)
1895 ax25_cb *ax25 = hlist_entry(v, struct ax25_cb, ax25_node);
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
1905 seq_printf(seq, "%p %s %s%s ",
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));
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]? "*":"");
1918 seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
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,
1931 if (ax25->sk != NULL) {
1932 seq_printf(seq, " %d %d %lu\n",
1933 sk_wmem_alloc_get(ax25->sk),
1934 sk_rmem_alloc_get(ax25->sk),
1935 sock_i_ino(ax25->sk));
1937 seq_puts(seq, " * * *\n");
1942 static const struct seq_operations ax25_info_seqops = {
1943 .start = ax25_info_start,
1944 .next = ax25_info_next,
1945 .stop = ax25_info_stop,
1946 .show = ax25_info_show,
1950 static const struct net_proto_family ax25_family_ops = {
1952 .create = ax25_create,
1953 .owner = THIS_MODULE,
1956 static const struct proto_ops ax25_proto_ops = {
1958 .owner = THIS_MODULE,
1959 .release = ax25_release,
1961 .connect = ax25_connect,
1962 .socketpair = sock_no_socketpair,
1963 .accept = ax25_accept,
1964 .getname = ax25_getname,
1965 .poll = datagram_poll,
1966 .ioctl = ax25_ioctl,
1967 .gettstamp = sock_gettstamp,
1968 .listen = ax25_listen,
1969 .shutdown = ax25_shutdown,
1970 .setsockopt = ax25_setsockopt,
1971 .getsockopt = ax25_getsockopt,
1972 .sendmsg = ax25_sendmsg,
1973 .recvmsg = ax25_recvmsg,
1974 .mmap = sock_no_mmap,
1975 .sendpage = sock_no_sendpage,
1979 * Called by socket.c on kernel start up
1981 static struct packet_type ax25_packet_type __read_mostly = {
1982 .type = cpu_to_be16(ETH_P_AX25),
1983 .func = ax25_kiss_rcv,
1986 static struct notifier_block ax25_dev_notifier = {
1987 .notifier_call = ax25_device_event,
1990 static int __init ax25_init(void)
1992 int rc = proto_register(&ax25_proto, 0);
1997 sock_register(&ax25_family_ops);
1998 dev_add_pack(&ax25_packet_type);
1999 register_netdevice_notifier(&ax25_dev_notifier);
2001 proc_create_seq("ax25_route", 0444, init_net.proc_net, &ax25_rt_seqops);
2002 proc_create_seq("ax25", 0444, init_net.proc_net, &ax25_info_seqops);
2003 proc_create_seq("ax25_calls", 0444, init_net.proc_net,
2008 module_init(ax25_init);
2011 MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
2012 MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
2013 MODULE_LICENSE("GPL");
2014 MODULE_ALIAS_NETPROTO(PF_AX25);
2016 static void __exit ax25_exit(void)
2018 remove_proc_entry("ax25_route", init_net.proc_net);
2019 remove_proc_entry("ax25", init_net.proc_net);
2020 remove_proc_entry("ax25_calls", init_net.proc_net);
2022 unregister_netdevice_notifier(&ax25_dev_notifier);
2024 dev_remove_pack(&ax25_packet_type);
2026 sock_unregister(PF_AX25);
2027 proto_unregister(&ax25_proto);
2033 module_exit(ax25_exit);