Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/net/ax25/af_ax25.c
15112 views
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 ([email protected])
8
* Copyright (C) Jonathan Naylor G4KLX ([email protected])
9
* Copyright (C) Darryl Miles G7LED ([email protected])
10
* Copyright (C) Steven Whitehouse GW7RRM ([email protected])
11
* Copyright (C) Joerg Reuter DL1BKE ([email protected])
12
* Copyright (C) Hans-Joachim Hetscher DD8NE ([email protected])
13
* Copyright (C) Hans Alblas PE1AYX ([email protected])
14
* Copyright (C) Frederic Rible F1OAT ([email protected])
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 <asm/system.h>
37
#include <linux/fcntl.h>
38
#include <linux/termios.h> /* For TIOCINQ/OUTQ */
39
#include <linux/mm.h>
40
#include <linux/interrupt.h>
41
#include <linux/notifier.h>
42
#include <linux/proc_fs.h>
43
#include <linux/stat.h>
44
#include <linux/netfilter.h>
45
#include <linux/sysctl.h>
46
#include <linux/init.h>
47
#include <linux/spinlock.h>
48
#include <net/net_namespace.h>
49
#include <net/tcp_states.h>
50
#include <net/ip.h>
51
#include <net/arp.h>
52
53
54
55
HLIST_HEAD(ax25_list);
56
DEFINE_SPINLOCK(ax25_list_lock);
57
58
static const struct proto_ops ax25_proto_ops;
59
60
static void ax25_free_sock(struct sock *sk)
61
{
62
ax25_cb_put(ax25_sk(sk));
63
}
64
65
/*
66
* Socket removal during an interrupt is now safe.
67
*/
68
static void ax25_cb_del(ax25_cb *ax25)
69
{
70
if (!hlist_unhashed(&ax25->ax25_node)) {
71
spin_lock_bh(&ax25_list_lock);
72
hlist_del_init(&ax25->ax25_node);
73
spin_unlock_bh(&ax25_list_lock);
74
ax25_cb_put(ax25);
75
}
76
}
77
78
/*
79
* Kill all bound sockets on a dropped device.
80
*/
81
static void ax25_kill_by_device(struct net_device *dev)
82
{
83
ax25_dev *ax25_dev;
84
ax25_cb *s;
85
struct hlist_node *node;
86
87
if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
88
return;
89
90
spin_lock_bh(&ax25_list_lock);
91
again:
92
ax25_for_each(s, node, &ax25_list) {
93
if (s->ax25_dev == ax25_dev) {
94
s->ax25_dev = NULL;
95
spin_unlock_bh(&ax25_list_lock);
96
ax25_disconnect(s, ENETUNREACH);
97
spin_lock_bh(&ax25_list_lock);
98
99
/* The entry could have been deleted from the
100
* list meanwhile and thus the next pointer is
101
* no longer valid. Play it safe and restart
102
* the scan. Forward progress is ensured
103
* because we set s->ax25_dev to NULL and we
104
* are never passed a NULL 'dev' argument.
105
*/
106
goto again;
107
}
108
}
109
spin_unlock_bh(&ax25_list_lock);
110
}
111
112
/*
113
* Handle device status changes.
114
*/
115
static int ax25_device_event(struct notifier_block *this, unsigned long event,
116
void *ptr)
117
{
118
struct net_device *dev = (struct net_device *)ptr;
119
120
if (!net_eq(dev_net(dev), &init_net))
121
return NOTIFY_DONE;
122
123
/* Reject non AX.25 devices */
124
if (dev->type != ARPHRD_AX25)
125
return NOTIFY_DONE;
126
127
switch (event) {
128
case NETDEV_UP:
129
ax25_dev_device_up(dev);
130
break;
131
case NETDEV_DOWN:
132
ax25_kill_by_device(dev);
133
ax25_rt_device_down(dev);
134
ax25_dev_device_down(dev);
135
break;
136
default:
137
break;
138
}
139
140
return NOTIFY_DONE;
141
}
142
143
/*
144
* Add a socket to the bound sockets list.
145
*/
146
void ax25_cb_add(ax25_cb *ax25)
147
{
148
spin_lock_bh(&ax25_list_lock);
149
ax25_cb_hold(ax25);
150
hlist_add_head(&ax25->ax25_node, &ax25_list);
151
spin_unlock_bh(&ax25_list_lock);
152
}
153
154
/*
155
* Find a socket that wants to accept the SABM we have just
156
* received.
157
*/
158
struct sock *ax25_find_listener(ax25_address *addr, int digi,
159
struct net_device *dev, int type)
160
{
161
ax25_cb *s;
162
struct hlist_node *node;
163
164
spin_lock(&ax25_list_lock);
165
ax25_for_each(s, node, &ax25_list) {
166
if ((s->iamdigi && !digi) || (!s->iamdigi && digi))
167
continue;
168
if (s->sk && !ax25cmp(&s->source_addr, addr) &&
169
s->sk->sk_type == type && s->sk->sk_state == TCP_LISTEN) {
170
/* If device is null we match any device */
171
if (s->ax25_dev == NULL || s->ax25_dev->dev == dev) {
172
sock_hold(s->sk);
173
spin_unlock(&ax25_list_lock);
174
return s->sk;
175
}
176
}
177
}
178
spin_unlock(&ax25_list_lock);
179
180
return NULL;
181
}
182
183
/*
184
* Find an AX.25 socket given both ends.
185
*/
186
struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
187
int type)
188
{
189
struct sock *sk = NULL;
190
ax25_cb *s;
191
struct hlist_node *node;
192
193
spin_lock(&ax25_list_lock);
194
ax25_for_each(s, node, &ax25_list) {
195
if (s->sk && !ax25cmp(&s->source_addr, my_addr) &&
196
!ax25cmp(&s->dest_addr, dest_addr) &&
197
s->sk->sk_type == type) {
198
sk = s->sk;
199
sock_hold(sk);
200
break;
201
}
202
}
203
204
spin_unlock(&ax25_list_lock);
205
206
return sk;
207
}
208
209
/*
210
* Find an AX.25 control block given both ends. It will only pick up
211
* floating AX.25 control blocks or non Raw socket bound control blocks.
212
*/
213
ax25_cb *ax25_find_cb(ax25_address *src_addr, ax25_address *dest_addr,
214
ax25_digi *digi, struct net_device *dev)
215
{
216
ax25_cb *s;
217
struct hlist_node *node;
218
219
spin_lock_bh(&ax25_list_lock);
220
ax25_for_each(s, node, &ax25_list) {
221
if (s->sk && s->sk->sk_type != SOCK_SEQPACKET)
222
continue;
223
if (s->ax25_dev == NULL)
224
continue;
225
if (ax25cmp(&s->source_addr, src_addr) == 0 && ax25cmp(&s->dest_addr, dest_addr) == 0 && s->ax25_dev->dev == dev) {
226
if (digi != NULL && digi->ndigi != 0) {
227
if (s->digipeat == NULL)
228
continue;
229
if (ax25digicmp(s->digipeat, digi) != 0)
230
continue;
231
} else {
232
if (s->digipeat != NULL && s->digipeat->ndigi != 0)
233
continue;
234
}
235
ax25_cb_hold(s);
236
spin_unlock_bh(&ax25_list_lock);
237
238
return s;
239
}
240
}
241
spin_unlock_bh(&ax25_list_lock);
242
243
return NULL;
244
}
245
246
EXPORT_SYMBOL(ax25_find_cb);
247
248
void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
249
{
250
ax25_cb *s;
251
struct sk_buff *copy;
252
struct hlist_node *node;
253
254
spin_lock(&ax25_list_lock);
255
ax25_for_each(s, node, &ax25_list) {
256
if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 &&
257
s->sk->sk_type == SOCK_RAW &&
258
s->sk->sk_protocol == proto &&
259
s->ax25_dev->dev == skb->dev &&
260
atomic_read(&s->sk->sk_rmem_alloc) <= s->sk->sk_rcvbuf) {
261
if ((copy = skb_clone(skb, GFP_ATOMIC)) == NULL)
262
continue;
263
if (sock_queue_rcv_skb(s->sk, copy) != 0)
264
kfree_skb(copy);
265
}
266
}
267
spin_unlock(&ax25_list_lock);
268
}
269
270
/*
271
* Deferred destroy.
272
*/
273
void ax25_destroy_socket(ax25_cb *);
274
275
/*
276
* Handler for deferred kills.
277
*/
278
static void ax25_destroy_timer(unsigned long data)
279
{
280
ax25_cb *ax25=(ax25_cb *)data;
281
struct sock *sk;
282
283
sk=ax25->sk;
284
285
bh_lock_sock(sk);
286
sock_hold(sk);
287
ax25_destroy_socket(ax25);
288
bh_unlock_sock(sk);
289
sock_put(sk);
290
}
291
292
/*
293
* This is called from user mode and the timers. Thus it protects itself
294
* against interrupt users but doesn't worry about being called during
295
* work. Once it is removed from the queue no interrupt or bottom half
296
* will touch it and we are (fairly 8-) ) safe.
297
*/
298
void ax25_destroy_socket(ax25_cb *ax25)
299
{
300
struct sk_buff *skb;
301
302
ax25_cb_del(ax25);
303
304
ax25_stop_heartbeat(ax25);
305
ax25_stop_t1timer(ax25);
306
ax25_stop_t2timer(ax25);
307
ax25_stop_t3timer(ax25);
308
ax25_stop_idletimer(ax25);
309
310
ax25_clear_queues(ax25); /* Flush the queues */
311
312
if (ax25->sk != NULL) {
313
while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
314
if (skb->sk != ax25->sk) {
315
/* A pending connection */
316
ax25_cb *sax25 = ax25_sk(skb->sk);
317
318
/* Queue the unaccepted socket for death */
319
sock_orphan(skb->sk);
320
321
/* 9A4GL: hack to release unaccepted sockets */
322
skb->sk->sk_state = TCP_LISTEN;
323
324
ax25_start_heartbeat(sax25);
325
sax25->state = AX25_STATE_0;
326
}
327
328
kfree_skb(skb);
329
}
330
skb_queue_purge(&ax25->sk->sk_write_queue);
331
}
332
333
if (ax25->sk != NULL) {
334
if (sk_has_allocations(ax25->sk)) {
335
/* Defer: outstanding buffers */
336
setup_timer(&ax25->dtimer, ax25_destroy_timer,
337
(unsigned long)ax25);
338
ax25->dtimer.expires = jiffies + 2 * HZ;
339
add_timer(&ax25->dtimer);
340
} else {
341
struct sock *sk=ax25->sk;
342
ax25->sk=NULL;
343
sock_put(sk);
344
}
345
} else {
346
ax25_cb_put(ax25);
347
}
348
}
349
350
/*
351
* dl1bke 960311: set parameters for existing AX.25 connections,
352
* includes a KILL command to abort any connection.
353
* VERY useful for debugging ;-)
354
*/
355
static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
356
{
357
struct ax25_ctl_struct ax25_ctl;
358
ax25_digi digi;
359
ax25_dev *ax25_dev;
360
ax25_cb *ax25;
361
unsigned int k;
362
int ret = 0;
363
364
if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
365
return -EFAULT;
366
367
if ((ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr)) == NULL)
368
return -ENODEV;
369
370
if (ax25_ctl.digi_count > AX25_MAX_DIGIS)
371
return -EINVAL;
372
373
if (ax25_ctl.arg > ULONG_MAX / HZ && ax25_ctl.cmd != AX25_KILL)
374
return -EINVAL;
375
376
digi.ndigi = ax25_ctl.digi_count;
377
for (k = 0; k < digi.ndigi; k++)
378
digi.calls[k] = ax25_ctl.digi_addr[k];
379
380
if ((ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev)) == NULL)
381
return -ENOTCONN;
382
383
switch (ax25_ctl.cmd) {
384
case AX25_KILL:
385
ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
386
#ifdef CONFIG_AX25_DAMA_SLAVE
387
if (ax25_dev->dama.slave && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
388
ax25_dama_off(ax25);
389
#endif
390
ax25_disconnect(ax25, ENETRESET);
391
break;
392
393
case AX25_WINDOW:
394
if (ax25->modulus == AX25_MODULUS) {
395
if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
396
goto einval_put;
397
} else {
398
if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
399
goto einval_put;
400
}
401
ax25->window = ax25_ctl.arg;
402
break;
403
404
case AX25_T1:
405
if (ax25_ctl.arg < 1)
406
goto einval_put;
407
ax25->rtt = (ax25_ctl.arg * HZ) / 2;
408
ax25->t1 = ax25_ctl.arg * HZ;
409
break;
410
411
case AX25_T2:
412
if (ax25_ctl.arg < 1)
413
goto einval_put;
414
ax25->t2 = ax25_ctl.arg * HZ;
415
break;
416
417
case AX25_N2:
418
if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
419
goto einval_put;
420
ax25->n2count = 0;
421
ax25->n2 = ax25_ctl.arg;
422
break;
423
424
case AX25_T3:
425
ax25->t3 = ax25_ctl.arg * HZ;
426
break;
427
428
case AX25_IDLE:
429
ax25->idle = ax25_ctl.arg * 60 * HZ;
430
break;
431
432
case AX25_PACLEN:
433
if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
434
goto einval_put;
435
ax25->paclen = ax25_ctl.arg;
436
break;
437
438
default:
439
goto einval_put;
440
}
441
442
out_put:
443
ax25_cb_put(ax25);
444
return ret;
445
446
einval_put:
447
ret = -EINVAL;
448
goto out_put;
449
}
450
451
static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)
452
{
453
ax25->rtt = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]) / 2;
454
ax25->t1 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]);
455
ax25->t2 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T2]);
456
ax25->t3 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T3]);
457
ax25->n2 = ax25_dev->values[AX25_VALUES_N2];
458
ax25->paclen = ax25_dev->values[AX25_VALUES_PACLEN];
459
ax25->idle = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_IDLE]);
460
ax25->backoff = ax25_dev->values[AX25_VALUES_BACKOFF];
461
462
if (ax25_dev->values[AX25_VALUES_AXDEFMODE]) {
463
ax25->modulus = AX25_EMODULUS;
464
ax25->window = ax25_dev->values[AX25_VALUES_EWINDOW];
465
} else {
466
ax25->modulus = AX25_MODULUS;
467
ax25->window = ax25_dev->values[AX25_VALUES_WINDOW];
468
}
469
}
470
471
/*
472
* Fill in a created AX.25 created control block with the default
473
* values for a particular device.
474
*/
475
void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
476
{
477
ax25->ax25_dev = ax25_dev;
478
479
if (ax25->ax25_dev != NULL) {
480
ax25_fillin_cb_from_dev(ax25, ax25_dev);
481
return;
482
}
483
484
/*
485
* No device, use kernel / AX.25 spec default values
486
*/
487
ax25->rtt = msecs_to_jiffies(AX25_DEF_T1) / 2;
488
ax25->t1 = msecs_to_jiffies(AX25_DEF_T1);
489
ax25->t2 = msecs_to_jiffies(AX25_DEF_T2);
490
ax25->t3 = msecs_to_jiffies(AX25_DEF_T3);
491
ax25->n2 = AX25_DEF_N2;
492
ax25->paclen = AX25_DEF_PACLEN;
493
ax25->idle = msecs_to_jiffies(AX25_DEF_IDLE);
494
ax25->backoff = AX25_DEF_BACKOFF;
495
496
if (AX25_DEF_AXDEFMODE) {
497
ax25->modulus = AX25_EMODULUS;
498
ax25->window = AX25_DEF_EWINDOW;
499
} else {
500
ax25->modulus = AX25_MODULUS;
501
ax25->window = AX25_DEF_WINDOW;
502
}
503
}
504
505
/*
506
* Create an empty AX.25 control block.
507
*/
508
ax25_cb *ax25_create_cb(void)
509
{
510
ax25_cb *ax25;
511
512
if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
513
return NULL;
514
515
atomic_set(&ax25->refcount, 1);
516
517
skb_queue_head_init(&ax25->write_queue);
518
skb_queue_head_init(&ax25->frag_queue);
519
skb_queue_head_init(&ax25->ack_queue);
520
skb_queue_head_init(&ax25->reseq_queue);
521
522
ax25_setup_timers(ax25);
523
524
ax25_fillin_cb(ax25, NULL);
525
526
ax25->state = AX25_STATE_0;
527
528
return ax25;
529
}
530
531
/*
532
* Handling for system calls applied via the various interfaces to an
533
* AX25 socket object
534
*/
535
536
static int ax25_setsockopt(struct socket *sock, int level, int optname,
537
char __user *optval, unsigned int optlen)
538
{
539
struct sock *sk = sock->sk;
540
ax25_cb *ax25;
541
struct net_device *dev;
542
char devname[IFNAMSIZ];
543
int opt, res = 0;
544
545
if (level != SOL_AX25)
546
return -ENOPROTOOPT;
547
548
if (optlen < sizeof(int))
549
return -EINVAL;
550
551
if (get_user(opt, (int __user *)optval))
552
return -EFAULT;
553
554
lock_sock(sk);
555
ax25 = ax25_sk(sk);
556
557
switch (optname) {
558
case AX25_WINDOW:
559
if (ax25->modulus == AX25_MODULUS) {
560
if (opt < 1 || opt > 7) {
561
res = -EINVAL;
562
break;
563
}
564
} else {
565
if (opt < 1 || opt > 63) {
566
res = -EINVAL;
567
break;
568
}
569
}
570
ax25->window = opt;
571
break;
572
573
case AX25_T1:
574
if (opt < 1) {
575
res = -EINVAL;
576
break;
577
}
578
ax25->rtt = (opt * HZ) >> 1;
579
ax25->t1 = opt * HZ;
580
break;
581
582
case AX25_T2:
583
if (opt < 1) {
584
res = -EINVAL;
585
break;
586
}
587
ax25->t2 = opt * HZ;
588
break;
589
590
case AX25_N2:
591
if (opt < 1 || opt > 31) {
592
res = -EINVAL;
593
break;
594
}
595
ax25->n2 = opt;
596
break;
597
598
case AX25_T3:
599
if (opt < 1) {
600
res = -EINVAL;
601
break;
602
}
603
ax25->t3 = opt * HZ;
604
break;
605
606
case AX25_IDLE:
607
if (opt < 0) {
608
res = -EINVAL;
609
break;
610
}
611
ax25->idle = opt * 60 * HZ;
612
break;
613
614
case AX25_BACKOFF:
615
if (opt < 0 || opt > 2) {
616
res = -EINVAL;
617
break;
618
}
619
ax25->backoff = opt;
620
break;
621
622
case AX25_EXTSEQ:
623
ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
624
break;
625
626
case AX25_PIDINCL:
627
ax25->pidincl = opt ? 1 : 0;
628
break;
629
630
case AX25_IAMDIGI:
631
ax25->iamdigi = opt ? 1 : 0;
632
break;
633
634
case AX25_PACLEN:
635
if (opt < 16 || opt > 65535) {
636
res = -EINVAL;
637
break;
638
}
639
ax25->paclen = opt;
640
break;
641
642
case SO_BINDTODEVICE:
643
if (optlen > IFNAMSIZ)
644
optlen = IFNAMSIZ;
645
646
if (copy_from_user(devname, optval, optlen)) {
647
res = -EFAULT;
648
break;
649
}
650
651
if (sk->sk_type == SOCK_SEQPACKET &&
652
(sock->state != SS_UNCONNECTED ||
653
sk->sk_state == TCP_LISTEN)) {
654
res = -EADDRNOTAVAIL;
655
break;
656
}
657
658
dev = dev_get_by_name(&init_net, devname);
659
if (!dev) {
660
res = -ENODEV;
661
break;
662
}
663
664
ax25->ax25_dev = ax25_dev_ax25dev(dev);
665
ax25_fillin_cb(ax25, ax25->ax25_dev);
666
dev_put(dev);
667
break;
668
669
default:
670
res = -ENOPROTOOPT;
671
}
672
release_sock(sk);
673
674
return res;
675
}
676
677
static int ax25_getsockopt(struct socket *sock, int level, int optname,
678
char __user *optval, int __user *optlen)
679
{
680
struct sock *sk = sock->sk;
681
ax25_cb *ax25;
682
struct ax25_dev *ax25_dev;
683
char devname[IFNAMSIZ];
684
void *valptr;
685
int val = 0;
686
int maxlen, length;
687
688
if (level != SOL_AX25)
689
return -ENOPROTOOPT;
690
691
if (get_user(maxlen, optlen))
692
return -EFAULT;
693
694
if (maxlen < 1)
695
return -EFAULT;
696
697
valptr = (void *) &val;
698
length = min_t(unsigned int, maxlen, sizeof(int));
699
700
lock_sock(sk);
701
ax25 = ax25_sk(sk);
702
703
switch (optname) {
704
case AX25_WINDOW:
705
val = ax25->window;
706
break;
707
708
case AX25_T1:
709
val = ax25->t1 / HZ;
710
break;
711
712
case AX25_T2:
713
val = ax25->t2 / HZ;
714
break;
715
716
case AX25_N2:
717
val = ax25->n2;
718
break;
719
720
case AX25_T3:
721
val = ax25->t3 / HZ;
722
break;
723
724
case AX25_IDLE:
725
val = ax25->idle / (60 * HZ);
726
break;
727
728
case AX25_BACKOFF:
729
val = ax25->backoff;
730
break;
731
732
case AX25_EXTSEQ:
733
val = (ax25->modulus == AX25_EMODULUS);
734
break;
735
736
case AX25_PIDINCL:
737
val = ax25->pidincl;
738
break;
739
740
case AX25_IAMDIGI:
741
val = ax25->iamdigi;
742
break;
743
744
case AX25_PACLEN:
745
val = ax25->paclen;
746
break;
747
748
case SO_BINDTODEVICE:
749
ax25_dev = ax25->ax25_dev;
750
751
if (ax25_dev != NULL && ax25_dev->dev != NULL) {
752
strlcpy(devname, ax25_dev->dev->name, sizeof(devname));
753
length = strlen(devname) + 1;
754
} else {
755
*devname = '\0';
756
length = 1;
757
}
758
759
valptr = (void *) devname;
760
break;
761
762
default:
763
release_sock(sk);
764
return -ENOPROTOOPT;
765
}
766
release_sock(sk);
767
768
if (put_user(length, optlen))
769
return -EFAULT;
770
771
return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
772
}
773
774
static int ax25_listen(struct socket *sock, int backlog)
775
{
776
struct sock *sk = sock->sk;
777
int res = 0;
778
779
lock_sock(sk);
780
if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_LISTEN) {
781
sk->sk_max_ack_backlog = backlog;
782
sk->sk_state = TCP_LISTEN;
783
goto out;
784
}
785
res = -EOPNOTSUPP;
786
787
out:
788
release_sock(sk);
789
790
return res;
791
}
792
793
/*
794
* XXX: when creating ax25_sock we should update the .obj_size setting
795
* below.
796
*/
797
static struct proto ax25_proto = {
798
.name = "AX25",
799
.owner = THIS_MODULE,
800
.obj_size = sizeof(struct sock),
801
};
802
803
static int ax25_create(struct net *net, struct socket *sock, int protocol,
804
int kern)
805
{
806
struct sock *sk;
807
ax25_cb *ax25;
808
809
if (!net_eq(net, &init_net))
810
return -EAFNOSUPPORT;
811
812
switch (sock->type) {
813
case SOCK_DGRAM:
814
if (protocol == 0 || protocol == PF_AX25)
815
protocol = AX25_P_TEXT;
816
break;
817
818
case SOCK_SEQPACKET:
819
switch (protocol) {
820
case 0:
821
case PF_AX25: /* For CLX */
822
protocol = AX25_P_TEXT;
823
break;
824
case AX25_P_SEGMENT:
825
#ifdef CONFIG_INET
826
case AX25_P_ARP:
827
case AX25_P_IP:
828
#endif
829
#ifdef CONFIG_NETROM
830
case AX25_P_NETROM:
831
#endif
832
#ifdef CONFIG_ROSE
833
case AX25_P_ROSE:
834
#endif
835
return -ESOCKTNOSUPPORT;
836
#ifdef CONFIG_NETROM_MODULE
837
case AX25_P_NETROM:
838
if (ax25_protocol_is_registered(AX25_P_NETROM))
839
return -ESOCKTNOSUPPORT;
840
#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);
858
if (sk == NULL)
859
return -ENOMEM;
860
861
ax25 = sk->sk_protinfo = 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);
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 = ax25_sk(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
sk->sk_protinfo = 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 = ax25_sk(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 = ax25_sk(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 = ax25_sk(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 [email protected]\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 = ax25_sk(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 kiocb *iocb, struct socket *sock,
1435
struct msghdr *msg, size_t len)
1436
{
1437
struct sockaddr_ax25 *usax = (struct sockaddr_ax25 *)msg->msg_name;
1438
struct sock *sk = sock->sk;
1439
struct sockaddr_ax25 sax;
1440
struct sk_buff *skb;
1441
ax25_digi dtmp, *dp;
1442
ax25_cb *ax25;
1443
size_t size;
1444
int lv, err, addr_len = msg->msg_namelen;
1445
1446
if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1447
return -EINVAL;
1448
1449
lock_sock(sk);
1450
ax25 = ax25_sk(sk);
1451
1452
if (sock_flag(sk, SOCK_ZAPPED)) {
1453
err = -EADDRNOTAVAIL;
1454
goto out;
1455
}
1456
1457
if (sk->sk_shutdown & SEND_SHUTDOWN) {
1458
send_sig(SIGPIPE, current, 0);
1459
err = -EPIPE;
1460
goto out;
1461
}
1462
1463
if (ax25->ax25_dev == NULL) {
1464
err = -ENETUNREACH;
1465
goto out;
1466
}
1467
1468
if (len > ax25->ax25_dev->dev->mtu) {
1469
err = -EMSGSIZE;
1470
goto out;
1471
}
1472
1473
if (usax != NULL) {
1474
if (usax->sax25_family != AF_AX25) {
1475
err = -EINVAL;
1476
goto out;
1477
}
1478
1479
if (addr_len == sizeof(struct sockaddr_ax25))
1480
/* ax25_sendmsg(): uses obsolete socket structure */
1481
;
1482
else if (addr_len != sizeof(struct full_sockaddr_ax25))
1483
/* support for old structure may go away some time
1484
* ax25_sendmsg(): uses old (6 digipeater)
1485
* socket structure.
1486
*/
1487
if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1488
(addr_len > sizeof(struct full_sockaddr_ax25))) {
1489
err = -EINVAL;
1490
goto out;
1491
}
1492
1493
1494
if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1495
int ct = 0;
1496
struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1497
1498
/* Valid number of digipeaters ? */
1499
if (usax->sax25_ndigis < 1 || usax->sax25_ndigis > AX25_MAX_DIGIS) {
1500
err = -EINVAL;
1501
goto out;
1502
}
1503
1504
dtmp.ndigi = usax->sax25_ndigis;
1505
1506
while (ct < usax->sax25_ndigis) {
1507
dtmp.repeated[ct] = 0;
1508
dtmp.calls[ct] = fsa->fsa_digipeater[ct];
1509
ct++;
1510
}
1511
1512
dtmp.lastrepeat = 0;
1513
}
1514
1515
sax = *usax;
1516
if (sk->sk_type == SOCK_SEQPACKET &&
1517
ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1518
err = -EISCONN;
1519
goto out;
1520
}
1521
if (usax->sax25_ndigis == 0)
1522
dp = NULL;
1523
else
1524
dp = &dtmp;
1525
} else {
1526
/*
1527
* FIXME: 1003.1g - if the socket is like this because
1528
* it has become closed (not started closed) and is VC
1529
* we ought to SIGPIPE, EPIPE
1530
*/
1531
if (sk->sk_state != TCP_ESTABLISHED) {
1532
err = -ENOTCONN;
1533
goto out;
1534
}
1535
sax.sax25_family = AF_AX25;
1536
sax.sax25_call = ax25->dest_addr;
1537
dp = ax25->digipeat;
1538
}
1539
1540
/* Build a packet */
1541
/* Assume the worst case */
1542
size = len + ax25->ax25_dev->dev->hard_header_len;
1543
1544
skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1545
if (skb == NULL)
1546
goto out;
1547
1548
skb_reserve(skb, size - len);
1549
1550
/* User data follows immediately after the AX.25 data */
1551
if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
1552
err = -EFAULT;
1553
kfree_skb(skb);
1554
goto out;
1555
}
1556
1557
skb_reset_network_header(skb);
1558
1559
/* Add the PID if one is not supplied by the user in the skb */
1560
if (!ax25->pidincl)
1561
*skb_push(skb, 1) = sk->sk_protocol;
1562
1563
if (sk->sk_type == SOCK_SEQPACKET) {
1564
/* Connected mode sockets go via the LAPB machine */
1565
if (sk->sk_state != TCP_ESTABLISHED) {
1566
kfree_skb(skb);
1567
err = -ENOTCONN;
1568
goto out;
1569
}
1570
1571
/* Shove it onto the queue and kick */
1572
ax25_output(ax25, ax25->paclen, skb);
1573
1574
err = len;
1575
goto out;
1576
}
1577
1578
skb_push(skb, 1 + ax25_addr_size(dp));
1579
1580
/* Building AX.25 Header */
1581
1582
/* Build an AX.25 header */
1583
lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1584
dp, AX25_COMMAND, AX25_MODULUS);
1585
1586
skb_set_transport_header(skb, lv);
1587
1588
*skb_transport_header(skb) = AX25_UI;
1589
1590
/* Datagram frames go straight out of the door as UI */
1591
ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1592
1593
err = len;
1594
1595
out:
1596
release_sock(sk);
1597
1598
return err;
1599
}
1600
1601
static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
1602
struct msghdr *msg, size_t size, int flags)
1603
{
1604
struct sock *sk = sock->sk;
1605
struct sk_buff *skb;
1606
int copied;
1607
int err = 0;
1608
1609
lock_sock(sk);
1610
/*
1611
* This works for seqpacket too. The receiver has ordered the
1612
* queue for us! We do one quick check first though
1613
*/
1614
if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1615
err = -ENOTCONN;
1616
goto out;
1617
}
1618
1619
/* Now we can treat all alike */
1620
skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1621
flags & MSG_DONTWAIT, &err);
1622
if (skb == NULL)
1623
goto out;
1624
1625
if (!ax25_sk(sk)->pidincl)
1626
skb_pull(skb, 1); /* Remove PID */
1627
1628
skb_reset_transport_header(skb);
1629
copied = skb->len;
1630
1631
if (copied > size) {
1632
copied = size;
1633
msg->msg_flags |= MSG_TRUNC;
1634
}
1635
1636
skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
1637
1638
if (msg->msg_namelen != 0) {
1639
struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name;
1640
ax25_digi digi;
1641
ax25_address src;
1642
const unsigned char *mac = skb_mac_header(skb);
1643
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 > 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 = ax25_sk(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
ax25_register_sysctl();
1989
1990
proc_net_fops_create(&init_net, "ax25_route", S_IRUGO, &ax25_route_fops);
1991
proc_net_fops_create(&init_net, "ax25", S_IRUGO, &ax25_info_fops);
1992
proc_net_fops_create(&init_net, "ax25_calls", S_IRUGO, &ax25_uid_fops);
1993
out:
1994
return rc;
1995
}
1996
module_init(ax25_init);
1997
1998
1999
MODULE_AUTHOR("Jonathan Naylor G4KLX <[email protected]>");
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
proc_net_remove(&init_net, "ax25_route");
2007
proc_net_remove(&init_net, "ax25");
2008
proc_net_remove(&init_net, "ax25_calls");
2009
ax25_rt_free();
2010
ax25_uid_free();
2011
ax25_dev_free();
2012
2013
ax25_unregister_sysctl();
2014
unregister_netdevice_notifier(&ax25_dev_notifier);
2015
2016
dev_remove_pack(&ax25_packet_type);
2017
2018
sock_unregister(PF_AX25);
2019
proto_unregister(&ax25_proto);
2020
}
2021
module_exit(ax25_exit);
2022
2023