Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/isdn/mISDN/l1oip_core.c
15111 views
1
/*
2
3
* l1oip.c low level driver for tunneling layer 1 over IP
4
*
5
* NOTE: It is not compatible with TDMoIP nor "ISDN over IP".
6
*
7
* Author Andreas Eversberg ([email protected])
8
*
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation; either version 2, or (at your option)
12
* any later version.
13
*
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
18
*
19
* You should have received a copy of the GNU General Public License
20
* along with this program; if not, write to the Free Software
21
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22
*
23
*/
24
25
/* module parameters:
26
* type:
27
Value 1 = BRI
28
Value 2 = PRI
29
Value 3 = BRI (multi channel frame, not supported yet)
30
Value 4 = PRI (multi channel frame, not supported yet)
31
A multi channel frame reduces overhead to a single frame for all
32
b-channels, but increases delay.
33
(NOTE: Multi channel frames are not implemented yet.)
34
35
* codec:
36
Value 0 = transparent (default)
37
Value 1 = transfer ALAW
38
Value 2 = transfer ULAW
39
Value 3 = transfer generic 4 bit compression.
40
41
* ulaw:
42
0 = we use a-Law (default)
43
1 = we use u-Law
44
45
* limit:
46
limitation of B-channels to control bandwidth (1...126)
47
BRI: 1 or 2
48
PRI: 1-30, 31-126 (126, because dchannel ist not counted here)
49
Also limited ressources are used for stack, resulting in less channels.
50
It is possible to have more channels than 30 in PRI mode, this must
51
be supported by the application.
52
53
* ip:
54
byte representation of remote ip address (127.0.0.1 -> 127,0,0,1)
55
If not given or four 0, no remote address is set.
56
For multiple interfaces, concat ip addresses. (127,0,0,1,127,0,0,1)
57
58
* port:
59
port number (local interface)
60
If not given or 0, port 931 is used for fist instance, 932 for next...
61
For multiple interfaces, different ports must be given.
62
63
* remoteport:
64
port number (remote interface)
65
If not given or 0, remote port equals local port
66
For multiple interfaces on equal sites, different ports must be given.
67
68
* ondemand:
69
0 = fixed (always transmit packets, even when remote side timed out)
70
1 = on demand (only transmit packets, when remote side is detected)
71
the default is 0
72
NOTE: ID must also be set for on demand.
73
74
* id:
75
optional value to identify frames. This value must be equal on both
76
peers and should be random. If omitted or 0, no ID is transmitted.
77
78
* debug:
79
NOTE: only one debug value must be given for all cards
80
enable debugging (see l1oip.h for debug options)
81
82
83
Special mISDN controls:
84
85
op = MISDN_CTRL_SETPEER*
86
p1 = bytes 0-3 : remote IP address in network order (left element first)
87
p2 = bytes 1-2 : remote port in network order (high byte first)
88
optional:
89
p2 = bytes 3-4 : local port in network order (high byte first)
90
91
op = MISDN_CTRL_UNSETPEER*
92
93
* Use l1oipctrl for comfortable setting or removing ip address.
94
(Layer 1 Over IP CTRL)
95
96
97
L1oIP-Protocol
98
--------------
99
100
Frame Header:
101
102
7 6 5 4 3 2 1 0
103
+---------------+
104
|Ver|T|I|Coding |
105
+---------------+
106
| ID byte 3 * |
107
+---------------+
108
| ID byte 2 * |
109
+---------------+
110
| ID byte 1 * |
111
+---------------+
112
| ID byte 0 * |
113
+---------------+
114
|M| Channel |
115
+---------------+
116
| Length * |
117
+---------------+
118
| Time Base MSB |
119
+---------------+
120
| Time Base LSB |
121
+---------------+
122
| Data.... |
123
124
...
125
126
| |
127
+---------------+
128
|M| Channel |
129
+---------------+
130
| Length * |
131
+---------------+
132
| Time Base MSB |
133
+---------------+
134
| Time Base LSB |
135
+---------------+
136
| Data.... |
137
138
...
139
140
141
* Only included in some cases.
142
143
- Ver = Version
144
If version is missmatch, the frame must be ignored.
145
146
- T = Type of interface
147
Must be 0 for S0 or 1 for E1.
148
149
- I = Id present
150
If bit is set, four ID bytes are included in frame.
151
152
- ID = Connection ID
153
Additional ID to prevent Denial of Service attacs. Also it prevents hijacking
154
connections with dynamic IP. The ID should be random and must not be 0.
155
156
- Coding = Type of codec
157
Must be 0 for no transcoding. Also for D-channel and other HDLC frames.
158
1 and 2 are reserved for explicitly use of a-LAW or u-LAW codec.
159
3 is used for generic table compressor.
160
161
- M = More channels to come. If this flag is 1, the following byte contains
162
the length of the channel data. After the data block, the next channel will
163
be defined. The flag for the last channel block (or if only one channel is
164
transmitted), must be 0 and no length is given.
165
166
- Channel = Channel number
167
0 reserved
168
1-3 channel data for S0 (3 is D-channel)
169
1-31 channel data for E1 (16 is D-channel)
170
32-127 channel data for extended E1 (16 is D-channel)
171
172
- The length is used if the M-flag is 1. It is used to find the next channel
173
inside frame.
174
NOTE: A value of 0 equals 256 bytes of data.
175
-> For larger data blocks, a single frame must be used.
176
-> For larger streams, a single frame or multiple blocks with same channel ID
177
must be used.
178
179
- Time Base = Timestamp of first sample in frame
180
The "Time Base" is used to rearange packets and to detect packet loss.
181
The 16 bits are sent in network order (MSB first) and count 1/8000 th of a
182
second. This causes a wrap around each 8,192 seconds. There is no requirement
183
for the initial "Time Base", but 0 should be used for the first packet.
184
In case of HDLC data, this timestamp counts the packet or byte number.
185
186
187
Two Timers:
188
189
After initialisation, a timer of 15 seconds is started. Whenever a packet is
190
transmitted, the timer is reset to 15 seconds again. If the timer expires, an
191
empty packet is transmitted. This keep the connection alive.
192
193
When a valid packet is received, a timer 65 seconds is started. The interface
194
become ACTIVE. If the timer expires, the interface becomes INACTIVE.
195
196
197
Dynamic IP handling:
198
199
To allow dynamic IP, the ID must be non 0. In this case, any packet with the
200
correct port number and ID will be accepted. If the remote side changes its IP
201
the new IP is used for all transmitted packets until it changes again.
202
203
204
On Demand:
205
206
If the ondemand parameter is given, the remote IP is set to 0 on timeout.
207
This will stop keepalive traffic to remote. If the remote is online again,
208
traffic will continue to the remote address. This is useful for road warriors.
209
This feature only works with ID set, otherwhise it is highly unsecure.
210
211
212
Socket and Thread
213
-----------------
214
215
The complete socket opening and closing is done by a thread.
216
When the thread opened a socket, the hc->socket descriptor is set. Whenever a
217
packet shall be sent to the socket, the hc->socket must be checked wheter not
218
NULL. To prevent change in socket descriptor, the hc->socket_lock must be used.
219
To change the socket, a recall of l1oip_socket_open() will safely kill the
220
socket process and create a new one.
221
222
*/
223
224
#define L1OIP_VERSION 0 /* 0...3 */
225
226
#include <linux/module.h>
227
#include <linux/delay.h>
228
#include <linux/mISDNif.h>
229
#include <linux/mISDNhw.h>
230
#include <linux/mISDNdsp.h>
231
#include <linux/init.h>
232
#include <linux/in.h>
233
#include <linux/inet.h>
234
#include <linux/workqueue.h>
235
#include <linux/kthread.h>
236
#include <linux/slab.h>
237
#include <net/sock.h>
238
#include "core.h"
239
#include "l1oip.h"
240
241
static const char *l1oip_revision = "2.00";
242
243
static int l1oip_cnt;
244
static spinlock_t l1oip_lock;
245
static struct list_head l1oip_ilist;
246
247
#define MAX_CARDS 16
248
static u_int type[MAX_CARDS];
249
static u_int codec[MAX_CARDS];
250
static u_int ip[MAX_CARDS*4];
251
static u_int port[MAX_CARDS];
252
static u_int remoteport[MAX_CARDS];
253
static u_int ondemand[MAX_CARDS];
254
static u_int limit[MAX_CARDS];
255
static u_int id[MAX_CARDS];
256
static int debug;
257
static int ulaw;
258
259
MODULE_AUTHOR("Andreas Eversberg");
260
MODULE_LICENSE("GPL");
261
module_param_array(type, uint, NULL, S_IRUGO | S_IWUSR);
262
module_param_array(codec, uint, NULL, S_IRUGO | S_IWUSR);
263
module_param_array(ip, uint, NULL, S_IRUGO | S_IWUSR);
264
module_param_array(port, uint, NULL, S_IRUGO | S_IWUSR);
265
module_param_array(remoteport, uint, NULL, S_IRUGO | S_IWUSR);
266
module_param_array(ondemand, uint, NULL, S_IRUGO | S_IWUSR);
267
module_param_array(limit, uint, NULL, S_IRUGO | S_IWUSR);
268
module_param_array(id, uint, NULL, S_IRUGO | S_IWUSR);
269
module_param(ulaw, uint, S_IRUGO | S_IWUSR);
270
module_param(debug, uint, S_IRUGO | S_IWUSR);
271
272
/*
273
* send a frame via socket, if open and restart timer
274
*/
275
static int
276
l1oip_socket_send(struct l1oip *hc, u8 localcodec, u8 channel, u32 chanmask,
277
u16 timebase, u8 *buf, int len)
278
{
279
u8 *p;
280
int multi = 0;
281
u8 frame[len+32];
282
struct socket *socket = NULL;
283
284
if (debug & DEBUG_L1OIP_MSG)
285
printk(KERN_DEBUG "%s: sending data to socket (len = %d)\n",
286
__func__, len);
287
288
p = frame;
289
290
/* restart timer */
291
if ((int)(hc->keep_tl.expires-jiffies) < 5*HZ) {
292
del_timer(&hc->keep_tl);
293
hc->keep_tl.expires = jiffies + L1OIP_KEEPALIVE*HZ;
294
add_timer(&hc->keep_tl);
295
} else
296
hc->keep_tl.expires = jiffies + L1OIP_KEEPALIVE*HZ;
297
298
if (debug & DEBUG_L1OIP_MSG)
299
printk(KERN_DEBUG "%s: resetting timer\n", __func__);
300
301
/* drop if we have no remote ip or port */
302
if (!hc->sin_remote.sin_addr.s_addr || !hc->sin_remote.sin_port) {
303
if (debug & DEBUG_L1OIP_MSG)
304
printk(KERN_DEBUG "%s: dropping frame, because remote "
305
"IP is not set.\n", __func__);
306
return len;
307
}
308
309
/* assemble frame */
310
*p++ = (L1OIP_VERSION<<6) /* version and coding */
311
| (hc->pri ? 0x20 : 0x00) /* type */
312
| (hc->id ? 0x10 : 0x00) /* id */
313
| localcodec;
314
if (hc->id) {
315
*p++ = hc->id>>24; /* id */
316
*p++ = hc->id>>16;
317
*p++ = hc->id>>8;
318
*p++ = hc->id;
319
}
320
*p++ = (multi == 1) ? 0x80 : 0x00 + channel; /* m-flag, channel */
321
if (multi == 1)
322
*p++ = len; /* length */
323
*p++ = timebase>>8; /* time base */
324
*p++ = timebase;
325
326
if (buf && len) { /* add data to frame */
327
if (localcodec == 1 && ulaw)
328
l1oip_ulaw_to_alaw(buf, len, p);
329
else if (localcodec == 2 && !ulaw)
330
l1oip_alaw_to_ulaw(buf, len, p);
331
else if (localcodec == 3)
332
len = l1oip_law_to_4bit(buf, len, p,
333
&hc->chan[channel].codecstate);
334
else
335
memcpy(p, buf, len);
336
}
337
len += p - frame;
338
339
/* check for socket in safe condition */
340
spin_lock(&hc->socket_lock);
341
if (!hc->socket) {
342
spin_unlock(&hc->socket_lock);
343
return 0;
344
}
345
/* seize socket */
346
socket = hc->socket;
347
hc->socket = NULL;
348
spin_unlock(&hc->socket_lock);
349
/* send packet */
350
if (debug & DEBUG_L1OIP_MSG)
351
printk(KERN_DEBUG "%s: sending packet to socket (len "
352
"= %d)\n", __func__, len);
353
hc->sendiov.iov_base = frame;
354
hc->sendiov.iov_len = len;
355
len = kernel_sendmsg(socket, &hc->sendmsg, &hc->sendiov, 1, len);
356
/* give socket back */
357
hc->socket = socket; /* no locking required */
358
359
return len;
360
}
361
362
363
/*
364
* receive channel data from socket
365
*/
366
static void
367
l1oip_socket_recv(struct l1oip *hc, u8 remotecodec, u8 channel, u16 timebase,
368
u8 *buf, int len)
369
{
370
struct sk_buff *nskb;
371
struct bchannel *bch;
372
struct dchannel *dch;
373
u8 *p;
374
u32 rx_counter;
375
376
if (len == 0) {
377
if (debug & DEBUG_L1OIP_MSG)
378
printk(KERN_DEBUG "%s: received empty keepalive data, "
379
"ignoring\n", __func__);
380
return;
381
}
382
383
if (debug & DEBUG_L1OIP_MSG)
384
printk(KERN_DEBUG "%s: received data, sending to mISDN (%d)\n",
385
__func__, len);
386
387
if (channel < 1 || channel > 127) {
388
printk(KERN_WARNING "%s: packet error - channel %d out of "
389
"range\n", __func__, channel);
390
return;
391
}
392
dch = hc->chan[channel].dch;
393
bch = hc->chan[channel].bch;
394
if (!dch && !bch) {
395
printk(KERN_WARNING "%s: packet error - channel %d not in "
396
"stack\n", __func__, channel);
397
return;
398
}
399
400
/* prepare message */
401
nskb = mI_alloc_skb((remotecodec == 3) ? (len<<1) : len, GFP_ATOMIC);
402
if (!nskb) {
403
printk(KERN_ERR "%s: No mem for skb.\n", __func__);
404
return;
405
}
406
p = skb_put(nskb, (remotecodec == 3) ? (len<<1) : len);
407
408
if (remotecodec == 1 && ulaw)
409
l1oip_alaw_to_ulaw(buf, len, p);
410
else if (remotecodec == 2 && !ulaw)
411
l1oip_ulaw_to_alaw(buf, len, p);
412
else if (remotecodec == 3)
413
len = l1oip_4bit_to_law(buf, len, p);
414
else
415
memcpy(p, buf, len);
416
417
/* send message up */
418
if (dch && len >= 2) {
419
dch->rx_skb = nskb;
420
recv_Dchannel(dch);
421
}
422
if (bch) {
423
/* expand 16 bit sequence number to 32 bit sequence number */
424
rx_counter = hc->chan[channel].rx_counter;
425
if (((s16)(timebase - rx_counter)) >= 0) {
426
/* time has changed forward */
427
if (timebase >= (rx_counter & 0xffff))
428
rx_counter =
429
(rx_counter & 0xffff0000) | timebase;
430
else
431
rx_counter = ((rx_counter & 0xffff0000)+0x10000)
432
| timebase;
433
} else {
434
/* time has changed backwards */
435
if (timebase < (rx_counter & 0xffff))
436
rx_counter =
437
(rx_counter & 0xffff0000) | timebase;
438
else
439
rx_counter = ((rx_counter & 0xffff0000)-0x10000)
440
| timebase;
441
}
442
hc->chan[channel].rx_counter = rx_counter;
443
444
#ifdef REORDER_DEBUG
445
if (hc->chan[channel].disorder_flag) {
446
struct sk_buff *skb;
447
int cnt;
448
skb = hc->chan[channel].disorder_skb;
449
hc->chan[channel].disorder_skb = nskb;
450
nskb = skb;
451
cnt = hc->chan[channel].disorder_cnt;
452
hc->chan[channel].disorder_cnt = rx_counter;
453
rx_counter = cnt;
454
}
455
hc->chan[channel].disorder_flag ^= 1;
456
if (nskb)
457
#endif
458
queue_ch_frame(&bch->ch, PH_DATA_IND, rx_counter, nskb);
459
}
460
}
461
462
463
/*
464
* parse frame and extract channel data
465
*/
466
static void
467
l1oip_socket_parse(struct l1oip *hc, struct sockaddr_in *sin, u8 *buf, int len)
468
{
469
u32 packet_id;
470
u8 channel;
471
u8 remotecodec;
472
u16 timebase;
473
int m, mlen;
474
int len_start = len; /* initial frame length */
475
struct dchannel *dch = hc->chan[hc->d_idx].dch;
476
477
if (debug & DEBUG_L1OIP_MSG)
478
printk(KERN_DEBUG "%s: received frame, parsing... (%d)\n",
479
__func__, len);
480
481
/* check length */
482
if (len < 1+1+2) {
483
printk(KERN_WARNING "%s: packet error - length %d below "
484
"4 bytes\n", __func__, len);
485
return;
486
}
487
488
/* check version */
489
if (((*buf)>>6) != L1OIP_VERSION) {
490
printk(KERN_WARNING "%s: packet error - unknown version %d\n",
491
__func__, buf[0]>>6);
492
return;
493
}
494
495
/* check type */
496
if (((*buf)&0x20) && !hc->pri) {
497
printk(KERN_WARNING "%s: packet error - received E1 packet "
498
"on S0 interface\n", __func__);
499
return;
500
}
501
if (!((*buf)&0x20) && hc->pri) {
502
printk(KERN_WARNING "%s: packet error - received S0 packet "
503
"on E1 interface\n", __func__);
504
return;
505
}
506
507
/* get id flag */
508
packet_id = (*buf>>4)&1;
509
510
/* check coding */
511
remotecodec = (*buf) & 0x0f;
512
if (remotecodec > 3) {
513
printk(KERN_WARNING "%s: packet error - remotecodec %d "
514
"unsupported\n", __func__, remotecodec);
515
return;
516
}
517
buf++;
518
len--;
519
520
/* check packet_id */
521
if (packet_id) {
522
if (!hc->id) {
523
printk(KERN_WARNING "%s: packet error - packet has id "
524
"0x%x, but we have not\n", __func__, packet_id);
525
return;
526
}
527
if (len < 4) {
528
printk(KERN_WARNING "%s: packet error - packet too "
529
"short for ID value\n", __func__);
530
return;
531
}
532
packet_id = (*buf++) << 24;
533
packet_id += (*buf++) << 16;
534
packet_id += (*buf++) << 8;
535
packet_id += (*buf++);
536
len -= 4;
537
538
if (packet_id != hc->id) {
539
printk(KERN_WARNING "%s: packet error - ID mismatch, "
540
"got 0x%x, we 0x%x\n",
541
__func__, packet_id, hc->id);
542
return;
543
}
544
} else {
545
if (hc->id) {
546
printk(KERN_WARNING "%s: packet error - packet has no "
547
"ID, but we have\n", __func__);
548
return;
549
}
550
}
551
552
multiframe:
553
if (len < 1) {
554
printk(KERN_WARNING "%s: packet error - packet too short, "
555
"channel expected at position %d.\n",
556
__func__, len-len_start+1);
557
return;
558
}
559
560
/* get channel and multiframe flag */
561
channel = *buf&0x7f;
562
m = *buf >> 7;
563
buf++;
564
len--;
565
566
/* check length on multiframe */
567
if (m) {
568
if (len < 1) {
569
printk(KERN_WARNING "%s: packet error - packet too "
570
"short, length expected at position %d.\n",
571
__func__, len_start-len-1);
572
return;
573
}
574
575
mlen = *buf++;
576
len--;
577
if (mlen == 0)
578
mlen = 256;
579
if (len < mlen+3) {
580
printk(KERN_WARNING "%s: packet error - length %d at "
581
"position %d exceeds total length %d.\n",
582
__func__, mlen, len_start-len-1, len_start);
583
return;
584
}
585
if (len == mlen+3) {
586
printk(KERN_WARNING "%s: packet error - length %d at "
587
"position %d will not allow additional "
588
"packet.\n",
589
__func__, mlen, len_start-len+1);
590
return;
591
}
592
} else
593
mlen = len-2; /* single frame, subtract timebase */
594
595
if (len < 2) {
596
printk(KERN_WARNING "%s: packet error - packet too short, time "
597
"base expected at position %d.\n",
598
__func__, len-len_start+1);
599
return;
600
}
601
602
/* get time base */
603
timebase = (*buf++) << 8;
604
timebase |= (*buf++);
605
len -= 2;
606
607
/* if inactive, we send up a PH_ACTIVATE and activate */
608
if (!test_bit(FLG_ACTIVE, &dch->Flags)) {
609
if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
610
printk(KERN_DEBUG "%s: interface become active due to "
611
"received packet\n", __func__);
612
test_and_set_bit(FLG_ACTIVE, &dch->Flags);
613
_queue_data(&dch->dev.D, PH_ACTIVATE_IND, MISDN_ID_ANY, 0,
614
NULL, GFP_ATOMIC);
615
}
616
617
/* distribute packet */
618
l1oip_socket_recv(hc, remotecodec, channel, timebase, buf, mlen);
619
buf += mlen;
620
len -= mlen;
621
622
/* multiframe */
623
if (m)
624
goto multiframe;
625
626
/* restart timer */
627
if ((int)(hc->timeout_tl.expires-jiffies) < 5*HZ || !hc->timeout_on) {
628
hc->timeout_on = 1;
629
del_timer(&hc->timeout_tl);
630
hc->timeout_tl.expires = jiffies + L1OIP_TIMEOUT*HZ;
631
add_timer(&hc->timeout_tl);
632
} else /* only adjust timer */
633
hc->timeout_tl.expires = jiffies + L1OIP_TIMEOUT*HZ;
634
635
/* if ip or source port changes */
636
if ((hc->sin_remote.sin_addr.s_addr != sin->sin_addr.s_addr)
637
|| (hc->sin_remote.sin_port != sin->sin_port)) {
638
if (debug & DEBUG_L1OIP_SOCKET)
639
printk(KERN_DEBUG "%s: remote address changes from "
640
"0x%08x to 0x%08x (port %d to %d)\n", __func__,
641
ntohl(hc->sin_remote.sin_addr.s_addr),
642
ntohl(sin->sin_addr.s_addr),
643
ntohs(hc->sin_remote.sin_port),
644
ntohs(sin->sin_port));
645
hc->sin_remote.sin_addr.s_addr = sin->sin_addr.s_addr;
646
hc->sin_remote.sin_port = sin->sin_port;
647
}
648
}
649
650
651
/*
652
* socket stuff
653
*/
654
static int
655
l1oip_socket_thread(void *data)
656
{
657
struct l1oip *hc = (struct l1oip *)data;
658
int ret = 0;
659
struct msghdr msg;
660
struct sockaddr_in sin_rx;
661
unsigned char *recvbuf;
662
size_t recvbuf_size = 1500;
663
int recvlen;
664
struct socket *socket = NULL;
665
DECLARE_COMPLETION_ONSTACK(wait);
666
667
/* allocate buffer memory */
668
recvbuf = kmalloc(recvbuf_size, GFP_KERNEL);
669
if (!recvbuf) {
670
printk(KERN_ERR "%s: Failed to alloc recvbuf.\n", __func__);
671
ret = -ENOMEM;
672
goto fail;
673
}
674
675
/* make daemon */
676
allow_signal(SIGTERM);
677
678
/* create socket */
679
if (sock_create(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &socket)) {
680
printk(KERN_ERR "%s: Failed to create socket.\n", __func__);
681
ret = -EIO;
682
goto fail;
683
}
684
685
/* set incoming address */
686
hc->sin_local.sin_family = AF_INET;
687
hc->sin_local.sin_addr.s_addr = INADDR_ANY;
688
hc->sin_local.sin_port = htons((unsigned short)hc->localport);
689
690
/* set outgoing address */
691
hc->sin_remote.sin_family = AF_INET;
692
hc->sin_remote.sin_addr.s_addr = htonl(hc->remoteip);
693
hc->sin_remote.sin_port = htons((unsigned short)hc->remoteport);
694
695
/* bind to incomming port */
696
if (socket->ops->bind(socket, (struct sockaddr *)&hc->sin_local,
697
sizeof(hc->sin_local))) {
698
printk(KERN_ERR "%s: Failed to bind socket to port %d.\n",
699
__func__, hc->localport);
700
ret = -EINVAL;
701
goto fail;
702
}
703
704
/* check sk */
705
if (socket->sk == NULL) {
706
printk(KERN_ERR "%s: socket->sk == NULL\n", __func__);
707
ret = -EIO;
708
goto fail;
709
}
710
711
/* build receive message */
712
msg.msg_name = &sin_rx;
713
msg.msg_namelen = sizeof(sin_rx);
714
msg.msg_control = NULL;
715
msg.msg_controllen = 0;
716
717
/* build send message */
718
hc->sendmsg.msg_name = &hc->sin_remote;
719
hc->sendmsg.msg_namelen = sizeof(hc->sin_remote);
720
hc->sendmsg.msg_control = NULL;
721
hc->sendmsg.msg_controllen = 0;
722
723
/* give away socket */
724
spin_lock(&hc->socket_lock);
725
hc->socket = socket;
726
spin_unlock(&hc->socket_lock);
727
728
/* read loop */
729
if (debug & DEBUG_L1OIP_SOCKET)
730
printk(KERN_DEBUG "%s: socket created and open\n",
731
__func__);
732
while (!signal_pending(current)) {
733
struct kvec iov = {
734
.iov_base = recvbuf,
735
.iov_len = recvbuf_size,
736
};
737
recvlen = kernel_recvmsg(socket, &msg, &iov, 1,
738
recvbuf_size, 0);
739
if (recvlen > 0) {
740
l1oip_socket_parse(hc, &sin_rx, recvbuf, recvlen);
741
} else {
742
if (debug & DEBUG_L1OIP_SOCKET)
743
printk(KERN_WARNING
744
"%s: broken pipe on socket\n", __func__);
745
}
746
}
747
748
/* get socket back, check first if in use, maybe by send function */
749
spin_lock(&hc->socket_lock);
750
/* if hc->socket is NULL, it is in use until it is given back */
751
while (!hc->socket) {
752
spin_unlock(&hc->socket_lock);
753
schedule_timeout(HZ/10);
754
spin_lock(&hc->socket_lock);
755
}
756
hc->socket = NULL;
757
spin_unlock(&hc->socket_lock);
758
759
if (debug & DEBUG_L1OIP_SOCKET)
760
printk(KERN_DEBUG "%s: socket thread terminating\n",
761
__func__);
762
763
fail:
764
/* free recvbuf */
765
kfree(recvbuf);
766
767
/* close socket */
768
if (socket)
769
sock_release(socket);
770
771
/* if we got killed, signal completion */
772
complete(&hc->socket_complete);
773
hc->socket_thread = NULL; /* show termination of thread */
774
775
if (debug & DEBUG_L1OIP_SOCKET)
776
printk(KERN_DEBUG "%s: socket thread terminated\n",
777
__func__);
778
return ret;
779
}
780
781
static void
782
l1oip_socket_close(struct l1oip *hc)
783
{
784
struct dchannel *dch = hc->chan[hc->d_idx].dch;
785
786
/* kill thread */
787
if (hc->socket_thread) {
788
if (debug & DEBUG_L1OIP_SOCKET)
789
printk(KERN_DEBUG "%s: socket thread exists, "
790
"killing...\n", __func__);
791
send_sig(SIGTERM, hc->socket_thread, 0);
792
wait_for_completion(&hc->socket_complete);
793
}
794
795
/* if active, we send up a PH_DEACTIVATE and deactivate */
796
if (test_bit(FLG_ACTIVE, &dch->Flags)) {
797
if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
798
printk(KERN_DEBUG "%s: interface become deactivated "
799
"due to timeout\n", __func__);
800
test_and_clear_bit(FLG_ACTIVE, &dch->Flags);
801
_queue_data(&dch->dev.D, PH_DEACTIVATE_IND, MISDN_ID_ANY, 0,
802
NULL, GFP_ATOMIC);
803
}
804
}
805
806
static int
807
l1oip_socket_open(struct l1oip *hc)
808
{
809
/* in case of reopen, we need to close first */
810
l1oip_socket_close(hc);
811
812
init_completion(&hc->socket_complete);
813
814
/* create receive process */
815
hc->socket_thread = kthread_run(l1oip_socket_thread, hc, "l1oip_%s",
816
hc->name);
817
if (IS_ERR(hc->socket_thread)) {
818
int err = PTR_ERR(hc->socket_thread);
819
printk(KERN_ERR "%s: Failed (%d) to create socket process.\n",
820
__func__, err);
821
hc->socket_thread = NULL;
822
sock_release(hc->socket);
823
return err;
824
}
825
if (debug & DEBUG_L1OIP_SOCKET)
826
printk(KERN_DEBUG "%s: socket thread created\n", __func__);
827
828
return 0;
829
}
830
831
832
static void
833
l1oip_send_bh(struct work_struct *work)
834
{
835
struct l1oip *hc = container_of(work, struct l1oip, workq);
836
837
if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
838
printk(KERN_DEBUG "%s: keepalive timer expired, sending empty "
839
"frame on dchannel\n", __func__);
840
841
/* send an empty l1oip frame at D-channel */
842
l1oip_socket_send(hc, 0, hc->d_idx, 0, 0, NULL, 0);
843
}
844
845
846
/*
847
* timer stuff
848
*/
849
static void
850
l1oip_keepalive(void *data)
851
{
852
struct l1oip *hc = (struct l1oip *)data;
853
854
schedule_work(&hc->workq);
855
}
856
857
static void
858
l1oip_timeout(void *data)
859
{
860
struct l1oip *hc = (struct l1oip *)data;
861
struct dchannel *dch = hc->chan[hc->d_idx].dch;
862
863
if (debug & DEBUG_L1OIP_MSG)
864
printk(KERN_DEBUG "%s: timeout timer expired, turn layer one "
865
"down.\n", __func__);
866
867
hc->timeout_on = 0; /* state that timer must be initialized next time */
868
869
/* if timeout, we send up a PH_DEACTIVATE and deactivate */
870
if (test_bit(FLG_ACTIVE, &dch->Flags)) {
871
if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
872
printk(KERN_DEBUG "%s: interface become deactivated "
873
"due to timeout\n", __func__);
874
test_and_clear_bit(FLG_ACTIVE, &dch->Flags);
875
_queue_data(&dch->dev.D, PH_DEACTIVATE_IND, MISDN_ID_ANY, 0,
876
NULL, GFP_ATOMIC);
877
}
878
879
/* if we have ondemand set, we remove ip address */
880
if (hc->ondemand) {
881
if (debug & DEBUG_L1OIP_MSG)
882
printk(KERN_DEBUG "%s: on demand causes ip address to "
883
"be removed\n", __func__);
884
hc->sin_remote.sin_addr.s_addr = 0;
885
}
886
}
887
888
889
/*
890
* message handling
891
*/
892
static int
893
handle_dmsg(struct mISDNchannel *ch, struct sk_buff *skb)
894
{
895
struct mISDNdevice *dev = container_of(ch, struct mISDNdevice, D);
896
struct dchannel *dch = container_of(dev, struct dchannel, dev);
897
struct l1oip *hc = dch->hw;
898
struct mISDNhead *hh = mISDN_HEAD_P(skb);
899
int ret = -EINVAL;
900
int l, ll;
901
unsigned char *p;
902
903
switch (hh->prim) {
904
case PH_DATA_REQ:
905
if (skb->len < 1) {
906
printk(KERN_WARNING "%s: skb too small\n",
907
__func__);
908
break;
909
}
910
if (skb->len > MAX_DFRAME_LEN_L1 || skb->len > L1OIP_MAX_LEN) {
911
printk(KERN_WARNING "%s: skb too large\n",
912
__func__);
913
break;
914
}
915
/* send frame */
916
p = skb->data;
917
l = skb->len;
918
while (l) {
919
ll = (l < L1OIP_MAX_PERFRAME) ? l : L1OIP_MAX_PERFRAME;
920
l1oip_socket_send(hc, 0, dch->slot, 0,
921
hc->chan[dch->slot].tx_counter++, p, ll);
922
p += ll;
923
l -= ll;
924
}
925
skb_trim(skb, 0);
926
queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
927
return 0;
928
case PH_ACTIVATE_REQ:
929
if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
930
printk(KERN_DEBUG "%s: PH_ACTIVATE channel %d (1..%d)\n"
931
, __func__, dch->slot, hc->b_num+1);
932
skb_trim(skb, 0);
933
if (test_bit(FLG_ACTIVE, &dch->Flags))
934
queue_ch_frame(ch, PH_ACTIVATE_IND, hh->id, skb);
935
else
936
queue_ch_frame(ch, PH_DEACTIVATE_IND, hh->id, skb);
937
return 0;
938
case PH_DEACTIVATE_REQ:
939
if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
940
printk(KERN_DEBUG "%s: PH_DEACTIVATE channel %d "
941
"(1..%d)\n", __func__, dch->slot,
942
hc->b_num+1);
943
skb_trim(skb, 0);
944
if (test_bit(FLG_ACTIVE, &dch->Flags))
945
queue_ch_frame(ch, PH_ACTIVATE_IND, hh->id, skb);
946
else
947
queue_ch_frame(ch, PH_DEACTIVATE_IND, hh->id, skb);
948
return 0;
949
}
950
if (!ret)
951
dev_kfree_skb(skb);
952
return ret;
953
}
954
955
static int
956
channel_dctrl(struct dchannel *dch, struct mISDN_ctrl_req *cq)
957
{
958
int ret = 0;
959
struct l1oip *hc = dch->hw;
960
961
switch (cq->op) {
962
case MISDN_CTRL_GETOP:
963
cq->op = MISDN_CTRL_SETPEER | MISDN_CTRL_UNSETPEER
964
| MISDN_CTRL_GETPEER;
965
break;
966
case MISDN_CTRL_SETPEER:
967
hc->remoteip = (u32)cq->p1;
968
hc->remoteport = cq->p2 & 0xffff;
969
hc->localport = cq->p2 >> 16;
970
if (!hc->remoteport)
971
hc->remoteport = hc->localport;
972
if (debug & DEBUG_L1OIP_SOCKET)
973
printk(KERN_DEBUG "%s: got new ip address from user "
974
"space.\n", __func__);
975
l1oip_socket_open(hc);
976
break;
977
case MISDN_CTRL_UNSETPEER:
978
if (debug & DEBUG_L1OIP_SOCKET)
979
printk(KERN_DEBUG "%s: removing ip address.\n",
980
__func__);
981
hc->remoteip = 0;
982
l1oip_socket_open(hc);
983
break;
984
case MISDN_CTRL_GETPEER:
985
if (debug & DEBUG_L1OIP_SOCKET)
986
printk(KERN_DEBUG "%s: getting ip address.\n",
987
__func__);
988
cq->p1 = hc->remoteip;
989
cq->p2 = hc->remoteport | (hc->localport << 16);
990
break;
991
default:
992
printk(KERN_WARNING "%s: unknown Op %x\n",
993
__func__, cq->op);
994
ret = -EINVAL;
995
break;
996
}
997
return ret;
998
}
999
1000
static int
1001
open_dchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq)
1002
{
1003
if (debug & DEBUG_HW_OPEN)
1004
printk(KERN_DEBUG "%s: dev(%d) open from %p\n", __func__,
1005
dch->dev.id, __builtin_return_address(0));
1006
if (rq->protocol == ISDN_P_NONE)
1007
return -EINVAL;
1008
if ((dch->dev.D.protocol != ISDN_P_NONE) &&
1009
(dch->dev.D.protocol != rq->protocol)) {
1010
if (debug & DEBUG_HW_OPEN)
1011
printk(KERN_WARNING "%s: change protocol %x to %x\n",
1012
__func__, dch->dev.D.protocol, rq->protocol);
1013
}
1014
if (dch->dev.D.protocol != rq->protocol)
1015
dch->dev.D.protocol = rq->protocol;
1016
1017
if (test_bit(FLG_ACTIVE, &dch->Flags)) {
1018
_queue_data(&dch->dev.D, PH_ACTIVATE_IND, MISDN_ID_ANY,
1019
0, NULL, GFP_KERNEL);
1020
}
1021
rq->ch = &dch->dev.D;
1022
if (!try_module_get(THIS_MODULE))
1023
printk(KERN_WARNING "%s:cannot get module\n", __func__);
1024
return 0;
1025
}
1026
1027
static int
1028
open_bchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq)
1029
{
1030
struct bchannel *bch;
1031
int ch;
1032
1033
if (!test_channelmap(rq->adr.channel, dch->dev.channelmap))
1034
return -EINVAL;
1035
if (rq->protocol == ISDN_P_NONE)
1036
return -EINVAL;
1037
ch = rq->adr.channel; /* BRI: 1=B1 2=B2 PRI: 1..15,17.. */
1038
bch = hc->chan[ch].bch;
1039
if (!bch) {
1040
printk(KERN_ERR "%s:internal error ch %d has no bch\n",
1041
__func__, ch);
1042
return -EINVAL;
1043
}
1044
if (test_and_set_bit(FLG_OPEN, &bch->Flags))
1045
return -EBUSY; /* b-channel can be only open once */
1046
bch->ch.protocol = rq->protocol;
1047
rq->ch = &bch->ch;
1048
if (!try_module_get(THIS_MODULE))
1049
printk(KERN_WARNING "%s:cannot get module\n", __func__);
1050
return 0;
1051
}
1052
1053
static int
1054
l1oip_dctrl(struct mISDNchannel *ch, u_int cmd, void *arg)
1055
{
1056
struct mISDNdevice *dev = container_of(ch, struct mISDNdevice, D);
1057
struct dchannel *dch = container_of(dev, struct dchannel, dev);
1058
struct l1oip *hc = dch->hw;
1059
struct channel_req *rq;
1060
int err = 0;
1061
1062
if (dch->debug & DEBUG_HW)
1063
printk(KERN_DEBUG "%s: cmd:%x %p\n",
1064
__func__, cmd, arg);
1065
switch (cmd) {
1066
case OPEN_CHANNEL:
1067
rq = arg;
1068
switch (rq->protocol) {
1069
case ISDN_P_TE_S0:
1070
case ISDN_P_NT_S0:
1071
if (hc->pri) {
1072
err = -EINVAL;
1073
break;
1074
}
1075
err = open_dchannel(hc, dch, rq);
1076
break;
1077
case ISDN_P_TE_E1:
1078
case ISDN_P_NT_E1:
1079
if (!hc->pri) {
1080
err = -EINVAL;
1081
break;
1082
}
1083
err = open_dchannel(hc, dch, rq);
1084
break;
1085
default:
1086
err = open_bchannel(hc, dch, rq);
1087
}
1088
break;
1089
case CLOSE_CHANNEL:
1090
if (debug & DEBUG_HW_OPEN)
1091
printk(KERN_DEBUG "%s: dev(%d) close from %p\n",
1092
__func__, dch->dev.id,
1093
__builtin_return_address(0));
1094
module_put(THIS_MODULE);
1095
break;
1096
case CONTROL_CHANNEL:
1097
err = channel_dctrl(dch, arg);
1098
break;
1099
default:
1100
if (dch->debug & DEBUG_HW)
1101
printk(KERN_DEBUG "%s: unknown command %x\n",
1102
__func__, cmd);
1103
err = -EINVAL;
1104
}
1105
return err;
1106
}
1107
1108
static int
1109
handle_bmsg(struct mISDNchannel *ch, struct sk_buff *skb)
1110
{
1111
struct bchannel *bch = container_of(ch, struct bchannel, ch);
1112
struct l1oip *hc = bch->hw;
1113
int ret = -EINVAL;
1114
struct mISDNhead *hh = mISDN_HEAD_P(skb);
1115
int l, ll, i;
1116
unsigned char *p;
1117
1118
switch (hh->prim) {
1119
case PH_DATA_REQ:
1120
if (skb->len <= 0) {
1121
printk(KERN_WARNING "%s: skb too small\n",
1122
__func__);
1123
break;
1124
}
1125
if (skb->len > MAX_DFRAME_LEN_L1 || skb->len > L1OIP_MAX_LEN) {
1126
printk(KERN_WARNING "%s: skb too large\n",
1127
__func__);
1128
break;
1129
}
1130
/* check for AIS / ulaw-silence */
1131
p = skb->data;
1132
l = skb->len;
1133
for (i = 0; i < l; i++) {
1134
if (*p++ != 0xff)
1135
break;
1136
}
1137
if (i == l) {
1138
if (debug & DEBUG_L1OIP_MSG)
1139
printk(KERN_DEBUG "%s: got AIS, not sending, "
1140
"but counting\n", __func__);
1141
hc->chan[bch->slot].tx_counter += l;
1142
skb_trim(skb, 0);
1143
queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
1144
return 0;
1145
}
1146
/* check for silence */
1147
p = skb->data;
1148
l = skb->len;
1149
for (i = 0; i < l; i++) {
1150
if (*p++ != 0x2a)
1151
break;
1152
}
1153
if (i == l) {
1154
if (debug & DEBUG_L1OIP_MSG)
1155
printk(KERN_DEBUG "%s: got silence, not sending"
1156
", but counting\n", __func__);
1157
hc->chan[bch->slot].tx_counter += l;
1158
skb_trim(skb, 0);
1159
queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
1160
return 0;
1161
}
1162
1163
/* send frame */
1164
p = skb->data;
1165
l = skb->len;
1166
while (l) {
1167
ll = (l < L1OIP_MAX_PERFRAME) ? l : L1OIP_MAX_PERFRAME;
1168
l1oip_socket_send(hc, hc->codec, bch->slot, 0,
1169
hc->chan[bch->slot].tx_counter, p, ll);
1170
hc->chan[bch->slot].tx_counter += ll;
1171
p += ll;
1172
l -= ll;
1173
}
1174
skb_trim(skb, 0);
1175
queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
1176
return 0;
1177
case PH_ACTIVATE_REQ:
1178
if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
1179
printk(KERN_DEBUG "%s: PH_ACTIVATE channel %d (1..%d)\n"
1180
, __func__, bch->slot, hc->b_num+1);
1181
hc->chan[bch->slot].codecstate = 0;
1182
test_and_set_bit(FLG_ACTIVE, &bch->Flags);
1183
skb_trim(skb, 0);
1184
queue_ch_frame(ch, PH_ACTIVATE_IND, hh->id, skb);
1185
return 0;
1186
case PH_DEACTIVATE_REQ:
1187
if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
1188
printk(KERN_DEBUG "%s: PH_DEACTIVATE channel %d "
1189
"(1..%d)\n", __func__, bch->slot,
1190
hc->b_num+1);
1191
test_and_clear_bit(FLG_ACTIVE, &bch->Flags);
1192
skb_trim(skb, 0);
1193
queue_ch_frame(ch, PH_DEACTIVATE_IND, hh->id, skb);
1194
return 0;
1195
}
1196
if (!ret)
1197
dev_kfree_skb(skb);
1198
return ret;
1199
}
1200
1201
static int
1202
channel_bctrl(struct bchannel *bch, struct mISDN_ctrl_req *cq)
1203
{
1204
int ret = 0;
1205
struct dsp_features *features =
1206
(struct dsp_features *)(*((u_long *)&cq->p1));
1207
1208
switch (cq->op) {
1209
case MISDN_CTRL_GETOP:
1210
cq->op = MISDN_CTRL_HW_FEATURES_OP;
1211
break;
1212
case MISDN_CTRL_HW_FEATURES: /* fill features structure */
1213
if (debug & DEBUG_L1OIP_MSG)
1214
printk(KERN_DEBUG "%s: HW_FEATURE request\n",
1215
__func__);
1216
/* create confirm */
1217
features->unclocked = 1;
1218
features->unordered = 1;
1219
break;
1220
default:
1221
printk(KERN_WARNING "%s: unknown Op %x\n",
1222
__func__, cq->op);
1223
ret = -EINVAL;
1224
break;
1225
}
1226
return ret;
1227
}
1228
1229
static int
1230
l1oip_bctrl(struct mISDNchannel *ch, u_int cmd, void *arg)
1231
{
1232
struct bchannel *bch = container_of(ch, struct bchannel, ch);
1233
int err = -EINVAL;
1234
1235
if (bch->debug & DEBUG_HW)
1236
printk(KERN_DEBUG "%s: cmd:%x %p\n",
1237
__func__, cmd, arg);
1238
switch (cmd) {
1239
case CLOSE_CHANNEL:
1240
test_and_clear_bit(FLG_OPEN, &bch->Flags);
1241
test_and_clear_bit(FLG_ACTIVE, &bch->Flags);
1242
ch->protocol = ISDN_P_NONE;
1243
ch->peer = NULL;
1244
module_put(THIS_MODULE);
1245
err = 0;
1246
break;
1247
case CONTROL_CHANNEL:
1248
err = channel_bctrl(bch, arg);
1249
break;
1250
default:
1251
printk(KERN_WARNING "%s: unknown prim(%x)\n",
1252
__func__, cmd);
1253
}
1254
return err;
1255
}
1256
1257
1258
/*
1259
* cleanup module and stack
1260
*/
1261
static void
1262
release_card(struct l1oip *hc)
1263
{
1264
int ch;
1265
1266
if (timer_pending(&hc->keep_tl))
1267
del_timer(&hc->keep_tl);
1268
1269
if (timer_pending(&hc->timeout_tl))
1270
del_timer(&hc->timeout_tl);
1271
1272
cancel_work_sync(&hc->workq);
1273
1274
if (hc->socket_thread)
1275
l1oip_socket_close(hc);
1276
1277
if (hc->registered && hc->chan[hc->d_idx].dch)
1278
mISDN_unregister_device(&hc->chan[hc->d_idx].dch->dev);
1279
for (ch = 0; ch < 128; ch++) {
1280
if (hc->chan[ch].dch) {
1281
mISDN_freedchannel(hc->chan[ch].dch);
1282
kfree(hc->chan[ch].dch);
1283
}
1284
if (hc->chan[ch].bch) {
1285
mISDN_freebchannel(hc->chan[ch].bch);
1286
kfree(hc->chan[ch].bch);
1287
#ifdef REORDER_DEBUG
1288
if (hc->chan[ch].disorder_skb)
1289
dev_kfree_skb(hc->chan[ch].disorder_skb);
1290
#endif
1291
}
1292
}
1293
1294
spin_lock(&l1oip_lock);
1295
list_del(&hc->list);
1296
spin_unlock(&l1oip_lock);
1297
1298
kfree(hc);
1299
}
1300
1301
static void
1302
l1oip_cleanup(void)
1303
{
1304
struct l1oip *hc, *next;
1305
1306
list_for_each_entry_safe(hc, next, &l1oip_ilist, list)
1307
release_card(hc);
1308
1309
l1oip_4bit_free();
1310
}
1311
1312
1313
/*
1314
* module and stack init
1315
*/
1316
static int
1317
init_card(struct l1oip *hc, int pri, int bundle)
1318
{
1319
struct dchannel *dch;
1320
struct bchannel *bch;
1321
int ret;
1322
int i, ch;
1323
1324
spin_lock_init(&hc->socket_lock);
1325
hc->idx = l1oip_cnt;
1326
hc->pri = pri;
1327
hc->d_idx = pri ? 16 : 3;
1328
hc->b_num = pri ? 30 : 2;
1329
hc->bundle = bundle;
1330
if (hc->pri)
1331
sprintf(hc->name, "l1oip-e1.%d", l1oip_cnt + 1);
1332
else
1333
sprintf(hc->name, "l1oip-s0.%d", l1oip_cnt + 1);
1334
1335
switch (codec[l1oip_cnt]) {
1336
case 0: /* as is */
1337
case 1: /* alaw */
1338
case 2: /* ulaw */
1339
case 3: /* 4bit */
1340
break;
1341
default:
1342
printk(KERN_ERR "Codec(%d) not supported.\n",
1343
codec[l1oip_cnt]);
1344
return -EINVAL;
1345
}
1346
hc->codec = codec[l1oip_cnt];
1347
if (debug & DEBUG_L1OIP_INIT)
1348
printk(KERN_DEBUG "%s: using codec %d\n",
1349
__func__, hc->codec);
1350
1351
if (id[l1oip_cnt] == 0) {
1352
printk(KERN_WARNING "Warning: No 'id' value given or "
1353
"0, this is highly unsecure. Please use 32 "
1354
"bit randmom number 0x...\n");
1355
}
1356
hc->id = id[l1oip_cnt];
1357
if (debug & DEBUG_L1OIP_INIT)
1358
printk(KERN_DEBUG "%s: using id 0x%x\n", __func__, hc->id);
1359
1360
hc->ondemand = ondemand[l1oip_cnt];
1361
if (hc->ondemand && !hc->id) {
1362
printk(KERN_ERR "%s: ondemand option only allowed in "
1363
"conjunction with non 0 ID\n", __func__);
1364
return -EINVAL;
1365
}
1366
1367
if (limit[l1oip_cnt])
1368
hc->b_num = limit[l1oip_cnt];
1369
if (!pri && hc->b_num > 2) {
1370
printk(KERN_ERR "Maximum limit for BRI interface is 2 "
1371
"channels.\n");
1372
return -EINVAL;
1373
}
1374
if (pri && hc->b_num > 126) {
1375
printk(KERN_ERR "Maximum limit for PRI interface is 126 "
1376
"channels.\n");
1377
return -EINVAL;
1378
}
1379
if (pri && hc->b_num > 30) {
1380
printk(KERN_WARNING "Maximum limit for BRI interface is 30 "
1381
"channels.\n");
1382
printk(KERN_WARNING "Your selection of %d channels must be "
1383
"supported by application.\n", hc->limit);
1384
}
1385
1386
hc->remoteip = ip[l1oip_cnt<<2] << 24
1387
| ip[(l1oip_cnt<<2)+1] << 16
1388
| ip[(l1oip_cnt<<2)+2] << 8
1389
| ip[(l1oip_cnt<<2)+3];
1390
hc->localport = port[l1oip_cnt]?:(L1OIP_DEFAULTPORT+l1oip_cnt);
1391
if (remoteport[l1oip_cnt])
1392
hc->remoteport = remoteport[l1oip_cnt];
1393
else
1394
hc->remoteport = hc->localport;
1395
if (debug & DEBUG_L1OIP_INIT)
1396
printk(KERN_DEBUG "%s: using local port %d remote ip "
1397
"%d.%d.%d.%d port %d ondemand %d\n", __func__,
1398
hc->localport, hc->remoteip >> 24,
1399
(hc->remoteip >> 16) & 0xff,
1400
(hc->remoteip >> 8) & 0xff, hc->remoteip & 0xff,
1401
hc->remoteport, hc->ondemand);
1402
1403
dch = kzalloc(sizeof(struct dchannel), GFP_KERNEL);
1404
if (!dch)
1405
return -ENOMEM;
1406
dch->debug = debug;
1407
mISDN_initdchannel(dch, MAX_DFRAME_LEN_L1, NULL);
1408
dch->hw = hc;
1409
if (pri)
1410
dch->dev.Dprotocols = (1 << ISDN_P_TE_E1) | (1 << ISDN_P_NT_E1);
1411
else
1412
dch->dev.Dprotocols = (1 << ISDN_P_TE_S0) | (1 << ISDN_P_NT_S0);
1413
dch->dev.Bprotocols = (1 << (ISDN_P_B_RAW & ISDN_P_B_MASK)) |
1414
(1 << (ISDN_P_B_HDLC & ISDN_P_B_MASK));
1415
dch->dev.D.send = handle_dmsg;
1416
dch->dev.D.ctrl = l1oip_dctrl;
1417
dch->dev.nrbchan = hc->b_num;
1418
dch->slot = hc->d_idx;
1419
hc->chan[hc->d_idx].dch = dch;
1420
i = 1;
1421
for (ch = 0; ch < dch->dev.nrbchan; ch++) {
1422
if (ch == 15)
1423
i++;
1424
bch = kzalloc(sizeof(struct bchannel), GFP_KERNEL);
1425
if (!bch) {
1426
printk(KERN_ERR "%s: no memory for bchannel\n",
1427
__func__);
1428
return -ENOMEM;
1429
}
1430
bch->nr = i + ch;
1431
bch->slot = i + ch;
1432
bch->debug = debug;
1433
mISDN_initbchannel(bch, MAX_DATA_MEM);
1434
bch->hw = hc;
1435
bch->ch.send = handle_bmsg;
1436
bch->ch.ctrl = l1oip_bctrl;
1437
bch->ch.nr = i + ch;
1438
list_add(&bch->ch.list, &dch->dev.bchannels);
1439
hc->chan[i + ch].bch = bch;
1440
set_channelmap(bch->nr, dch->dev.channelmap);
1441
}
1442
/* TODO: create a parent device for this driver */
1443
ret = mISDN_register_device(&dch->dev, NULL, hc->name);
1444
if (ret)
1445
return ret;
1446
hc->registered = 1;
1447
1448
if (debug & DEBUG_L1OIP_INIT)
1449
printk(KERN_DEBUG "%s: Setting up network card(%d)\n",
1450
__func__, l1oip_cnt + 1);
1451
ret = l1oip_socket_open(hc);
1452
if (ret)
1453
return ret;
1454
1455
hc->keep_tl.function = (void *)l1oip_keepalive;
1456
hc->keep_tl.data = (ulong)hc;
1457
init_timer(&hc->keep_tl);
1458
hc->keep_tl.expires = jiffies + 2*HZ; /* two seconds first time */
1459
add_timer(&hc->keep_tl);
1460
1461
hc->timeout_tl.function = (void *)l1oip_timeout;
1462
hc->timeout_tl.data = (ulong)hc;
1463
init_timer(&hc->timeout_tl);
1464
hc->timeout_on = 0; /* state that we have timer off */
1465
1466
return 0;
1467
}
1468
1469
static int __init
1470
l1oip_init(void)
1471
{
1472
int pri, bundle;
1473
struct l1oip *hc;
1474
int ret;
1475
1476
printk(KERN_INFO "mISDN: Layer-1-over-IP driver Rev. %s\n",
1477
l1oip_revision);
1478
1479
INIT_LIST_HEAD(&l1oip_ilist);
1480
spin_lock_init(&l1oip_lock);
1481
1482
if (l1oip_4bit_alloc(ulaw))
1483
return -ENOMEM;
1484
1485
l1oip_cnt = 0;
1486
while (l1oip_cnt < MAX_CARDS && type[l1oip_cnt]) {
1487
switch (type[l1oip_cnt] & 0xff) {
1488
case 1:
1489
pri = 0;
1490
bundle = 0;
1491
break;
1492
case 2:
1493
pri = 1;
1494
bundle = 0;
1495
break;
1496
case 3:
1497
pri = 0;
1498
bundle = 1;
1499
break;
1500
case 4:
1501
pri = 1;
1502
bundle = 1;
1503
break;
1504
default:
1505
printk(KERN_ERR "Card type(%d) not supported.\n",
1506
type[l1oip_cnt] & 0xff);
1507
l1oip_cleanup();
1508
return -EINVAL;
1509
}
1510
1511
if (debug & DEBUG_L1OIP_INIT)
1512
printk(KERN_DEBUG "%s: interface %d is %s with %s.\n",
1513
__func__, l1oip_cnt, pri ? "PRI" : "BRI",
1514
bundle ? "bundled IP packet for all B-channels" :
1515
"separate IP packets for every B-channel");
1516
1517
hc = kzalloc(sizeof(struct l1oip), GFP_ATOMIC);
1518
if (!hc) {
1519
printk(KERN_ERR "No kmem for L1-over-IP driver.\n");
1520
l1oip_cleanup();
1521
return -ENOMEM;
1522
}
1523
INIT_WORK(&hc->workq, (void *)l1oip_send_bh);
1524
1525
spin_lock(&l1oip_lock);
1526
list_add_tail(&hc->list, &l1oip_ilist);
1527
spin_unlock(&l1oip_lock);
1528
1529
ret = init_card(hc, pri, bundle);
1530
if (ret) {
1531
l1oip_cleanup();
1532
return ret;
1533
}
1534
1535
l1oip_cnt++;
1536
}
1537
printk(KERN_INFO "%d virtual devices registered\n", l1oip_cnt);
1538
return 0;
1539
}
1540
1541
module_init(l1oip_init);
1542
module_exit(l1oip_cleanup);
1543
1544
1545