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