xref: /openbmc/linux/drivers/isdn/mISDN/l1oip_core.c (revision 9ac8d3fb)
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 	mm_segment_t oldfs;
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 	oldfs = get_fs();
356 	set_fs(KERNEL_DS);
357 	len = sock_sendmsg(socket, &hc->sendmsg, len);
358 	set_fs(oldfs);
359 	/* give socket back */
360 	hc->socket = socket; /* no locking required */
361 
362 	return len;
363 }
364 
365 
366 /*
367  * receive channel data from socket
368  */
369 static void
370 l1oip_socket_recv(struct l1oip *hc, u8 remotecodec, u8 channel, u16 timebase,
371 	u8 *buf, int len)
372 {
373 	struct sk_buff *nskb;
374 	struct bchannel *bch;
375 	struct dchannel *dch;
376 	u8 *p;
377 	u32 rx_counter;
378 
379 	if (len == 0) {
380 		if (debug & DEBUG_L1OIP_MSG)
381 			printk(KERN_DEBUG "%s: received empty keepalive data, "
382 				"ignoring\n", __func__);
383 		return;
384 	}
385 
386 	if (debug & DEBUG_L1OIP_MSG)
387 		printk(KERN_DEBUG "%s: received data, sending to mISDN (%d)\n",
388 			__func__, len);
389 
390 	if (channel < 1 || channel > 127) {
391 		printk(KERN_WARNING "%s: packet error - channel %d out of "
392 			"range\n", __func__, channel);
393 		return;
394 	}
395 	dch = hc->chan[channel].dch;
396 	bch = hc->chan[channel].bch;
397 	if (!dch && !bch) {
398 		printk(KERN_WARNING "%s: packet error - channel %d not in "
399 			"stack\n", __func__, channel);
400 		return;
401 	}
402 
403 	/* prepare message */
404 	nskb = mI_alloc_skb((remotecodec == 3)?(len<<1):len, GFP_ATOMIC);
405 	if (!nskb) {
406 		printk(KERN_ERR "%s: No mem for skb.\n", __func__);
407 		return;
408 	}
409 	p = skb_put(nskb, (remotecodec == 3)?(len<<1):len);
410 
411 	if (remotecodec == 1 && ulaw)
412 		l1oip_alaw_to_ulaw(buf, len, p);
413 	else if (remotecodec == 2 && !ulaw)
414 		l1oip_ulaw_to_alaw(buf, len, p);
415 	else if (remotecodec == 3)
416 		len = l1oip_4bit_to_law(buf, len, p);
417 	else
418 		memcpy(p, buf, len);
419 
420 	/* send message up */
421 	if (dch && len >= 2) {
422 		dch->rx_skb = nskb;
423 		recv_Dchannel(dch);
424 	}
425 	if (bch) {
426 		/* expand 16 bit sequence number to 32 bit sequence number */
427 		rx_counter = hc->chan[channel].rx_counter;
428 		if (((s16)(timebase - rx_counter)) >= 0) {
429 			/* time has changed forward */
430 			if (timebase >= (rx_counter & 0xffff))
431 				rx_counter =
432 					(rx_counter & 0xffff0000) | timebase;
433 			else
434 				rx_counter = ((rx_counter & 0xffff0000)+0x10000)
435 					| timebase;
436 		} else {
437 			/* time has changed backwards */
438 			if (timebase < (rx_counter & 0xffff))
439 				rx_counter =
440 					(rx_counter & 0xffff0000) | timebase;
441 			else
442 				rx_counter = ((rx_counter & 0xffff0000)-0x10000)
443 					| timebase;
444 		}
445 		hc->chan[channel].rx_counter = rx_counter;
446 
447 #ifdef REORDER_DEBUG
448 		if (hc->chan[channel].disorder_flag) {
449 			struct sk_buff *skb;
450 			int cnt;
451 			skb = hc->chan[channel].disorder_skb;
452 			hc->chan[channel].disorder_skb = nskb;
453 			nskb = skb;
454 			cnt = hc->chan[channel].disorder_cnt;
455 			hc->chan[channel].disorder_cnt = rx_counter;
456 			rx_counter = cnt;
457 		}
458 		hc->chan[channel].disorder_flag ^= 1;
459 		if (nskb)
460 #endif
461 		queue_ch_frame(&bch->ch, PH_DATA_IND, rx_counter, nskb);
462 	}
463 }
464 
465 
466 /*
467  * parse frame and extract channel data
468  */
469 static void
470 l1oip_socket_parse(struct l1oip *hc, struct sockaddr_in *sin, u8 *buf, int len)
471 {
472 	u32			id;
473 	u8			channel;
474 	u8			remotecodec;
475 	u16			timebase;
476 	int			m, mlen;
477 	int			len_start = len; /* initial frame length */
478 	struct dchannel		*dch = hc->chan[hc->d_idx].dch;
479 
480 	if (debug & DEBUG_L1OIP_MSG)
481 		printk(KERN_DEBUG "%s: received frame, parsing... (%d)\n",
482 			__func__, len);
483 
484 	/* check lenght */
485 	if (len < 1+1+2) {
486 		printk(KERN_WARNING "%s: packet error - length %d below "
487 			"4 bytes\n", __func__, len);
488 		return;
489 	}
490 
491 	/* check version */
492 	if (((*buf)>>6) != L1OIP_VERSION) {
493 		printk(KERN_WARNING "%s: packet error - unknown version %d\n",
494 			__func__, buf[0]>>6);
495 		return;
496 	}
497 
498 	/* check type */
499 	if (((*buf)&0x20) && !hc->pri) {
500 		printk(KERN_WARNING "%s: packet error - received E1 packet "
501 			"on S0 interface\n", __func__);
502 		return;
503 	}
504 	if (!((*buf)&0x20) && hc->pri) {
505 		printk(KERN_WARNING "%s: packet error - received S0 packet "
506 			"on E1 interface\n", __func__);
507 		return;
508 	}
509 
510 	/* get id flag */
511 	id = (*buf>>4)&1;
512 
513 	/* check coding */
514 	remotecodec = (*buf) & 0x0f;
515 	if (remotecodec > 3) {
516 		printk(KERN_WARNING "%s: packet error - remotecodec %d "
517 			"unsupported\n", __func__, remotecodec);
518 		return;
519 	}
520 	buf++;
521 	len--;
522 
523 	/* check id */
524 	if (id) {
525 		if (!hc->id) {
526 			printk(KERN_WARNING "%s: packet error - packet has id "
527 				"0x%x, but we have not\n", __func__, id);
528 			return;
529 		}
530 		if (len < 4) {
531 			printk(KERN_WARNING "%s: packet error - packet too "
532 				"short for ID value\n", __func__);
533 			return;
534 		}
535 		id = (*buf++) << 24;
536 		id += (*buf++) << 16;
537 		id += (*buf++) << 8;
538 		id += (*buf++);
539 		len -= 4;
540 
541 		if (id != hc->id) {
542 			printk(KERN_WARNING "%s: packet error - ID mismatch, "
543 				"got 0x%x, we 0x%x\n",
544 				__func__, id, hc->id);
545 			return;
546 		}
547 	} else {
548 		if (hc->id) {
549 			printk(KERN_WARNING "%s: packet error - packet has no "
550 				"ID, but we have\n", __func__);
551 			return;
552 		}
553 	}
554 
555 multiframe:
556 	if (len < 1) {
557 		printk(KERN_WARNING "%s: packet error - packet too short, "
558 			"channel expected at position %d.\n",
559 			__func__, len-len_start+1);
560 		return;
561 	}
562 
563 	/* get channel and multiframe flag */
564 	channel = *buf&0x7f;
565 	m = *buf >> 7;
566 	buf++;
567 	len--;
568 
569 	/* check length on multiframe */
570 	if (m) {
571 		if (len < 1) {
572 			printk(KERN_WARNING "%s: packet error - packet too "
573 				"short, length expected at position %d.\n",
574 				__func__, len_start-len-1);
575 			return;
576 		}
577 
578 		mlen = *buf++;
579 		len--;
580 		if (mlen == 0)
581 			mlen = 256;
582 		if (len < mlen+3) {
583 			printk(KERN_WARNING "%s: packet error - length %d at "
584 				"position %d exceeds total length %d.\n",
585 				__func__, mlen, len_start-len-1, len_start);
586 			return;
587 		}
588 		if (len == mlen+3) {
589 			printk(KERN_WARNING "%s: packet error - length %d at "
590 				"position %d will not allow additional "
591 				"packet.\n",
592 				__func__, mlen, len_start-len+1);
593 			return;
594 		}
595 	} else
596 		mlen = len-2; /* single frame, substract timebase */
597 
598 	if (len < 2) {
599 		printk(KERN_WARNING "%s: packet error - packet too short, time "
600 			"base expected at position %d.\n",
601 			__func__, len-len_start+1);
602 		return;
603 	}
604 
605 	/* get time base */
606 	timebase = (*buf++) << 8;
607 	timebase |= (*buf++);
608 	len -= 2;
609 
610 	/* if inactive, we send up a PH_ACTIVATE and activate */
611 	if (!test_bit(FLG_ACTIVE, &dch->Flags)) {
612 		if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
613 			printk(KERN_DEBUG "%s: interface become active due to "
614 				"received packet\n", __func__);
615 		test_and_set_bit(FLG_ACTIVE, &dch->Flags);
616 		_queue_data(&dch->dev.D, PH_ACTIVATE_IND, MISDN_ID_ANY, 0,
617 			NULL, GFP_ATOMIC);
618 	}
619 
620 	/* distribute packet */
621 	l1oip_socket_recv(hc, remotecodec, channel, timebase, buf, mlen);
622 	buf += mlen;
623 	len -= mlen;
624 
625 	/* multiframe */
626 	if (m)
627 		goto multiframe;
628 
629 	/* restart timer */
630 	if ((int)(hc->timeout_tl.expires-jiffies) < 5*HZ || !hc->timeout_on) {
631 		hc->timeout_on = 1;
632 		del_timer(&hc->timeout_tl);
633 		hc->timeout_tl.expires = jiffies + L1OIP_TIMEOUT*HZ;
634 		add_timer(&hc->timeout_tl);
635 	} else /* only adjust timer */
636 		hc->timeout_tl.expires = jiffies + L1OIP_TIMEOUT*HZ;
637 
638 	/* if ip or source port changes */
639 	if ((hc->sin_remote.sin_addr.s_addr != sin->sin_addr.s_addr)
640 	 || (hc->sin_remote.sin_port != sin->sin_port)) {
641 		if (debug & DEBUG_L1OIP_SOCKET)
642 			printk(KERN_DEBUG "%s: remote address changes from "
643 				"0x%08x to 0x%08x (port %d to %d)\n", __func__,
644 				ntohl(hc->sin_remote.sin_addr.s_addr),
645 				ntohl(sin->sin_addr.s_addr),
646 				ntohs(hc->sin_remote.sin_port),
647 				ntohs(sin->sin_port));
648 		hc->sin_remote.sin_addr.s_addr = sin->sin_addr.s_addr;
649 		hc->sin_remote.sin_port = sin->sin_port;
650 	}
651 }
652 
653 
654 /*
655  * socket stuff
656  */
657 static int
658 l1oip_socket_thread(void *data)
659 {
660 	struct l1oip *hc = (struct l1oip *)data;
661 	int ret = 0;
662 	struct msghdr msg;
663 	struct iovec iov;
664 	mm_segment_t oldfs;
665 	struct sockaddr_in sin_rx;
666 	unsigned char recvbuf[1500];
667 	int recvlen;
668 	struct socket *socket = NULL;
669 	DECLARE_COMPLETION(wait);
670 
671 	/* make daemon */
672 	allow_signal(SIGTERM);
673 
674 	/* create socket */
675 	if (sock_create(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &socket)) {
676 		printk(KERN_ERR "%s: Failed to create socket.\n", __func__);
677 		return -EIO;
678 	}
679 
680 	/* set incoming address */
681 	hc->sin_local.sin_family = AF_INET;
682 	hc->sin_local.sin_addr.s_addr = INADDR_ANY;
683 	hc->sin_local.sin_port = htons((unsigned short)hc->localport);
684 
685 	/* set outgoing address */
686 	hc->sin_remote.sin_family = AF_INET;
687 	hc->sin_remote.sin_addr.s_addr = htonl(hc->remoteip);
688 	hc->sin_remote.sin_port = htons((unsigned short)hc->remoteport);
689 
690 	/* bind to incomming port */
691 	if (socket->ops->bind(socket, (struct sockaddr *)&hc->sin_local,
692 	    sizeof(hc->sin_local))) {
693 		printk(KERN_ERR "%s: Failed to bind socket to port %d.\n",
694 			__func__, hc->localport);
695 		ret = -EINVAL;
696 		goto fail;
697 	}
698 
699 	/* check sk */
700 	if (socket->sk == NULL) {
701 		printk(KERN_ERR "%s: socket->sk == NULL\n", __func__);
702 		ret = -EIO;
703 		goto fail;
704 	}
705 
706 	/* build receive message */
707 	msg.msg_name = &sin_rx;
708 	msg.msg_namelen = sizeof(sin_rx);
709 	msg.msg_control = NULL;
710 	msg.msg_controllen = 0;
711 	msg.msg_iov = &iov;
712 	msg.msg_iovlen = 1;
713 
714 	/* build send message */
715 	hc->sendmsg.msg_name = &hc->sin_remote;
716 	hc->sendmsg.msg_namelen = sizeof(hc->sin_remote);
717 	hc->sendmsg.msg_control = NULL;
718 	hc->sendmsg.msg_controllen = 0;
719 	hc->sendmsg.msg_iov    = &hc->sendiov;
720 	hc->sendmsg.msg_iovlen = 1;
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 		iov.iov_base = recvbuf;
733 		iov.iov_len = sizeof(recvbuf);
734 		oldfs = get_fs();
735 		set_fs(KERNEL_DS);
736 		recvlen = sock_recvmsg(socket, &msg, sizeof(recvbuf), 0);
737 		set_fs(oldfs);
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 "%s: broken pipe on socket\n",
743 				__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 	/* close socket */
764 	if (socket)
765 		sock_release(socket);
766 
767 	/* if we got killed, signal completion */
768 	complete(&hc->socket_complete);
769 	hc->socket_thread = NULL; /* show termination of thread */
770 
771 	if (debug & DEBUG_L1OIP_SOCKET)
772 		printk(KERN_DEBUG "%s: socket thread terminated\n",
773 			__func__);
774 	return ret;
775 }
776 
777 static void
778 l1oip_socket_close(struct l1oip *hc)
779 {
780 	/* kill thread */
781 	if (hc->socket_thread) {
782 		if (debug & DEBUG_L1OIP_SOCKET)
783 			printk(KERN_DEBUG "%s: socket thread exists, "
784 				"killing...\n", __func__);
785 		send_sig(SIGTERM, hc->socket_thread, 0);
786 		wait_for_completion(&hc->socket_complete);
787 	}
788 }
789 
790 static int
791 l1oip_socket_open(struct l1oip *hc)
792 {
793 	/* in case of reopen, we need to close first */
794 	l1oip_socket_close(hc);
795 
796 	init_completion(&hc->socket_complete);
797 
798 	/* create receive process */
799 	hc->socket_thread = kthread_run(l1oip_socket_thread, hc, "l1oip_%s",
800 		hc->name);
801 	if (IS_ERR(hc->socket_thread)) {
802 		int err = PTR_ERR(hc->socket_thread);
803 		printk(KERN_ERR "%s: Failed (%d) to create socket process.\n",
804 			__func__, err);
805 		hc->socket_thread = NULL;
806 		sock_release(hc->socket);
807 		return err;
808 	}
809 	if (debug & DEBUG_L1OIP_SOCKET)
810 		printk(KERN_DEBUG "%s: socket thread created\n", __func__);
811 
812 	return 0;
813 }
814 
815 
816 static void
817 l1oip_send_bh(struct work_struct *work)
818 {
819 	struct l1oip *hc = container_of(work, struct l1oip, workq);
820 
821 	if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
822 		printk(KERN_DEBUG "%s: keepalive timer expired, sending empty "
823 			"frame on dchannel\n", __func__);
824 
825 	/* send an empty l1oip frame at D-channel */
826 	l1oip_socket_send(hc, 0, hc->d_idx, 0, 0, NULL, 0);
827 }
828 
829 
830 /*
831  * timer stuff
832  */
833 static void
834 l1oip_keepalive(void *data)
835 {
836 	struct l1oip *hc = (struct l1oip *)data;
837 
838 	schedule_work(&hc->workq);
839 }
840 
841 static void
842 l1oip_timeout(void *data)
843 {
844 	struct l1oip			*hc = (struct l1oip *)data;
845 	struct dchannel		*dch = hc->chan[hc->d_idx].dch;
846 
847 	if (debug & DEBUG_L1OIP_MSG)
848 		printk(KERN_DEBUG "%s: timeout timer expired, turn layer one "
849 			"down.\n", __func__);
850 
851 	hc->timeout_on = 0; /* state that timer must be initialized next time */
852 
853 	/* if timeout, we send up a PH_DEACTIVATE and deactivate */
854 	if (test_bit(FLG_ACTIVE, &dch->Flags)) {
855 		if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
856 			printk(KERN_DEBUG "%s: interface become deactivated "
857 				"due to timeout\n", __func__);
858 		test_and_clear_bit(FLG_ACTIVE, &dch->Flags);
859 		_queue_data(&dch->dev.D, PH_DEACTIVATE_IND, MISDN_ID_ANY, 0,
860 			NULL, GFP_ATOMIC);
861 	}
862 
863 	/* if we have ondemand set, we remove ip address */
864 	if (hc->ondemand) {
865 		if (debug & DEBUG_L1OIP_MSG)
866 			printk(KERN_DEBUG "%s: on demand causes ip address to "
867 				"be removed\n", __func__);
868 		hc->sin_remote.sin_addr.s_addr = 0;
869 	}
870 }
871 
872 
873 /*
874  * message handling
875  */
876 static int
877 handle_dmsg(struct mISDNchannel *ch, struct sk_buff *skb)
878 {
879 	struct mISDNdevice	*dev = container_of(ch, struct mISDNdevice, D);
880 	struct dchannel		*dch = container_of(dev, struct dchannel, dev);
881 	struct l1oip			*hc = dch->hw;
882 	struct mISDNhead	*hh = mISDN_HEAD_P(skb);
883 	int			ret = -EINVAL;
884 	int			l, ll;
885 	unsigned char		*p;
886 
887 	switch (hh->prim) {
888 	case PH_DATA_REQ:
889 		if (skb->len < 1) {
890 			printk(KERN_WARNING "%s: skb too small\n",
891 				__func__);
892 			break;
893 		}
894 		if (skb->len > MAX_DFRAME_LEN_L1 || skb->len > L1OIP_MAX_LEN) {
895 			printk(KERN_WARNING "%s: skb too large\n",
896 				__func__);
897 			break;
898 		}
899 		/* send frame */
900 		p = skb->data;
901 		l = skb->len;
902 		while (l) {
903 			ll = (l < L1OIP_MAX_PERFRAME)?l:L1OIP_MAX_PERFRAME;
904 			l1oip_socket_send(hc, 0, dch->slot, 0,
905 				hc->chan[dch->slot].tx_counter++, p, ll);
906 			p += ll;
907 			l -= ll;
908 		}
909 		skb_trim(skb, 0);
910 		queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
911 		return 0;
912 	case PH_ACTIVATE_REQ:
913 		if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
914 			printk(KERN_DEBUG "%s: PH_ACTIVATE channel %d (1..%d)\n"
915 				, __func__, dch->slot, hc->b_num+1);
916 		skb_trim(skb, 0);
917 		if (test_bit(FLG_ACTIVE, &dch->Flags))
918 			queue_ch_frame(ch, PH_ACTIVATE_IND, hh->id, skb);
919 		else
920 			queue_ch_frame(ch, PH_DEACTIVATE_IND, hh->id, skb);
921 		return 0;
922 	case PH_DEACTIVATE_REQ:
923 		if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
924 			printk(KERN_DEBUG "%s: PH_DEACTIVATE channel %d "
925 				"(1..%d)\n", __func__, dch->slot,
926 				hc->b_num+1);
927 		skb_trim(skb, 0);
928 		if (test_bit(FLG_ACTIVE, &dch->Flags))
929 			queue_ch_frame(ch, PH_ACTIVATE_IND, hh->id, skb);
930 		else
931 			queue_ch_frame(ch, PH_DEACTIVATE_IND, hh->id, skb);
932 		return 0;
933 	}
934 	if (!ret)
935 		dev_kfree_skb(skb);
936 	return ret;
937 }
938 
939 static int
940 channel_dctrl(struct dchannel *dch, struct mISDN_ctrl_req *cq)
941 {
942 	int	ret = 0;
943 	struct l1oip	*hc = dch->hw;
944 
945 	switch (cq->op) {
946 	case MISDN_CTRL_GETOP:
947 		cq->op = MISDN_CTRL_SETPEER | MISDN_CTRL_UNSETPEER;
948 		break;
949 	case MISDN_CTRL_SETPEER:
950 		hc->remoteip = (u32)cq->p1;
951 		hc->remoteport = cq->p2 & 0xffff;
952 		hc->localport = cq->p2 >> 16;
953 		if (!hc->remoteport)
954 			hc->remoteport = hc->localport;
955 		if (debug & DEBUG_L1OIP_SOCKET)
956 			printk(KERN_DEBUG "%s: got new ip address from user "
957 				"space.\n", __func__);
958 			l1oip_socket_open(hc);
959 		break;
960 	case MISDN_CTRL_UNSETPEER:
961 		if (debug & DEBUG_L1OIP_SOCKET)
962 			printk(KERN_DEBUG "%s: removing ip address.\n",
963 				__func__);
964 		hc->remoteip = 0;
965 		l1oip_socket_open(hc);
966 		break;
967 	default:
968 		printk(KERN_WARNING "%s: unknown Op %x\n",
969 		    __func__, cq->op);
970 		ret = -EINVAL;
971 		break;
972 	}
973 	return ret;
974 }
975 
976 static int
977 open_dchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq)
978 {
979 	if (debug & DEBUG_HW_OPEN)
980 		printk(KERN_DEBUG "%s: dev(%d) open from %p\n", __func__,
981 		    dch->dev.id, __builtin_return_address(0));
982 	if (rq->protocol == ISDN_P_NONE)
983 		return -EINVAL;
984 	if ((dch->dev.D.protocol != ISDN_P_NONE) &&
985 	    (dch->dev.D.protocol != rq->protocol)) {
986 		if (debug & DEBUG_HW_OPEN)
987 			printk(KERN_WARNING "%s: change protocol %x to %x\n",
988 			__func__, dch->dev.D.protocol, rq->protocol);
989 	}
990 	if (dch->dev.D.protocol != rq->protocol)
991 		dch->dev.D.protocol = rq->protocol;
992 
993 	if (test_bit(FLG_ACTIVE, &dch->Flags)) {
994 		_queue_data(&dch->dev.D, PH_ACTIVATE_IND, MISDN_ID_ANY,
995 		    0, NULL, GFP_KERNEL);
996 	}
997 	rq->ch = &dch->dev.D;
998 	if (!try_module_get(THIS_MODULE))
999 		printk(KERN_WARNING "%s:cannot get module\n", __func__);
1000 	return 0;
1001 }
1002 
1003 static int
1004 open_bchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq)
1005 {
1006 	struct bchannel	*bch;
1007 	int		ch;
1008 
1009 	if (!test_channelmap(rq->adr.channel, dch->dev.channelmap))
1010 		return -EINVAL;
1011 	if (rq->protocol == ISDN_P_NONE)
1012 		return -EINVAL;
1013 	ch = rq->adr.channel; /* BRI: 1=B1 2=B2  PRI: 1..15,17.. */
1014 	bch = hc->chan[ch].bch;
1015 	if (!bch) {
1016 		printk(KERN_ERR "%s:internal error ch %d has no bch\n",
1017 		    __func__, ch);
1018 		return -EINVAL;
1019 	}
1020 	if (test_and_set_bit(FLG_OPEN, &bch->Flags))
1021 		return -EBUSY; /* b-channel can be only open once */
1022 	bch->ch.protocol = rq->protocol;
1023 	rq->ch = &bch->ch;
1024 	if (!try_module_get(THIS_MODULE))
1025 		printk(KERN_WARNING "%s:cannot get module\n", __func__);
1026 	return 0;
1027 }
1028 
1029 static int
1030 l1oip_dctrl(struct mISDNchannel *ch, u_int cmd, void *arg)
1031 {
1032 	struct mISDNdevice	*dev = container_of(ch, struct mISDNdevice, D);
1033 	struct dchannel		*dch = container_of(dev, struct dchannel, dev);
1034 	struct l1oip			*hc = dch->hw;
1035 	struct channel_req	*rq;
1036 	int			err = 0;
1037 
1038 	if (dch->debug & DEBUG_HW)
1039 		printk(KERN_DEBUG "%s: cmd:%x %p\n",
1040 		    __func__, cmd, arg);
1041 	switch (cmd) {
1042 	case OPEN_CHANNEL:
1043 		rq = arg;
1044 		switch (rq->protocol) {
1045 		case ISDN_P_TE_S0:
1046 		case ISDN_P_NT_S0:
1047 			if (hc->pri) {
1048 				err = -EINVAL;
1049 				break;
1050 			}
1051 			err = open_dchannel(hc, dch, rq);
1052 			break;
1053 		case ISDN_P_TE_E1:
1054 		case ISDN_P_NT_E1:
1055 			if (!hc->pri) {
1056 				err = -EINVAL;
1057 				break;
1058 			}
1059 			err = open_dchannel(hc, dch, rq);
1060 			break;
1061 		default:
1062 			err = open_bchannel(hc, dch, rq);
1063 		}
1064 		break;
1065 	case CLOSE_CHANNEL:
1066 		if (debug & DEBUG_HW_OPEN)
1067 			printk(KERN_DEBUG "%s: dev(%d) close from %p\n",
1068 			    __func__, dch->dev.id,
1069 			    __builtin_return_address(0));
1070 		module_put(THIS_MODULE);
1071 		break;
1072 	case CONTROL_CHANNEL:
1073 		err = channel_dctrl(dch, arg);
1074 		break;
1075 	default:
1076 		if (dch->debug & DEBUG_HW)
1077 			printk(KERN_DEBUG "%s: unknown command %x\n",
1078 			    __func__, cmd);
1079 		err = -EINVAL;
1080 	}
1081 	return err;
1082 }
1083 
1084 static int
1085 handle_bmsg(struct mISDNchannel *ch, struct sk_buff *skb)
1086 {
1087 	struct bchannel		*bch = container_of(ch, struct bchannel, ch);
1088 	struct l1oip			*hc = bch->hw;
1089 	int			ret = -EINVAL;
1090 	struct mISDNhead	*hh = mISDN_HEAD_P(skb);
1091 	int			l, ll, i;
1092 	unsigned char		*p;
1093 
1094 	switch (hh->prim) {
1095 	case PH_DATA_REQ:
1096 		if (skb->len <= 0) {
1097 			printk(KERN_WARNING "%s: skb too small\n",
1098 				__func__);
1099 			break;
1100 		}
1101 		if (skb->len > MAX_DFRAME_LEN_L1 || skb->len > L1OIP_MAX_LEN) {
1102 			printk(KERN_WARNING "%s: skb too large\n",
1103 				__func__);
1104 			break;
1105 		}
1106 		/* check for AIS / ulaw-silence */
1107 		p = skb->data;
1108 		l = skb->len;
1109 		for (i = 0; i < l; i++) {
1110 			if (*p++ != 0xff)
1111 				break;
1112 		}
1113 		if (i == l) {
1114 			if (debug & DEBUG_L1OIP_MSG)
1115 				printk(KERN_DEBUG "%s: got AIS, not sending, "
1116 					"but counting\n", __func__);
1117 			hc->chan[bch->slot].tx_counter += l;
1118 			skb_trim(skb, 0);
1119 			queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
1120 			return 0;
1121 		}
1122 		/* check for silence */
1123 		p = skb->data;
1124 		l = skb->len;
1125 		for (i = 0; i < l; i++) {
1126 			if (*p++ != 0x2a)
1127 				break;
1128 		}
1129 		if (i == l) {
1130 			if (debug & DEBUG_L1OIP_MSG)
1131 				printk(KERN_DEBUG "%s: got silence, not sending"
1132 					", but counting\n", __func__);
1133 			hc->chan[bch->slot].tx_counter += l;
1134 			skb_trim(skb, 0);
1135 			queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
1136 			return 0;
1137 		}
1138 
1139 		/* send frame */
1140 		p = skb->data;
1141 		l = skb->len;
1142 		while (l) {
1143 			ll = (l < L1OIP_MAX_PERFRAME)?l:L1OIP_MAX_PERFRAME;
1144 			l1oip_socket_send(hc, hc->codec, bch->slot, 0,
1145 				hc->chan[bch->slot].tx_counter, p, ll);
1146 			hc->chan[bch->slot].tx_counter += ll;
1147 			p += ll;
1148 			l -= ll;
1149 		}
1150 		skb_trim(skb, 0);
1151 		queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
1152 		return 0;
1153 	case PH_ACTIVATE_REQ:
1154 		if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
1155 			printk(KERN_DEBUG "%s: PH_ACTIVATE channel %d (1..%d)\n"
1156 				, __func__, bch->slot, hc->b_num+1);
1157 		hc->chan[bch->slot].codecstate = 0;
1158 		test_and_set_bit(FLG_ACTIVE, &bch->Flags);
1159 		skb_trim(skb, 0);
1160 		queue_ch_frame(ch, PH_ACTIVATE_IND, hh->id, skb);
1161 		return 0;
1162 	case PH_DEACTIVATE_REQ:
1163 		if (debug & (DEBUG_L1OIP_MSG|DEBUG_L1OIP_SOCKET))
1164 			printk(KERN_DEBUG "%s: PH_DEACTIVATE channel %d "
1165 				"(1..%d)\n", __func__, bch->slot,
1166 				hc->b_num+1);
1167 		test_and_clear_bit(FLG_ACTIVE, &bch->Flags);
1168 		skb_trim(skb, 0);
1169 		queue_ch_frame(ch, PH_DEACTIVATE_IND, hh->id, skb);
1170 		return 0;
1171 	}
1172 	if (!ret)
1173 		dev_kfree_skb(skb);
1174 	return ret;
1175 }
1176 
1177 static int
1178 channel_bctrl(struct bchannel *bch, struct mISDN_ctrl_req *cq)
1179 {
1180 	int			ret = 0;
1181 	struct dsp_features	*features =
1182 		(struct dsp_features *)(*((u_long *)&cq->p1));
1183 
1184 	switch (cq->op) {
1185 	case MISDN_CTRL_GETOP:
1186 		cq->op = MISDN_CTRL_HW_FEATURES_OP;
1187 		break;
1188 	case MISDN_CTRL_HW_FEATURES: /* fill features structure */
1189 		if (debug & DEBUG_L1OIP_MSG)
1190 			printk(KERN_DEBUG "%s: HW_FEATURE request\n",
1191 			    __func__);
1192 		/* create confirm */
1193 		features->unclocked = 1;
1194 		features->unordered = 1;
1195 		break;
1196 	default:
1197 		printk(KERN_WARNING "%s: unknown Op %x\n",
1198 		    __func__, cq->op);
1199 		ret = -EINVAL;
1200 		break;
1201 	}
1202 	return ret;
1203 }
1204 
1205 static int
1206 l1oip_bctrl(struct mISDNchannel *ch, u_int cmd, void *arg)
1207 {
1208 	struct bchannel	*bch = container_of(ch, struct bchannel, ch);
1209 	int		err = -EINVAL;
1210 
1211 	if (bch->debug & DEBUG_HW)
1212 		printk(KERN_DEBUG "%s: cmd:%x %p\n",
1213 		    __func__, cmd, arg);
1214 	switch (cmd) {
1215 	case CLOSE_CHANNEL:
1216 		test_and_clear_bit(FLG_OPEN, &bch->Flags);
1217 		test_and_clear_bit(FLG_ACTIVE, &bch->Flags);
1218 		ch->protocol = ISDN_P_NONE;
1219 		ch->peer = NULL;
1220 		module_put(THIS_MODULE);
1221 		err = 0;
1222 		break;
1223 	case CONTROL_CHANNEL:
1224 		err = channel_bctrl(bch, arg);
1225 		break;
1226 	default:
1227 		printk(KERN_WARNING "%s: unknown prim(%x)\n",
1228 			__func__, cmd);
1229 	}
1230 	return err;
1231 }
1232 
1233 
1234 /*
1235  * cleanup module and stack
1236  */
1237 static void
1238 release_card(struct l1oip *hc)
1239 {
1240 	int	ch;
1241 
1242 	if (timer_pending(&hc->keep_tl))
1243 		del_timer(&hc->keep_tl);
1244 
1245 	if (timer_pending(&hc->timeout_tl))
1246 		del_timer(&hc->timeout_tl);
1247 
1248 	if (hc->socket_thread)
1249 		l1oip_socket_close(hc);
1250 
1251 	if (hc->registered && hc->chan[hc->d_idx].dch)
1252 		mISDN_unregister_device(&hc->chan[hc->d_idx].dch->dev);
1253 	for (ch = 0; ch < 128; ch++) {
1254 		if (hc->chan[ch].dch) {
1255 			mISDN_freedchannel(hc->chan[ch].dch);
1256 			kfree(hc->chan[ch].dch);
1257 		}
1258 		if (hc->chan[ch].bch) {
1259 			mISDN_freebchannel(hc->chan[ch].bch);
1260 			kfree(hc->chan[ch].bch);
1261 #ifdef REORDER_DEBUG
1262 			if (hc->chan[ch].disorder_skb)
1263 				dev_kfree_skb(hc->chan[ch].disorder_skb);
1264 #endif
1265 		}
1266 	}
1267 
1268 	spin_lock(&l1oip_lock);
1269 	list_del(&hc->list);
1270 	spin_unlock(&l1oip_lock);
1271 
1272 	kfree(hc);
1273 }
1274 
1275 static void
1276 l1oip_cleanup(void)
1277 {
1278 	struct l1oip *hc, *next;
1279 
1280 	list_for_each_entry_safe(hc, next, &l1oip_ilist, list)
1281 		release_card(hc);
1282 
1283 	l1oip_4bit_free();
1284 }
1285 
1286 
1287 /*
1288  * module and stack init
1289  */
1290 static int
1291 init_card(struct l1oip *hc, int pri, int bundle)
1292 {
1293 	struct dchannel	*dch;
1294 	struct bchannel	*bch;
1295 	int		ret;
1296 	int		i, ch;
1297 
1298 	spin_lock_init(&hc->socket_lock);
1299 	hc->idx = l1oip_cnt;
1300 	hc->pri = pri;
1301 	hc->d_idx = pri?16:3;
1302 	hc->b_num = pri?30:2;
1303 	hc->bundle = bundle;
1304 	if (hc->pri)
1305 		sprintf(hc->name, "l1oip-e1.%d", l1oip_cnt + 1);
1306 	else
1307 		sprintf(hc->name, "l1oip-s0.%d", l1oip_cnt + 1);
1308 
1309 	switch (codec[l1oip_cnt]) {
1310 	case 0: /* as is */
1311 	case 1: /* alaw */
1312 	case 2: /* ulaw */
1313 	case 3: /* 4bit */
1314 		break;
1315 	default:
1316 		printk(KERN_ERR "Codec(%d) not supported.\n",
1317 			codec[l1oip_cnt]);
1318 		return -EINVAL;
1319 	}
1320 	hc->codec = codec[l1oip_cnt];
1321 	if (debug & DEBUG_L1OIP_INIT)
1322 		printk(KERN_DEBUG "%s: using codec %d\n",
1323 			__func__, hc->codec);
1324 
1325 	if (id[l1oip_cnt] == 0) {
1326 		printk(KERN_WARNING "Warning: No 'id' value given or "
1327 			"0, this is highly unsecure. Please use 32 "
1328 			"bit randmom number 0x...\n");
1329 	}
1330 	hc->id = id[l1oip_cnt];
1331 	if (debug & DEBUG_L1OIP_INIT)
1332 		printk(KERN_DEBUG "%s: using id 0x%x\n", __func__, hc->id);
1333 
1334 	hc->ondemand = ondemand[l1oip_cnt];
1335 	if (hc->ondemand && !hc->id) {
1336 		printk(KERN_ERR "%s: ondemand option only allowed in "
1337 			"conjunction with non 0 ID\n", __func__);
1338 		return -EINVAL;
1339 	}
1340 
1341 	if (limit[l1oip_cnt])
1342 		hc->b_num = limit[l1oip_cnt];
1343 	if (!pri && hc->b_num > 2) {
1344 		printk(KERN_ERR "Maximum limit for BRI interface is 2 "
1345 			"channels.\n");
1346 		return -EINVAL;
1347 	}
1348 	if (pri && hc->b_num > 126) {
1349 		printk(KERN_ERR "Maximum limit for PRI interface is 126 "
1350 			"channels.\n");
1351 		return -EINVAL;
1352 	}
1353 	if (pri && hc->b_num > 30) {
1354 		printk(KERN_WARNING "Maximum limit for BRI interface is 30 "
1355 			"channels.\n");
1356 		printk(KERN_WARNING "Your selection of %d channels must be "
1357 			"supported by application.\n", hc->limit);
1358 	}
1359 
1360 	hc->remoteip = ip[l1oip_cnt<<2] << 24
1361 		     | ip[(l1oip_cnt<<2)+1] << 16
1362 		     | ip[(l1oip_cnt<<2)+2] << 8
1363 		     | ip[(l1oip_cnt<<2)+3];
1364 	hc->localport = port[l1oip_cnt]?:(L1OIP_DEFAULTPORT+l1oip_cnt);
1365 	if (remoteport[l1oip_cnt])
1366 		hc->remoteport = remoteport[l1oip_cnt];
1367 	else
1368 		hc->remoteport = hc->localport;
1369 	if (debug & DEBUG_L1OIP_INIT)
1370 		printk(KERN_DEBUG "%s: using local port %d remote ip "
1371 			"%d.%d.%d.%d port %d ondemand %d\n", __func__,
1372 			hc->localport, hc->remoteip >> 24,
1373 			(hc->remoteip >> 16) & 0xff,
1374 			(hc->remoteip >> 8) & 0xff, hc->remoteip & 0xff,
1375 			hc->remoteport, hc->ondemand);
1376 
1377 	dch = kzalloc(sizeof(struct dchannel), GFP_KERNEL);
1378 	if (!dch)
1379 		return -ENOMEM;
1380 	dch->debug = debug;
1381 	mISDN_initdchannel(dch, MAX_DFRAME_LEN_L1, NULL);
1382 	dch->hw = hc;
1383 	if (pri)
1384 		dch->dev.Dprotocols = (1 << ISDN_P_TE_E1) | (1 << ISDN_P_NT_E1);
1385 	else
1386 		dch->dev.Dprotocols = (1 << ISDN_P_TE_S0) | (1 << ISDN_P_NT_S0);
1387 	dch->dev.Bprotocols = (1 << (ISDN_P_B_RAW & ISDN_P_B_MASK)) |
1388 	    (1 << (ISDN_P_B_HDLC & ISDN_P_B_MASK));
1389 	dch->dev.D.send = handle_dmsg;
1390 	dch->dev.D.ctrl = l1oip_dctrl;
1391 	dch->dev.nrbchan = hc->b_num;
1392 	dch->slot = hc->d_idx;
1393 	hc->chan[hc->d_idx].dch = dch;
1394 	i = 1;
1395 	for (ch = 0; ch < dch->dev.nrbchan; ch++) {
1396 		if (ch == 15)
1397 			i++;
1398 		bch = kzalloc(sizeof(struct bchannel), GFP_KERNEL);
1399 		if (!bch) {
1400 			printk(KERN_ERR "%s: no memory for bchannel\n",
1401 			    __func__);
1402 			return -ENOMEM;
1403 		}
1404 		bch->nr = i + ch;
1405 		bch->slot = i + ch;
1406 		bch->debug = debug;
1407 		mISDN_initbchannel(bch, MAX_DATA_MEM);
1408 		bch->hw = hc;
1409 		bch->ch.send = handle_bmsg;
1410 		bch->ch.ctrl = l1oip_bctrl;
1411 		bch->ch.nr = i + ch;
1412 		list_add(&bch->ch.list, &dch->dev.bchannels);
1413 		hc->chan[i + ch].bch = bch;
1414 		set_channelmap(bch->nr, dch->dev.channelmap);
1415 	}
1416 	ret = mISDN_register_device(&dch->dev, hc->name);
1417 	if (ret)
1418 		return ret;
1419 	hc->registered = 1;
1420 
1421 	if (debug & DEBUG_L1OIP_INIT)
1422 		printk(KERN_DEBUG "%s: Setting up network card(%d)\n",
1423 			__func__, l1oip_cnt + 1);
1424 	ret = l1oip_socket_open(hc);
1425 	if (ret)
1426 		return ret;
1427 
1428 	hc->keep_tl.function = (void *)l1oip_keepalive;
1429 	hc->keep_tl.data = (ulong)hc;
1430 	init_timer(&hc->keep_tl);
1431 	hc->keep_tl.expires = jiffies + 2*HZ; /* two seconds first time */
1432 	add_timer(&hc->keep_tl);
1433 
1434 	hc->timeout_tl.function = (void *)l1oip_timeout;
1435 	hc->timeout_tl.data = (ulong)hc;
1436 	init_timer(&hc->timeout_tl);
1437 	hc->timeout_on = 0; /* state that we have timer off */
1438 
1439 	return 0;
1440 }
1441 
1442 static int __init
1443 l1oip_init(void)
1444 {
1445 	int		pri, bundle;
1446 	struct l1oip		*hc;
1447 	int		ret;
1448 
1449 	printk(KERN_INFO "mISDN: Layer-1-over-IP driver Rev. %s\n",
1450 		l1oip_revision);
1451 
1452 	INIT_LIST_HEAD(&l1oip_ilist);
1453 	spin_lock_init(&l1oip_lock);
1454 
1455 	if (l1oip_4bit_alloc(ulaw))
1456 		return -ENOMEM;
1457 
1458 	l1oip_cnt = 0;
1459 	while (type[l1oip_cnt] && l1oip_cnt < MAX_CARDS) {
1460 		switch (type[l1oip_cnt] & 0xff) {
1461 		case 1:
1462 			pri = 0;
1463 			bundle = 0;
1464 			break;
1465 		case 2:
1466 			pri = 1;
1467 			bundle = 0;
1468 			break;
1469 		case 3:
1470 			pri = 0;
1471 			bundle = 1;
1472 			break;
1473 		case 4:
1474 			pri = 1;
1475 			bundle = 1;
1476 			break;
1477 		default:
1478 			printk(KERN_ERR "Card type(%d) not supported.\n",
1479 				type[l1oip_cnt] & 0xff);
1480 			l1oip_cleanup();
1481 			return -EINVAL;
1482 		}
1483 
1484 		if (debug & DEBUG_L1OIP_INIT)
1485 			printk(KERN_DEBUG "%s: interface %d is %s with %s.\n",
1486 				__func__, l1oip_cnt, pri?"PRI":"BRI",
1487 				bundle?"bundled IP packet for all B-channels"
1488 				 :"seperate IP packets for every B-channel");
1489 
1490 		hc = kzalloc(sizeof(struct l1oip), GFP_ATOMIC);
1491 		if (!hc) {
1492 			printk(KERN_ERR "No kmem for L1-over-IP driver.\n");
1493 			l1oip_cleanup();
1494 			return -ENOMEM;
1495 		}
1496 		INIT_WORK(&hc->workq, (void *)l1oip_send_bh);
1497 
1498 		spin_lock(&l1oip_lock);
1499 		list_add_tail(&hc->list, &l1oip_ilist);
1500 		spin_unlock(&l1oip_lock);
1501 
1502 		ret = init_card(hc, pri, bundle);
1503 		if (ret) {
1504 			l1oip_cleanup();
1505 			return ret;
1506 		}
1507 
1508 		l1oip_cnt++;
1509 	}
1510 	printk(KERN_INFO "%d virtual devices registered\n", l1oip_cnt);
1511 	return 0;
1512 }
1513 
1514 module_init(l1oip_init);
1515 module_exit(l1oip_cleanup);
1516 
1517