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.
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)
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>
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 <linux/slab.h>
30 #include <linux/inet.h>
31 #include <linux/netdevice.h>
32 #include <linux/if_arp.h>
33 #include <linux/skbuff.h>
35 #include <asm/uaccess.h>
36 #include <linux/fcntl.h>
37 #include <linux/termios.h> /* For TIOCINQ/OUTQ */
39 #include <linux/interrupt.h>
40 #include <linux/notifier.h>
41 #include <linux/proc_fs.h>
42 #include <linux/stat.h>
43 #include <linux/sysctl.h>
44 #include <linux/init.h>
45 #include <linux/spinlock.h>
46 #include <net/net_namespace.h>
47 #include <net/tcp_states.h>
53 HLIST_HEAD(ax25_list);
54 DEFINE_SPINLOCK(ax25_list_lock);
56 static const struct proto_ops ax25_proto_ops;
58 static void ax25_free_sock(struct sock *sk)
60 ax25_cb_put(sk_to_ax25(sk));
64 * Socket removal during an interrupt is now safe.
66 static void ax25_cb_del(ax25_cb *ax25)
68 if (!hlist_unhashed(&ax25->ax25_node)) {
69 spin_lock_bh(&ax25_list_lock);
70 hlist_del_init(&ax25->ax25_node);
71 spin_unlock_bh(&ax25_list_lock);
77 * Kill all bound sockets on a dropped device.
79 static void ax25_kill_by_device(struct net_device *dev)
85 if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
88 spin_lock_bh(&ax25_list_lock);
90 ax25_for_each(s, &ax25_list) {
91 if (s->ax25_dev == ax25_dev) {
94 spin_unlock_bh(&ax25_list_lock);
98 ax25_disconnect(s, ENETUNREACH);
99 spin_lock_bh(&ax25_list_lock);
101 /* The entry could have been deleted from the
102 * list meanwhile and thus the next pointer is
103 * no longer valid. Play it safe and restart
104 * the scan. Forward progress is ensured
105 * because we set s->ax25_dev to NULL and we
106 * are never passed a NULL 'dev' argument.
111 spin_unlock_bh(&ax25_list_lock);
115 * Handle device status changes.
117 static int ax25_device_event(struct notifier_block *this, unsigned long event,
120 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
122 if (!net_eq(dev_net(dev), &init_net))
125 /* Reject non AX.25 devices */
126 if (dev->type != ARPHRD_AX25)
131 ax25_dev_device_up(dev);
134 ax25_kill_by_device(dev);
135 ax25_rt_device_down(dev);
136 ax25_dev_device_down(dev);
146 * Add a socket to the bound sockets list.
148 void ax25_cb_add(ax25_cb *ax25)
150 spin_lock_bh(&ax25_list_lock);
152 hlist_add_head(&ax25->ax25_node, &ax25_list);
153 spin_unlock_bh(&ax25_list_lock);
157 * Find a socket that wants to accept the SABM we have just
160 struct sock *ax25_find_listener(ax25_address *addr, int digi,
161 struct net_device *dev, int type)
165 spin_lock(&ax25_list_lock);
166 ax25_for_each(s, &ax25_list) {
167 if ((s->iamdigi && !digi) || (!s->iamdigi && digi))
169 if (s->sk && !ax25cmp(&s->source_addr, addr) &&
170 s->sk->sk_type == type && s->sk->sk_state == TCP_LISTEN) {
171 /* If device is null we match any device */
172 if (s->ax25_dev == NULL || s->ax25_dev->dev == dev) {
174 spin_unlock(&ax25_list_lock);
179 spin_unlock(&ax25_list_lock);
185 * Find an AX.25 socket given both ends.
187 struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
190 struct sock *sk = NULL;
193 spin_lock(&ax25_list_lock);
194 ax25_for_each(s, &ax25_list) {
195 if (s->sk && !ax25cmp(&s->source_addr, my_addr) &&
196 !ax25cmp(&s->dest_addr, dest_addr) &&
197 s->sk->sk_type == type) {
204 spin_unlock(&ax25_list_lock);
210 * Find an AX.25 control block given both ends. It will only pick up
211 * floating AX.25 control blocks or non Raw socket bound control blocks.
213 ax25_cb *ax25_find_cb(ax25_address *src_addr, ax25_address *dest_addr,
214 ax25_digi *digi, struct net_device *dev)
218 spin_lock_bh(&ax25_list_lock);
219 ax25_for_each(s, &ax25_list) {
220 if (s->sk && s->sk->sk_type != SOCK_SEQPACKET)
222 if (s->ax25_dev == NULL)
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)
228 if (ax25digicmp(s->digipeat, digi) != 0)
231 if (s->digipeat != NULL && s->digipeat->ndigi != 0)
235 spin_unlock_bh(&ax25_list_lock);
240 spin_unlock_bh(&ax25_list_lock);
245 EXPORT_SYMBOL(ax25_find_cb);
247 void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
250 struct sk_buff *copy;
252 spin_lock(&ax25_list_lock);
253 ax25_for_each(s, &ax25_list) {
254 if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 &&
255 s->sk->sk_type == SOCK_RAW &&
256 s->sk->sk_protocol == proto &&
257 s->ax25_dev->dev == skb->dev &&
258 atomic_read(&s->sk->sk_rmem_alloc) <= s->sk->sk_rcvbuf) {
259 if ((copy = skb_clone(skb, GFP_ATOMIC)) == NULL)
261 if (sock_queue_rcv_skb(s->sk, copy) != 0)
265 spin_unlock(&ax25_list_lock);
271 void ax25_destroy_socket(ax25_cb *);
274 * Handler for deferred kills.
276 static void ax25_destroy_timer(unsigned long data)
278 ax25_cb *ax25=(ax25_cb *)data;
285 ax25_destroy_socket(ax25);
291 * This is called from user mode and the timers. Thus it protects itself
292 * against interrupt users but doesn't worry about being called during
293 * work. Once it is removed from the queue no interrupt or bottom half
294 * will touch it and we are (fairly 8-) ) safe.
296 void ax25_destroy_socket(ax25_cb *ax25)
302 ax25_stop_heartbeat(ax25);
303 ax25_stop_t1timer(ax25);
304 ax25_stop_t2timer(ax25);
305 ax25_stop_t3timer(ax25);
306 ax25_stop_idletimer(ax25);
308 ax25_clear_queues(ax25); /* Flush the queues */
310 if (ax25->sk != NULL) {
311 while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
312 if (skb->sk != ax25->sk) {
313 /* A pending connection */
314 ax25_cb *sax25 = sk_to_ax25(skb->sk);
316 /* Queue the unaccepted socket for death */
317 sock_orphan(skb->sk);
319 /* 9A4GL: hack to release unaccepted sockets */
320 skb->sk->sk_state = TCP_LISTEN;
322 ax25_start_heartbeat(sax25);
323 sax25->state = AX25_STATE_0;
328 skb_queue_purge(&ax25->sk->sk_write_queue);
331 if (ax25->sk != NULL) {
332 if (sk_has_allocations(ax25->sk)) {
333 /* Defer: outstanding buffers */
334 setup_timer(&ax25->dtimer, ax25_destroy_timer,
335 (unsigned long)ax25);
336 ax25->dtimer.expires = jiffies + 2 * HZ;
337 add_timer(&ax25->dtimer);
339 struct sock *sk=ax25->sk;
349 * dl1bke 960311: set parameters for existing AX.25 connections,
350 * includes a KILL command to abort any connection.
351 * VERY useful for debugging ;-)
353 static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
355 struct ax25_ctl_struct ax25_ctl;
362 if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
365 if ((ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr)) == NULL)
368 if (ax25_ctl.digi_count > AX25_MAX_DIGIS)
371 if (ax25_ctl.arg > ULONG_MAX / HZ && ax25_ctl.cmd != AX25_KILL)
374 digi.ndigi = ax25_ctl.digi_count;
375 for (k = 0; k < digi.ndigi; k++)
376 digi.calls[k] = ax25_ctl.digi_addr[k];
378 if ((ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev)) == NULL)
381 switch (ax25_ctl.cmd) {
383 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
384 #ifdef CONFIG_AX25_DAMA_SLAVE
385 if (ax25_dev->dama.slave && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
388 ax25_disconnect(ax25, ENETRESET);
392 if (ax25->modulus == AX25_MODULUS) {
393 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
396 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
399 ax25->window = ax25_ctl.arg;
403 if (ax25_ctl.arg < 1 || ax25_ctl.arg > ULONG_MAX / HZ)
405 ax25->rtt = (ax25_ctl.arg * HZ) / 2;
406 ax25->t1 = ax25_ctl.arg * HZ;
410 if (ax25_ctl.arg < 1 || ax25_ctl.arg > ULONG_MAX / HZ)
412 ax25->t2 = ax25_ctl.arg * HZ;
416 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
419 ax25->n2 = ax25_ctl.arg;
423 if (ax25_ctl.arg > ULONG_MAX / HZ)
425 ax25->t3 = ax25_ctl.arg * HZ;
429 if (ax25_ctl.arg > ULONG_MAX / (60 * HZ))
432 ax25->idle = ax25_ctl.arg * 60 * HZ;
436 if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
438 ax25->paclen = ax25_ctl.arg;
454 static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)
456 ax25->rtt = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]) / 2;
457 ax25->t1 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]);
458 ax25->t2 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T2]);
459 ax25->t3 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T3]);
460 ax25->n2 = ax25_dev->values[AX25_VALUES_N2];
461 ax25->paclen = ax25_dev->values[AX25_VALUES_PACLEN];
462 ax25->idle = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_IDLE]);
463 ax25->backoff = ax25_dev->values[AX25_VALUES_BACKOFF];
465 if (ax25_dev->values[AX25_VALUES_AXDEFMODE]) {
466 ax25->modulus = AX25_EMODULUS;
467 ax25->window = ax25_dev->values[AX25_VALUES_EWINDOW];
469 ax25->modulus = AX25_MODULUS;
470 ax25->window = ax25_dev->values[AX25_VALUES_WINDOW];
475 * Fill in a created AX.25 created control block with the default
476 * values for a particular device.
478 void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
480 ax25->ax25_dev = ax25_dev;
482 if (ax25->ax25_dev != NULL) {
483 ax25_fillin_cb_from_dev(ax25, ax25_dev);
488 * No device, use kernel / AX.25 spec default values
490 ax25->rtt = msecs_to_jiffies(AX25_DEF_T1) / 2;
491 ax25->t1 = msecs_to_jiffies(AX25_DEF_T1);
492 ax25->t2 = msecs_to_jiffies(AX25_DEF_T2);
493 ax25->t3 = msecs_to_jiffies(AX25_DEF_T3);
494 ax25->n2 = AX25_DEF_N2;
495 ax25->paclen = AX25_DEF_PACLEN;
496 ax25->idle = msecs_to_jiffies(AX25_DEF_IDLE);
497 ax25->backoff = AX25_DEF_BACKOFF;
499 if (AX25_DEF_AXDEFMODE) {
500 ax25->modulus = AX25_EMODULUS;
501 ax25->window = AX25_DEF_EWINDOW;
503 ax25->modulus = AX25_MODULUS;
504 ax25->window = AX25_DEF_WINDOW;
509 * Create an empty AX.25 control block.
511 ax25_cb *ax25_create_cb(void)
515 if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
518 atomic_set(&ax25->refcount, 1);
520 skb_queue_head_init(&ax25->write_queue);
521 skb_queue_head_init(&ax25->frag_queue);
522 skb_queue_head_init(&ax25->ack_queue);
523 skb_queue_head_init(&ax25->reseq_queue);
525 ax25_setup_timers(ax25);
527 ax25_fillin_cb(ax25, NULL);
529 ax25->state = AX25_STATE_0;
535 * Handling for system calls applied via the various interfaces to an
539 static int ax25_setsockopt(struct socket *sock, int level, int optname,
540 char __user *optval, unsigned int optlen)
542 struct sock *sk = sock->sk;
544 struct net_device *dev;
545 char devname[IFNAMSIZ];
549 if (level != SOL_AX25)
552 if (optlen < sizeof(unsigned int))
555 if (get_user(opt, (unsigned int __user *)optval))
559 ax25 = sk_to_ax25(sk);
563 if (ax25->modulus == AX25_MODULUS) {
564 if (opt < 1 || opt > 7) {
569 if (opt < 1 || opt > 63) {
578 if (opt < 1 || opt > ULONG_MAX / HZ) {
582 ax25->rtt = (opt * HZ) >> 1;
587 if (opt < 1 || opt > ULONG_MAX / HZ) {
595 if (opt < 1 || opt > 31) {
603 if (opt < 1 || opt > ULONG_MAX / HZ) {
611 if (opt > ULONG_MAX / (60 * HZ)) {
615 ax25->idle = opt * 60 * HZ;
627 ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
631 ax25->pidincl = opt ? 1 : 0;
635 ax25->iamdigi = opt ? 1 : 0;
639 if (opt < 16 || opt > 65535) {
646 case SO_BINDTODEVICE:
647 if (optlen > IFNAMSIZ - 1)
648 optlen = IFNAMSIZ - 1;
650 memset(devname, 0, sizeof(devname));
652 if (copy_from_user(devname, optval, optlen)) {
657 if (sk->sk_type == SOCK_SEQPACKET &&
658 (sock->state != SS_UNCONNECTED ||
659 sk->sk_state == TCP_LISTEN)) {
660 res = -EADDRNOTAVAIL;
665 dev = __dev_get_by_name(&init_net, devname);
672 ax25->ax25_dev = ax25_dev_ax25dev(dev);
673 if (!ax25->ax25_dev) {
678 ax25_fillin_cb(ax25, ax25->ax25_dev);
690 static int ax25_getsockopt(struct socket *sock, int level, int optname,
691 char __user *optval, int __user *optlen)
693 struct sock *sk = sock->sk;
695 struct ax25_dev *ax25_dev;
696 char devname[IFNAMSIZ];
701 if (level != SOL_AX25)
704 if (get_user(maxlen, optlen))
710 valptr = (void *) &val;
711 length = min_t(unsigned int, maxlen, sizeof(int));
714 ax25 = sk_to_ax25(sk);
738 val = ax25->idle / (60 * HZ);
746 val = (ax25->modulus == AX25_EMODULUS);
761 case SO_BINDTODEVICE:
762 ax25_dev = ax25->ax25_dev;
764 if (ax25_dev != NULL && ax25_dev->dev != NULL) {
765 strlcpy(devname, ax25_dev->dev->name, sizeof(devname));
766 length = strlen(devname) + 1;
772 valptr = (void *) devname;
781 if (put_user(length, optlen))
784 return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
787 static int ax25_listen(struct socket *sock, int backlog)
789 struct sock *sk = sock->sk;
793 if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_LISTEN) {
794 sk->sk_max_ack_backlog = backlog;
795 sk->sk_state = TCP_LISTEN;
807 * XXX: when creating ax25_sock we should update the .obj_size setting
810 static struct proto ax25_proto = {
812 .owner = THIS_MODULE,
813 .obj_size = sizeof(struct ax25_sock),
816 static int ax25_create(struct net *net, struct socket *sock, int protocol,
822 if (protocol < 0 || protocol > SK_PROTOCOL_MAX)
825 if (!net_eq(net, &init_net))
826 return -EAFNOSUPPORT;
828 switch (sock->type) {
830 if (protocol == 0 || protocol == PF_AX25)
831 protocol = AX25_P_TEXT;
837 case PF_AX25: /* For CLX */
838 protocol = AX25_P_TEXT;
851 return -ESOCKTNOSUPPORT;
852 #ifdef CONFIG_NETROM_MODULE
854 if (ax25_protocol_is_registered(AX25_P_NETROM))
855 return -ESOCKTNOSUPPORT;
858 #ifdef CONFIG_ROSE_MODULE
860 if (ax25_protocol_is_registered(AX25_P_ROSE))
861 return -ESOCKTNOSUPPORT;
869 if (!capable(CAP_NET_RAW))
873 return -ESOCKTNOSUPPORT;
876 sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto, kern);
880 ax25 = ax25_sk(sk)->cb = ax25_create_cb();
886 sock_init_data(sock, sk);
888 sk->sk_destruct = ax25_free_sock;
889 sock->ops = &ax25_proto_ops;
890 sk->sk_protocol = protocol;
897 struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
900 ax25_cb *ax25, *oax25;
902 sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC, osk->sk_prot, 0);
906 if ((ax25 = ax25_create_cb()) == NULL) {
911 switch (osk->sk_type) {
922 sock_init_data(NULL, sk);
924 sk->sk_type = osk->sk_type;
925 sk->sk_priority = osk->sk_priority;
926 sk->sk_protocol = osk->sk_protocol;
927 sk->sk_rcvbuf = osk->sk_rcvbuf;
928 sk->sk_sndbuf = osk->sk_sndbuf;
929 sk->sk_state = TCP_ESTABLISHED;
930 sock_copy_flags(sk, osk);
932 oax25 = sk_to_ax25(osk);
934 ax25->modulus = oax25->modulus;
935 ax25->backoff = oax25->backoff;
936 ax25->pidincl = oax25->pidincl;
937 ax25->iamdigi = oax25->iamdigi;
938 ax25->rtt = oax25->rtt;
939 ax25->t1 = oax25->t1;
940 ax25->t2 = oax25->t2;
941 ax25->t3 = oax25->t3;
942 ax25->n2 = oax25->n2;
943 ax25->idle = oax25->idle;
944 ax25->paclen = oax25->paclen;
945 ax25->window = oax25->window;
947 ax25->ax25_dev = ax25_dev;
948 ax25->source_addr = oax25->source_addr;
950 if (oax25->digipeat != NULL) {
951 ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi),
953 if (ax25->digipeat == NULL) {
960 ax25_sk(sk)->cb = ax25;
961 sk->sk_destruct = ax25_free_sock;
967 static int ax25_release(struct socket *sock)
969 struct sock *sk = sock->sk;
978 ax25 = sk_to_ax25(sk);
980 if (sk->sk_type == SOCK_SEQPACKET) {
981 switch (ax25->state) {
984 ax25_disconnect(ax25, 0);
986 ax25_destroy_socket(ax25);
991 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
993 ax25_disconnect(ax25, 0);
995 if (!sock_flag(ax25->sk, SOCK_DESTROY))
996 ax25_destroy_socket(ax25);
1001 ax25_clear_queues(ax25);
1004 switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1005 case AX25_PROTO_STD_SIMPLEX:
1006 case AX25_PROTO_STD_DUPLEX:
1007 ax25_send_control(ax25,
1011 ax25_stop_t2timer(ax25);
1012 ax25_stop_t3timer(ax25);
1013 ax25_stop_idletimer(ax25);
1015 #ifdef CONFIG_AX25_DAMA_SLAVE
1016 case AX25_PROTO_DAMA_SLAVE:
1017 ax25_stop_t3timer(ax25);
1018 ax25_stop_idletimer(ax25);
1022 ax25_calculate_t1(ax25);
1023 ax25_start_t1timer(ax25);
1024 ax25->state = AX25_STATE_2;
1025 sk->sk_state = TCP_CLOSE;
1026 sk->sk_shutdown |= SEND_SHUTDOWN;
1027 sk->sk_state_change(sk);
1028 sock_set_flag(sk, SOCK_DESTROY);
1035 sk->sk_state = TCP_CLOSE;
1036 sk->sk_shutdown |= SEND_SHUTDOWN;
1037 sk->sk_state_change(sk);
1038 ax25_destroy_socket(ax25);
1049 * We support a funny extension here so you can (as root) give any callsign
1050 * digipeated via a local address as source. This hack is obsolete now
1051 * that we've implemented support for SO_BINDTODEVICE. It is however small
1052 * and trivially backward compatible.
1054 static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1056 struct sock *sk = sock->sk;
1057 struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
1058 ax25_dev *ax25_dev = NULL;
1059 ax25_uid_assoc *user;
1064 if (addr_len != sizeof(struct sockaddr_ax25) &&
1065 addr_len != sizeof(struct full_sockaddr_ax25))
1066 /* support for old structure may go away some time
1067 * ax25_bind(): uses old (6 digipeater) socket structure.
1069 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1070 (addr_len > sizeof(struct full_sockaddr_ax25)))
1073 if (addr->fsa_ax25.sax25_family != AF_AX25)
1076 user = ax25_findbyuid(current_euid());
1081 if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
1084 call = addr->fsa_ax25.sax25_call;
1089 ax25 = sk_to_ax25(sk);
1090 if (!sock_flag(sk, SOCK_ZAPPED)) {
1095 ax25->source_addr = call;
1098 * User already set interface with SO_BINDTODEVICE
1100 if (ax25->ax25_dev != NULL)
1103 if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {
1104 if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&
1105 (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {
1106 err = -EADDRNOTAVAIL;
1110 if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1111 err = -EADDRNOTAVAIL;
1116 if (ax25_dev != NULL)
1117 ax25_fillin_cb(ax25, ax25_dev);
1121 sock_reset_flag(sk, SOCK_ZAPPED);
1130 * FIXME: nonblock behaviour looks like it may have a bug.
1132 static int __must_check ax25_connect(struct socket *sock,
1133 struct sockaddr *uaddr, int addr_len, int flags)
1135 struct sock *sk = sock->sk;
1136 ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;
1137 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1138 ax25_digi *digi = NULL;
1139 int ct = 0, err = 0;
1142 * some sanity checks. code further down depends on this
1145 if (addr_len == sizeof(struct sockaddr_ax25))
1146 /* support for this will go away in early 2.5.x
1147 * ax25_connect(): uses obsolete socket structure
1150 else if (addr_len != sizeof(struct full_sockaddr_ax25))
1151 /* support for old structure may go away some time
1152 * ax25_connect(): uses old (6 digipeater) socket structure.
1154 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1155 (addr_len > sizeof(struct full_sockaddr_ax25)))
1159 if (fsa->fsa_ax25.sax25_family != AF_AX25)
1164 /* deal with restarts */
1165 if (sock->state == SS_CONNECTING) {
1166 switch (sk->sk_state) {
1167 case TCP_SYN_SENT: /* still trying */
1171 case TCP_ESTABLISHED: /* connection established */
1172 sock->state = SS_CONNECTED;
1175 case TCP_CLOSE: /* connection refused */
1176 sock->state = SS_UNCONNECTED;
1177 err = -ECONNREFUSED;
1182 if (sk->sk_state == TCP_ESTABLISHED && sk->sk_type == SOCK_SEQPACKET) {
1183 err = -EISCONN; /* No reconnect on a seqpacket socket */
1187 sk->sk_state = TCP_CLOSE;
1188 sock->state = SS_UNCONNECTED;
1190 kfree(ax25->digipeat);
1191 ax25->digipeat = NULL;
1194 * Handle digi-peaters to be used.
1196 if (addr_len > sizeof(struct sockaddr_ax25) &&
1197 fsa->fsa_ax25.sax25_ndigis != 0) {
1198 /* Valid number of digipeaters ? */
1199 if (fsa->fsa_ax25.sax25_ndigis < 1 ||
1200 fsa->fsa_ax25.sax25_ndigis > AX25_MAX_DIGIS ||
1201 addr_len < sizeof(struct sockaddr_ax25) +
1202 sizeof(ax25_address) * fsa->fsa_ax25.sax25_ndigis) {
1207 if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1212 digi->ndigi = fsa->fsa_ax25.sax25_ndigis;
1213 digi->lastrepeat = -1;
1215 while (ct < fsa->fsa_ax25.sax25_ndigis) {
1216 if ((fsa->fsa_digipeater[ct].ax25_call[6] &
1217 AX25_HBIT) && ax25->iamdigi) {
1218 digi->repeated[ct] = 1;
1219 digi->lastrepeat = ct;
1221 digi->repeated[ct] = 0;
1223 digi->calls[ct] = fsa->fsa_digipeater[ct];
1229 * Must bind first - autobinding in this may or may not work. If
1230 * the socket is already bound, check to see if the device has
1231 * been filled in, error if it hasn't.
1233 if (sock_flag(sk, SOCK_ZAPPED)) {
1234 /* check if we can remove this feature. It is broken. */
1235 printk(KERN_WARNING "ax25_connect(): %s uses autobind, please contact jreuter@yaina.de\n",
1237 if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1242 ax25_fillin_cb(ax25, ax25->ax25_dev);
1245 if (ax25->ax25_dev == NULL) {
1247 err = -EHOSTUNREACH;
1252 if (sk->sk_type == SOCK_SEQPACKET &&
1253 (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1254 ax25->ax25_dev->dev))) {
1256 err = -EADDRINUSE; /* Already such a connection */
1261 ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1262 ax25->digipeat = digi;
1264 /* First the easy one */
1265 if (sk->sk_type != SOCK_SEQPACKET) {
1266 sock->state = SS_CONNECTED;
1267 sk->sk_state = TCP_ESTABLISHED;
1271 /* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1272 sock->state = SS_CONNECTING;
1273 sk->sk_state = TCP_SYN_SENT;
1275 switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1276 case AX25_PROTO_STD_SIMPLEX:
1277 case AX25_PROTO_STD_DUPLEX:
1278 ax25_std_establish_data_link(ax25);
1281 #ifdef CONFIG_AX25_DAMA_SLAVE
1282 case AX25_PROTO_DAMA_SLAVE:
1283 ax25->modulus = AX25_MODULUS;
1284 ax25->window = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1285 if (ax25->ax25_dev->dama.slave)
1286 ax25_ds_establish_data_link(ax25);
1288 ax25_std_establish_data_link(ax25);
1293 ax25->state = AX25_STATE_1;
1295 ax25_start_heartbeat(ax25);
1298 if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1303 if (sk->sk_state == TCP_SYN_SENT) {
1307 prepare_to_wait(sk_sleep(sk), &wait,
1308 TASK_INTERRUPTIBLE);
1309 if (sk->sk_state != TCP_SYN_SENT)
1311 if (!signal_pending(current)) {
1320 finish_wait(sk_sleep(sk), &wait);
1326 if (sk->sk_state != TCP_ESTABLISHED) {
1327 /* Not in ABM, not in WAIT_UA -> failed */
1328 sock->state = SS_UNCONNECTED;
1329 err = sock_error(sk); /* Always set at this point */
1333 sock->state = SS_CONNECTED;
1342 static int ax25_accept(struct socket *sock, struct socket *newsock, int flags)
1344 struct sk_buff *skb;
1350 if (sock->state != SS_UNCONNECTED)
1353 if ((sk = sock->sk) == NULL)
1357 if (sk->sk_type != SOCK_SEQPACKET) {
1362 if (sk->sk_state != TCP_LISTEN) {
1368 * The read queue this time is holding sockets ready to use
1369 * hooked into the SABM we saved
1372 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1373 skb = skb_dequeue(&sk->sk_receive_queue);
1377 if (flags & O_NONBLOCK) {
1381 if (!signal_pending(current)) {
1390 finish_wait(sk_sleep(sk), &wait);
1396 sock_graft(newsk, newsock);
1398 /* Now attach up the new socket */
1400 sk->sk_ack_backlog--;
1401 newsock->state = SS_CONNECTED;
1409 static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1410 int *uaddr_len, int peer)
1412 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1413 struct sock *sk = sock->sk;
1414 unsigned char ndigi, i;
1418 memset(fsa, 0, sizeof(*fsa));
1420 ax25 = sk_to_ax25(sk);
1423 if (sk->sk_state != TCP_ESTABLISHED) {
1428 fsa->fsa_ax25.sax25_family = AF_AX25;
1429 fsa->fsa_ax25.sax25_call = ax25->dest_addr;
1431 if (ax25->digipeat != NULL) {
1432 ndigi = ax25->digipeat->ndigi;
1433 fsa->fsa_ax25.sax25_ndigis = ndigi;
1434 for (i = 0; i < ndigi; i++)
1435 fsa->fsa_digipeater[i] =
1436 ax25->digipeat->calls[i];
1439 fsa->fsa_ax25.sax25_family = AF_AX25;
1440 fsa->fsa_ax25.sax25_call = ax25->source_addr;
1441 fsa->fsa_ax25.sax25_ndigis = 1;
1442 if (ax25->ax25_dev != NULL) {
1443 memcpy(&fsa->fsa_digipeater[0],
1444 ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1446 fsa->fsa_digipeater[0] = null_ax25_address;
1449 *uaddr_len = sizeof (struct full_sockaddr_ax25);
1457 static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
1459 DECLARE_SOCKADDR(struct sockaddr_ax25 *, usax, msg->msg_name);
1460 struct sock *sk = sock->sk;
1461 struct sockaddr_ax25 sax;
1462 struct sk_buff *skb;
1463 ax25_digi dtmp, *dp;
1466 int lv, err, addr_len = msg->msg_namelen;
1468 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1472 ax25 = sk_to_ax25(sk);
1474 if (sock_flag(sk, SOCK_ZAPPED)) {
1475 err = -EADDRNOTAVAIL;
1479 if (sk->sk_shutdown & SEND_SHUTDOWN) {
1480 send_sig(SIGPIPE, current, 0);
1485 if (ax25->ax25_dev == NULL) {
1490 if (len > ax25->ax25_dev->dev->mtu) {
1496 if (usax->sax25_family != AF_AX25) {
1501 if (addr_len == sizeof(struct sockaddr_ax25))
1502 /* ax25_sendmsg(): uses obsolete socket structure */
1504 else if (addr_len != sizeof(struct full_sockaddr_ax25))
1505 /* support for old structure may go away some time
1506 * ax25_sendmsg(): uses old (6 digipeater)
1509 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1510 (addr_len > sizeof(struct full_sockaddr_ax25))) {
1516 if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1518 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1520 /* Valid number of digipeaters ? */
1521 if (usax->sax25_ndigis < 1 ||
1522 usax->sax25_ndigis > AX25_MAX_DIGIS ||
1523 addr_len < sizeof(struct sockaddr_ax25) +
1524 sizeof(ax25_address) * usax->sax25_ndigis) {
1529 dtmp.ndigi = usax->sax25_ndigis;
1531 while (ct < usax->sax25_ndigis) {
1532 dtmp.repeated[ct] = 0;
1533 dtmp.calls[ct] = fsa->fsa_digipeater[ct];
1537 dtmp.lastrepeat = 0;
1541 if (sk->sk_type == SOCK_SEQPACKET &&
1542 ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1546 if (usax->sax25_ndigis == 0)
1552 * FIXME: 1003.1g - if the socket is like this because
1553 * it has become closed (not started closed) and is VC
1554 * we ought to SIGPIPE, EPIPE
1556 if (sk->sk_state != TCP_ESTABLISHED) {
1560 sax.sax25_family = AF_AX25;
1561 sax.sax25_call = ax25->dest_addr;
1562 dp = ax25->digipeat;
1565 /* Build a packet */
1566 /* Assume the worst case */
1567 size = len + ax25->ax25_dev->dev->hard_header_len;
1569 skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1573 skb_reserve(skb, size - len);
1575 /* User data follows immediately after the AX.25 data */
1576 if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1582 skb_reset_network_header(skb);
1584 /* Add the PID if one is not supplied by the user in the skb */
1586 *skb_push(skb, 1) = sk->sk_protocol;
1588 if (sk->sk_type == SOCK_SEQPACKET) {
1589 /* Connected mode sockets go via the LAPB machine */
1590 if (sk->sk_state != TCP_ESTABLISHED) {
1596 /* Shove it onto the queue and kick */
1597 ax25_output(ax25, ax25->paclen, skb);
1603 skb_push(skb, 1 + ax25_addr_size(dp));
1605 /* Building AX.25 Header */
1607 /* Build an AX.25 header */
1608 lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1609 dp, AX25_COMMAND, AX25_MODULUS);
1611 skb_set_transport_header(skb, lv);
1613 *skb_transport_header(skb) = AX25_UI;
1615 /* Datagram frames go straight out of the door as UI */
1616 ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1626 static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
1629 struct sock *sk = sock->sk;
1630 struct sk_buff *skb;
1636 * This works for seqpacket too. The receiver has ordered the
1637 * queue for us! We do one quick check first though
1639 if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1644 /* Now we can treat all alike */
1645 skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1646 flags & MSG_DONTWAIT, &err);
1650 if (!sk_to_ax25(sk)->pidincl)
1651 skb_pull(skb, 1); /* Remove PID */
1653 skb_reset_transport_header(skb);
1656 if (copied > size) {
1658 msg->msg_flags |= MSG_TRUNC;
1661 skb_copy_datagram_msg(skb, 0, msg, copied);
1663 if (msg->msg_name) {
1666 const unsigned char *mac = skb_mac_header(skb);
1667 DECLARE_SOCKADDR(struct sockaddr_ax25 *, sax, msg->msg_name);
1669 memset(sax, 0, sizeof(struct full_sockaddr_ax25));
1670 ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1672 sax->sax25_family = AF_AX25;
1673 /* We set this correctly, even though we may not let the
1674 application know the digi calls further down (because it
1675 did NOT ask to know them). This could get political... **/
1676 sax->sax25_ndigis = digi.ndigi;
1677 sax->sax25_call = src;
1679 if (sax->sax25_ndigis != 0) {
1681 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1683 for (ct = 0; ct < digi.ndigi; ct++)
1684 fsa->fsa_digipeater[ct] = digi.calls[ct];
1686 msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1689 skb_free_datagram(sk, skb);
1698 static int ax25_shutdown(struct socket *sk, int how)
1700 /* FIXME - generate DM and RNR states */
1704 static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1706 struct sock *sk = sock->sk;
1707 void __user *argp = (void __user *)arg;
1715 amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1718 res = put_user(amount, (int __user *)argp);
1723 struct sk_buff *skb;
1725 /* These two are safe on a single CPU system as only user tasks fiddle here */
1726 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1728 res = put_user(amount, (int __user *) argp);
1733 res = sock_get_timestamp(sk, argp);
1737 res = sock_get_timestampns(sk, argp);
1740 case SIOCAX25ADDUID: /* Add a uid to the uid/call map table */
1741 case SIOCAX25DELUID: /* Delete a uid from the uid/call map table */
1742 case SIOCAX25GETUID: {
1743 struct sockaddr_ax25 sax25;
1744 if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1748 res = ax25_uid_ioctl(cmd, &sax25);
1752 case SIOCAX25NOUID: { /* Set the default policy (default/bar) */
1754 if (!capable(CAP_NET_ADMIN)) {
1758 if (get_user(amount, (long __user *)argp)) {
1762 if (amount < 0 || amount > AX25_NOUID_BLOCK) {
1766 ax25_uid_policy = amount;
1774 if (!capable(CAP_NET_ADMIN)) {
1778 res = ax25_rt_ioctl(cmd, argp);
1781 case SIOCAX25CTLCON:
1782 if (!capable(CAP_NET_ADMIN)) {
1786 res = ax25_ctl_ioctl(cmd, argp);
1789 case SIOCAX25GETINFO:
1790 case SIOCAX25GETINFOOLD: {
1791 ax25_cb *ax25 = sk_to_ax25(sk);
1792 struct ax25_info_struct ax25_info;
1794 ax25_info.t1 = ax25->t1 / HZ;
1795 ax25_info.t2 = ax25->t2 / HZ;
1796 ax25_info.t3 = ax25->t3 / HZ;
1797 ax25_info.idle = ax25->idle / (60 * HZ);
1798 ax25_info.n2 = ax25->n2;
1799 ax25_info.t1timer = ax25_display_timer(&ax25->t1timer) / HZ;
1800 ax25_info.t2timer = ax25_display_timer(&ax25->t2timer) / HZ;
1801 ax25_info.t3timer = ax25_display_timer(&ax25->t3timer) / HZ;
1802 ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1803 ax25_info.n2count = ax25->n2count;
1804 ax25_info.state = ax25->state;
1805 ax25_info.rcv_q = sk_rmem_alloc_get(sk);
1806 ax25_info.snd_q = sk_wmem_alloc_get(sk);
1807 ax25_info.vs = ax25->vs;
1808 ax25_info.vr = ax25->vr;
1809 ax25_info.va = ax25->va;
1810 ax25_info.vs_max = ax25->vs; /* reserved */
1811 ax25_info.paclen = ax25->paclen;
1812 ax25_info.window = ax25->window;
1814 /* old structure? */
1815 if (cmd == SIOCAX25GETINFOOLD) {
1816 static int warned = 0;
1818 printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1823 if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1828 if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1837 case SIOCAX25ADDFWD:
1838 case SIOCAX25DELFWD: {
1839 struct ax25_fwd_struct ax25_fwd;
1840 if (!capable(CAP_NET_ADMIN)) {
1844 if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1848 res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1854 case SIOCGIFDSTADDR:
1855 case SIOCSIFDSTADDR:
1856 case SIOCGIFBRDADDR:
1857 case SIOCSIFBRDADDR:
1858 case SIOCGIFNETMASK:
1859 case SIOCSIFNETMASK:
1874 #ifdef CONFIG_PROC_FS
1876 static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1877 __acquires(ax25_list_lock)
1879 spin_lock_bh(&ax25_list_lock);
1880 return seq_hlist_start(&ax25_list, *pos);
1883 static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1885 return seq_hlist_next(v, &ax25_list, pos);
1888 static void ax25_info_stop(struct seq_file *seq, void *v)
1889 __releases(ax25_list_lock)
1891 spin_unlock_bh(&ax25_list_lock);
1894 static int ax25_info_show(struct seq_file *seq, void *v)
1896 ax25_cb *ax25 = hlist_entry(v, struct ax25_cb, ax25_node);
1903 * 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
1906 seq_printf(seq, "%8.8lx %s %s%s ",
1908 ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1909 ax2asc(buf, &ax25->source_addr),
1910 ax25->iamdigi? "*":"");
1911 seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1913 for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1914 seq_printf(seq, ",%s%s",
1915 ax2asc(buf, &ax25->digipeat->calls[k]),
1916 ax25->digipeat->repeated[k]? "*":"");
1919 seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
1921 ax25->vs, ax25->vr, ax25->va,
1922 ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1923 ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1924 ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1925 ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1926 ax25->idle / (60 * HZ),
1927 ax25->n2count, ax25->n2,
1932 if (ax25->sk != NULL) {
1933 seq_printf(seq, " %d %d %lu\n",
1934 sk_wmem_alloc_get(ax25->sk),
1935 sk_rmem_alloc_get(ax25->sk),
1936 sock_i_ino(ax25->sk));
1938 seq_puts(seq, " * * *\n");
1943 static const struct seq_operations ax25_info_seqops = {
1944 .start = ax25_info_start,
1945 .next = ax25_info_next,
1946 .stop = ax25_info_stop,
1947 .show = ax25_info_show,
1950 static int ax25_info_open(struct inode *inode, struct file *file)
1952 return seq_open(file, &ax25_info_seqops);
1955 static const struct file_operations ax25_info_fops = {
1956 .owner = THIS_MODULE,
1957 .open = ax25_info_open,
1959 .llseek = seq_lseek,
1960 .release = seq_release,
1965 static const struct net_proto_family ax25_family_ops = {
1967 .create = ax25_create,
1968 .owner = THIS_MODULE,
1971 static const struct proto_ops ax25_proto_ops = {
1973 .owner = THIS_MODULE,
1974 .release = ax25_release,
1976 .connect = ax25_connect,
1977 .socketpair = sock_no_socketpair,
1978 .accept = ax25_accept,
1979 .getname = ax25_getname,
1980 .poll = datagram_poll,
1981 .ioctl = ax25_ioctl,
1982 .listen = ax25_listen,
1983 .shutdown = ax25_shutdown,
1984 .setsockopt = ax25_setsockopt,
1985 .getsockopt = ax25_getsockopt,
1986 .sendmsg = ax25_sendmsg,
1987 .recvmsg = ax25_recvmsg,
1988 .mmap = sock_no_mmap,
1989 .sendpage = sock_no_sendpage,
1993 * Called by socket.c on kernel start up
1995 static struct packet_type ax25_packet_type __read_mostly = {
1996 .type = cpu_to_be16(ETH_P_AX25),
1997 .func = ax25_kiss_rcv,
2000 static struct notifier_block ax25_dev_notifier = {
2001 .notifier_call = ax25_device_event,
2004 static int __init ax25_init(void)
2006 int rc = proto_register(&ax25_proto, 0);
2011 sock_register(&ax25_family_ops);
2012 dev_add_pack(&ax25_packet_type);
2013 register_netdevice_notifier(&ax25_dev_notifier);
2015 proc_create("ax25_route", S_IRUGO, init_net.proc_net,
2017 proc_create("ax25", S_IRUGO, init_net.proc_net, &ax25_info_fops);
2018 proc_create("ax25_calls", S_IRUGO, init_net.proc_net, &ax25_uid_fops);
2022 module_init(ax25_init);
2025 MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
2026 MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
2027 MODULE_LICENSE("GPL");
2028 MODULE_ALIAS_NETPROTO(PF_AX25);
2030 static void __exit ax25_exit(void)
2032 remove_proc_entry("ax25_route", init_net.proc_net);
2033 remove_proc_entry("ax25", init_net.proc_net);
2034 remove_proc_entry("ax25_calls", init_net.proc_net);
2036 unregister_netdevice_notifier(&ax25_dev_notifier);
2038 dev_remove_pack(&ax25_packet_type);
2040 sock_unregister(PF_AX25);
2041 proto_unregister(&ax25_proto);
2047 module_exit(ax25_exit);