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