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