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