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