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