use less confusing names for iov_iter direction initializers
[linux-block.git] / drivers / isdn / mISDN / l1oip_core.c
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
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) && !hc->shutdown)
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
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
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) ||
605              !hc->timeout_on) &&
606             !hc->shutdown) {
607                 hc->timeout_on = 1;
608                 mod_timer(&hc->timeout_tl, jiffies + L1OIP_TIMEOUT * HZ);
609         } else /* only adjust timer */
610                 hc->timeout_tl.expires = jiffies + L1OIP_TIMEOUT * HZ;
611
612         /* if ip or source port changes */
613         if ((hc->sin_remote.sin_addr.s_addr != sin->sin_addr.s_addr)
614             || (hc->sin_remote.sin_port != sin->sin_port)) {
615                 if (debug & DEBUG_L1OIP_SOCKET)
616                         printk(KERN_DEBUG "%s: remote address changes from "
617                                "0x%08x to 0x%08x (port %d to %d)\n", __func__,
618                                ntohl(hc->sin_remote.sin_addr.s_addr),
619                                ntohl(sin->sin_addr.s_addr),
620                                ntohs(hc->sin_remote.sin_port),
621                                ntohs(sin->sin_port));
622                 hc->sin_remote.sin_addr.s_addr = sin->sin_addr.s_addr;
623                 hc->sin_remote.sin_port = sin->sin_port;
624         }
625 }
626
627
628 /*
629  * socket stuff
630  */
631 static int
632 l1oip_socket_thread(void *data)
633 {
634         struct l1oip *hc = (struct l1oip *)data;
635         int ret = 0;
636         struct sockaddr_in sin_rx;
637         struct kvec iov;
638         struct msghdr msg = {.msg_name = &sin_rx,
639                              .msg_namelen = sizeof(sin_rx)};
640         unsigned char *recvbuf;
641         size_t recvbuf_size = 1500;
642         int recvlen;
643         struct socket *socket = NULL;
644         DECLARE_COMPLETION_ONSTACK(wait);
645
646         /* allocate buffer memory */
647         recvbuf = kmalloc(recvbuf_size, GFP_KERNEL);
648         if (!recvbuf) {
649                 printk(KERN_ERR "%s: Failed to alloc recvbuf.\n", __func__);
650                 ret = -ENOMEM;
651                 goto fail;
652         }
653
654         iov.iov_base = recvbuf;
655         iov.iov_len = recvbuf_size;
656
657         /* make daemon */
658         allow_signal(SIGTERM);
659
660         /* create socket */
661         if (sock_create(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &socket)) {
662                 printk(KERN_ERR "%s: Failed to create socket.\n", __func__);
663                 ret = -EIO;
664                 goto fail;
665         }
666
667         /* set incoming address */
668         hc->sin_local.sin_family = AF_INET;
669         hc->sin_local.sin_addr.s_addr = INADDR_ANY;
670         hc->sin_local.sin_port = htons((unsigned short)hc->localport);
671
672         /* set outgoing address */
673         hc->sin_remote.sin_family = AF_INET;
674         hc->sin_remote.sin_addr.s_addr = htonl(hc->remoteip);
675         hc->sin_remote.sin_port = htons((unsigned short)hc->remoteport);
676
677         /* bind to incoming port */
678         if (socket->ops->bind(socket, (struct sockaddr *)&hc->sin_local,
679                               sizeof(hc->sin_local))) {
680                 printk(KERN_ERR "%s: Failed to bind socket to port %d.\n",
681                        __func__, hc->localport);
682                 ret = -EINVAL;
683                 goto fail;
684         }
685
686         /* check sk */
687         if (socket->sk == NULL) {
688                 printk(KERN_ERR "%s: socket->sk == NULL\n", __func__);
689                 ret = -EIO;
690                 goto fail;
691         }
692
693         /* build send message */
694         hc->sendmsg.msg_name = &hc->sin_remote;
695         hc->sendmsg.msg_namelen = sizeof(hc->sin_remote);
696         hc->sendmsg.msg_control = NULL;
697         hc->sendmsg.msg_controllen = 0;
698
699         /* give away socket */
700         spin_lock(&hc->socket_lock);
701         hc->socket = socket;
702         spin_unlock(&hc->socket_lock);
703
704         /* read loop */
705         if (debug & DEBUG_L1OIP_SOCKET)
706                 printk(KERN_DEBUG "%s: socket created and open\n",
707                        __func__);
708         while (!signal_pending(current)) {
709                 iov_iter_kvec(&msg.msg_iter, ITER_DEST, &iov, 1, recvbuf_size);
710                 recvlen = sock_recvmsg(socket, &msg, 0);
711                 if (recvlen > 0) {
712                         l1oip_socket_parse(hc, &sin_rx, recvbuf, recvlen);
713                 } else {
714                         if (debug & DEBUG_L1OIP_SOCKET)
715                                 printk(KERN_WARNING
716                                        "%s: broken pipe on socket\n", __func__);
717                 }
718         }
719
720         /* get socket back, check first if in use, maybe by send function */
721         spin_lock(&hc->socket_lock);
722         /* if hc->socket is NULL, it is in use until it is given back */
723         while (!hc->socket) {
724                 spin_unlock(&hc->socket_lock);
725                 schedule_timeout(HZ / 10);
726                 spin_lock(&hc->socket_lock);
727         }
728         hc->socket = NULL;
729         spin_unlock(&hc->socket_lock);
730
731         if (debug & DEBUG_L1OIP_SOCKET)
732                 printk(KERN_DEBUG "%s: socket thread terminating\n",
733                        __func__);
734
735 fail:
736         /* free recvbuf */
737         kfree(recvbuf);
738
739         /* close socket */
740         if (socket)
741                 sock_release(socket);
742
743         /* if we got killed, signal completion */
744         complete(&hc->socket_complete);
745         hc->socket_thread = NULL; /* show termination of thread */
746
747         if (debug & DEBUG_L1OIP_SOCKET)
748                 printk(KERN_DEBUG "%s: socket thread terminated\n",
749                        __func__);
750         return ret;
751 }
752
753 static void
754 l1oip_socket_close(struct l1oip *hc)
755 {
756         struct dchannel *dch = hc->chan[hc->d_idx].dch;
757
758         /* kill thread */
759         if (hc->socket_thread) {
760                 if (debug & DEBUG_L1OIP_SOCKET)
761                         printk(KERN_DEBUG "%s: socket thread exists, "
762                                "killing...\n", __func__);
763                 send_sig(SIGTERM, hc->socket_thread, 0);
764                 wait_for_completion(&hc->socket_complete);
765         }
766
767         /* if active, we send up a PH_DEACTIVATE and deactivate */
768         if (test_bit(FLG_ACTIVE, &dch->Flags)) {
769                 if (debug & (DEBUG_L1OIP_MSG | DEBUG_L1OIP_SOCKET))
770                         printk(KERN_DEBUG "%s: interface become deactivated "
771                                "due to timeout\n", __func__);
772                 test_and_clear_bit(FLG_ACTIVE, &dch->Flags);
773                 _queue_data(&dch->dev.D, PH_DEACTIVATE_IND, MISDN_ID_ANY, 0,
774                             NULL, GFP_ATOMIC);
775         }
776 }
777
778 static int
779 l1oip_socket_open(struct l1oip *hc)
780 {
781         /* in case of reopen, we need to close first */
782         l1oip_socket_close(hc);
783
784         init_completion(&hc->socket_complete);
785
786         /* create receive process */
787         hc->socket_thread = kthread_run(l1oip_socket_thread, hc, "l1oip_%s",
788                                         hc->name);
789         if (IS_ERR(hc->socket_thread)) {
790                 int err = PTR_ERR(hc->socket_thread);
791                 printk(KERN_ERR "%s: Failed (%d) to create socket process.\n",
792                        __func__, err);
793                 hc->socket_thread = NULL;
794                 sock_release(hc->socket);
795                 return err;
796         }
797         if (debug & DEBUG_L1OIP_SOCKET)
798                 printk(KERN_DEBUG "%s: socket thread created\n", __func__);
799
800         return 0;
801 }
802
803
804 static void
805 l1oip_send_bh(struct work_struct *work)
806 {
807         struct l1oip *hc = container_of(work, struct l1oip, workq);
808
809         if (debug & (DEBUG_L1OIP_MSG | DEBUG_L1OIP_SOCKET))
810                 printk(KERN_DEBUG "%s: keepalive timer expired, sending empty "
811                        "frame on dchannel\n", __func__);
812
813         /* send an empty l1oip frame at D-channel */
814         l1oip_socket_send(hc, 0, hc->d_idx, 0, 0, NULL, 0);
815 }
816
817
818 /*
819  * timer stuff
820  */
821 static void
822 l1oip_keepalive(struct timer_list *t)
823 {
824         struct l1oip *hc = from_timer(hc, t, keep_tl);
825
826         schedule_work(&hc->workq);
827 }
828
829 static void
830 l1oip_timeout(struct timer_list *t)
831 {
832         struct l1oip                    *hc = from_timer(hc, t,
833                                                                   timeout_tl);
834         struct dchannel         *dch = hc->chan[hc->d_idx].dch;
835
836         if (debug & DEBUG_L1OIP_MSG)
837                 printk(KERN_DEBUG "%s: timeout timer expired, turn layer one "
838                        "down.\n", __func__);
839
840         hc->timeout_on = 0; /* state that timer must be initialized next time */
841
842         /* if timeout, we send up a PH_DEACTIVATE and deactivate */
843         if (test_bit(FLG_ACTIVE, &dch->Flags)) {
844                 if (debug & (DEBUG_L1OIP_MSG | DEBUG_L1OIP_SOCKET))
845                         printk(KERN_DEBUG "%s: interface become deactivated "
846                                "due to timeout\n", __func__);
847                 test_and_clear_bit(FLG_ACTIVE, &dch->Flags);
848                 _queue_data(&dch->dev.D, PH_DEACTIVATE_IND, MISDN_ID_ANY, 0,
849                             NULL, GFP_ATOMIC);
850         }
851
852         /* if we have ondemand set, we remove ip address */
853         if (hc->ondemand) {
854                 if (debug & DEBUG_L1OIP_MSG)
855                         printk(KERN_DEBUG "%s: on demand causes ip address to "
856                                "be removed\n", __func__);
857                 hc->sin_remote.sin_addr.s_addr = 0;
858         }
859 }
860
861
862 /*
863  * message handling
864  */
865 static int
866 handle_dmsg(struct mISDNchannel *ch, struct sk_buff *skb)
867 {
868         struct mISDNdevice      *dev = container_of(ch, struct mISDNdevice, D);
869         struct dchannel         *dch = container_of(dev, struct dchannel, dev);
870         struct l1oip                    *hc = dch->hw;
871         struct mISDNhead        *hh = mISDN_HEAD_P(skb);
872         int                     ret = -EINVAL;
873         int                     l, ll;
874         unsigned char           *p;
875
876         switch (hh->prim) {
877         case PH_DATA_REQ:
878                 if (skb->len < 1) {
879                         printk(KERN_WARNING "%s: skb too small\n",
880                                __func__);
881                         break;
882                 }
883                 if (skb->len > MAX_DFRAME_LEN_L1 || skb->len > L1OIP_MAX_LEN) {
884                         printk(KERN_WARNING "%s: skb too large\n",
885                                __func__);
886                         break;
887                 }
888                 /* send frame */
889                 p = skb->data;
890                 l = skb->len;
891                 while (l) {
892                         /*
893                          * This is technically bounded by L1OIP_MAX_PERFRAME but
894                          * MAX_DFRAME_LEN_L1 < L1OIP_MAX_PERFRAME
895                          */
896                         ll = (l < MAX_DFRAME_LEN_L1) ? l : MAX_DFRAME_LEN_L1;
897                         l1oip_socket_send(hc, 0, dch->slot, 0,
898                                           hc->chan[dch->slot].tx_counter++, p, ll);
899                         p += ll;
900                         l -= ll;
901                 }
902                 skb_trim(skb, 0);
903                 queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
904                 return 0;
905         case PH_ACTIVATE_REQ:
906                 if (debug & (DEBUG_L1OIP_MSG | DEBUG_L1OIP_SOCKET))
907                         printk(KERN_DEBUG "%s: PH_ACTIVATE channel %d (1..%d)\n"
908                                , __func__, dch->slot, hc->b_num + 1);
909                 skb_trim(skb, 0);
910                 if (test_bit(FLG_ACTIVE, &dch->Flags))
911                         queue_ch_frame(ch, PH_ACTIVATE_IND, hh->id, skb);
912                 else
913                         queue_ch_frame(ch, PH_DEACTIVATE_IND, hh->id, skb);
914                 return 0;
915         case PH_DEACTIVATE_REQ:
916                 if (debug & (DEBUG_L1OIP_MSG | DEBUG_L1OIP_SOCKET))
917                         printk(KERN_DEBUG "%s: PH_DEACTIVATE channel %d "
918                                "(1..%d)\n", __func__, dch->slot,
919                                hc->b_num + 1);
920                 skb_trim(skb, 0);
921                 if (test_bit(FLG_ACTIVE, &dch->Flags))
922                         queue_ch_frame(ch, PH_ACTIVATE_IND, hh->id, skb);
923                 else
924                         queue_ch_frame(ch, PH_DEACTIVATE_IND, hh->id, skb);
925                 return 0;
926         }
927         if (!ret)
928                 dev_kfree_skb(skb);
929         return ret;
930 }
931
932 static int
933 channel_dctrl(struct dchannel *dch, struct mISDN_ctrl_req *cq)
934 {
935         int     ret = 0;
936         struct l1oip    *hc = dch->hw;
937
938         switch (cq->op) {
939         case MISDN_CTRL_GETOP:
940                 cq->op = MISDN_CTRL_SETPEER | MISDN_CTRL_UNSETPEER
941                         | MISDN_CTRL_GETPEER;
942                 break;
943         case MISDN_CTRL_SETPEER:
944                 hc->remoteip = (u32)cq->p1;
945                 hc->remoteport = cq->p2 & 0xffff;
946                 hc->localport = cq->p2 >> 16;
947                 if (!hc->remoteport)
948                         hc->remoteport = hc->localport;
949                 if (debug & DEBUG_L1OIP_SOCKET)
950                         printk(KERN_DEBUG "%s: got new ip address from user "
951                                "space.\n", __func__);
952                 l1oip_socket_open(hc);
953                 break;
954         case MISDN_CTRL_UNSETPEER:
955                 if (debug & DEBUG_L1OIP_SOCKET)
956                         printk(KERN_DEBUG "%s: removing ip address.\n",
957                                __func__);
958                 hc->remoteip = 0;
959                 l1oip_socket_open(hc);
960                 break;
961         case MISDN_CTRL_GETPEER:
962                 if (debug & DEBUG_L1OIP_SOCKET)
963                         printk(KERN_DEBUG "%s: getting ip address.\n",
964                                __func__);
965                 cq->p1 = hc->remoteip;
966                 cq->p2 = hc->remoteport | (hc->localport << 16);
967                 break;
968         default:
969                 printk(KERN_WARNING "%s: unknown Op %x\n",
970                        __func__, cq->op);
971                 ret = -EINVAL;
972                 break;
973         }
974         return ret;
975 }
976
977 static int
978 open_dchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq)
979 {
980         if (debug & DEBUG_HW_OPEN)
981                 printk(KERN_DEBUG "%s: dev(%d) open from %p\n", __func__,
982                        dch->dev.id, __builtin_return_address(0));
983         if (rq->protocol == ISDN_P_NONE)
984                 return -EINVAL;
985         if ((dch->dev.D.protocol != ISDN_P_NONE) &&
986             (dch->dev.D.protocol != rq->protocol)) {
987                 if (debug & DEBUG_HW_OPEN)
988                         printk(KERN_WARNING "%s: change protocol %x to %x\n",
989                                __func__, dch->dev.D.protocol, rq->protocol);
990         }
991         if (dch->dev.D.protocol != rq->protocol)
992                 dch->dev.D.protocol = rq->protocol;
993
994         if (test_bit(FLG_ACTIVE, &dch->Flags)) {
995                 _queue_data(&dch->dev.D, PH_ACTIVATE_IND, MISDN_ID_ANY,
996                             0, NULL, GFP_KERNEL);
997         }
998         rq->ch = &dch->dev.D;
999         if (!try_module_get(THIS_MODULE))
1000                 printk(KERN_WARNING "%s:cannot get module\n", __func__);
1001         return 0;
1002 }
1003
1004 static int
1005 open_bchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq)
1006 {
1007         struct bchannel *bch;
1008         int             ch;
1009
1010         if (!test_channelmap(rq->adr.channel, dch->dev.channelmap))
1011                 return -EINVAL;
1012         if (rq->protocol == ISDN_P_NONE)
1013                 return -EINVAL;
1014         ch = rq->adr.channel; /* BRI: 1=B1 2=B2  PRI: 1..15,17.. */
1015         bch = hc->chan[ch].bch;
1016         if (!bch) {
1017                 printk(KERN_ERR "%s:internal error ch %d has no bch\n",
1018                        __func__, ch);
1019                 return -EINVAL;
1020         }
1021         if (test_and_set_bit(FLG_OPEN, &bch->Flags))
1022                 return -EBUSY; /* b-channel can be only open once */
1023         bch->ch.protocol = rq->protocol;
1024         rq->ch = &bch->ch;
1025         if (!try_module_get(THIS_MODULE))
1026                 printk(KERN_WARNING "%s:cannot get module\n", __func__);
1027         return 0;
1028 }
1029
1030 static int
1031 l1oip_dctrl(struct mISDNchannel *ch, u_int cmd, void *arg)
1032 {
1033         struct mISDNdevice      *dev = container_of(ch, struct mISDNdevice, D);
1034         struct dchannel         *dch = container_of(dev, struct dchannel, dev);
1035         struct l1oip                    *hc = dch->hw;
1036         struct channel_req      *rq;
1037         int                     err = 0;
1038
1039         if (dch->debug & DEBUG_HW)
1040                 printk(KERN_DEBUG "%s: cmd:%x %p\n",
1041                        __func__, cmd, arg);
1042         switch (cmd) {
1043         case OPEN_CHANNEL:
1044                 rq = arg;
1045                 switch (rq->protocol) {
1046                 case ISDN_P_TE_S0:
1047                 case ISDN_P_NT_S0:
1048                         if (hc->pri) {
1049                                 err = -EINVAL;
1050                                 break;
1051                         }
1052                         err = open_dchannel(hc, dch, rq);
1053                         break;
1054                 case ISDN_P_TE_E1:
1055                 case ISDN_P_NT_E1:
1056                         if (!hc->pri) {
1057                                 err = -EINVAL;
1058                                 break;
1059                         }
1060                         err = open_dchannel(hc, dch, rq);
1061                         break;
1062                 default:
1063                         err = open_bchannel(hc, dch, rq);
1064                 }
1065                 break;
1066         case CLOSE_CHANNEL:
1067                 if (debug & DEBUG_HW_OPEN)
1068                         printk(KERN_DEBUG "%s: dev(%d) close from %p\n",
1069                                __func__, dch->dev.id,
1070                                __builtin_return_address(0));
1071                 module_put(THIS_MODULE);
1072                 break;
1073         case CONTROL_CHANNEL:
1074                 err = channel_dctrl(dch, arg);
1075                 break;
1076         default:
1077                 if (dch->debug & DEBUG_HW)
1078                         printk(KERN_DEBUG "%s: unknown command %x\n",
1079                                __func__, cmd);
1080                 err = -EINVAL;
1081         }
1082         return err;
1083 }
1084
1085 static int
1086 handle_bmsg(struct mISDNchannel *ch, struct sk_buff *skb)
1087 {
1088         struct bchannel         *bch = container_of(ch, struct bchannel, ch);
1089         struct l1oip                    *hc = bch->hw;
1090         int                     ret = -EINVAL;
1091         struct mISDNhead        *hh = mISDN_HEAD_P(skb);
1092         int                     l, ll;
1093         unsigned char           *p;
1094
1095         switch (hh->prim) {
1096         case PH_DATA_REQ:
1097                 if (skb->len <= 0) {
1098                         printk(KERN_WARNING "%s: skb too small\n",
1099                                __func__);
1100                         break;
1101                 }
1102                 if (skb->len > MAX_DFRAME_LEN_L1 || skb->len > L1OIP_MAX_LEN) {
1103                         printk(KERN_WARNING "%s: skb too large\n",
1104                                __func__);
1105                         break;
1106                 }
1107                 /* check for AIS / ulaw-silence */
1108                 l = skb->len;
1109                 if (!memchr_inv(skb->data, 0xff, l)) {
1110                         if (debug & DEBUG_L1OIP_MSG)
1111                                 printk(KERN_DEBUG "%s: got AIS, not sending, "
1112                                        "but counting\n", __func__);
1113                         hc->chan[bch->slot].tx_counter += l;
1114                         skb_trim(skb, 0);
1115                         queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
1116                         return 0;
1117                 }
1118                 /* check for silence */
1119                 l = skb->len;
1120                 if (!memchr_inv(skb->data, 0x2a, l)) {
1121                         if (debug & DEBUG_L1OIP_MSG)
1122                                 printk(KERN_DEBUG "%s: got silence, not sending"
1123                                        ", but counting\n", __func__);
1124                         hc->chan[bch->slot].tx_counter += l;
1125                         skb_trim(skb, 0);
1126                         queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
1127                         return 0;
1128                 }
1129
1130                 /* send frame */
1131                 p = skb->data;
1132                 l = skb->len;
1133                 while (l) {
1134                         /*
1135                          * This is technically bounded by L1OIP_MAX_PERFRAME but
1136                          * MAX_DFRAME_LEN_L1 < L1OIP_MAX_PERFRAME
1137                          */
1138                         ll = (l < MAX_DFRAME_LEN_L1) ? l : MAX_DFRAME_LEN_L1;
1139                         l1oip_socket_send(hc, hc->codec, bch->slot, 0,
1140                                           hc->chan[bch->slot].tx_counter, p, ll);
1141                         hc->chan[bch->slot].tx_counter += ll;
1142                         p += ll;
1143                         l -= ll;
1144                 }
1145                 skb_trim(skb, 0);
1146                 queue_ch_frame(ch, PH_DATA_CNF, hh->id, skb);
1147                 return 0;
1148         case PH_ACTIVATE_REQ:
1149                 if (debug & (DEBUG_L1OIP_MSG | DEBUG_L1OIP_SOCKET))
1150                         printk(KERN_DEBUG "%s: PH_ACTIVATE channel %d (1..%d)\n"
1151                                , __func__, bch->slot, hc->b_num + 1);
1152                 hc->chan[bch->slot].codecstate = 0;
1153                 test_and_set_bit(FLG_ACTIVE, &bch->Flags);
1154                 skb_trim(skb, 0);
1155                 queue_ch_frame(ch, PH_ACTIVATE_IND, hh->id, skb);
1156                 return 0;
1157         case PH_DEACTIVATE_REQ:
1158                 if (debug & (DEBUG_L1OIP_MSG | DEBUG_L1OIP_SOCKET))
1159                         printk(KERN_DEBUG "%s: PH_DEACTIVATE channel %d "
1160                                "(1..%d)\n", __func__, bch->slot,
1161                                hc->b_num + 1);
1162                 test_and_clear_bit(FLG_ACTIVE, &bch->Flags);
1163                 skb_trim(skb, 0);
1164                 queue_ch_frame(ch, PH_DEACTIVATE_IND, hh->id, skb);
1165                 return 0;
1166         }
1167         if (!ret)
1168                 dev_kfree_skb(skb);
1169         return ret;
1170 }
1171
1172 static int
1173 channel_bctrl(struct bchannel *bch, struct mISDN_ctrl_req *cq)
1174 {
1175         int                     ret = 0;
1176         struct dsp_features     *features =
1177                 (struct dsp_features *)(*((u_long *)&cq->p1));
1178
1179         switch (cq->op) {
1180         case MISDN_CTRL_GETOP:
1181                 cq->op = MISDN_CTRL_HW_FEATURES_OP;
1182                 break;
1183         case MISDN_CTRL_HW_FEATURES: /* fill features structure */
1184                 if (debug & DEBUG_L1OIP_MSG)
1185                         printk(KERN_DEBUG "%s: HW_FEATURE request\n",
1186                                __func__);
1187                 /* create confirm */
1188                 features->unclocked = 1;
1189                 features->unordered = 1;
1190                 break;
1191         default:
1192                 printk(KERN_WARNING "%s: unknown Op %x\n",
1193                        __func__, cq->op);
1194                 ret = -EINVAL;
1195                 break;
1196         }
1197         return ret;
1198 }
1199
1200 static int
1201 l1oip_bctrl(struct mISDNchannel *ch, u_int cmd, void *arg)
1202 {
1203         struct bchannel *bch = container_of(ch, struct bchannel, ch);
1204         int             err = -EINVAL;
1205
1206         if (bch->debug & DEBUG_HW)
1207                 printk(KERN_DEBUG "%s: cmd:%x %p\n",
1208                        __func__, cmd, arg);
1209         switch (cmd) {
1210         case CLOSE_CHANNEL:
1211                 test_and_clear_bit(FLG_OPEN, &bch->Flags);
1212                 test_and_clear_bit(FLG_ACTIVE, &bch->Flags);
1213                 ch->protocol = ISDN_P_NONE;
1214                 ch->peer = NULL;
1215                 module_put(THIS_MODULE);
1216                 err = 0;
1217                 break;
1218         case CONTROL_CHANNEL:
1219                 err = channel_bctrl(bch, arg);
1220                 break;
1221         default:
1222                 printk(KERN_WARNING "%s: unknown prim(%x)\n",
1223                        __func__, cmd);
1224         }
1225         return err;
1226 }
1227
1228
1229 /*
1230  * cleanup module and stack
1231  */
1232 static void
1233 release_card(struct l1oip *hc)
1234 {
1235         int     ch;
1236
1237         hc->shutdown = true;
1238
1239         del_timer_sync(&hc->keep_tl);
1240         del_timer_sync(&hc->timeout_tl);
1241
1242         cancel_work_sync(&hc->workq);
1243
1244         if (hc->socket_thread)
1245                 l1oip_socket_close(hc);
1246
1247         if (hc->registered && hc->chan[hc->d_idx].dch)
1248                 mISDN_unregister_device(&hc->chan[hc->d_idx].dch->dev);
1249         for (ch = 0; ch < 128; ch++) {
1250                 if (hc->chan[ch].dch) {
1251                         mISDN_freedchannel(hc->chan[ch].dch);
1252                         kfree(hc->chan[ch].dch);
1253                 }
1254                 if (hc->chan[ch].bch) {
1255                         mISDN_freebchannel(hc->chan[ch].bch);
1256                         kfree(hc->chan[ch].bch);
1257 #ifdef REORDER_DEBUG
1258                         dev_kfree_skb(hc->chan[ch].disorder_skb);
1259 #endif
1260                 }
1261         }
1262
1263         spin_lock(&l1oip_lock);
1264         list_del(&hc->list);
1265         spin_unlock(&l1oip_lock);
1266
1267         kfree(hc);
1268 }
1269
1270 static void
1271 l1oip_cleanup(void)
1272 {
1273         struct l1oip *hc, *next;
1274
1275         list_for_each_entry_safe(hc, next, &l1oip_ilist, list)
1276                 release_card(hc);
1277
1278         l1oip_4bit_free();
1279 }
1280
1281
1282 /*
1283  * module and stack init
1284  */
1285 static int
1286 init_card(struct l1oip *hc, int pri, int bundle)
1287 {
1288         struct dchannel *dch;
1289         struct bchannel *bch;
1290         int             ret;
1291         int             i, ch;
1292
1293         spin_lock_init(&hc->socket_lock);
1294         hc->idx = l1oip_cnt;
1295         hc->pri = pri;
1296         hc->d_idx = pri ? 16 : 3;
1297         hc->b_num = pri ? 30 : 2;
1298         hc->bundle = bundle;
1299         if (hc->pri)
1300                 sprintf(hc->name, "l1oip-e1.%d", l1oip_cnt + 1);
1301         else
1302                 sprintf(hc->name, "l1oip-s0.%d", l1oip_cnt + 1);
1303
1304         switch (codec[l1oip_cnt]) {
1305         case 0: /* as is */
1306         case 1: /* alaw */
1307         case 2: /* ulaw */
1308         case 3: /* 4bit */
1309                 break;
1310         default:
1311                 printk(KERN_ERR "Codec(%d) not supported.\n",
1312                        codec[l1oip_cnt]);
1313                 return -EINVAL;
1314         }
1315         hc->codec = codec[l1oip_cnt];
1316         if (debug & DEBUG_L1OIP_INIT)
1317                 printk(KERN_DEBUG "%s: using codec %d\n",
1318                        __func__, hc->codec);
1319
1320         if (id[l1oip_cnt] == 0) {
1321                 printk(KERN_WARNING "Warning: No 'id' value given or "
1322                        "0, this is highly unsecure. Please use 32 "
1323                        "bit random number 0x...\n");
1324         }
1325         hc->id = id[l1oip_cnt];
1326         if (debug & DEBUG_L1OIP_INIT)
1327                 printk(KERN_DEBUG "%s: using id 0x%x\n", __func__, hc->id);
1328
1329         hc->ondemand = ondemand[l1oip_cnt];
1330         if (hc->ondemand && !hc->id) {
1331                 printk(KERN_ERR "%s: ondemand option only allowed in "
1332                        "conjunction with non 0 ID\n", __func__);
1333                 return -EINVAL;
1334         }
1335
1336         if (limit[l1oip_cnt])
1337                 hc->b_num = limit[l1oip_cnt];
1338         if (!pri && hc->b_num > 2) {
1339                 printk(KERN_ERR "Maximum limit for BRI interface is 2 "
1340                        "channels.\n");
1341                 return -EINVAL;
1342         }
1343         if (pri && hc->b_num > 126) {
1344                 printk(KERN_ERR "Maximum limit for PRI interface is 126 "
1345                        "channels.\n");
1346                 return -EINVAL;
1347         }
1348         if (pri && hc->b_num > 30) {
1349                 printk(KERN_WARNING "Maximum limit for BRI interface is 30 "
1350                        "channels.\n");
1351                 printk(KERN_WARNING "Your selection of %d channels must be "
1352                        "supported by application.\n", hc->limit);
1353         }
1354
1355         hc->remoteip = ip[l1oip_cnt << 2] << 24
1356                 | ip[(l1oip_cnt << 2) + 1] << 16
1357                 | ip[(l1oip_cnt << 2) + 2] << 8
1358                 | ip[(l1oip_cnt << 2) + 3];
1359         hc->localport = port[l1oip_cnt]?:(L1OIP_DEFAULTPORT + l1oip_cnt);
1360         if (remoteport[l1oip_cnt])
1361                 hc->remoteport = remoteport[l1oip_cnt];
1362         else
1363                 hc->remoteport = hc->localport;
1364         if (debug & DEBUG_L1OIP_INIT)
1365                 printk(KERN_DEBUG "%s: using local port %d remote ip "
1366                        "%d.%d.%d.%d port %d ondemand %d\n", __func__,
1367                        hc->localport, hc->remoteip >> 24,
1368                        (hc->remoteip >> 16) & 0xff,
1369                        (hc->remoteip >> 8) & 0xff, hc->remoteip & 0xff,
1370                        hc->remoteport, hc->ondemand);
1371
1372         dch = kzalloc(sizeof(struct dchannel), GFP_KERNEL);
1373         if (!dch)
1374                 return -ENOMEM;
1375         dch->debug = debug;
1376         mISDN_initdchannel(dch, MAX_DFRAME_LEN_L1, NULL);
1377         dch->hw = hc;
1378         if (pri)
1379                 dch->dev.Dprotocols = (1 << ISDN_P_TE_E1) | (1 << ISDN_P_NT_E1);
1380         else
1381                 dch->dev.Dprotocols = (1 << ISDN_P_TE_S0) | (1 << ISDN_P_NT_S0);
1382         dch->dev.Bprotocols = (1 << (ISDN_P_B_RAW & ISDN_P_B_MASK)) |
1383                 (1 << (ISDN_P_B_HDLC & ISDN_P_B_MASK));
1384         dch->dev.D.send = handle_dmsg;
1385         dch->dev.D.ctrl = l1oip_dctrl;
1386         dch->dev.nrbchan = hc->b_num;
1387         dch->slot = hc->d_idx;
1388         hc->chan[hc->d_idx].dch = dch;
1389         i = 1;
1390         for (ch = 0; ch < dch->dev.nrbchan; ch++) {
1391                 if (ch == 15)
1392                         i++;
1393                 bch = kzalloc(sizeof(struct bchannel), GFP_KERNEL);
1394                 if (!bch) {
1395                         printk(KERN_ERR "%s: no memory for bchannel\n",
1396                                __func__);
1397                         return -ENOMEM;
1398                 }
1399                 bch->nr = i + ch;
1400                 bch->slot = i + ch;
1401                 bch->debug = debug;
1402                 mISDN_initbchannel(bch, MAX_DATA_MEM, 0);
1403                 bch->hw = hc;
1404                 bch->ch.send = handle_bmsg;
1405                 bch->ch.ctrl = l1oip_bctrl;
1406                 bch->ch.nr = i + ch;
1407                 list_add(&bch->ch.list, &dch->dev.bchannels);
1408                 hc->chan[i + ch].bch = bch;
1409                 set_channelmap(bch->nr, dch->dev.channelmap);
1410         }
1411         /* TODO: create a parent device for this driver */
1412         ret = mISDN_register_device(&dch->dev, NULL, hc->name);
1413         if (ret)
1414                 return ret;
1415         hc->registered = 1;
1416
1417         if (debug & DEBUG_L1OIP_INIT)
1418                 printk(KERN_DEBUG "%s: Setting up network card(%d)\n",
1419                        __func__, l1oip_cnt + 1);
1420         ret = l1oip_socket_open(hc);
1421         if (ret)
1422                 return ret;
1423
1424         timer_setup(&hc->keep_tl, l1oip_keepalive, 0);
1425         hc->keep_tl.expires = jiffies + 2 * HZ; /* two seconds first time */
1426         add_timer(&hc->keep_tl);
1427
1428         timer_setup(&hc->timeout_tl, l1oip_timeout, 0);
1429         hc->timeout_on = 0; /* state that we have timer off */
1430
1431         return 0;
1432 }
1433
1434 static int __init
1435 l1oip_init(void)
1436 {
1437         int             pri, bundle;
1438         struct l1oip            *hc;
1439         int             ret;
1440
1441         printk(KERN_INFO "mISDN: Layer-1-over-IP driver Rev. %s\n",
1442                l1oip_revision);
1443
1444         if (l1oip_4bit_alloc(ulaw))
1445                 return -ENOMEM;
1446
1447         l1oip_cnt = 0;
1448         while (l1oip_cnt < MAX_CARDS && type[l1oip_cnt]) {
1449                 switch (type[l1oip_cnt] & 0xff) {
1450                 case 1:
1451                         pri = 0;
1452                         bundle = 0;
1453                         break;
1454                 case 2:
1455                         pri = 1;
1456                         bundle = 0;
1457                         break;
1458                 case 3:
1459                         pri = 0;
1460                         bundle = 1;
1461                         break;
1462                 case 4:
1463                         pri = 1;
1464                         bundle = 1;
1465                         break;
1466                 default:
1467                         printk(KERN_ERR "Card type(%d) not supported.\n",
1468                                type[l1oip_cnt] & 0xff);
1469                         l1oip_cleanup();
1470                         return -EINVAL;
1471                 }
1472
1473                 if (debug & DEBUG_L1OIP_INIT)
1474                         printk(KERN_DEBUG "%s: interface %d is %s with %s.\n",
1475                                __func__, l1oip_cnt, pri ? "PRI" : "BRI",
1476                                bundle ? "bundled IP packet for all B-channels" :
1477                                "separate IP packets for every B-channel");
1478
1479                 hc = kzalloc(sizeof(struct l1oip), GFP_ATOMIC);
1480                 if (!hc) {
1481                         printk(KERN_ERR "No kmem for L1-over-IP driver.\n");
1482                         l1oip_cleanup();
1483                         return -ENOMEM;
1484                 }
1485                 INIT_WORK(&hc->workq, (void *)l1oip_send_bh);
1486
1487                 spin_lock(&l1oip_lock);
1488                 list_add_tail(&hc->list, &l1oip_ilist);
1489                 spin_unlock(&l1oip_lock);
1490
1491                 ret = init_card(hc, pri, bundle);
1492                 if (ret) {
1493                         l1oip_cleanup();
1494                         return ret;
1495                 }
1496
1497                 l1oip_cnt++;
1498         }
1499         printk(KERN_INFO "%d virtual devices registered\n", l1oip_cnt);
1500         return 0;
1501 }
1502
1503 module_init(l1oip_init);
1504 module_exit(l1oip_cleanup);