1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * l1oip.c low level driver for tunneling layer 1 over IP
6 * NOTE: It is not compatible with TDMoIP nor "ISDN over IP".
8 * Author Andreas Eversberg (jolly@eversberg.eu)
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.)
22 Value 0 = transparent (default)
23 Value 1 = transfer ALAW
24 Value 2 = transfer ULAW
25 Value 3 = transfer generic 4 bit compression.
28 0 = we use a-Law (default)
32 limitation of B-channels to control bandwidth (1...126)
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.
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)
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.
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.
55 0 = fixed (always transmit packets, even when remote side timed out)
56 1 = on demand (only transmit packets, when remote side is detected)
58 NOTE: ID must also be set for on demand.
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.
65 NOTE: only one debug value must be given for all cards
66 enable debugging (see l1oip.h for debug options)
69 Special mISDN controls:
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)
75 p2 = bytes 3-4 : local port in network order (high byte first)
77 op = MISDN_CTRL_UNSETPEER*
79 * Use l1oipctrl for comfortable setting or removing ip address.
80 (Layer 1 Over IP CTRL)
127 * Only included in some cases.
130 If version is missmatch, the frame must be ignored.
132 - T = Type of interface
133 Must be 0 for S0 or 1 for E1.
136 If bit is set, four ID bytes are included in frame.
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.
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.
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.
152 - Channel = Channel number
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)
158 - The length is used if the M-flag is 1. It is used to find the next channel
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
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.
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.
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.
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.
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.
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 whether 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.
210 #define L1OIP_VERSION 0 /* 0...3 */
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>
225 #include <net/sock.h>
229 static const char *l1oip_revision
= "2.00";
231 static int l1oip_cnt
;
232 static DEFINE_SPINLOCK(l1oip_lock
);
233 static LIST_HEAD(l1oip_ilist
);
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
];
247 MODULE_AUTHOR("Andreas Eversberg");
248 MODULE_DESCRIPTION("mISDN driver for tunneling layer 1 over IP");
249 MODULE_LICENSE("GPL");
250 module_param_array(type
, uint
, NULL
, S_IRUGO
| S_IWUSR
);
251 module_param_array(codec
, uint
, NULL
, S_IRUGO
| S_IWUSR
);
252 module_param_array(ip
, uint
, NULL
, S_IRUGO
| S_IWUSR
);
253 module_param_array(port
, uint
, NULL
, S_IRUGO
| S_IWUSR
);
254 module_param_array(remoteport
, uint
, NULL
, S_IRUGO
| S_IWUSR
);
255 module_param_array(ondemand
, uint
, NULL
, S_IRUGO
| S_IWUSR
);
256 module_param_array(limit
, uint
, NULL
, S_IRUGO
| S_IWUSR
);
257 module_param_array(id
, uint
, NULL
, S_IRUGO
| S_IWUSR
);
258 module_param(ulaw
, uint
, S_IRUGO
| S_IWUSR
);
259 module_param(debug
, uint
, S_IRUGO
| S_IWUSR
);
262 * send a frame via socket, if open and restart timer
265 l1oip_socket_send(struct l1oip
*hc
, u8 localcodec
, u8 channel
, u32 chanmask
,
266 u16 timebase
, u8
*buf
, int len
)
269 u8 frame
[MAX_DFRAME_LEN_L1
+ 32];
270 struct socket
*socket
= NULL
;
272 if (debug
& DEBUG_L1OIP_MSG
)
273 printk(KERN_DEBUG
"%s: sending data to socket (len = %d)\n",
279 if (time_before(hc
->keep_tl
.expires
, jiffies
+ 5 * HZ
) && !hc
->shutdown
)
280 mod_timer(&hc
->keep_tl
, jiffies
+ L1OIP_KEEPALIVE
* HZ
);
282 hc
->keep_tl
.expires
= jiffies
+ L1OIP_KEEPALIVE
* HZ
;
284 if (debug
& DEBUG_L1OIP_MSG
)
285 printk(KERN_DEBUG
"%s: resetting timer\n", __func__
);
287 /* drop if we have no remote ip or port */
288 if (!hc
->sin_remote
.sin_addr
.s_addr
|| !hc
->sin_remote
.sin_port
) {
289 if (debug
& DEBUG_L1OIP_MSG
)
290 printk(KERN_DEBUG
"%s: dropping frame, because remote "
291 "IP is not set.\n", __func__
);
296 *p
++ = (L1OIP_VERSION
<< 6) /* version and coding */
297 | (hc
->pri
? 0x20 : 0x00) /* type */
298 | (hc
->id
? 0x10 : 0x00) /* id */
301 *p
++ = hc
->id
>> 24; /* id */
306 *p
++ = 0x00 + channel
; /* m-flag, channel */
307 *p
++ = timebase
>> 8; /* time base */
310 if (buf
&& len
) { /* add data to frame */
311 if (localcodec
== 1 && ulaw
)
312 l1oip_ulaw_to_alaw(buf
, len
, p
);
313 else if (localcodec
== 2 && !ulaw
)
314 l1oip_alaw_to_ulaw(buf
, len
, p
);
315 else if (localcodec
== 3)
316 len
= l1oip_law_to_4bit(buf
, len
, p
,
317 &hc
->chan
[channel
].codecstate
);
323 /* check for socket in safe condition */
324 spin_lock(&hc
->socket_lock
);
326 spin_unlock(&hc
->socket_lock
);
332 spin_unlock(&hc
->socket_lock
);
334 if (debug
& DEBUG_L1OIP_MSG
)
335 printk(KERN_DEBUG
"%s: sending packet to socket (len "
336 "= %d)\n", __func__
, len
);
337 hc
->sendiov
.iov_base
= frame
;
338 hc
->sendiov
.iov_len
= len
;
339 len
= kernel_sendmsg(socket
, &hc
->sendmsg
, &hc
->sendiov
, 1, len
);
340 /* give socket back */
341 hc
->socket
= socket
; /* no locking required */
348 * receive channel data from socket
351 l1oip_socket_recv(struct l1oip
*hc
, u8 remotecodec
, u8 channel
, u16 timebase
,
354 struct sk_buff
*nskb
;
355 struct bchannel
*bch
;
356 struct dchannel
*dch
;
361 if (debug
& DEBUG_L1OIP_MSG
)
362 printk(KERN_DEBUG
"%s: received empty keepalive data, "
363 "ignoring\n", __func__
);
367 if (debug
& DEBUG_L1OIP_MSG
)
368 printk(KERN_DEBUG
"%s: received data, sending to mISDN (%d)\n",
371 if (channel
< 1 || channel
> 127) {
372 printk(KERN_WARNING
"%s: packet error - channel %d out of "
373 "range\n", __func__
, channel
);
376 dch
= hc
->chan
[channel
].dch
;
377 bch
= hc
->chan
[channel
].bch
;
379 printk(KERN_WARNING
"%s: packet error - channel %d not in "
380 "stack\n", __func__
, channel
);
384 /* prepare message */
385 nskb
= mI_alloc_skb((remotecodec
== 3) ? (len
<< 1) : len
, GFP_ATOMIC
);
387 printk(KERN_ERR
"%s: No mem for skb.\n", __func__
);
390 p
= skb_put(nskb
, (remotecodec
== 3) ? (len
<< 1) : len
);
392 if (remotecodec
== 1 && ulaw
)
393 l1oip_alaw_to_ulaw(buf
, len
, p
);
394 else if (remotecodec
== 2 && !ulaw
)
395 l1oip_ulaw_to_alaw(buf
, len
, p
);
396 else if (remotecodec
== 3)
397 len
= l1oip_4bit_to_law(buf
, len
, p
);
401 /* send message up */
402 if (dch
&& len
>= 2) {
407 /* expand 16 bit sequence number to 32 bit sequence number */
408 rx_counter
= hc
->chan
[channel
].rx_counter
;
409 if (((s16
)(timebase
- rx_counter
)) >= 0) {
410 /* time has changed forward */
411 if (timebase
>= (rx_counter
& 0xffff))
413 (rx_counter
& 0xffff0000) | timebase
;
415 rx_counter
= ((rx_counter
& 0xffff0000) + 0x10000)
418 /* time has changed backwards */
419 if (timebase
< (rx_counter
& 0xffff))
421 (rx_counter
& 0xffff0000) | timebase
;
423 rx_counter
= ((rx_counter
& 0xffff0000) - 0x10000)
426 hc
->chan
[channel
].rx_counter
= rx_counter
;
429 if (hc
->chan
[channel
].disorder_flag
) {
430 swap(hc
->chan
[channel
].disorder_skb
, nskb
);
431 swap(hc
->chan
[channel
].disorder_cnt
, rx_counter
);
433 hc
->chan
[channel
].disorder_flag
^= 1;
436 queue_ch_frame(&bch
->ch
, PH_DATA_IND
, rx_counter
, nskb
);
442 * parse frame and extract channel data
445 l1oip_socket_parse(struct l1oip
*hc
, struct sockaddr_in
*sin
, u8
*buf
, int len
)
452 int len_start
= len
; /* initial frame length */
453 struct dchannel
*dch
= hc
->chan
[hc
->d_idx
].dch
;
455 if (debug
& DEBUG_L1OIP_MSG
)
456 printk(KERN_DEBUG
"%s: received frame, parsing... (%d)\n",
460 if (len
< 1 + 1 + 2) {
461 printk(KERN_WARNING
"%s: packet error - length %d below "
462 "4 bytes\n", __func__
, len
);
467 if (((*buf
) >> 6) != L1OIP_VERSION
) {
468 printk(KERN_WARNING
"%s: packet error - unknown version %d\n",
469 __func__
, buf
[0]>>6);
474 if (((*buf
) & 0x20) && !hc
->pri
) {
475 printk(KERN_WARNING
"%s: packet error - received E1 packet "
476 "on S0 interface\n", __func__
);
479 if (!((*buf
) & 0x20) && hc
->pri
) {
480 printk(KERN_WARNING
"%s: packet error - received S0 packet "
481 "on E1 interface\n", __func__
);
486 packet_id
= (*buf
>> 4) & 1;
489 remotecodec
= (*buf
) & 0x0f;
490 if (remotecodec
> 3) {
491 printk(KERN_WARNING
"%s: packet error - remotecodec %d "
492 "unsupported\n", __func__
, remotecodec
);
498 /* check packet_id */
501 printk(KERN_WARNING
"%s: packet error - packet has id "
502 "0x%x, but we have not\n", __func__
, packet_id
);
506 printk(KERN_WARNING
"%s: packet error - packet too "
507 "short for ID value\n", __func__
);
510 packet_id
= (*buf
++) << 24;
511 packet_id
+= (*buf
++) << 16;
512 packet_id
+= (*buf
++) << 8;
513 packet_id
+= (*buf
++);
516 if (packet_id
!= hc
->id
) {
517 printk(KERN_WARNING
"%s: packet error - ID mismatch, "
518 "got 0x%x, we 0x%x\n",
519 __func__
, packet_id
, hc
->id
);
524 printk(KERN_WARNING
"%s: packet error - packet has no "
525 "ID, but we have\n", __func__
);
532 printk(KERN_WARNING
"%s: packet error - packet too short, "
533 "channel expected at position %d.\n",
534 __func__
, len
-len_start
+ 1);
538 /* get channel and multiframe flag */
539 channel
= *buf
& 0x7f;
544 /* check length on multiframe */
547 printk(KERN_WARNING
"%s: packet error - packet too "
548 "short, length expected at position %d.\n",
549 __func__
, len_start
- len
- 1);
557 if (len
< mlen
+ 3) {
558 printk(KERN_WARNING
"%s: packet error - length %d at "
559 "position %d exceeds total length %d.\n",
560 __func__
, mlen
, len_start
-len
- 1, len_start
);
563 if (len
== mlen
+ 3) {
564 printk(KERN_WARNING
"%s: packet error - length %d at "
565 "position %d will not allow additional "
567 __func__
, mlen
, len_start
-len
+ 1);
571 mlen
= len
- 2; /* single frame, subtract timebase */
574 printk(KERN_WARNING
"%s: packet error - packet too short, time "
575 "base expected at position %d.\n",
576 __func__
, len
-len_start
+ 1);
581 timebase
= (*buf
++) << 8;
582 timebase
|= (*buf
++);
585 /* if inactive, we send up a PH_ACTIVATE and activate */
586 if (!test_bit(FLG_ACTIVE
, &dch
->Flags
)) {
587 if (debug
& (DEBUG_L1OIP_MSG
| DEBUG_L1OIP_SOCKET
))
588 printk(KERN_DEBUG
"%s: interface become active due to "
589 "received packet\n", __func__
);
590 test_and_set_bit(FLG_ACTIVE
, &dch
->Flags
);
591 _queue_data(&dch
->dev
.D
, PH_ACTIVATE_IND
, MISDN_ID_ANY
, 0,
595 /* distribute packet */
596 l1oip_socket_recv(hc
, remotecodec
, channel
, timebase
, buf
, mlen
);
605 if ((time_before(hc
->timeout_tl
.expires
, jiffies
+ 5 * HZ
) ||
609 mod_timer(&hc
->timeout_tl
, jiffies
+ L1OIP_TIMEOUT
* HZ
);
610 } else /* only adjust timer */
611 hc
->timeout_tl
.expires
= jiffies
+ L1OIP_TIMEOUT
* HZ
;
613 /* if ip or source port changes */
614 if ((hc
->sin_remote
.sin_addr
.s_addr
!= sin
->sin_addr
.s_addr
)
615 || (hc
->sin_remote
.sin_port
!= sin
->sin_port
)) {
616 if (debug
& DEBUG_L1OIP_SOCKET
)
617 printk(KERN_DEBUG
"%s: remote address changes from "
618 "0x%08x to 0x%08x (port %d to %d)\n", __func__
,
619 ntohl(hc
->sin_remote
.sin_addr
.s_addr
),
620 ntohl(sin
->sin_addr
.s_addr
),
621 ntohs(hc
->sin_remote
.sin_port
),
622 ntohs(sin
->sin_port
));
623 hc
->sin_remote
.sin_addr
.s_addr
= sin
->sin_addr
.s_addr
;
624 hc
->sin_remote
.sin_port
= sin
->sin_port
;
633 l1oip_socket_thread(void *data
)
635 struct l1oip
*hc
= (struct l1oip
*)data
;
637 struct sockaddr_in sin_rx
;
639 struct msghdr msg
= {.msg_name
= &sin_rx
,
640 .msg_namelen
= sizeof(sin_rx
)};
641 unsigned char *recvbuf
;
642 size_t recvbuf_size
= 1500;
644 struct socket
*socket
= NULL
;
645 DECLARE_COMPLETION_ONSTACK(wait
);
647 /* allocate buffer memory */
648 recvbuf
= kmalloc(recvbuf_size
, GFP_KERNEL
);
650 printk(KERN_ERR
"%s: Failed to alloc recvbuf.\n", __func__
);
655 iov
.iov_base
= recvbuf
;
656 iov
.iov_len
= recvbuf_size
;
659 allow_signal(SIGTERM
);
662 if (sock_create(PF_INET
, SOCK_DGRAM
, IPPROTO_UDP
, &socket
)) {
663 printk(KERN_ERR
"%s: Failed to create socket.\n", __func__
);
668 /* set incoming address */
669 hc
->sin_local
.sin_family
= AF_INET
;
670 hc
->sin_local
.sin_addr
.s_addr
= INADDR_ANY
;
671 hc
->sin_local
.sin_port
= htons((unsigned short)hc
->localport
);
673 /* set outgoing address */
674 hc
->sin_remote
.sin_family
= AF_INET
;
675 hc
->sin_remote
.sin_addr
.s_addr
= htonl(hc
->remoteip
);
676 hc
->sin_remote
.sin_port
= htons((unsigned short)hc
->remoteport
);
678 /* bind to incoming port */
679 if (socket
->ops
->bind(socket
, (struct sockaddr
*)&hc
->sin_local
,
680 sizeof(hc
->sin_local
))) {
681 printk(KERN_ERR
"%s: Failed to bind socket to port %d.\n",
682 __func__
, hc
->localport
);
688 if (socket
->sk
== NULL
) {
689 printk(KERN_ERR
"%s: socket->sk == NULL\n", __func__
);
694 /* build send message */
695 hc
->sendmsg
.msg_name
= &hc
->sin_remote
;
696 hc
->sendmsg
.msg_namelen
= sizeof(hc
->sin_remote
);
697 hc
->sendmsg
.msg_control
= NULL
;
698 hc
->sendmsg
.msg_controllen
= 0;
700 /* give away socket */
701 spin_lock(&hc
->socket_lock
);
703 spin_unlock(&hc
->socket_lock
);
706 if (debug
& DEBUG_L1OIP_SOCKET
)
707 printk(KERN_DEBUG
"%s: socket created and open\n",
709 while (!signal_pending(current
)) {
710 iov_iter_kvec(&msg
.msg_iter
, ITER_DEST
, &iov
, 1, recvbuf_size
);
711 recvlen
= sock_recvmsg(socket
, &msg
, 0);
713 l1oip_socket_parse(hc
, &sin_rx
, recvbuf
, recvlen
);
715 if (debug
& DEBUG_L1OIP_SOCKET
)
717 "%s: broken pipe on socket\n", __func__
);
721 /* get socket back, check first if in use, maybe by send function */
722 spin_lock(&hc
->socket_lock
);
723 /* if hc->socket is NULL, it is in use until it is given back */
724 while (!hc
->socket
) {
725 spin_unlock(&hc
->socket_lock
);
726 schedule_timeout(HZ
/ 10);
727 spin_lock(&hc
->socket_lock
);
730 spin_unlock(&hc
->socket_lock
);
732 if (debug
& DEBUG_L1OIP_SOCKET
)
733 printk(KERN_DEBUG
"%s: socket thread terminating\n",
742 sock_release(socket
);
744 /* if we got killed, signal completion */
745 complete(&hc
->socket_complete
);
746 hc
->socket_thread
= NULL
; /* show termination of thread */
748 if (debug
& DEBUG_L1OIP_SOCKET
)
749 printk(KERN_DEBUG
"%s: socket thread terminated\n",
755 l1oip_socket_close(struct l1oip
*hc
)
757 struct dchannel
*dch
= hc
->chan
[hc
->d_idx
].dch
;
760 if (hc
->socket_thread
) {
761 if (debug
& DEBUG_L1OIP_SOCKET
)
762 printk(KERN_DEBUG
"%s: socket thread exists, "
763 "killing...\n", __func__
);
764 send_sig(SIGTERM
, hc
->socket_thread
, 0);
765 wait_for_completion(&hc
->socket_complete
);
768 /* if active, we send up a PH_DEACTIVATE and deactivate */
769 if (test_bit(FLG_ACTIVE
, &dch
->Flags
)) {
770 if (debug
& (DEBUG_L1OIP_MSG
| DEBUG_L1OIP_SOCKET
))
771 printk(KERN_DEBUG
"%s: interface become deactivated "
772 "due to timeout\n", __func__
);
773 test_and_clear_bit(FLG_ACTIVE
, &dch
->Flags
);
774 _queue_data(&dch
->dev
.D
, PH_DEACTIVATE_IND
, MISDN_ID_ANY
, 0,
780 l1oip_socket_open(struct l1oip
*hc
)
782 /* in case of reopen, we need to close first */
783 l1oip_socket_close(hc
);
785 init_completion(&hc
->socket_complete
);
787 /* create receive process */
788 hc
->socket_thread
= kthread_run(l1oip_socket_thread
, hc
, "l1oip_%s",
790 if (IS_ERR(hc
->socket_thread
)) {
791 int err
= PTR_ERR(hc
->socket_thread
);
792 printk(KERN_ERR
"%s: Failed (%d) to create socket process.\n",
794 hc
->socket_thread
= NULL
;
795 sock_release(hc
->socket
);
798 if (debug
& DEBUG_L1OIP_SOCKET
)
799 printk(KERN_DEBUG
"%s: socket thread created\n", __func__
);
806 l1oip_send_bh(struct work_struct
*work
)
808 struct l1oip
*hc
= container_of(work
, struct l1oip
, workq
);
810 if (debug
& (DEBUG_L1OIP_MSG
| DEBUG_L1OIP_SOCKET
))
811 printk(KERN_DEBUG
"%s: keepalive timer expired, sending empty "
812 "frame on dchannel\n", __func__
);
814 /* send an empty l1oip frame at D-channel */
815 l1oip_socket_send(hc
, 0, hc
->d_idx
, 0, 0, NULL
, 0);
823 l1oip_keepalive(struct timer_list
*t
)
825 struct l1oip
*hc
= from_timer(hc
, t
, keep_tl
);
827 schedule_work(&hc
->workq
);
831 l1oip_timeout(struct timer_list
*t
)
833 struct l1oip
*hc
= from_timer(hc
, t
,
835 struct dchannel
*dch
= hc
->chan
[hc
->d_idx
].dch
;
837 if (debug
& DEBUG_L1OIP_MSG
)
838 printk(KERN_DEBUG
"%s: timeout timer expired, turn layer one "
839 "down.\n", __func__
);
841 hc
->timeout_on
= 0; /* state that timer must be initialized next time */
843 /* if timeout, we send up a PH_DEACTIVATE and deactivate */
844 if (test_bit(FLG_ACTIVE
, &dch
->Flags
)) {
845 if (debug
& (DEBUG_L1OIP_MSG
| DEBUG_L1OIP_SOCKET
))
846 printk(KERN_DEBUG
"%s: interface become deactivated "
847 "due to timeout\n", __func__
);
848 test_and_clear_bit(FLG_ACTIVE
, &dch
->Flags
);
849 _queue_data(&dch
->dev
.D
, PH_DEACTIVATE_IND
, MISDN_ID_ANY
, 0,
853 /* if we have ondemand set, we remove ip address */
855 if (debug
& DEBUG_L1OIP_MSG
)
856 printk(KERN_DEBUG
"%s: on demand causes ip address to "
857 "be removed\n", __func__
);
858 hc
->sin_remote
.sin_addr
.s_addr
= 0;
867 handle_dmsg(struct mISDNchannel
*ch
, struct sk_buff
*skb
)
869 struct mISDNdevice
*dev
= container_of(ch
, struct mISDNdevice
, D
);
870 struct dchannel
*dch
= container_of(dev
, struct dchannel
, dev
);
871 struct l1oip
*hc
= dch
->hw
;
872 struct mISDNhead
*hh
= mISDN_HEAD_P(skb
);
880 printk(KERN_WARNING
"%s: skb too small\n",
884 if (skb
->len
> MAX_DFRAME_LEN_L1
|| skb
->len
> L1OIP_MAX_LEN
) {
885 printk(KERN_WARNING
"%s: skb too large\n",
894 * This is technically bounded by L1OIP_MAX_PERFRAME but
895 * MAX_DFRAME_LEN_L1 < L1OIP_MAX_PERFRAME
897 ll
= (l
< MAX_DFRAME_LEN_L1
) ? l
: MAX_DFRAME_LEN_L1
;
898 l1oip_socket_send(hc
, 0, dch
->slot
, 0,
899 hc
->chan
[dch
->slot
].tx_counter
++, p
, ll
);
904 queue_ch_frame(ch
, PH_DATA_CNF
, hh
->id
, skb
);
906 case PH_ACTIVATE_REQ
:
907 if (debug
& (DEBUG_L1OIP_MSG
| DEBUG_L1OIP_SOCKET
))
908 printk(KERN_DEBUG
"%s: PH_ACTIVATE channel %d (1..%d)\n"
909 , __func__
, dch
->slot
, hc
->b_num
+ 1);
911 if (test_bit(FLG_ACTIVE
, &dch
->Flags
))
912 queue_ch_frame(ch
, PH_ACTIVATE_IND
, hh
->id
, skb
);
914 queue_ch_frame(ch
, PH_DEACTIVATE_IND
, hh
->id
, skb
);
916 case PH_DEACTIVATE_REQ
:
917 if (debug
& (DEBUG_L1OIP_MSG
| DEBUG_L1OIP_SOCKET
))
918 printk(KERN_DEBUG
"%s: PH_DEACTIVATE channel %d "
919 "(1..%d)\n", __func__
, dch
->slot
,
922 if (test_bit(FLG_ACTIVE
, &dch
->Flags
))
923 queue_ch_frame(ch
, PH_ACTIVATE_IND
, hh
->id
, skb
);
925 queue_ch_frame(ch
, PH_DEACTIVATE_IND
, hh
->id
, skb
);
934 channel_dctrl(struct dchannel
*dch
, struct mISDN_ctrl_req
*cq
)
937 struct l1oip
*hc
= dch
->hw
;
940 case MISDN_CTRL_GETOP
:
941 cq
->op
= MISDN_CTRL_SETPEER
| MISDN_CTRL_UNSETPEER
942 | MISDN_CTRL_GETPEER
;
944 case MISDN_CTRL_SETPEER
:
945 hc
->remoteip
= (u32
)cq
->p1
;
946 hc
->remoteport
= cq
->p2
& 0xffff;
947 hc
->localport
= cq
->p2
>> 16;
949 hc
->remoteport
= hc
->localport
;
950 if (debug
& DEBUG_L1OIP_SOCKET
)
951 printk(KERN_DEBUG
"%s: got new ip address from user "
952 "space.\n", __func__
);
953 l1oip_socket_open(hc
);
955 case MISDN_CTRL_UNSETPEER
:
956 if (debug
& DEBUG_L1OIP_SOCKET
)
957 printk(KERN_DEBUG
"%s: removing ip address.\n",
960 l1oip_socket_open(hc
);
962 case MISDN_CTRL_GETPEER
:
963 if (debug
& DEBUG_L1OIP_SOCKET
)
964 printk(KERN_DEBUG
"%s: getting ip address.\n",
966 cq
->p1
= hc
->remoteip
;
967 cq
->p2
= hc
->remoteport
| (hc
->localport
<< 16);
970 printk(KERN_WARNING
"%s: unknown Op %x\n",
979 open_dchannel(struct l1oip
*hc
, struct dchannel
*dch
, struct channel_req
*rq
)
981 if (debug
& DEBUG_HW_OPEN
)
982 printk(KERN_DEBUG
"%s: dev(%d) open from %p\n", __func__
,
983 dch
->dev
.id
, __builtin_return_address(0));
984 if (rq
->protocol
== ISDN_P_NONE
)
986 if ((dch
->dev
.D
.protocol
!= ISDN_P_NONE
) &&
987 (dch
->dev
.D
.protocol
!= rq
->protocol
)) {
988 if (debug
& DEBUG_HW_OPEN
)
989 printk(KERN_WARNING
"%s: change protocol %x to %x\n",
990 __func__
, dch
->dev
.D
.protocol
, rq
->protocol
);
992 if (dch
->dev
.D
.protocol
!= rq
->protocol
)
993 dch
->dev
.D
.protocol
= rq
->protocol
;
995 if (test_bit(FLG_ACTIVE
, &dch
->Flags
)) {
996 _queue_data(&dch
->dev
.D
, PH_ACTIVATE_IND
, MISDN_ID_ANY
,
997 0, NULL
, GFP_KERNEL
);
999 rq
->ch
= &dch
->dev
.D
;
1000 if (!try_module_get(THIS_MODULE
))
1001 printk(KERN_WARNING
"%s:cannot get module\n", __func__
);
1006 open_bchannel(struct l1oip
*hc
, struct dchannel
*dch
, struct channel_req
*rq
)
1008 struct bchannel
*bch
;
1011 if (!test_channelmap(rq
->adr
.channel
, dch
->dev
.channelmap
))
1013 if (rq
->protocol
== ISDN_P_NONE
)
1015 ch
= rq
->adr
.channel
; /* BRI: 1=B1 2=B2 PRI: 1..15,17.. */
1016 bch
= hc
->chan
[ch
].bch
;
1018 printk(KERN_ERR
"%s:internal error ch %d has no bch\n",
1022 if (test_and_set_bit(FLG_OPEN
, &bch
->Flags
))
1023 return -EBUSY
; /* b-channel can be only open once */
1024 bch
->ch
.protocol
= rq
->protocol
;
1026 if (!try_module_get(THIS_MODULE
))
1027 printk(KERN_WARNING
"%s:cannot get module\n", __func__
);
1032 l1oip_dctrl(struct mISDNchannel
*ch
, u_int cmd
, void *arg
)
1034 struct mISDNdevice
*dev
= container_of(ch
, struct mISDNdevice
, D
);
1035 struct dchannel
*dch
= container_of(dev
, struct dchannel
, dev
);
1036 struct l1oip
*hc
= dch
->hw
;
1037 struct channel_req
*rq
;
1040 if (dch
->debug
& DEBUG_HW
)
1041 printk(KERN_DEBUG
"%s: cmd:%x %p\n",
1042 __func__
, cmd
, arg
);
1046 switch (rq
->protocol
) {
1053 err
= open_dchannel(hc
, dch
, rq
);
1061 err
= open_dchannel(hc
, dch
, rq
);
1064 err
= open_bchannel(hc
, dch
, rq
);
1068 if (debug
& DEBUG_HW_OPEN
)
1069 printk(KERN_DEBUG
"%s: dev(%d) close from %p\n",
1070 __func__
, dch
->dev
.id
,
1071 __builtin_return_address(0));
1072 module_put(THIS_MODULE
);
1074 case CONTROL_CHANNEL
:
1075 err
= channel_dctrl(dch
, arg
);
1078 if (dch
->debug
& DEBUG_HW
)
1079 printk(KERN_DEBUG
"%s: unknown command %x\n",
1087 handle_bmsg(struct mISDNchannel
*ch
, struct sk_buff
*skb
)
1089 struct bchannel
*bch
= container_of(ch
, struct bchannel
, ch
);
1090 struct l1oip
*hc
= bch
->hw
;
1092 struct mISDNhead
*hh
= mISDN_HEAD_P(skb
);
1098 if (skb
->len
<= 0) {
1099 printk(KERN_WARNING
"%s: skb too small\n",
1103 if (skb
->len
> MAX_DFRAME_LEN_L1
|| skb
->len
> L1OIP_MAX_LEN
) {
1104 printk(KERN_WARNING
"%s: skb too large\n",
1108 /* check for AIS / ulaw-silence */
1110 if (!memchr_inv(skb
->data
, 0xff, l
)) {
1111 if (debug
& DEBUG_L1OIP_MSG
)
1112 printk(KERN_DEBUG
"%s: got AIS, not sending, "
1113 "but counting\n", __func__
);
1114 hc
->chan
[bch
->slot
].tx_counter
+= l
;
1116 queue_ch_frame(ch
, PH_DATA_CNF
, hh
->id
, skb
);
1119 /* check for silence */
1121 if (!memchr_inv(skb
->data
, 0x2a, l
)) {
1122 if (debug
& DEBUG_L1OIP_MSG
)
1123 printk(KERN_DEBUG
"%s: got silence, not sending"
1124 ", but counting\n", __func__
);
1125 hc
->chan
[bch
->slot
].tx_counter
+= l
;
1127 queue_ch_frame(ch
, PH_DATA_CNF
, hh
->id
, skb
);
1136 * This is technically bounded by L1OIP_MAX_PERFRAME but
1137 * MAX_DFRAME_LEN_L1 < L1OIP_MAX_PERFRAME
1139 ll
= (l
< MAX_DFRAME_LEN_L1
) ? l
: MAX_DFRAME_LEN_L1
;
1140 l1oip_socket_send(hc
, hc
->codec
, bch
->slot
, 0,
1141 hc
->chan
[bch
->slot
].tx_counter
, p
, ll
);
1142 hc
->chan
[bch
->slot
].tx_counter
+= ll
;
1147 queue_ch_frame(ch
, PH_DATA_CNF
, hh
->id
, skb
);
1149 case PH_ACTIVATE_REQ
:
1150 if (debug
& (DEBUG_L1OIP_MSG
| DEBUG_L1OIP_SOCKET
))
1151 printk(KERN_DEBUG
"%s: PH_ACTIVATE channel %d (1..%d)\n"
1152 , __func__
, bch
->slot
, hc
->b_num
+ 1);
1153 hc
->chan
[bch
->slot
].codecstate
= 0;
1154 test_and_set_bit(FLG_ACTIVE
, &bch
->Flags
);
1156 queue_ch_frame(ch
, PH_ACTIVATE_IND
, hh
->id
, skb
);
1158 case PH_DEACTIVATE_REQ
:
1159 if (debug
& (DEBUG_L1OIP_MSG
| DEBUG_L1OIP_SOCKET
))
1160 printk(KERN_DEBUG
"%s: PH_DEACTIVATE channel %d "
1161 "(1..%d)\n", __func__
, bch
->slot
,
1163 test_and_clear_bit(FLG_ACTIVE
, &bch
->Flags
);
1165 queue_ch_frame(ch
, PH_DEACTIVATE_IND
, hh
->id
, skb
);
1174 channel_bctrl(struct bchannel
*bch
, struct mISDN_ctrl_req
*cq
)
1177 struct dsp_features
*features
=
1178 (struct dsp_features
*)(*((u_long
*)&cq
->p1
));
1181 case MISDN_CTRL_GETOP
:
1182 cq
->op
= MISDN_CTRL_HW_FEATURES_OP
;
1184 case MISDN_CTRL_HW_FEATURES
: /* fill features structure */
1185 if (debug
& DEBUG_L1OIP_MSG
)
1186 printk(KERN_DEBUG
"%s: HW_FEATURE request\n",
1188 /* create confirm */
1189 features
->unclocked
= 1;
1190 features
->unordered
= 1;
1193 printk(KERN_WARNING
"%s: unknown Op %x\n",
1202 l1oip_bctrl(struct mISDNchannel
*ch
, u_int cmd
, void *arg
)
1204 struct bchannel
*bch
= container_of(ch
, struct bchannel
, ch
);
1207 if (bch
->debug
& DEBUG_HW
)
1208 printk(KERN_DEBUG
"%s: cmd:%x %p\n",
1209 __func__
, cmd
, arg
);
1212 test_and_clear_bit(FLG_OPEN
, &bch
->Flags
);
1213 test_and_clear_bit(FLG_ACTIVE
, &bch
->Flags
);
1214 ch
->protocol
= ISDN_P_NONE
;
1216 module_put(THIS_MODULE
);
1219 case CONTROL_CHANNEL
:
1220 err
= channel_bctrl(bch
, arg
);
1223 printk(KERN_WARNING
"%s: unknown prim(%x)\n",
1231 * cleanup module and stack
1234 release_card(struct l1oip
*hc
)
1238 hc
->shutdown
= true;
1240 timer_shutdown_sync(&hc
->keep_tl
);
1241 timer_shutdown_sync(&hc
->timeout_tl
);
1243 cancel_work_sync(&hc
->workq
);
1245 if (hc
->socket_thread
)
1246 l1oip_socket_close(hc
);
1248 if (hc
->registered
&& hc
->chan
[hc
->d_idx
].dch
)
1249 mISDN_unregister_device(&hc
->chan
[hc
->d_idx
].dch
->dev
);
1250 for (ch
= 0; ch
< 128; ch
++) {
1251 if (hc
->chan
[ch
].dch
) {
1252 mISDN_freedchannel(hc
->chan
[ch
].dch
);
1253 kfree(hc
->chan
[ch
].dch
);
1255 if (hc
->chan
[ch
].bch
) {
1256 mISDN_freebchannel(hc
->chan
[ch
].bch
);
1257 kfree(hc
->chan
[ch
].bch
);
1258 #ifdef REORDER_DEBUG
1259 dev_kfree_skb(hc
->chan
[ch
].disorder_skb
);
1264 spin_lock(&l1oip_lock
);
1265 list_del(&hc
->list
);
1266 spin_unlock(&l1oip_lock
);
1274 struct l1oip
*hc
, *next
;
1276 list_for_each_entry_safe(hc
, next
, &l1oip_ilist
, list
)
1284 * module and stack init
1287 init_card(struct l1oip
*hc
, int pri
, int bundle
)
1289 struct dchannel
*dch
;
1290 struct bchannel
*bch
;
1294 spin_lock_init(&hc
->socket_lock
);
1295 hc
->idx
= l1oip_cnt
;
1297 hc
->d_idx
= pri
? 16 : 3;
1298 hc
->b_num
= pri
? 30 : 2;
1299 hc
->bundle
= bundle
;
1301 sprintf(hc
->name
, "l1oip-e1.%d", l1oip_cnt
+ 1);
1303 sprintf(hc
->name
, "l1oip-s0.%d", l1oip_cnt
+ 1);
1305 switch (codec
[l1oip_cnt
]) {
1312 printk(KERN_ERR
"Codec(%d) not supported.\n",
1316 hc
->codec
= codec
[l1oip_cnt
];
1317 if (debug
& DEBUG_L1OIP_INIT
)
1318 printk(KERN_DEBUG
"%s: using codec %d\n",
1319 __func__
, hc
->codec
);
1321 if (id
[l1oip_cnt
] == 0) {
1322 printk(KERN_WARNING
"Warning: No 'id' value given or "
1323 "0, this is highly unsecure. Please use 32 "
1324 "bit random number 0x...\n");
1326 hc
->id
= id
[l1oip_cnt
];
1327 if (debug
& DEBUG_L1OIP_INIT
)
1328 printk(KERN_DEBUG
"%s: using id 0x%x\n", __func__
, hc
->id
);
1330 hc
->ondemand
= ondemand
[l1oip_cnt
];
1331 if (hc
->ondemand
&& !hc
->id
) {
1332 printk(KERN_ERR
"%s: ondemand option only allowed in "
1333 "conjunction with non 0 ID\n", __func__
);
1337 if (limit
[l1oip_cnt
])
1338 hc
->b_num
= limit
[l1oip_cnt
];
1339 if (!pri
&& hc
->b_num
> 2) {
1340 printk(KERN_ERR
"Maximum limit for BRI interface is 2 "
1344 if (pri
&& hc
->b_num
> 126) {
1345 printk(KERN_ERR
"Maximum limit for PRI interface is 126 "
1349 if (pri
&& hc
->b_num
> 30) {
1350 printk(KERN_WARNING
"Maximum limit for BRI interface is 30 "
1352 printk(KERN_WARNING
"Your selection of %d channels must be "
1353 "supported by application.\n", hc
->limit
);
1356 hc
->remoteip
= ip
[l1oip_cnt
<< 2] << 24
1357 | ip
[(l1oip_cnt
<< 2) + 1] << 16
1358 | ip
[(l1oip_cnt
<< 2) + 2] << 8
1359 | ip
[(l1oip_cnt
<< 2) + 3];
1360 hc
->localport
= port
[l1oip_cnt
]?:(L1OIP_DEFAULTPORT
+ l1oip_cnt
);
1361 if (remoteport
[l1oip_cnt
])
1362 hc
->remoteport
= remoteport
[l1oip_cnt
];
1364 hc
->remoteport
= hc
->localport
;
1365 if (debug
& DEBUG_L1OIP_INIT
)
1366 printk(KERN_DEBUG
"%s: using local port %d remote ip "
1367 "%d.%d.%d.%d port %d ondemand %d\n", __func__
,
1368 hc
->localport
, hc
->remoteip
>> 24,
1369 (hc
->remoteip
>> 16) & 0xff,
1370 (hc
->remoteip
>> 8) & 0xff, hc
->remoteip
& 0xff,
1371 hc
->remoteport
, hc
->ondemand
);
1373 dch
= kzalloc(sizeof(struct dchannel
), GFP_KERNEL
);
1377 mISDN_initdchannel(dch
, MAX_DFRAME_LEN_L1
, NULL
);
1380 dch
->dev
.Dprotocols
= (1 << ISDN_P_TE_E1
) | (1 << ISDN_P_NT_E1
);
1382 dch
->dev
.Dprotocols
= (1 << ISDN_P_TE_S0
) | (1 << ISDN_P_NT_S0
);
1383 dch
->dev
.Bprotocols
= (1 << (ISDN_P_B_RAW
& ISDN_P_B_MASK
)) |
1384 (1 << (ISDN_P_B_HDLC
& ISDN_P_B_MASK
));
1385 dch
->dev
.D
.send
= handle_dmsg
;
1386 dch
->dev
.D
.ctrl
= l1oip_dctrl
;
1387 dch
->dev
.nrbchan
= hc
->b_num
;
1388 dch
->slot
= hc
->d_idx
;
1389 hc
->chan
[hc
->d_idx
].dch
= dch
;
1391 for (ch
= 0; ch
< dch
->dev
.nrbchan
; ch
++) {
1394 bch
= kzalloc(sizeof(struct bchannel
), GFP_KERNEL
);
1396 printk(KERN_ERR
"%s: no memory for bchannel\n",
1403 mISDN_initbchannel(bch
, MAX_DATA_MEM
, 0);
1405 bch
->ch
.send
= handle_bmsg
;
1406 bch
->ch
.ctrl
= l1oip_bctrl
;
1407 bch
->ch
.nr
= i
+ ch
;
1408 list_add(&bch
->ch
.list
, &dch
->dev
.bchannels
);
1409 hc
->chan
[i
+ ch
].bch
= bch
;
1410 set_channelmap(bch
->nr
, dch
->dev
.channelmap
);
1412 /* TODO: create a parent device for this driver */
1413 ret
= mISDN_register_device(&dch
->dev
, NULL
, hc
->name
);
1418 if (debug
& DEBUG_L1OIP_INIT
)
1419 printk(KERN_DEBUG
"%s: Setting up network card(%d)\n",
1420 __func__
, l1oip_cnt
+ 1);
1421 ret
= l1oip_socket_open(hc
);
1425 timer_setup(&hc
->keep_tl
, l1oip_keepalive
, 0);
1426 hc
->keep_tl
.expires
= jiffies
+ 2 * HZ
; /* two seconds first time */
1427 add_timer(&hc
->keep_tl
);
1429 timer_setup(&hc
->timeout_tl
, l1oip_timeout
, 0);
1430 hc
->timeout_on
= 0; /* state that we have timer off */
1442 printk(KERN_INFO
"mISDN: Layer-1-over-IP driver Rev. %s\n",
1445 if (l1oip_4bit_alloc(ulaw
))
1449 while (l1oip_cnt
< MAX_CARDS
&& type
[l1oip_cnt
]) {
1450 switch (type
[l1oip_cnt
] & 0xff) {
1468 printk(KERN_ERR
"Card type(%d) not supported.\n",
1469 type
[l1oip_cnt
] & 0xff);
1474 if (debug
& DEBUG_L1OIP_INIT
)
1475 printk(KERN_DEBUG
"%s: interface %d is %s with %s.\n",
1476 __func__
, l1oip_cnt
, pri
? "PRI" : "BRI",
1477 bundle
? "bundled IP packet for all B-channels" :
1478 "separate IP packets for every B-channel");
1480 hc
= kzalloc(sizeof(struct l1oip
), GFP_ATOMIC
);
1482 printk(KERN_ERR
"No kmem for L1-over-IP driver.\n");
1486 INIT_WORK(&hc
->workq
, (void *)l1oip_send_bh
);
1488 spin_lock(&l1oip_lock
);
1489 list_add_tail(&hc
->list
, &l1oip_ilist
);
1490 spin_unlock(&l1oip_lock
);
1492 ret
= init_card(hc
, pri
, bundle
);
1500 printk(KERN_INFO
"%d virtual devices registered\n", l1oip_cnt
);
1504 module_init(l1oip_init
);
1505 module_exit(l1oip_cleanup
);