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