root/drivers/isdn/mISDN/l1oip_core.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. l1oip_socket_send
  2. l1oip_socket_recv
  3. l1oip_socket_parse
  4. l1oip_socket_thread
  5. l1oip_socket_close
  6. l1oip_socket_open
  7. l1oip_send_bh
  8. l1oip_keepalive
  9. l1oip_timeout
  10. handle_dmsg
  11. channel_dctrl
  12. open_dchannel
  13. open_bchannel
  14. l1oip_dctrl
  15. handle_bmsg
  16. channel_bctrl
  17. l1oip_bctrl
  18. release_card
  19. l1oip_cleanup
  20. init_card
  21. l1oip_init

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

/* [<][>][^][v][top][bottom][index][help] */