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