Pull ec into release branch
[linux-2.6] / 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 <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>
50
51
52
53 HLIST_HEAD(ax25_list);
54 DEFINE_SPINLOCK(ax25_list_lock);
55
56 static const struct proto_ops ax25_proto_ops;
57
58 static void ax25_free_sock(struct sock *sk)
59 {
60         ax25_cb_put(ax25_sk(sk));
61 }
62
63 /*
64  *      Socket removal during an interrupt is now safe.
65  */
66 static void ax25_cb_del(ax25_cb *ax25)
67 {
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);
73         }
74 }
75
76 /*
77  *      Kill all bound sockets on a dropped device.
78  */
79 static void ax25_kill_by_device(struct net_device *dev)
80 {
81         ax25_dev *ax25_dev;
82         ax25_cb *s;
83         struct hlist_node *node;
84
85         if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
86                 return;
87
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);
93                 }
94         }
95         spin_unlock_bh(&ax25_list_lock);
96 }
97
98 /*
99  *      Handle device status changes.
100  */
101 static int ax25_device_event(struct notifier_block *this, unsigned long event,
102         void *ptr)
103 {
104         struct net_device *dev = (struct net_device *)ptr;
105
106         /* Reject non AX.25 devices */
107         if (dev->type != ARPHRD_AX25)
108                 return NOTIFY_DONE;
109
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;
121         }
122
123         return NOTIFY_DONE;
124 }
125
126 /*
127  *      Add a socket to the bound sockets list.
128  */
129 void ax25_cb_add(ax25_cb *ax25)
130 {
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);
135 }
136
137 /*
138  *      Find a socket that wants to accept the SABM we have just
139  *      received.
140  */
141 struct sock *ax25_find_listener(ax25_address *addr, int digi,
142         struct net_device *dev, int type)
143 {
144         ax25_cb *s;
145         struct hlist_node *node;
146
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;
158                         }
159                 }
160         }
161         spin_unlock(&ax25_list_lock);
162
163         return NULL;
164 }
165
166 /*
167  *      Find an AX.25 socket given both ends.
168  */
169 struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
170         int type)
171 {
172         struct sock *sk = NULL;
173         ax25_cb *s;
174         struct hlist_node *node;
175
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;
184                 }
185         }
186
187         spin_unlock(&ax25_list_lock);
188
189         return sk;
190 }
191
192 /*
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.
195  */
196 ax25_cb *ax25_find_cb(ax25_address *src_addr, ax25_address *dest_addr,
197         ax25_digi *digi, struct net_device *dev)
198 {
199         ax25_cb *s;
200         struct hlist_node *node;
201
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;
217                         }
218                         ax25_cb_hold(s);
219                         spin_unlock_bh(&ax25_list_lock);
220
221                         return s;
222                 }
223         }
224         spin_unlock_bh(&ax25_list_lock);
225
226         return NULL;
227 }
228
229 EXPORT_SYMBOL(ax25_find_cb);
230
231 void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
232 {
233         ax25_cb *s;
234         struct sk_buff *copy;
235         struct hlist_node *node;
236
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);
248                 }
249         }
250         spin_unlock(&ax25_list_lock);
251 }
252
253 /*
254  *      Deferred destroy.
255  */
256 void ax25_destroy_socket(ax25_cb *);
257
258 /*
259  *      Handler for deferred kills.
260  */
261 static void ax25_destroy_timer(unsigned long data)
262 {
263         ax25_cb *ax25=(ax25_cb *)data;
264         struct sock *sk;
265
266         sk=ax25->sk;
267
268         bh_lock_sock(sk);
269         sock_hold(sk);
270         ax25_destroy_socket(ax25);
271         bh_unlock_sock(sk);
272         sock_put(sk);
273 }
274
275 /*
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.
280  */
281 void ax25_destroy_socket(ax25_cb *ax25)
282 {
283         struct sk_buff *skb;
284
285         ax25_cb_del(ax25);
286
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);
292
293         ax25_clear_queues(ax25);        /* Flush the queues */
294
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);
300
301                                 /* Queue the unaccepted socket for death */
302                                 sock_orphan(skb->sk);
303
304                                 ax25_start_heartbeat(sax25);
305                                 sax25->state = AX25_STATE_0;
306                         }
307
308                         kfree_skb(skb);
309                 }
310                 skb_queue_purge(&ax25->sk->sk_write_queue);
311         }
312
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);
326                 }
327         } else {
328                 ax25_cb_put(ax25);
329         }
330 }
331
332 /*
333  * dl1bke 960311: set parameters for existing AX.25 connections,
334  *                includes a KILL command to abort any connection.
335  *                VERY useful for debugging ;-)
336  */
337 static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
338 {
339         struct ax25_ctl_struct ax25_ctl;
340         ax25_digi digi;
341         ax25_dev *ax25_dev;
342         ax25_cb *ax25;
343         unsigned int k;
344
345         if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
346                 return -EFAULT;
347
348         if ((ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr)) == NULL)
349                 return -ENODEV;
350
351         if (ax25_ctl.digi_count > AX25_MAX_DIGIS)
352                 return -EINVAL;
353
354         digi.ndigi = ax25_ctl.digi_count;
355         for (k = 0; k < digi.ndigi; k++)
356                 digi.calls[k] = ax25_ctl.digi_addr[k];
357
358         if ((ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev)) == NULL)
359                 return -ENOTCONN;
360
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;
370
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;
378                 }
379                 ax25->window = ax25_ctl.arg;
380                 break;
381
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;
388
389         case AX25_T2:
390                 if (ax25_ctl.arg < 1)
391                         return -EINVAL;
392                 ax25->t2 = ax25_ctl.arg * HZ;
393                 break;
394
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;
401
402         case AX25_T3:
403                 if (ax25_ctl.arg < 0)
404                         return -EINVAL;
405                 ax25->t3 = ax25_ctl.arg * HZ;
406                 break;
407
408         case AX25_IDLE:
409                 if (ax25_ctl.arg < 0)
410                         return -EINVAL;
411                 ax25->idle = ax25_ctl.arg * 60 * HZ;
412                 break;
413
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;
419
420         default:
421                 return -EINVAL;
422           }
423
424         return 0;
425 }
426
427 static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)
428 {
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];
437
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];
444         }
445 }
446
447 /*
448  *      Fill in a created AX.25 created control block with the default
449  *      values for a particular device.
450  */
451 void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
452 {
453         ax25->ax25_dev = ax25_dev;
454
455         if (ax25->ax25_dev != NULL) {
456                 ax25_fillin_cb_from_dev(ax25, ax25_dev);
457                 return;
458         }
459
460         /*
461          * No device, use kernel / AX.25 spec default values
462          */
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;
471
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;
478         }
479 }
480
481 /*
482  * Create an empty AX.25 control block.
483  */
484 ax25_cb *ax25_create_cb(void)
485 {
486         ax25_cb *ax25;
487
488         if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
489                 return NULL;
490
491         atomic_set(&ax25->refcount, 1);
492
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);
497
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);
503
504         ax25_fillin_cb(ax25, NULL);
505
506         ax25->state = AX25_STATE_0;
507
508         return ax25;
509 }
510
511 /*
512  *      Handling for system calls applied via the various interfaces to an
513  *      AX25 socket object
514  */
515
516 static int ax25_setsockopt(struct socket *sock, int level, int optname,
517         char __user *optval, int optlen)
518 {
519         struct sock *sk = sock->sk;
520         ax25_cb *ax25;
521         struct net_device *dev;
522         char devname[IFNAMSIZ];
523         int opt, res = 0;
524
525         if (level != SOL_AX25)
526                 return -ENOPROTOOPT;
527
528         if (optlen < sizeof(int))
529                 return -EINVAL;
530
531         if (get_user(opt, (int __user *)optval))
532                 return -EFAULT;
533
534         lock_sock(sk);
535         ax25 = ax25_sk(sk);
536
537         switch (optname) {
538         case AX25_WINDOW:
539                 if (ax25->modulus == AX25_MODULUS) {
540                         if (opt < 1 || opt > 7) {
541                                 res = -EINVAL;
542                                 break;
543                         }
544                 } else {
545                         if (opt < 1 || opt > 63) {
546                                 res = -EINVAL;
547                                 break;
548                         }
549                 }
550                 ax25->window = opt;
551                 break;
552
553         case AX25_T1:
554                 if (opt < 1) {
555                         res = -EINVAL;
556                         break;
557                 }
558                 ax25->rtt = (opt * HZ) / 2;
559                 ax25->t1  = opt * HZ;
560                 break;
561
562         case AX25_T2:
563                 if (opt < 1) {
564                         res = -EINVAL;
565                         break;
566                 }
567                 ax25->t2 = opt * HZ;
568                 break;
569
570         case AX25_N2:
571                 if (opt < 1 || opt > 31) {
572                         res = -EINVAL;
573                         break;
574                 }
575                 ax25->n2 = opt;
576                 break;
577
578         case AX25_T3:
579                 if (opt < 1) {
580                         res = -EINVAL;
581                         break;
582                 }
583                 ax25->t3 = opt * HZ;
584                 break;
585
586         case AX25_IDLE:
587                 if (opt < 0) {
588                         res = -EINVAL;
589                         break;
590                 }
591                 ax25->idle = opt * 60 * HZ;
592                 break;
593
594         case AX25_BACKOFF:
595                 if (opt < 0 || opt > 2) {
596                         res = -EINVAL;
597                         break;
598                 }
599                 ax25->backoff = opt;
600                 break;
601
602         case AX25_EXTSEQ:
603                 ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
604                 break;
605
606         case AX25_PIDINCL:
607                 ax25->pidincl = opt ? 1 : 0;
608                 break;
609
610         case AX25_IAMDIGI:
611                 ax25->iamdigi = opt ? 1 : 0;
612                 break;
613
614         case AX25_PACLEN:
615                 if (opt < 16 || opt > 65535) {
616                         res = -EINVAL;
617                         break;
618                 }
619                 ax25->paclen = opt;
620                 break;
621
622         case SO_BINDTODEVICE:
623                 if (optlen > IFNAMSIZ)
624                         optlen=IFNAMSIZ;
625                 if (copy_from_user(devname, optval, optlen)) {
626                 res = -EFAULT;
627                         break;
628                 }
629
630                 dev = dev_get_by_name(devname);
631                 if (dev == NULL) {
632                         res = -ENODEV;
633                         break;
634                 }
635
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;
642                 }
643
644                 ax25->ax25_dev = ax25_dev_ax25dev(dev);
645                 ax25_fillin_cb(ax25, ax25->ax25_dev);
646                 break;
647
648         default:
649                 res = -ENOPROTOOPT;
650         }
651         release_sock(sk);
652
653         return res;
654 }
655
656 static int ax25_getsockopt(struct socket *sock, int level, int optname,
657         char __user *optval, int __user *optlen)
658 {
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;
666
667         if (level != SOL_AX25)
668                 return -ENOPROTOOPT;
669
670         if (get_user(maxlen, optlen))
671                 return -EFAULT;
672
673         if (maxlen < 1)
674                 return -EFAULT;
675
676         valptr = (void *) &val;
677         length = min_t(unsigned int, maxlen, sizeof(int));
678
679         lock_sock(sk);
680         ax25 = ax25_sk(sk);
681
682         switch (optname) {
683         case AX25_WINDOW:
684                 val = ax25->window;
685                 break;
686
687         case AX25_T1:
688                 val = ax25->t1 / HZ;
689                 break;
690
691         case AX25_T2:
692                 val = ax25->t2 / HZ;
693                 break;
694
695         case AX25_N2:
696                 val = ax25->n2;
697                 break;
698
699         case AX25_T3:
700                 val = ax25->t3 / HZ;
701                 break;
702
703         case AX25_IDLE:
704                 val = ax25->idle / (60 * HZ);
705                 break;
706
707         case AX25_BACKOFF:
708                 val = ax25->backoff;
709                 break;
710
711         case AX25_EXTSEQ:
712                 val = (ax25->modulus == AX25_EMODULUS);
713                 break;
714
715         case AX25_PIDINCL:
716                 val = ax25->pidincl;
717                 break;
718
719         case AX25_IAMDIGI:
720                 val = ax25->iamdigi;
721                 break;
722
723         case AX25_PACLEN:
724                 val = ax25->paclen;
725                 break;
726
727         case SO_BINDTODEVICE:
728                 ax25_dev = ax25->ax25_dev;
729
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;
736                 }
737
738                 valptr = (void *) devname;
739                 break;
740
741         default:
742                 release_sock(sk);
743                 return -ENOPROTOOPT;
744         }
745         release_sock(sk);
746
747         if (put_user(length, optlen))
748                 return -EFAULT;
749
750         return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
751 }
752
753 static int ax25_listen(struct socket *sock, int backlog)
754 {
755         struct sock *sk = sock->sk;
756         int res = 0;
757
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;
763         }
764         res = -EOPNOTSUPP;
765
766 out:
767         release_sock(sk);
768
769         return res;
770 }
771
772 /*
773  * XXX: when creating ax25_sock we should update the .obj_size setting
774  * below.
775  */
776 static struct proto ax25_proto = {
777         .name     = "AX25",
778         .owner    = THIS_MODULE,
779         .obj_size = sizeof(struct sock),
780 };
781
782 static int ax25_create(struct socket *sock, int protocol)
783 {
784         struct sock *sk;
785         ax25_cb *ax25;
786
787         switch (sock->type) {
788         case SOCK_DGRAM:
789                 if (protocol == 0 || protocol == PF_AX25)
790                         protocol = AX25_P_TEXT;
791                 break;
792
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;
823                 }
824                 break;
825
826         case SOCK_RAW:
827                 break;
828         default:
829                 return -ESOCKTNOSUPPORT;
830         }
831
832         if ((sk = sk_alloc(PF_AX25, GFP_ATOMIC, &ax25_proto, 1)) == NULL)
833                 return -ENOMEM;
834
835         ax25 = sk->sk_protinfo = ax25_create_cb();
836         if (!ax25) {
837                 sk_free(sk);
838                 return -ENOMEM;
839         }
840
841         sock_init_data(sock, sk);
842
843         sk->sk_destruct = ax25_free_sock;
844         sock->ops    = &ax25_proto_ops;
845         sk->sk_protocol = protocol;
846
847         ax25->sk    = sk;
848
849         return 0;
850 }
851
852 struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
853 {
854         struct sock *sk;
855         ax25_cb *ax25, *oax25;
856
857         if ((sk = sk_alloc(PF_AX25, GFP_ATOMIC, osk->sk_prot, 1)) == NULL)
858                 return NULL;
859
860         if ((ax25 = ax25_create_cb()) == NULL) {
861                 sk_free(sk);
862                 return NULL;
863         }
864
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;
874         }
875
876         sock_init_data(NULL, sk);
877
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);
888
889         oax25 = ax25_sk(osk);
890
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;
903
904         ax25->ax25_dev    = ax25_dev;
905         ax25->source_addr = oax25->source_addr;
906
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;
914                 }
915         }
916
917         sk->sk_protinfo = ax25;
918         ax25->sk    = sk;
919
920         return sk;
921 }
922
923 static int ax25_release(struct socket *sock)
924 {
925         struct sock *sk = sock->sk;
926         ax25_cb *ax25;
927
928         if (sk == NULL)
929                 return 0;
930
931         sock_hold(sk);
932         sock_orphan(sk);
933         lock_sock(sk);
934         ax25 = ax25_sk(sk);
935
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;
944
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;
953
954                 case AX25_STATE_3:
955                 case AX25_STATE_4:
956                         ax25_clear_queues(ax25);
957                         ax25->n2count = 0;
958
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
976                         }
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;
985
986                 default:
987                         break;
988                 }
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);
994         }
995
996         sock->sk   = NULL;
997         release_sock(sk);
998         sock_put(sk);
999
1000         return 0;
1001 }
1002
1003 /*
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.
1008  */
1009 static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1010 {
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;
1018
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;
1025         }
1026
1027                 printk(KERN_WARNING "ax25_bind(): %s uses old (6 digipeater) socket structure.\n",
1028                         current->comm);
1029         }
1030
1031         if (addr->fsa_ax25.sax25_family != AF_AX25)
1032                 return -EINVAL;
1033
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;
1041
1042                 call = addr->fsa_ax25.sax25_call;
1043         }
1044
1045         lock_sock(sk);
1046
1047         ax25 = ax25_sk(sk);
1048         if (!sock_flag(sk, SOCK_ZAPPED)) {
1049                 err = -EINVAL;
1050                 goto out;
1051         }
1052
1053         ax25->source_addr = call;
1054
1055         /*
1056          * User already set interface with SO_BINDTODEVICE
1057          */
1058         if (ax25->ax25_dev != NULL)
1059                 goto done;
1060
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;
1066                 }
1067         } else {
1068                 if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1069                         err = -EADDRNOTAVAIL;
1070                         goto out;
1071                 }
1072         }
1073
1074         if (ax25_dev != NULL)
1075                 ax25_fillin_cb(ax25, ax25_dev);
1076
1077 done:
1078         ax25_cb_add(ax25);
1079         sock_reset_flag(sk, SOCK_ZAPPED);
1080
1081 out:
1082         release_sock(sk);
1083
1084         return 0;
1085 }
1086
1087 /*
1088  *      FIXME: nonblock behaviour looks like it may have a bug.
1089  */
1090 static int __must_check ax25_connect(struct socket *sock,
1091         struct sockaddr *uaddr, int addr_len, int flags)
1092 {
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;
1098
1099         /*
1100          * some sanity checks. code further down depends on this
1101          */
1102
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);
1107         }
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;
1113                 }
1114
1115                 printk(KERN_WARNING "ax25_connect(): %s uses old (6 digipeater) socket structure.\n",
1116                         current->comm);
1117         }
1118
1119         if (fsa->fsa_ax25.sax25_family != AF_AX25)
1120                 return -EINVAL;
1121
1122         lock_sock(sk);
1123
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;
1130
1131                 case TCP_ESTABLISHED: /* connection established */
1132                         sock->state = SS_CONNECTED;
1133                         goto out_release;
1134
1135                 case TCP_CLOSE: /* connection refused */
1136                         sock->state = SS_UNCONNECTED;
1137                         err = -ECONNREFUSED;
1138                         goto out_release;
1139                 }
1140         }
1141
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;
1145         }
1146
1147         sk->sk_state   = TCP_CLOSE;
1148         sock->state = SS_UNCONNECTED;
1149
1150         kfree(ax25->digipeat);
1151         ax25->digipeat = NULL;
1152
1153         /*
1154          *      Handle digi-peaters to be used.
1155          */
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;
1162                 }
1163
1164                 if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1165                         err = -ENOBUFS;
1166                         goto out_release;
1167                 }
1168
1169                 digi->ndigi      = fsa->fsa_ax25.sax25_ndigis;
1170                 digi->lastrepeat = -1;
1171
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;
1179                         }
1180                         digi->calls[ct] = fsa->fsa_digipeater[ct];
1181                         ct++;
1182                 }
1183         }
1184
1185         /*
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.
1189          */
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;
1197                 }
1198
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;
1206                 }
1207         }
1208
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;
1216         }
1217
1218         ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1219         ax25->digipeat  = digi;
1220
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;
1226         }
1227
1228         /* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1229         sock->state        = SS_CONNECTING;
1230         sk->sk_state          = TCP_SYN_SENT;
1231
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;
1237
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
1248         }
1249
1250         ax25->state = AX25_STATE_1;
1251
1252         ax25_start_heartbeat(ax25);
1253
1254         /* Now the loop */
1255         if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1256                 err = -EINPROGRESS;
1257                 goto out_release;
1258         }
1259
1260         if (sk->sk_state == TCP_SYN_SENT) {
1261                 DEFINE_WAIT(wait);
1262
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;
1273                         }
1274                         err = -ERESTARTSYS;
1275                         break;
1276                 }
1277                 finish_wait(sk->sk_sleep, &wait);
1278
1279                 if (err)
1280                         goto out_release;
1281         }
1282
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;
1288         }
1289
1290         sock->state = SS_CONNECTED;
1291
1292         err = 0;
1293 out_release:
1294         release_sock(sk);
1295
1296         return err;
1297 }
1298
1299 static int ax25_accept(struct socket *sock, struct socket *newsock, int flags)
1300 {
1301         struct sk_buff *skb;
1302         struct sock *newsk;
1303         DEFINE_WAIT(wait);
1304         struct sock *sk;
1305         int err = 0;
1306
1307         if (sock->state != SS_UNCONNECTED)
1308                 return -EINVAL;
1309
1310         if ((sk = sock->sk) == NULL)
1311                 return -EINVAL;
1312
1313         lock_sock(sk);
1314         if (sk->sk_type != SOCK_SEQPACKET) {
1315                 err = -EOPNOTSUPP;
1316                 goto out;
1317         }
1318
1319         if (sk->sk_state != TCP_LISTEN) {
1320                 err = -EINVAL;
1321                 goto out;
1322         }
1323
1324         /*
1325          *      The read queue this time is holding sockets ready to use
1326          *      hooked into the SABM we saved
1327          */
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;
1333
1334                 if (flags & O_NONBLOCK) {
1335                         err = -EWOULDBLOCK;
1336                         break;
1337                 }
1338                 if (!signal_pending(current)) {
1339                         release_sock(sk);
1340                         schedule();
1341                         lock_sock(sk);
1342                         continue;
1343                 }
1344                 err = -ERESTARTSYS;
1345                 break;
1346         }
1347         finish_wait(sk->sk_sleep, &wait);
1348
1349         if (err)
1350                 goto out;
1351
1352         newsk            = skb->sk;
1353         newsk->sk_socket = newsock;
1354         newsk->sk_sleep  = &newsock->wait;
1355
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;
1361
1362 out:
1363         release_sock(sk);
1364
1365         return err;
1366 }
1367
1368 static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1369         int *uaddr_len, int peer)
1370 {
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;
1376
1377         lock_sock(sk);
1378         ax25 = ax25_sk(sk);
1379
1380         if (peer != 0) {
1381                 if (sk->sk_state != TCP_ESTABLISHED) {
1382                         err = -ENOTCONN;
1383                         goto out;
1384                 }
1385
1386                 fsa->fsa_ax25.sax25_family = AF_AX25;
1387                 fsa->fsa_ax25.sax25_call   = ax25->dest_addr;
1388                 fsa->fsa_ax25.sax25_ndigis = 0;
1389
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];
1396                 }
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;
1406                 }
1407         }
1408         *uaddr_len = sizeof (struct full_sockaddr_ax25);
1409
1410 out:
1411         release_sock(sk);
1412
1413         return err;
1414 }
1415
1416 static int ax25_sendmsg(struct kiocb *iocb, struct socket *sock,
1417                         struct msghdr *msg, size_t len)
1418 {
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;
1427
1428         if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1429                 return -EINVAL;
1430
1431         lock_sock(sk);
1432         ax25 = ax25_sk(sk);
1433
1434         if (sock_flag(sk, SOCK_ZAPPED)) {
1435                 err = -EADDRNOTAVAIL;
1436                 goto out;
1437         }
1438
1439         if (sk->sk_shutdown & SEND_SHUTDOWN) {
1440                 send_sig(SIGPIPE, current, 0);
1441                 err = -EPIPE;
1442                 goto out;
1443         }
1444
1445         if (ax25->ax25_dev == NULL) {
1446                 err = -ENETUNREACH;
1447                 goto out;
1448         }
1449
1450         if (len > ax25->ax25_dev->dev->mtu) {
1451                 err = -EMSGSIZE;
1452                 goto out;
1453         }
1454
1455         if (usax != NULL) {
1456                 if (usax->sax25_family != AF_AX25) {
1457                         err = -EINVAL;
1458                         goto out;
1459                 }
1460
1461                 if (addr_len == sizeof(struct sockaddr_ax25)) {
1462                         printk(KERN_WARNING "ax25_sendmsg(): %s uses obsolete socket structure\n",
1463                                 current->comm);
1464                 }
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;
1471                         }
1472
1473                         printk(KERN_WARNING "ax25_sendmsg(): %s uses old (6 digipeater) socket structure.\n",
1474                                 current->comm);
1475                 }
1476
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;
1480
1481                         /* Valid number of digipeaters ? */
1482                         if (usax->sax25_ndigis < 1 || usax->sax25_ndigis > AX25_MAX_DIGIS) {
1483                                 err = -EINVAL;
1484                                 goto out;
1485                         }
1486
1487                         dtmp.ndigi      = usax->sax25_ndigis;
1488
1489                         while (ct < usax->sax25_ndigis) {
1490                                 dtmp.repeated[ct] = 0;
1491                                 dtmp.calls[ct]    = fsa->fsa_digipeater[ct];
1492                                 ct++;
1493                         }
1494
1495                         dtmp.lastrepeat = 0;
1496                 }
1497
1498                 sax = *usax;
1499                 if (sk->sk_type == SOCK_SEQPACKET &&
1500                     ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1501                         err = -EISCONN;
1502                         goto out;
1503                 }
1504                 if (usax->sax25_ndigis == 0)
1505                         dp = NULL;
1506                 else
1507                         dp = &dtmp;
1508         } else {
1509                 /*
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
1513                  */
1514                 if (sk->sk_state != TCP_ESTABLISHED) {
1515                         err = -ENOTCONN;
1516                         goto out;
1517                 }
1518                 sax.sax25_family = AF_AX25;
1519                 sax.sax25_call   = ax25->dest_addr;
1520                 dp = ax25->digipeat;
1521         }
1522
1523         SOCK_DEBUG(sk, "AX.25: sendto: Addresses built.\n");
1524
1525         /* Build a packet */
1526         SOCK_DEBUG(sk, "AX.25: sendto: building packet.\n");
1527
1528         /* Assume the worst case */
1529         size = len + ax25->ax25_dev->dev->hard_header_len;
1530
1531         skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1532         if (skb == NULL)
1533                 goto out;
1534
1535         skb_reserve(skb, size - len);
1536
1537         SOCK_DEBUG(sk, "AX.25: Appending user data\n");
1538
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;
1544         }
1545
1546         skb_reset_network_header(skb);
1547
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;
1551
1552         SOCK_DEBUG(sk, "AX.25: Transmitting buffer\n");
1553
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;
1560                 }
1561
1562                 /* Shove it onto the queue and kick */
1563                 ax25_output(ax25, ax25->paclen, skb);
1564
1565                 err = len;
1566                 goto out;
1567         }
1568
1569         skb_push(skb, 1 + ax25_addr_size(dp));
1570
1571         SOCK_DEBUG(sk, "Building AX.25 Header (dp=%p).\n", dp);
1572
1573         if (dp != NULL)
1574                 SOCK_DEBUG(sk, "Num digipeaters=%d\n", dp->ndigi);
1575
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);
1579
1580         SOCK_DEBUG(sk, "Built header (%d bytes)\n",lv);
1581
1582         skb_set_transport_header(skb, lv);
1583
1584         SOCK_DEBUG(sk, "base=%p pos=%p\n",
1585                    skb->data, skb_transport_header(skb));
1586
1587         *skb_transport_header(skb) = AX25_UI;
1588
1589         /* Datagram frames go straight out of the door as UI */
1590         ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1591
1592         err = len;
1593
1594 out:
1595         release_sock(sk);
1596
1597         return err;
1598 }
1599
1600 static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
1601         struct msghdr *msg, size_t size, int flags)
1602 {
1603         struct sock *sk = sock->sk;
1604         struct sk_buff *skb;
1605         int copied;
1606         int err = 0;
1607
1608         lock_sock(sk);
1609         /*
1610          *      This works for seqpacket too. The receiver has ordered the
1611          *      queue for us! We do one quick check first though
1612          */
1613         if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1614                 err =  -ENOTCONN;
1615                 goto out;
1616         }
1617
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;
1623
1624         if (!ax25_sk(sk)->pidincl)
1625                 skb_pull(skb, 1);               /* Remove PID */
1626
1627         skb_reset_transport_header(skb);
1628         copied = skb->len;
1629
1630         if (copied > size) {
1631                 copied = size;
1632                 msg->msg_flags |= MSG_TRUNC;
1633         }
1634
1635         skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
1636
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);
1642
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;
1651
1652                 if (sax->sax25_ndigis != 0) {
1653                         int ct;
1654                         struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1655
1656                         for (ct = 0; ct < digi.ndigi; ct++)
1657                                 fsa->fsa_digipeater[ct] = digi.calls[ct];
1658                 }
1659                 msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1660         }
1661
1662         skb_free_datagram(sk, skb);
1663         err = copied;
1664
1665 out:
1666         release_sock(sk);
1667
1668         return err;
1669 }
1670
1671 static int ax25_shutdown(struct socket *sk, int how)
1672 {
1673         /* FIXME - generate DM and RNR states */
1674         return -EOPNOTSUPP;
1675 }
1676
1677 static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1678 {
1679         struct sock *sk = sock->sk;
1680         void __user *argp = (void __user *)arg;
1681         int res = 0;
1682
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;
1692         }
1693
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;
1702         }
1703
1704         case SIOCGSTAMP:
1705                 res = sock_get_timestamp(sk, argp);
1706                 break;
1707
1708         case SIOCGSTAMPNS:
1709                 res = sock_get_timestampns(sk, argp);
1710                 break;
1711
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;
1719                 }
1720                 res = ax25_uid_ioctl(cmd, &sax25);
1721                 break;
1722         }
1723
1724         case SIOCAX25NOUID: {   /* Set the default policy (default/bar) */
1725                 long amount;
1726                 if (!capable(CAP_NET_ADMIN)) {
1727                         res = -EPERM;
1728                         break;
1729                 }
1730                 if (get_user(amount, (long __user *)argp)) {
1731                         res = -EFAULT;
1732                         break;
1733                 }
1734                 if (amount > AX25_NOUID_BLOCK) {
1735                         res = -EINVAL;
1736                         break;
1737                 }
1738                 ax25_uid_policy = amount;
1739                 res = 0;
1740                 break;
1741         }
1742
1743         case SIOCADDRT:
1744         case SIOCDELRT:
1745         case SIOCAX25OPTRT:
1746                 if (!capable(CAP_NET_ADMIN)) {
1747                         res = -EPERM;
1748                         break;
1749                 }
1750                 res = ax25_rt_ioctl(cmd, argp);
1751                 break;
1752
1753         case SIOCAX25CTLCON:
1754                 if (!capable(CAP_NET_ADMIN)) {
1755                         res = -EPERM;
1756                         break;
1757                 }
1758                 res = ax25_ctl_ioctl(cmd, argp);
1759                 break;
1760
1761         case SIOCAX25GETINFO:
1762         case SIOCAX25GETINFOOLD: {
1763                 ax25_cb *ax25 = ax25_sk(sk);
1764                 struct ax25_info_struct ax25_info;
1765
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;
1785
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;
1793                         }
1794
1795                         if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1796                                 res = -EFAULT;
1797                                 break;
1798                         }
1799                 } else {
1800                         if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1801                                 res = -EINVAL;
1802                                 break;
1803                         }
1804                 }
1805                 res = 0;
1806                 break;
1807         }
1808
1809         case SIOCAX25ADDFWD:
1810         case SIOCAX25DELFWD: {
1811                 struct ax25_fwd_struct ax25_fwd;
1812                 if (!capable(CAP_NET_ADMIN)) {
1813                         res = -EPERM;
1814                         break;
1815                 }
1816                 if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1817                         res = -EFAULT;
1818                         break;
1819                 }
1820                 res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1821                 break;
1822         }
1823
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;
1836
1837         default:
1838                 res = -ENOIOCTLCMD;
1839                 break;
1840         }
1841         release_sock(sk);
1842
1843         return res;
1844 }
1845
1846 #ifdef CONFIG_PROC_FS
1847
1848 static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1849 {
1850         struct ax25_cb *ax25;
1851         struct hlist_node *node;
1852         int i = 0;
1853
1854         spin_lock_bh(&ax25_list_lock);
1855         ax25_for_each(ax25, node, &ax25_list) {
1856                 if (i == *pos)
1857                         return ax25;
1858                 ++i;
1859         }
1860         return NULL;
1861 }
1862
1863 static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1864 {
1865         ++*pos;
1866
1867         return hlist_entry( ((struct ax25_cb *)v)->ax25_node.next,
1868                             struct ax25_cb, ax25_node);
1869 }
1870
1871 static void ax25_info_stop(struct seq_file *seq, void *v)
1872 {
1873         spin_unlock_bh(&ax25_list_lock);
1874 }
1875
1876 static int ax25_info_show(struct seq_file *seq, void *v)
1877 {
1878         ax25_cb *ax25 = v;
1879         char buf[11];
1880         int k;
1881
1882
1883         /*
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
1886          */
1887
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));
1894
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]? "*":"");
1899         }
1900
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);
1913
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");
1923         }
1924         return 0;
1925 }
1926
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,
1932 };
1933
1934 static int ax25_info_open(struct inode *inode, struct file *file)
1935 {
1936         return seq_open(file, &ax25_info_seqops);
1937 }
1938
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,
1945 };
1946
1947 #endif
1948
1949 static struct net_proto_family ax25_family_ops = {
1950         .family =       PF_AX25,
1951         .create =       ax25_create,
1952         .owner  =       THIS_MODULE,
1953 };
1954
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,
1974 };
1975
1976 /*
1977  *      Called by socket.c on kernel start up
1978  */
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,
1983 };
1984
1985 static struct notifier_block ax25_dev_notifier = {
1986         .notifier_call =ax25_device_event,
1987 };
1988
1989 static int __init ax25_init(void)
1990 {
1991         int rc = proto_register(&ax25_proto, 0);
1992
1993         if (rc != 0)
1994                 goto out;
1995
1996         sock_register(&ax25_family_ops);
1997         dev_add_pack(&ax25_packet_type);
1998         register_netdevice_notifier(&ax25_dev_notifier);
1999         ax25_register_sysctl();
2000
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;
2006 }
2007 module_init(ax25_init);
2008
2009
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);
2014
2015 static void __exit ax25_exit(void)
2016 {
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();
2023
2024         ax25_unregister_sysctl();
2025         unregister_netdevice_notifier(&ax25_dev_notifier);
2026
2027         dev_remove_pack(&ax25_packet_type);
2028
2029         sock_unregister(PF_AX25);
2030         proto_unregister(&ax25_proto);
2031 }
2032 module_exit(ax25_exit);