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