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