[SPARC32]: Take enable_irq/disable_irq out of line.
[pv_ops_mirror.git] / net / ax25 / af_ax25.c
blobdae2a42d3d865a96af92329cedf0b11a186da755
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.
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>
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/tcp_states.h>
48 #include <net/ip.h>
49 #include <net/arp.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(ax25_sk(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);
72 ax25_cb_put(ax25);
77 * Kill all bound sockets on a dropped device.
79 static void ax25_kill_by_device(struct net_device *dev)
81 ax25_dev *ax25_dev;
82 ax25_cb *s;
83 struct hlist_node *node;
85 if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
86 return;
88 spin_lock_bh(&ax25_list_lock);
89 ax25_for_each(s, node, &ax25_list) {
90 if (s->ax25_dev == ax25_dev) {
91 s->ax25_dev = NULL;
92 ax25_disconnect(s, ENETUNREACH);
95 spin_unlock_bh(&ax25_list_lock);
99 * Handle device status changes.
101 static int ax25_device_event(struct notifier_block *this, unsigned long event,
102 void *ptr)
104 struct net_device *dev = (struct net_device *)ptr;
106 /* Reject non AX.25 devices */
107 if (dev->type != ARPHRD_AX25)
108 return NOTIFY_DONE;
110 switch (event) {
111 case NETDEV_UP:
112 ax25_dev_device_up(dev);
113 break;
114 case NETDEV_DOWN:
115 ax25_kill_by_device(dev);
116 ax25_rt_device_down(dev);
117 ax25_dev_device_down(dev);
118 break;
119 default:
120 break;
123 return NOTIFY_DONE;
127 * Add a socket to the bound sockets list.
129 void ax25_cb_add(ax25_cb *ax25)
131 spin_lock_bh(&ax25_list_lock);
132 ax25_cb_hold(ax25);
133 hlist_add_head(&ax25->ax25_node, &ax25_list);
134 spin_unlock_bh(&ax25_list_lock);
138 * Find a socket that wants to accept the SABM we have just
139 * received.
141 struct sock *ax25_find_listener(ax25_address *addr, int digi,
142 struct net_device *dev, int type)
144 ax25_cb *s;
145 struct hlist_node *node;
147 spin_lock(&ax25_list_lock);
148 ax25_for_each(s, node, &ax25_list) {
149 if ((s->iamdigi && !digi) || (!s->iamdigi && digi))
150 continue;
151 if (s->sk && !ax25cmp(&s->source_addr, addr) &&
152 s->sk->sk_type == type && s->sk->sk_state == TCP_LISTEN) {
153 /* If device is null we match any device */
154 if (s->ax25_dev == NULL || s->ax25_dev->dev == dev) {
155 sock_hold(s->sk);
156 spin_unlock(&ax25_list_lock);
157 return s->sk;
161 spin_unlock(&ax25_list_lock);
163 return NULL;
167 * Find an AX.25 socket given both ends.
169 struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
170 int type)
172 struct sock *sk = NULL;
173 ax25_cb *s;
174 struct hlist_node *node;
176 spin_lock(&ax25_list_lock);
177 ax25_for_each(s, node, &ax25_list) {
178 if (s->sk && !ax25cmp(&s->source_addr, my_addr) &&
179 !ax25cmp(&s->dest_addr, dest_addr) &&
180 s->sk->sk_type == type) {
181 sk = s->sk;
182 sock_hold(sk);
183 break;
187 spin_unlock(&ax25_list_lock);
189 return sk;
193 * Find an AX.25 control block given both ends. It will only pick up
194 * floating AX.25 control blocks or non Raw socket bound control blocks.
196 ax25_cb *ax25_find_cb(ax25_address *src_addr, ax25_address *dest_addr,
197 ax25_digi *digi, struct net_device *dev)
199 ax25_cb *s;
200 struct hlist_node *node;
202 spin_lock_bh(&ax25_list_lock);
203 ax25_for_each(s, node, &ax25_list) {
204 if (s->sk && s->sk->sk_type != SOCK_SEQPACKET)
205 continue;
206 if (s->ax25_dev == NULL)
207 continue;
208 if (ax25cmp(&s->source_addr, src_addr) == 0 && ax25cmp(&s->dest_addr, dest_addr) == 0 && s->ax25_dev->dev == dev) {
209 if (digi != NULL && digi->ndigi != 0) {
210 if (s->digipeat == NULL)
211 continue;
212 if (ax25digicmp(s->digipeat, digi) != 0)
213 continue;
214 } else {
215 if (s->digipeat != NULL && s->digipeat->ndigi != 0)
216 continue;
218 ax25_cb_hold(s);
219 spin_unlock_bh(&ax25_list_lock);
221 return s;
224 spin_unlock_bh(&ax25_list_lock);
226 return NULL;
229 EXPORT_SYMBOL(ax25_find_cb);
231 void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
233 ax25_cb *s;
234 struct sk_buff *copy;
235 struct hlist_node *node;
237 spin_lock(&ax25_list_lock);
238 ax25_for_each(s, node, &ax25_list) {
239 if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 &&
240 s->sk->sk_type == SOCK_RAW &&
241 s->sk->sk_protocol == proto &&
242 s->ax25_dev->dev == skb->dev &&
243 atomic_read(&s->sk->sk_rmem_alloc) <= s->sk->sk_rcvbuf) {
244 if ((copy = skb_clone(skb, GFP_ATOMIC)) == NULL)
245 continue;
246 if (sock_queue_rcv_skb(s->sk, copy) != 0)
247 kfree_skb(copy);
250 spin_unlock(&ax25_list_lock);
254 * Deferred destroy.
256 void ax25_destroy_socket(ax25_cb *);
259 * Handler for deferred kills.
261 static void ax25_destroy_timer(unsigned long data)
263 ax25_cb *ax25=(ax25_cb *)data;
264 struct sock *sk;
266 sk=ax25->sk;
268 bh_lock_sock(sk);
269 sock_hold(sk);
270 ax25_destroy_socket(ax25);
271 bh_unlock_sock(sk);
272 sock_put(sk);
276 * This is called from user mode and the timers. Thus it protects itself
277 * against interrupt users but doesn't worry about being called during
278 * work. Once it is removed from the queue no interrupt or bottom half
279 * will touch it and we are (fairly 8-) ) safe.
281 void ax25_destroy_socket(ax25_cb *ax25)
283 struct sk_buff *skb;
285 ax25_cb_del(ax25);
287 ax25_stop_heartbeat(ax25);
288 ax25_stop_t1timer(ax25);
289 ax25_stop_t2timer(ax25);
290 ax25_stop_t3timer(ax25);
291 ax25_stop_idletimer(ax25);
293 ax25_clear_queues(ax25); /* Flush the queues */
295 if (ax25->sk != NULL) {
296 while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
297 if (skb->sk != ax25->sk) {
298 /* A pending connection */
299 ax25_cb *sax25 = ax25_sk(skb->sk);
301 /* Queue the unaccepted socket for death */
302 sock_orphan(skb->sk);
304 ax25_start_heartbeat(sax25);
305 sax25->state = AX25_STATE_0;
308 kfree_skb(skb);
310 skb_queue_purge(&ax25->sk->sk_write_queue);
313 if (ax25->sk != NULL) {
314 if (atomic_read(&ax25->sk->sk_wmem_alloc) ||
315 atomic_read(&ax25->sk->sk_rmem_alloc)) {
316 /* Defer: outstanding buffers */
317 init_timer(&ax25->dtimer);
318 ax25->dtimer.expires = jiffies + 2 * HZ;
319 ax25->dtimer.function = ax25_destroy_timer;
320 ax25->dtimer.data = (unsigned long)ax25;
321 add_timer(&ax25->dtimer);
322 } else {
323 struct sock *sk=ax25->sk;
324 ax25->sk=NULL;
325 sock_put(sk);
327 } else {
328 ax25_cb_put(ax25);
333 * dl1bke 960311: set parameters for existing AX.25 connections,
334 * includes a KILL command to abort any connection.
335 * VERY useful for debugging ;-)
337 static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
339 struct ax25_ctl_struct ax25_ctl;
340 ax25_digi digi;
341 ax25_dev *ax25_dev;
342 ax25_cb *ax25;
343 unsigned int k;
345 if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
346 return -EFAULT;
348 if ((ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr)) == NULL)
349 return -ENODEV;
351 if (ax25_ctl.digi_count > AX25_MAX_DIGIS)
352 return -EINVAL;
354 digi.ndigi = ax25_ctl.digi_count;
355 for (k = 0; k < digi.ndigi; k++)
356 digi.calls[k] = ax25_ctl.digi_addr[k];
358 if ((ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev)) == NULL)
359 return -ENOTCONN;
361 switch (ax25_ctl.cmd) {
362 case AX25_KILL:
363 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
364 #ifdef CONFIG_AX25_DAMA_SLAVE
365 if (ax25_dev->dama.slave && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
366 ax25_dama_off(ax25);
367 #endif
368 ax25_disconnect(ax25, ENETRESET);
369 break;
371 case AX25_WINDOW:
372 if (ax25->modulus == AX25_MODULUS) {
373 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
374 return -EINVAL;
375 } else {
376 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
377 return -EINVAL;
379 ax25->window = ax25_ctl.arg;
380 break;
382 case AX25_T1:
383 if (ax25_ctl.arg < 1)
384 return -EINVAL;
385 ax25->rtt = (ax25_ctl.arg * HZ) / 2;
386 ax25->t1 = ax25_ctl.arg * HZ;
387 break;
389 case AX25_T2:
390 if (ax25_ctl.arg < 1)
391 return -EINVAL;
392 ax25->t2 = ax25_ctl.arg * HZ;
393 break;
395 case AX25_N2:
396 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
397 return -EINVAL;
398 ax25->n2count = 0;
399 ax25->n2 = ax25_ctl.arg;
400 break;
402 case AX25_T3:
403 if (ax25_ctl.arg < 0)
404 return -EINVAL;
405 ax25->t3 = ax25_ctl.arg * HZ;
406 break;
408 case AX25_IDLE:
409 if (ax25_ctl.arg < 0)
410 return -EINVAL;
411 ax25->idle = ax25_ctl.arg * 60 * HZ;
412 break;
414 case AX25_PACLEN:
415 if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
416 return -EINVAL;
417 ax25->paclen = ax25_ctl.arg;
418 break;
420 default:
421 return -EINVAL;
424 return 0;
427 static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)
429 ax25->rtt = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]) / 2;
430 ax25->t1 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]);
431 ax25->t2 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T2]);
432 ax25->t3 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T3]);
433 ax25->n2 = ax25_dev->values[AX25_VALUES_N2];
434 ax25->paclen = ax25_dev->values[AX25_VALUES_PACLEN];
435 ax25->idle = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_IDLE]);
436 ax25->backoff = ax25_dev->values[AX25_VALUES_BACKOFF];
438 if (ax25_dev->values[AX25_VALUES_AXDEFMODE]) {
439 ax25->modulus = AX25_EMODULUS;
440 ax25->window = ax25_dev->values[AX25_VALUES_EWINDOW];
441 } else {
442 ax25->modulus = AX25_MODULUS;
443 ax25->window = ax25_dev->values[AX25_VALUES_WINDOW];
448 * Fill in a created AX.25 created control block with the default
449 * values for a particular device.
451 void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
453 ax25->ax25_dev = ax25_dev;
455 if (ax25->ax25_dev != NULL) {
456 ax25_fillin_cb_from_dev(ax25, ax25_dev);
457 return;
461 * No device, use kernel / AX.25 spec default values
463 ax25->rtt = msecs_to_jiffies(AX25_DEF_T1) / 2;
464 ax25->t1 = msecs_to_jiffies(AX25_DEF_T1);
465 ax25->t2 = msecs_to_jiffies(AX25_DEF_T2);
466 ax25->t3 = msecs_to_jiffies(AX25_DEF_T3);
467 ax25->n2 = AX25_DEF_N2;
468 ax25->paclen = AX25_DEF_PACLEN;
469 ax25->idle = msecs_to_jiffies(AX25_DEF_IDLE);
470 ax25->backoff = AX25_DEF_BACKOFF;
472 if (AX25_DEF_AXDEFMODE) {
473 ax25->modulus = AX25_EMODULUS;
474 ax25->window = AX25_DEF_EWINDOW;
475 } else {
476 ax25->modulus = AX25_MODULUS;
477 ax25->window = AX25_DEF_WINDOW;
482 * Create an empty AX.25 control block.
484 ax25_cb *ax25_create_cb(void)
486 ax25_cb *ax25;
488 if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
489 return NULL;
491 atomic_set(&ax25->refcount, 1);
493 skb_queue_head_init(&ax25->write_queue);
494 skb_queue_head_init(&ax25->frag_queue);
495 skb_queue_head_init(&ax25->ack_queue);
496 skb_queue_head_init(&ax25->reseq_queue);
498 init_timer(&ax25->timer);
499 init_timer(&ax25->t1timer);
500 init_timer(&ax25->t2timer);
501 init_timer(&ax25->t3timer);
502 init_timer(&ax25->idletimer);
504 ax25_fillin_cb(ax25, NULL);
506 ax25->state = AX25_STATE_0;
508 return ax25;
512 * Handling for system calls applied via the various interfaces to an
513 * AX25 socket object
516 static int ax25_setsockopt(struct socket *sock, int level, int optname,
517 char __user *optval, int optlen)
519 struct sock *sk = sock->sk;
520 ax25_cb *ax25;
521 struct net_device *dev;
522 char devname[IFNAMSIZ];
523 int opt, res = 0;
525 if (level != SOL_AX25)
526 return -ENOPROTOOPT;
528 if (optlen < sizeof(int))
529 return -EINVAL;
531 if (get_user(opt, (int __user *)optval))
532 return -EFAULT;
534 lock_sock(sk);
535 ax25 = ax25_sk(sk);
537 switch (optname) {
538 case AX25_WINDOW:
539 if (ax25->modulus == AX25_MODULUS) {
540 if (opt < 1 || opt > 7) {
541 res = -EINVAL;
542 break;
544 } else {
545 if (opt < 1 || opt > 63) {
546 res = -EINVAL;
547 break;
550 ax25->window = opt;
551 break;
553 case AX25_T1:
554 if (opt < 1) {
555 res = -EINVAL;
556 break;
558 ax25->rtt = (opt * HZ) / 2;
559 ax25->t1 = opt * HZ;
560 break;
562 case AX25_T2:
563 if (opt < 1) {
564 res = -EINVAL;
565 break;
567 ax25->t2 = opt * HZ;
568 break;
570 case AX25_N2:
571 if (opt < 1 || opt > 31) {
572 res = -EINVAL;
573 break;
575 ax25->n2 = opt;
576 break;
578 case AX25_T3:
579 if (opt < 1) {
580 res = -EINVAL;
581 break;
583 ax25->t3 = opt * HZ;
584 break;
586 case AX25_IDLE:
587 if (opt < 0) {
588 res = -EINVAL;
589 break;
591 ax25->idle = opt * 60 * HZ;
592 break;
594 case AX25_BACKOFF:
595 if (opt < 0 || opt > 2) {
596 res = -EINVAL;
597 break;
599 ax25->backoff = opt;
600 break;
602 case AX25_EXTSEQ:
603 ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
604 break;
606 case AX25_PIDINCL:
607 ax25->pidincl = opt ? 1 : 0;
608 break;
610 case AX25_IAMDIGI:
611 ax25->iamdigi = opt ? 1 : 0;
612 break;
614 case AX25_PACLEN:
615 if (opt < 16 || opt > 65535) {
616 res = -EINVAL;
617 break;
619 ax25->paclen = opt;
620 break;
622 case SO_BINDTODEVICE:
623 if (optlen > IFNAMSIZ)
624 optlen=IFNAMSIZ;
625 if (copy_from_user(devname, optval, optlen)) {
626 res = -EFAULT;
627 break;
630 dev = dev_get_by_name(devname);
631 if (dev == NULL) {
632 res = -ENODEV;
633 break;
636 if (sk->sk_type == SOCK_SEQPACKET &&
637 (sock->state != SS_UNCONNECTED ||
638 sk->sk_state == TCP_LISTEN)) {
639 res = -EADDRNOTAVAIL;
640 dev_put(dev);
641 break;
644 ax25->ax25_dev = ax25_dev_ax25dev(dev);
645 ax25_fillin_cb(ax25, ax25->ax25_dev);
646 break;
648 default:
649 res = -ENOPROTOOPT;
651 release_sock(sk);
653 return res;
656 static int ax25_getsockopt(struct socket *sock, int level, int optname,
657 char __user *optval, int __user *optlen)
659 struct sock *sk = sock->sk;
660 ax25_cb *ax25;
661 struct ax25_dev *ax25_dev;
662 char devname[IFNAMSIZ];
663 void *valptr;
664 int val = 0;
665 int maxlen, length;
667 if (level != SOL_AX25)
668 return -ENOPROTOOPT;
670 if (get_user(maxlen, optlen))
671 return -EFAULT;
673 if (maxlen < 1)
674 return -EFAULT;
676 valptr = (void *) &val;
677 length = min_t(unsigned int, maxlen, sizeof(int));
679 lock_sock(sk);
680 ax25 = ax25_sk(sk);
682 switch (optname) {
683 case AX25_WINDOW:
684 val = ax25->window;
685 break;
687 case AX25_T1:
688 val = ax25->t1 / HZ;
689 break;
691 case AX25_T2:
692 val = ax25->t2 / HZ;
693 break;
695 case AX25_N2:
696 val = ax25->n2;
697 break;
699 case AX25_T3:
700 val = ax25->t3 / HZ;
701 break;
703 case AX25_IDLE:
704 val = ax25->idle / (60 * HZ);
705 break;
707 case AX25_BACKOFF:
708 val = ax25->backoff;
709 break;
711 case AX25_EXTSEQ:
712 val = (ax25->modulus == AX25_EMODULUS);
713 break;
715 case AX25_PIDINCL:
716 val = ax25->pidincl;
717 break;
719 case AX25_IAMDIGI:
720 val = ax25->iamdigi;
721 break;
723 case AX25_PACLEN:
724 val = ax25->paclen;
725 break;
727 case SO_BINDTODEVICE:
728 ax25_dev = ax25->ax25_dev;
730 if (ax25_dev != NULL && ax25_dev->dev != NULL) {
731 strlcpy(devname, ax25_dev->dev->name, sizeof(devname));
732 length = strlen(devname) + 1;
733 } else {
734 *devname = '\0';
735 length = 1;
738 valptr = (void *) devname;
739 break;
741 default:
742 release_sock(sk);
743 return -ENOPROTOOPT;
745 release_sock(sk);
747 if (put_user(length, optlen))
748 return -EFAULT;
750 return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
753 static int ax25_listen(struct socket *sock, int backlog)
755 struct sock *sk = sock->sk;
756 int res = 0;
758 lock_sock(sk);
759 if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_LISTEN) {
760 sk->sk_max_ack_backlog = backlog;
761 sk->sk_state = TCP_LISTEN;
762 goto out;
764 res = -EOPNOTSUPP;
766 out:
767 release_sock(sk);
769 return res;
773 * XXX: when creating ax25_sock we should update the .obj_size setting
774 * below.
776 static struct proto ax25_proto = {
777 .name = "AX25",
778 .owner = THIS_MODULE,
779 .obj_size = sizeof(struct sock),
782 static int ax25_create(struct socket *sock, int protocol)
784 struct sock *sk;
785 ax25_cb *ax25;
787 switch (sock->type) {
788 case SOCK_DGRAM:
789 if (protocol == 0 || protocol == PF_AX25)
790 protocol = AX25_P_TEXT;
791 break;
793 case SOCK_SEQPACKET:
794 switch (protocol) {
795 case 0:
796 case PF_AX25: /* For CLX */
797 protocol = AX25_P_TEXT;
798 break;
799 case AX25_P_SEGMENT:
800 #ifdef CONFIG_INET
801 case AX25_P_ARP:
802 case AX25_P_IP:
803 #endif
804 #ifdef CONFIG_NETROM
805 case AX25_P_NETROM:
806 #endif
807 #ifdef CONFIG_ROSE
808 case AX25_P_ROSE:
809 #endif
810 return -ESOCKTNOSUPPORT;
811 #ifdef CONFIG_NETROM_MODULE
812 case AX25_P_NETROM:
813 if (ax25_protocol_is_registered(AX25_P_NETROM))
814 return -ESOCKTNOSUPPORT;
815 #endif
816 #ifdef CONFIG_ROSE_MODULE
817 case AX25_P_ROSE:
818 if (ax25_protocol_is_registered(AX25_P_ROSE))
819 return -ESOCKTNOSUPPORT;
820 #endif
821 default:
822 break;
824 break;
826 case SOCK_RAW:
827 break;
828 default:
829 return -ESOCKTNOSUPPORT;
832 if ((sk = sk_alloc(PF_AX25, GFP_ATOMIC, &ax25_proto, 1)) == NULL)
833 return -ENOMEM;
835 ax25 = sk->sk_protinfo = ax25_create_cb();
836 if (!ax25) {
837 sk_free(sk);
838 return -ENOMEM;
841 sock_init_data(sock, sk);
843 sk->sk_destruct = ax25_free_sock;
844 sock->ops = &ax25_proto_ops;
845 sk->sk_protocol = protocol;
847 ax25->sk = sk;
849 return 0;
852 struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
854 struct sock *sk;
855 ax25_cb *ax25, *oax25;
857 if ((sk = sk_alloc(PF_AX25, GFP_ATOMIC, osk->sk_prot, 1)) == NULL)
858 return NULL;
860 if ((ax25 = ax25_create_cb()) == NULL) {
861 sk_free(sk);
862 return NULL;
865 switch (osk->sk_type) {
866 case SOCK_DGRAM:
867 break;
868 case SOCK_SEQPACKET:
869 break;
870 default:
871 sk_free(sk);
872 ax25_cb_put(ax25);
873 return NULL;
876 sock_init_data(NULL, sk);
878 sk->sk_destruct = ax25_free_sock;
879 sk->sk_type = osk->sk_type;
880 sk->sk_socket = osk->sk_socket;
881 sk->sk_priority = osk->sk_priority;
882 sk->sk_protocol = osk->sk_protocol;
883 sk->sk_rcvbuf = osk->sk_rcvbuf;
884 sk->sk_sndbuf = osk->sk_sndbuf;
885 sk->sk_state = TCP_ESTABLISHED;
886 sk->sk_sleep = osk->sk_sleep;
887 sock_copy_flags(sk, osk);
889 oax25 = ax25_sk(osk);
891 ax25->modulus = oax25->modulus;
892 ax25->backoff = oax25->backoff;
893 ax25->pidincl = oax25->pidincl;
894 ax25->iamdigi = oax25->iamdigi;
895 ax25->rtt = oax25->rtt;
896 ax25->t1 = oax25->t1;
897 ax25->t2 = oax25->t2;
898 ax25->t3 = oax25->t3;
899 ax25->n2 = oax25->n2;
900 ax25->idle = oax25->idle;
901 ax25->paclen = oax25->paclen;
902 ax25->window = oax25->window;
904 ax25->ax25_dev = ax25_dev;
905 ax25->source_addr = oax25->source_addr;
907 if (oax25->digipeat != NULL) {
908 ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi),
909 GFP_ATOMIC);
910 if (ax25->digipeat == NULL) {
911 sk_free(sk);
912 ax25_cb_put(ax25);
913 return NULL;
917 sk->sk_protinfo = ax25;
918 ax25->sk = sk;
920 return sk;
923 static int ax25_release(struct socket *sock)
925 struct sock *sk = sock->sk;
926 ax25_cb *ax25;
928 if (sk == NULL)
929 return 0;
931 sock_hold(sk);
932 sock_orphan(sk);
933 lock_sock(sk);
934 ax25 = ax25_sk(sk);
936 if (sk->sk_type == SOCK_SEQPACKET) {
937 switch (ax25->state) {
938 case AX25_STATE_0:
939 release_sock(sk);
940 ax25_disconnect(ax25, 0);
941 lock_sock(sk);
942 ax25_destroy_socket(ax25);
943 break;
945 case AX25_STATE_1:
946 case AX25_STATE_2:
947 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
948 release_sock(sk);
949 ax25_disconnect(ax25, 0);
950 lock_sock(sk);
951 ax25_destroy_socket(ax25);
952 break;
954 case AX25_STATE_3:
955 case AX25_STATE_4:
956 ax25_clear_queues(ax25);
957 ax25->n2count = 0;
959 switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
960 case AX25_PROTO_STD_SIMPLEX:
961 case AX25_PROTO_STD_DUPLEX:
962 ax25_send_control(ax25,
963 AX25_DISC,
964 AX25_POLLON,
965 AX25_COMMAND);
966 ax25_stop_t2timer(ax25);
967 ax25_stop_t3timer(ax25);
968 ax25_stop_idletimer(ax25);
969 break;
970 #ifdef CONFIG_AX25_DAMA_SLAVE
971 case AX25_PROTO_DAMA_SLAVE:
972 ax25_stop_t3timer(ax25);
973 ax25_stop_idletimer(ax25);
974 break;
975 #endif
977 ax25_calculate_t1(ax25);
978 ax25_start_t1timer(ax25);
979 ax25->state = AX25_STATE_2;
980 sk->sk_state = TCP_CLOSE;
981 sk->sk_shutdown |= SEND_SHUTDOWN;
982 sk->sk_state_change(sk);
983 sock_set_flag(sk, SOCK_DESTROY);
984 break;
986 default:
987 break;
989 } else {
990 sk->sk_state = TCP_CLOSE;
991 sk->sk_shutdown |= SEND_SHUTDOWN;
992 sk->sk_state_change(sk);
993 ax25_destroy_socket(ax25);
996 sock->sk = NULL;
997 release_sock(sk);
998 sock_put(sk);
1000 return 0;
1004 * We support a funny extension here so you can (as root) give any callsign
1005 * digipeated via a local address as source. This hack is obsolete now
1006 * that we've implemented support for SO_BINDTODEVICE. It is however small
1007 * and trivially backward compatible.
1009 static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1011 struct sock *sk = sock->sk;
1012 struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
1013 ax25_dev *ax25_dev = NULL;
1014 ax25_uid_assoc *user;
1015 ax25_address call;
1016 ax25_cb *ax25;
1017 int err = 0;
1019 if (addr_len != sizeof(struct sockaddr_ax25) &&
1020 addr_len != sizeof(struct full_sockaddr_ax25)) {
1021 /* support for old structure may go away some time */
1022 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1023 (addr_len > sizeof(struct full_sockaddr_ax25))) {
1024 return -EINVAL;
1027 printk(KERN_WARNING "ax25_bind(): %s uses old (6 digipeater) socket structure.\n",
1028 current->comm);
1031 if (addr->fsa_ax25.sax25_family != AF_AX25)
1032 return -EINVAL;
1034 user = ax25_findbyuid(current->euid);
1035 if (user) {
1036 call = user->call;
1037 ax25_uid_put(user);
1038 } else {
1039 if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
1040 return -EACCES;
1042 call = addr->fsa_ax25.sax25_call;
1045 lock_sock(sk);
1047 ax25 = ax25_sk(sk);
1048 if (!sock_flag(sk, SOCK_ZAPPED)) {
1049 err = -EINVAL;
1050 goto out;
1053 ax25->source_addr = call;
1056 * User already set interface with SO_BINDTODEVICE
1058 if (ax25->ax25_dev != NULL)
1059 goto done;
1061 if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {
1062 if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&
1063 (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {
1064 err = -EADDRNOTAVAIL;
1065 goto out;
1067 } else {
1068 if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1069 err = -EADDRNOTAVAIL;
1070 goto out;
1074 if (ax25_dev != NULL)
1075 ax25_fillin_cb(ax25, ax25_dev);
1077 done:
1078 ax25_cb_add(ax25);
1079 sock_reset_flag(sk, SOCK_ZAPPED);
1081 out:
1082 release_sock(sk);
1084 return 0;
1088 * FIXME: nonblock behaviour looks like it may have a bug.
1090 static int __must_check ax25_connect(struct socket *sock,
1091 struct sockaddr *uaddr, int addr_len, int flags)
1093 struct sock *sk = sock->sk;
1094 ax25_cb *ax25 = ax25_sk(sk), *ax25t;
1095 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1096 ax25_digi *digi = NULL;
1097 int ct = 0, err = 0;
1100 * some sanity checks. code further down depends on this
1103 if (addr_len == sizeof(struct sockaddr_ax25)) {
1104 /* support for this will go away in early 2.5.x */
1105 printk(KERN_WARNING "ax25_connect(): %s uses obsolete socket structure\n",
1106 current->comm);
1108 else if (addr_len != sizeof(struct full_sockaddr_ax25)) {
1109 /* support for old structure may go away some time */
1110 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1111 (addr_len > sizeof(struct full_sockaddr_ax25))) {
1112 return -EINVAL;
1115 printk(KERN_WARNING "ax25_connect(): %s uses old (6 digipeater) socket structure.\n",
1116 current->comm);
1119 if (fsa->fsa_ax25.sax25_family != AF_AX25)
1120 return -EINVAL;
1122 lock_sock(sk);
1124 /* deal with restarts */
1125 if (sock->state == SS_CONNECTING) {
1126 switch (sk->sk_state) {
1127 case TCP_SYN_SENT: /* still trying */
1128 err = -EINPROGRESS;
1129 goto out_release;
1131 case TCP_ESTABLISHED: /* connection established */
1132 sock->state = SS_CONNECTED;
1133 goto out_release;
1135 case TCP_CLOSE: /* connection refused */
1136 sock->state = SS_UNCONNECTED;
1137 err = -ECONNREFUSED;
1138 goto out_release;
1142 if (sk->sk_state == TCP_ESTABLISHED && sk->sk_type == SOCK_SEQPACKET) {
1143 err = -EISCONN; /* No reconnect on a seqpacket socket */
1144 goto out_release;
1147 sk->sk_state = TCP_CLOSE;
1148 sock->state = SS_UNCONNECTED;
1150 kfree(ax25->digipeat);
1151 ax25->digipeat = NULL;
1154 * Handle digi-peaters to be used.
1156 if (addr_len > sizeof(struct sockaddr_ax25) &&
1157 fsa->fsa_ax25.sax25_ndigis != 0) {
1158 /* Valid number of digipeaters ? */
1159 if (fsa->fsa_ax25.sax25_ndigis < 1 || fsa->fsa_ax25.sax25_ndigis > AX25_MAX_DIGIS) {
1160 err = -EINVAL;
1161 goto out_release;
1164 if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1165 err = -ENOBUFS;
1166 goto out_release;
1169 digi->ndigi = fsa->fsa_ax25.sax25_ndigis;
1170 digi->lastrepeat = -1;
1172 while (ct < fsa->fsa_ax25.sax25_ndigis) {
1173 if ((fsa->fsa_digipeater[ct].ax25_call[6] &
1174 AX25_HBIT) && ax25->iamdigi) {
1175 digi->repeated[ct] = 1;
1176 digi->lastrepeat = ct;
1177 } else {
1178 digi->repeated[ct] = 0;
1180 digi->calls[ct] = fsa->fsa_digipeater[ct];
1181 ct++;
1186 * Must bind first - autobinding in this may or may not work. If
1187 * the socket is already bound, check to see if the device has
1188 * been filled in, error if it hasn't.
1190 if (sock_flag(sk, SOCK_ZAPPED)) {
1191 /* check if we can remove this feature. It is broken. */
1192 printk(KERN_WARNING "ax25_connect(): %s uses autobind, please contact jreuter@yaina.de\n",
1193 current->comm);
1194 if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1195 kfree(digi);
1196 goto out_release;
1199 ax25_fillin_cb(ax25, ax25->ax25_dev);
1200 ax25_cb_add(ax25);
1201 } else {
1202 if (ax25->ax25_dev == NULL) {
1203 kfree(digi);
1204 err = -EHOSTUNREACH;
1205 goto out_release;
1209 if (sk->sk_type == SOCK_SEQPACKET &&
1210 (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1211 ax25->ax25_dev->dev))) {
1212 kfree(digi);
1213 err = -EADDRINUSE; /* Already such a connection */
1214 ax25_cb_put(ax25t);
1215 goto out_release;
1218 ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1219 ax25->digipeat = digi;
1221 /* First the easy one */
1222 if (sk->sk_type != SOCK_SEQPACKET) {
1223 sock->state = SS_CONNECTED;
1224 sk->sk_state = TCP_ESTABLISHED;
1225 goto out_release;
1228 /* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1229 sock->state = SS_CONNECTING;
1230 sk->sk_state = TCP_SYN_SENT;
1232 switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1233 case AX25_PROTO_STD_SIMPLEX:
1234 case AX25_PROTO_STD_DUPLEX:
1235 ax25_std_establish_data_link(ax25);
1236 break;
1238 #ifdef CONFIG_AX25_DAMA_SLAVE
1239 case AX25_PROTO_DAMA_SLAVE:
1240 ax25->modulus = AX25_MODULUS;
1241 ax25->window = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1242 if (ax25->ax25_dev->dama.slave)
1243 ax25_ds_establish_data_link(ax25);
1244 else
1245 ax25_std_establish_data_link(ax25);
1246 break;
1247 #endif
1250 ax25->state = AX25_STATE_1;
1252 ax25_start_heartbeat(ax25);
1254 /* Now the loop */
1255 if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1256 err = -EINPROGRESS;
1257 goto out_release;
1260 if (sk->sk_state == TCP_SYN_SENT) {
1261 DEFINE_WAIT(wait);
1263 for (;;) {
1264 prepare_to_wait(sk->sk_sleep, &wait,
1265 TASK_INTERRUPTIBLE);
1266 if (sk->sk_state != TCP_SYN_SENT)
1267 break;
1268 if (!signal_pending(current)) {
1269 release_sock(sk);
1270 schedule();
1271 lock_sock(sk);
1272 continue;
1274 err = -ERESTARTSYS;
1275 break;
1277 finish_wait(sk->sk_sleep, &wait);
1279 if (err)
1280 goto out_release;
1283 if (sk->sk_state != TCP_ESTABLISHED) {
1284 /* Not in ABM, not in WAIT_UA -> failed */
1285 sock->state = SS_UNCONNECTED;
1286 err = sock_error(sk); /* Always set at this point */
1287 goto out_release;
1290 sock->state = SS_CONNECTED;
1292 err = 0;
1293 out_release:
1294 release_sock(sk);
1296 return err;
1299 static int ax25_accept(struct socket *sock, struct socket *newsock, int flags)
1301 struct sk_buff *skb;
1302 struct sock *newsk;
1303 DEFINE_WAIT(wait);
1304 struct sock *sk;
1305 int err = 0;
1307 if (sock->state != SS_UNCONNECTED)
1308 return -EINVAL;
1310 if ((sk = sock->sk) == NULL)
1311 return -EINVAL;
1313 lock_sock(sk);
1314 if (sk->sk_type != SOCK_SEQPACKET) {
1315 err = -EOPNOTSUPP;
1316 goto out;
1319 if (sk->sk_state != TCP_LISTEN) {
1320 err = -EINVAL;
1321 goto out;
1325 * The read queue this time is holding sockets ready to use
1326 * hooked into the SABM we saved
1328 for (;;) {
1329 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
1330 skb = skb_dequeue(&sk->sk_receive_queue);
1331 if (skb)
1332 break;
1334 if (flags & O_NONBLOCK) {
1335 err = -EWOULDBLOCK;
1336 break;
1338 if (!signal_pending(current)) {
1339 release_sock(sk);
1340 schedule();
1341 lock_sock(sk);
1342 continue;
1344 err = -ERESTARTSYS;
1345 break;
1347 finish_wait(sk->sk_sleep, &wait);
1349 if (err)
1350 goto out;
1352 newsk = skb->sk;
1353 newsk->sk_socket = newsock;
1354 newsk->sk_sleep = &newsock->wait;
1356 /* Now attach up the new socket */
1357 kfree_skb(skb);
1358 sk->sk_ack_backlog--;
1359 newsock->sk = newsk;
1360 newsock->state = SS_CONNECTED;
1362 out:
1363 release_sock(sk);
1365 return err;
1368 static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1369 int *uaddr_len, int peer)
1371 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1372 struct sock *sk = sock->sk;
1373 unsigned char ndigi, i;
1374 ax25_cb *ax25;
1375 int err = 0;
1377 lock_sock(sk);
1378 ax25 = ax25_sk(sk);
1380 if (peer != 0) {
1381 if (sk->sk_state != TCP_ESTABLISHED) {
1382 err = -ENOTCONN;
1383 goto out;
1386 fsa->fsa_ax25.sax25_family = AF_AX25;
1387 fsa->fsa_ax25.sax25_call = ax25->dest_addr;
1388 fsa->fsa_ax25.sax25_ndigis = 0;
1390 if (ax25->digipeat != NULL) {
1391 ndigi = ax25->digipeat->ndigi;
1392 fsa->fsa_ax25.sax25_ndigis = ndigi;
1393 for (i = 0; i < ndigi; i++)
1394 fsa->fsa_digipeater[i] =
1395 ax25->digipeat->calls[i];
1397 } else {
1398 fsa->fsa_ax25.sax25_family = AF_AX25;
1399 fsa->fsa_ax25.sax25_call = ax25->source_addr;
1400 fsa->fsa_ax25.sax25_ndigis = 1;
1401 if (ax25->ax25_dev != NULL) {
1402 memcpy(&fsa->fsa_digipeater[0],
1403 ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1404 } else {
1405 fsa->fsa_digipeater[0] = null_ax25_address;
1408 *uaddr_len = sizeof (struct full_sockaddr_ax25);
1410 out:
1411 release_sock(sk);
1413 return err;
1416 static int ax25_sendmsg(struct kiocb *iocb, struct socket *sock,
1417 struct msghdr *msg, size_t len)
1419 struct sockaddr_ax25 *usax = (struct sockaddr_ax25 *)msg->msg_name;
1420 struct sock *sk = sock->sk;
1421 struct sockaddr_ax25 sax;
1422 struct sk_buff *skb;
1423 ax25_digi dtmp, *dp;
1424 ax25_cb *ax25;
1425 size_t size;
1426 int lv, err, addr_len = msg->msg_namelen;
1428 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1429 return -EINVAL;
1431 lock_sock(sk);
1432 ax25 = ax25_sk(sk);
1434 if (sock_flag(sk, SOCK_ZAPPED)) {
1435 err = -EADDRNOTAVAIL;
1436 goto out;
1439 if (sk->sk_shutdown & SEND_SHUTDOWN) {
1440 send_sig(SIGPIPE, current, 0);
1441 err = -EPIPE;
1442 goto out;
1445 if (ax25->ax25_dev == NULL) {
1446 err = -ENETUNREACH;
1447 goto out;
1450 if (len > ax25->ax25_dev->dev->mtu) {
1451 err = -EMSGSIZE;
1452 goto out;
1455 if (usax != NULL) {
1456 if (usax->sax25_family != AF_AX25) {
1457 err = -EINVAL;
1458 goto out;
1461 if (addr_len == sizeof(struct sockaddr_ax25)) {
1462 printk(KERN_WARNING "ax25_sendmsg(): %s uses obsolete socket structure\n",
1463 current->comm);
1465 else if (addr_len != sizeof(struct full_sockaddr_ax25)) {
1466 /* support for old structure may go away some time */
1467 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1468 (addr_len > sizeof(struct full_sockaddr_ax25))) {
1469 err = -EINVAL;
1470 goto out;
1473 printk(KERN_WARNING "ax25_sendmsg(): %s uses old (6 digipeater) socket structure.\n",
1474 current->comm);
1477 if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1478 int ct = 0;
1479 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1481 /* Valid number of digipeaters ? */
1482 if (usax->sax25_ndigis < 1 || usax->sax25_ndigis > AX25_MAX_DIGIS) {
1483 err = -EINVAL;
1484 goto out;
1487 dtmp.ndigi = usax->sax25_ndigis;
1489 while (ct < usax->sax25_ndigis) {
1490 dtmp.repeated[ct] = 0;
1491 dtmp.calls[ct] = fsa->fsa_digipeater[ct];
1492 ct++;
1495 dtmp.lastrepeat = 0;
1498 sax = *usax;
1499 if (sk->sk_type == SOCK_SEQPACKET &&
1500 ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1501 err = -EISCONN;
1502 goto out;
1504 if (usax->sax25_ndigis == 0)
1505 dp = NULL;
1506 else
1507 dp = &dtmp;
1508 } else {
1510 * FIXME: 1003.1g - if the socket is like this because
1511 * it has become closed (not started closed) and is VC
1512 * we ought to SIGPIPE, EPIPE
1514 if (sk->sk_state != TCP_ESTABLISHED) {
1515 err = -ENOTCONN;
1516 goto out;
1518 sax.sax25_family = AF_AX25;
1519 sax.sax25_call = ax25->dest_addr;
1520 dp = ax25->digipeat;
1523 SOCK_DEBUG(sk, "AX.25: sendto: Addresses built.\n");
1525 /* Build a packet */
1526 SOCK_DEBUG(sk, "AX.25: sendto: building packet.\n");
1528 /* Assume the worst case */
1529 size = len + ax25->ax25_dev->dev->hard_header_len;
1531 skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1532 if (skb == NULL)
1533 goto out;
1535 skb_reserve(skb, size - len);
1537 SOCK_DEBUG(sk, "AX.25: Appending user data\n");
1539 /* User data follows immediately after the AX.25 data */
1540 if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
1541 err = -EFAULT;
1542 kfree_skb(skb);
1543 goto out;
1546 skb_reset_network_header(skb);
1548 /* Add the PID if one is not supplied by the user in the skb */
1549 if (!ax25->pidincl)
1550 *skb_push(skb, 1) = sk->sk_protocol;
1552 SOCK_DEBUG(sk, "AX.25: Transmitting buffer\n");
1554 if (sk->sk_type == SOCK_SEQPACKET) {
1555 /* Connected mode sockets go via the LAPB machine */
1556 if (sk->sk_state != TCP_ESTABLISHED) {
1557 kfree_skb(skb);
1558 err = -ENOTCONN;
1559 goto out;
1562 /* Shove it onto the queue and kick */
1563 ax25_output(ax25, ax25->paclen, skb);
1565 err = len;
1566 goto out;
1569 skb_push(skb, 1 + ax25_addr_size(dp));
1571 SOCK_DEBUG(sk, "Building AX.25 Header (dp=%p).\n", dp);
1573 if (dp != NULL)
1574 SOCK_DEBUG(sk, "Num digipeaters=%d\n", dp->ndigi);
1576 /* Build an AX.25 header */
1577 lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1578 dp, AX25_COMMAND, AX25_MODULUS);
1580 SOCK_DEBUG(sk, "Built header (%d bytes)\n",lv);
1582 skb_set_transport_header(skb, lv);
1584 SOCK_DEBUG(sk, "base=%p pos=%p\n",
1585 skb->data, skb_transport_header(skb));
1587 *skb_transport_header(skb) = AX25_UI;
1589 /* Datagram frames go straight out of the door as UI */
1590 ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1592 err = len;
1594 out:
1595 release_sock(sk);
1597 return err;
1600 static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
1601 struct msghdr *msg, size_t size, int flags)
1603 struct sock *sk = sock->sk;
1604 struct sk_buff *skb;
1605 int copied;
1606 int err = 0;
1608 lock_sock(sk);
1610 * This works for seqpacket too. The receiver has ordered the
1611 * queue for us! We do one quick check first though
1613 if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1614 err = -ENOTCONN;
1615 goto out;
1618 /* Now we can treat all alike */
1619 skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1620 flags & MSG_DONTWAIT, &err);
1621 if (skb == NULL)
1622 goto out;
1624 if (!ax25_sk(sk)->pidincl)
1625 skb_pull(skb, 1); /* Remove PID */
1627 skb_reset_transport_header(skb);
1628 copied = skb->len;
1630 if (copied > size) {
1631 copied = size;
1632 msg->msg_flags |= MSG_TRUNC;
1635 skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
1637 if (msg->msg_namelen != 0) {
1638 struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name;
1639 ax25_digi digi;
1640 ax25_address src;
1641 const unsigned char *mac = skb_mac_header(skb);
1643 ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1644 &digi, NULL, NULL);
1645 sax->sax25_family = AF_AX25;
1646 /* We set this correctly, even though we may not let the
1647 application know the digi calls further down (because it
1648 did NOT ask to know them). This could get political... **/
1649 sax->sax25_ndigis = digi.ndigi;
1650 sax->sax25_call = src;
1652 if (sax->sax25_ndigis != 0) {
1653 int ct;
1654 struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1656 for (ct = 0; ct < digi.ndigi; ct++)
1657 fsa->fsa_digipeater[ct] = digi.calls[ct];
1659 msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1662 skb_free_datagram(sk, skb);
1663 err = copied;
1665 out:
1666 release_sock(sk);
1668 return err;
1671 static int ax25_shutdown(struct socket *sk, int how)
1673 /* FIXME - generate DM and RNR states */
1674 return -EOPNOTSUPP;
1677 static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1679 struct sock *sk = sock->sk;
1680 void __user *argp = (void __user *)arg;
1681 int res = 0;
1683 lock_sock(sk);
1684 switch (cmd) {
1685 case TIOCOUTQ: {
1686 long amount;
1687 amount = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc);
1688 if (amount < 0)
1689 amount = 0;
1690 res = put_user(amount, (int __user *)argp);
1691 break;
1694 case TIOCINQ: {
1695 struct sk_buff *skb;
1696 long amount = 0L;
1697 /* These two are safe on a single CPU system as only user tasks fiddle here */
1698 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1699 amount = skb->len;
1700 res = put_user(amount, (int __user *) argp);
1701 break;
1704 case SIOCGSTAMP:
1705 res = sock_get_timestamp(sk, argp);
1706 break;
1708 case SIOCGSTAMPNS:
1709 res = sock_get_timestampns(sk, argp);
1710 break;
1712 case SIOCAX25ADDUID: /* Add a uid to the uid/call map table */
1713 case SIOCAX25DELUID: /* Delete a uid from the uid/call map table */
1714 case SIOCAX25GETUID: {
1715 struct sockaddr_ax25 sax25;
1716 if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1717 res = -EFAULT;
1718 break;
1720 res = ax25_uid_ioctl(cmd, &sax25);
1721 break;
1724 case SIOCAX25NOUID: { /* Set the default policy (default/bar) */
1725 long amount;
1726 if (!capable(CAP_NET_ADMIN)) {
1727 res = -EPERM;
1728 break;
1730 if (get_user(amount, (long __user *)argp)) {
1731 res = -EFAULT;
1732 break;
1734 if (amount > AX25_NOUID_BLOCK) {
1735 res = -EINVAL;
1736 break;
1738 ax25_uid_policy = amount;
1739 res = 0;
1740 break;
1743 case SIOCADDRT:
1744 case SIOCDELRT:
1745 case SIOCAX25OPTRT:
1746 if (!capable(CAP_NET_ADMIN)) {
1747 res = -EPERM;
1748 break;
1750 res = ax25_rt_ioctl(cmd, argp);
1751 break;
1753 case SIOCAX25CTLCON:
1754 if (!capable(CAP_NET_ADMIN)) {
1755 res = -EPERM;
1756 break;
1758 res = ax25_ctl_ioctl(cmd, argp);
1759 break;
1761 case SIOCAX25GETINFO:
1762 case SIOCAX25GETINFOOLD: {
1763 ax25_cb *ax25 = ax25_sk(sk);
1764 struct ax25_info_struct ax25_info;
1766 ax25_info.t1 = ax25->t1 / HZ;
1767 ax25_info.t2 = ax25->t2 / HZ;
1768 ax25_info.t3 = ax25->t3 / HZ;
1769 ax25_info.idle = ax25->idle / (60 * HZ);
1770 ax25_info.n2 = ax25->n2;
1771 ax25_info.t1timer = ax25_display_timer(&ax25->t1timer) / HZ;
1772 ax25_info.t2timer = ax25_display_timer(&ax25->t2timer) / HZ;
1773 ax25_info.t3timer = ax25_display_timer(&ax25->t3timer) / HZ;
1774 ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1775 ax25_info.n2count = ax25->n2count;
1776 ax25_info.state = ax25->state;
1777 ax25_info.rcv_q = atomic_read(&sk->sk_rmem_alloc);
1778 ax25_info.snd_q = atomic_read(&sk->sk_wmem_alloc);
1779 ax25_info.vs = ax25->vs;
1780 ax25_info.vr = ax25->vr;
1781 ax25_info.va = ax25->va;
1782 ax25_info.vs_max = ax25->vs; /* reserved */
1783 ax25_info.paclen = ax25->paclen;
1784 ax25_info.window = ax25->window;
1786 /* old structure? */
1787 if (cmd == SIOCAX25GETINFOOLD) {
1788 static int warned = 0;
1789 if (!warned) {
1790 printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1791 current->comm);
1792 warned=1;
1795 if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1796 res = -EFAULT;
1797 break;
1799 } else {
1800 if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1801 res = -EINVAL;
1802 break;
1805 res = 0;
1806 break;
1809 case SIOCAX25ADDFWD:
1810 case SIOCAX25DELFWD: {
1811 struct ax25_fwd_struct ax25_fwd;
1812 if (!capable(CAP_NET_ADMIN)) {
1813 res = -EPERM;
1814 break;
1816 if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1817 res = -EFAULT;
1818 break;
1820 res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1821 break;
1824 case SIOCGIFADDR:
1825 case SIOCSIFADDR:
1826 case SIOCGIFDSTADDR:
1827 case SIOCSIFDSTADDR:
1828 case SIOCGIFBRDADDR:
1829 case SIOCSIFBRDADDR:
1830 case SIOCGIFNETMASK:
1831 case SIOCSIFNETMASK:
1832 case SIOCGIFMETRIC:
1833 case SIOCSIFMETRIC:
1834 res = -EINVAL;
1835 break;
1837 default:
1838 res = -ENOIOCTLCMD;
1839 break;
1841 release_sock(sk);
1843 return res;
1846 #ifdef CONFIG_PROC_FS
1848 static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1850 struct ax25_cb *ax25;
1851 struct hlist_node *node;
1852 int i = 0;
1854 spin_lock_bh(&ax25_list_lock);
1855 ax25_for_each(ax25, node, &ax25_list) {
1856 if (i == *pos)
1857 return ax25;
1858 ++i;
1860 return NULL;
1863 static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1865 ++*pos;
1867 return hlist_entry( ((struct ax25_cb *)v)->ax25_node.next,
1868 struct ax25_cb, ax25_node);
1871 static void ax25_info_stop(struct seq_file *seq, void *v)
1873 spin_unlock_bh(&ax25_list_lock);
1876 static int ax25_info_show(struct seq_file *seq, void *v)
1878 ax25_cb *ax25 = v;
1879 char buf[11];
1880 int k;
1884 * New format:
1885 * 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
1888 seq_printf(seq, "%8.8lx %s %s%s ",
1889 (long) ax25,
1890 ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1891 ax2asc(buf, &ax25->source_addr),
1892 ax25->iamdigi? "*":"");
1893 seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1895 for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1896 seq_printf(seq, ",%s%s",
1897 ax2asc(buf, &ax25->digipeat->calls[k]),
1898 ax25->digipeat->repeated[k]? "*":"");
1901 seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
1902 ax25->state,
1903 ax25->vs, ax25->vr, ax25->va,
1904 ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1905 ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1906 ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1907 ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1908 ax25->idle / (60 * HZ),
1909 ax25->n2count, ax25->n2,
1910 ax25->rtt / HZ,
1911 ax25->window,
1912 ax25->paclen);
1914 if (ax25->sk != NULL) {
1915 bh_lock_sock(ax25->sk);
1916 seq_printf(seq," %d %d %ld\n",
1917 atomic_read(&ax25->sk->sk_wmem_alloc),
1918 atomic_read(&ax25->sk->sk_rmem_alloc),
1919 ax25->sk->sk_socket != NULL ? SOCK_INODE(ax25->sk->sk_socket)->i_ino : 0L);
1920 bh_unlock_sock(ax25->sk);
1921 } else {
1922 seq_puts(seq, " * * *\n");
1924 return 0;
1927 static const struct seq_operations ax25_info_seqops = {
1928 .start = ax25_info_start,
1929 .next = ax25_info_next,
1930 .stop = ax25_info_stop,
1931 .show = ax25_info_show,
1934 static int ax25_info_open(struct inode *inode, struct file *file)
1936 return seq_open(file, &ax25_info_seqops);
1939 static const struct file_operations ax25_info_fops = {
1940 .owner = THIS_MODULE,
1941 .open = ax25_info_open,
1942 .read = seq_read,
1943 .llseek = seq_lseek,
1944 .release = seq_release,
1947 #endif
1949 static struct net_proto_family ax25_family_ops = {
1950 .family = PF_AX25,
1951 .create = ax25_create,
1952 .owner = THIS_MODULE,
1955 static const struct proto_ops ax25_proto_ops = {
1956 .family = PF_AX25,
1957 .owner = THIS_MODULE,
1958 .release = ax25_release,
1959 .bind = ax25_bind,
1960 .connect = ax25_connect,
1961 .socketpair = sock_no_socketpair,
1962 .accept = ax25_accept,
1963 .getname = ax25_getname,
1964 .poll = datagram_poll,
1965 .ioctl = ax25_ioctl,
1966 .listen = ax25_listen,
1967 .shutdown = ax25_shutdown,
1968 .setsockopt = ax25_setsockopt,
1969 .getsockopt = ax25_getsockopt,
1970 .sendmsg = ax25_sendmsg,
1971 .recvmsg = ax25_recvmsg,
1972 .mmap = sock_no_mmap,
1973 .sendpage = sock_no_sendpage,
1977 * Called by socket.c on kernel start up
1979 static struct packet_type ax25_packet_type = {
1980 .type = __constant_htons(ETH_P_AX25),
1981 .dev = NULL, /* All devices */
1982 .func = ax25_kiss_rcv,
1985 static struct notifier_block ax25_dev_notifier = {
1986 .notifier_call =ax25_device_event,
1989 static int __init ax25_init(void)
1991 int rc = proto_register(&ax25_proto, 0);
1993 if (rc != 0)
1994 goto out;
1996 sock_register(&ax25_family_ops);
1997 dev_add_pack(&ax25_packet_type);
1998 register_netdevice_notifier(&ax25_dev_notifier);
1999 ax25_register_sysctl();
2001 proc_net_fops_create("ax25_route", S_IRUGO, &ax25_route_fops);
2002 proc_net_fops_create("ax25", S_IRUGO, &ax25_info_fops);
2003 proc_net_fops_create("ax25_calls", S_IRUGO, &ax25_uid_fops);
2004 out:
2005 return rc;
2007 module_init(ax25_init);
2010 MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
2011 MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
2012 MODULE_LICENSE("GPL");
2013 MODULE_ALIAS_NETPROTO(PF_AX25);
2015 static void __exit ax25_exit(void)
2017 proc_net_remove("ax25_route");
2018 proc_net_remove("ax25");
2019 proc_net_remove("ax25_calls");
2020 ax25_rt_free();
2021 ax25_uid_free();
2022 ax25_dev_free();
2024 ax25_unregister_sysctl();
2025 unregister_netdevice_notifier(&ax25_dev_notifier);
2027 dev_remove_pack(&ax25_packet_type);
2029 sock_unregister(PF_AX25);
2030 proto_unregister(&ax25_proto);
2032 module_exit(ax25_exit);