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