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