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