hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * see notice in l1oip.c
 */
 
/* debugging */
#define DEBUG_L1OIP_INIT    0x00010000
#define DEBUG_L1OIP_SOCKET    0x00020000
#define DEBUG_L1OIP_MGR        0x00040000
#define DEBUG_L1OIP_MSG        0x00080000
 
/* enable to disorder received bchannels by sequence 2143658798... */
/*
  #define REORDER_DEBUG
*/
 
/* frames */
#define L1OIP_MAX_LEN        2048        /* max packet size form l2 */
#define L1OIP_MAX_PERFRAME    1400        /* max data size in one frame */
 
 
/* timers */
#define L1OIP_KEEPALIVE        15
#define L1OIP_TIMEOUT        65
 
 
/* socket */
#define L1OIP_DEFAULTPORT    931
 
 
/* channel structure */
struct l1oip_chan {
   struct dchannel        *dch;
   struct bchannel        *bch;
   u32            tx_counter;    /* counts xmit bytes/packets */
   u32            rx_counter;    /* counts recv bytes/packets */
   u32            codecstate;    /* used by codec to save data */
#ifdef REORDER_DEBUG
   int            disorder_flag;
   struct sk_buff        *disorder_skb;
   u32            disorder_cnt;
#endif
};
 
 
/* card structure */
struct l1oip {
   struct list_head        list;
 
   /* card */
   int            registered;    /* if registered with mISDN */
   char            name[MISDN_MAX_IDLEN];
   int            idx;        /* card index */
   int            pri;        /* 1=pri, 0=bri */
   int            d_idx;        /* current dchannel number */
   int            b_num;        /* number of bchannels */
   u32            id;        /* id of connection */
   int            ondemand;    /* if transmis. is on demand */
   int            bundle;        /* bundle channels in one frm */
   int            codec;        /* codec to use for transmis. */
   int            limit;        /* limit number of bchannels */
   bool            shutdown;    /* if card is released */
 
   /* timer */
   struct timer_list    keep_tl;
   struct timer_list    timeout_tl;
   int            timeout_on;
   struct work_struct    workq;
 
   /* socket */
   struct socket        *socket;    /* if set, socket is created */
   struct completion    socket_complete;/* completion of sock thread */
   struct task_struct    *socket_thread;
   spinlock_t        socket_lock;    /* access sock outside thread */
   u32            remoteip;    /* if all set, ip is assigned */
   u16            localport;    /* must always be set */
   u16            remoteport;    /* must always be set */
   struct sockaddr_in    sin_local;    /* local socket name */
   struct sockaddr_in    sin_remote;    /* remote socket name */
   struct msghdr        sendmsg;    /* ip message to send */
   struct kvec        sendiov;    /* iov for message */
 
   /* frame */
   struct l1oip_chan    chan[128];    /* channel instances */
};
 
extern int l1oip_law_to_4bit(u8 *data, int len, u8 *result, u32 *state);
extern int l1oip_4bit_to_law(u8 *data, int len, u8 *result);
extern int l1oip_alaw_to_ulaw(u8 *data, int len, u8 *result);
extern int l1oip_ulaw_to_alaw(u8 *data, int len, u8 *result);
extern void l1oip_4bit_free(void);
extern int l1oip_4bit_alloc(int ulaw);