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