]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blob - drivers/isdn/mISDN/l1oip_core.c
drm/radeon: set fb aperture sizes for framebuffer handoff.
[mirror_ubuntu-zesty-kernel.git] / drivers / isdn / mISDN / l1oip_core.c
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
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 arround 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 usefull 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 <net/sock.h>
237 #include "core.h"
238 #include "l1oip.h"
239
240 static const char *l1oip_revision = "2.00";
241
242 static int l1oip_cnt;
243 static spinlock_t l1oip_lock;
244 static struct list_head l1oip_ilist;
245
246 #define MAX_CARDS 16
247 static u_int type[MAX_CARDS];
248 static u_int codec[MAX_CARDS];
249 static u_int ip[MAX_CARDS*4];
250 static u_int port[MAX_CARDS];
251 static u_int remoteport[MAX_CARDS];
252 static u_int ondemand[MAX_CARDS];
253 static u_int limit[MAX_CARDS];
254 static u_int id[MAX_CARDS];
255 static int debug;
256 static int ulaw;
257
258 MODULE_AUTHOR("Andreas Eversberg");
259 MODULE_LICENSE("GPL");
260 module_param_array(type, uint, NULL, S_IRUGO | S_IWUSR);
261 module_param_array(codec, uint, NULL, S_IRUGO | S_IWUSR);
262 module_param_array(ip, uint, NULL, S_IRUGO | S_IWUSR);
263 module_param_array(port, uint, NULL, S_IRUGO | S_IWUSR);
264 module_param_array(remoteport, uint, NULL, S_IRUGO | S_IWUSR);
265 module_param_array(ondemand, uint, NULL, S_IRUGO | S_IWUSR);
266 module_param_array(limit, uint, NULL, S_IRUGO | S_IWUSR);
267 module_param_array(id, uint, NULL, S_IRUGO | S_IWUSR);
268 module_param(ulaw, uint, S_IRUGO | S_IWUSR);
269 module_param(debug, uint, S_IRUGO | S_IWUSR);
270
271 /*
272 * send a frame via socket, if open and restart timer
273 */
274 static int
275 l1oip_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;
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 */
310 | (hc->pri ? 0x20 : 0x00) /* type */
311 | (hc->id ? 0x10 : 0x00) /* id */
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 }
319 *p++ = (multi == 1) ? 0x80 : 0x00 + channel; /* m-flag, channel */
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;
354 len = kernel_sendmsg(socket, &hc->sendmsg, &hc->sendiov, 1, len);
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 */
365 static void
366 l1oip_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 */
400 nskb = mI_alloc_skb((remotecodec == 3) ? (len<<1) : len, GFP_ATOMIC);
401 if (!nskb) {
402 printk(KERN_ERR "%s: No mem for skb.\n", __func__);
403 return;
404 }
405 p = skb_put(nskb, (remotecodec == 3) ? (len<<1) : len);
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
457 queue_ch_frame(&bch->ch, PH_DATA_IND, rx_counter, nskb);
458 }
459 }
460
461
462 /*
463 * parse frame and extract channel data
464 */
465 static void
466 l1oip_socket_parse(struct l1oip *hc, struct sockaddr_in *sin, u8 *buf, int len)
467 {
468 u32 packet_id;
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 */
507 packet_id = (*buf>>4)&1;
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
519 /* check packet_id */
520 if (packet_id) {
521 if (!hc->id) {
522 printk(KERN_WARNING "%s: packet error - packet has id "
523 "0x%x, but we have not\n", __func__, packet_id);
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 }
531 packet_id = (*buf++) << 24;
532 packet_id += (*buf++) << 16;
533 packet_id += (*buf++) << 8;
534 packet_id += (*buf++);
535 len -= 4;
536
537 if (packet_id != hc->id) {
538 printk(KERN_WARNING "%s: packet error - ID mismatch, "
539 "got 0x%x, we 0x%x\n",
540 __func__, packet_id, hc->id);
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
551 multiframe:
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 */
653 static int
654 l1oip_socket_thread(void *data)
655 {
656 struct l1oip *hc = (struct l1oip *)data;
657 int ret = 0;
658 struct msghdr msg;
659 struct sockaddr_in sin_rx;
660 unsigned char *recvbuf;
661 size_t recvbuf_size = 1500;
662 int recvlen;
663 struct socket *socket = NULL;
664 DECLARE_COMPLETION(wait);
665
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
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__);
680 ret = -EIO;
681 goto fail;
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;
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;
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)) {
732 struct kvec iov = {
733 .iov_base = recvbuf,
734 .iov_len = sizeof(recvbuf),
735 };
736 recvlen = kernel_recvmsg(socket, &msg, &iov, 1,
737 sizeof(recvbuf), 0);
738 if (recvlen > 0) {
739 l1oip_socket_parse(hc, &sin_rx, recvbuf, recvlen);
740 } else {
741 if (debug & DEBUG_L1OIP_SOCKET)
742 printk(KERN_WARNING
743 "%s: broken pipe on socket\n", __func__);
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
762 fail:
763 /* free recvbuf */
764 kfree(recvbuf);
765
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
780 static void
781 l1oip_socket_close(struct l1oip *hc)
782 {
783 struct dchannel *dch = hc->chan[hc->d_idx].dch;
784
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 }
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 }
803 }
804
805 static int
806 l1oip_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
831 static void
832 l1oip_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 */
848 static void
849 l1oip_keepalive(void *data)
850 {
851 struct l1oip *hc = (struct l1oip *)data;
852
853 schedule_work(&hc->workq);
854 }
855
856 static void
857 l1oip_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 */
891 static int
892 handle_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) {
918 ll = (l < L1OIP_MAX_PERFRAME) ? l : L1OIP_MAX_PERFRAME;
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
954 static int
955 channel_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:
962 cq->op = MISDN_CTRL_SETPEER | MISDN_CTRL_UNSETPEER
963 | MISDN_CTRL_GETPEER;
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;
983 case MISDN_CTRL_GETPEER:
984 if (debug & DEBUG_L1OIP_SOCKET)
985 printk(KERN_DEBUG "%s: getting ip address.\n",
986 __func__);
987 cq->p1 = hc->remoteip;
988 cq->p2 = hc->remoteport | (hc->localport << 16);
989 break;
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
999 static int
1000 open_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
1026 static int
1027 open_bchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq)
1028 {
1029 struct bchannel *bch;
1030 int ch;
1031
1032 if (!test_channelmap(rq->adr.channel, dch->dev.channelmap))
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
1052 static int
1053 l1oip_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
1107 static int
1108 handle_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) {
1166 ll = (l < L1OIP_MAX_PERFRAME) ? l : L1OIP_MAX_PERFRAME;
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
1200 static int
1201 channel_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
1228 static int
1229 l1oip_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 */
1260 static void
1261 release_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
1298 static void
1299 l1oip_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 */
1313 static int
1314 init_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;
1324 hc->d_idx = pri ? 16 : 3;
1325 hc->b_num = pri ? 30 : 2;
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;
1437 set_channelmap(bch->nr, dch->dev.channelmap);
1438 }
1439 /* TODO: create a parent device for this driver */
1440 ret = mISDN_register_device(&dch->dev, NULL, hc->name);
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
1466 static int __init
1467 l1oip_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",
1510 __func__, l1oip_cnt, pri ? "PRI" : "BRI",
1511 bundle ? "bundled IP packet for all B-channels" :
1512 "seperate IP packets for every B-channel");
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
1538 module_init(l1oip_init);
1539 module_exit(l1oip_cleanup);
1540