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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
|
/*
* Copyright (c) 1997, 1999 Hellmuth Michaelis. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*---------------------------------------------------------------------------
*
* i4b_l3l4.h - layer 3 / layer 4 interface
* ------------------------------------------
*
* $Id: i4b_l3l4.h,v 1.32 2000/08/24 11:48:57 hm Exp $
*
* $FreeBSD$
*
* last edit-date: [Fri Jun 2 14:29:35 2000]
*
*---------------------------------------------------------------------------*/
#ifndef _I4B_L3L4_H_
#define _I4B_L3L4_H_
#define T303VAL (hz*4) /* 4 seconds timeout */
#define T305VAL (hz*30) /* 30 seconds timeout */
#define T308VAL (hz*4) /* 4 seconds timeout */
#define T309VAL (hz*90) /* 90 seconds timeout */
#define T310VAL (hz*60) /* 30-120 seconds timeout */
#define T313VAL (hz*4) /* 4 seconds timeout */
#define T400DEF (hz*10) /* 10 seconds timeout */
#define N_CALL_DESC (MAX_CONTROLLERS*2) /* no of call descriptors */
extern int nctrl; /* number of controllers detected in system */
typedef struct bchan_statistics {
int outbytes;
int inbytes;
} bchan_statistics_t;
/*---------------------------------------------------------------------------*
* table of things the driver needs to know about the b channel
* it is connected to for data transfer
*---------------------------------------------------------------------------*/
typedef struct i4l_isdn_bchan_linktab {
int unit;
int channel;
void (*bch_config)(int unit, int channel, int bprot, int updown);
void (*bch_tx_start)(int unit, int channel);
void (*bch_stat)(int unit, int channel, bchan_statistics_t *bsp);
struct ifqueue *tx_queue;
struct ifqueue *rx_queue; /* data xfer for NON-HDLC traffic */
struct mbuf **rx_mbuf; /* data xfer for HDLC based traffic */
} isdn_link_t;
/*---------------------------------------------------------------------------*
* table of things the b channel handler needs to know about
* the driver it is connected to for data transfer
*---------------------------------------------------------------------------*/
typedef struct i4l_driver_bchan_linktab {
int unit;
void (*bch_rx_data_ready)(int unit);
void (*bch_tx_queue_empty)(int unit);
void (*bch_activity)(int unit, int rxtx);
#define ACT_RX 0
#define ACT_TX 1
void (*line_connected)(int unit, void *cde);
void (*line_disconnected)(int unit, void *cde);
void (*dial_response)(int unit, int stat, cause_t cause);
void (*updown_ind)(int unit, int updown);
} drvr_link_t;
/* global linktab functions for controller types (aka hardware drivers) */
struct ctrl_type_desc {
isdn_link_t* (*get_linktab)(int unit, int channel);
void (*set_linktab)(int unit, int channel, drvr_link_t *dlt);
};
extern struct ctrl_type_desc ctrl_types[];
/* global linktab functions for RBCH userland driver */
drvr_link_t *rbch_ret_linktab(int unit);
void rbch_set_linktab(int unit, isdn_link_t *ilt);
/* global linktab functions for IPR network driver */
drvr_link_t *ipr_ret_linktab(int unit);
void ipr_set_linktab(int unit, isdn_link_t *ilt);
/* global linktab functions for TEL userland driver */
drvr_link_t *tel_ret_linktab(int unit);
void tel_set_linktab(int unit, isdn_link_t *ilt);
/* global linktab functions for ISPPP userland driver */
drvr_link_t *i4bisppp_ret_linktab(int unit);
void i4bisppp_set_linktab(int unit, isdn_link_t *ilt);
#ifdef __bsdi__
/* global linktab functions for IBC userland driver */
drvr_link_t *ibc_ret_linktab(int unit);
void ibc_set_linktab(int unit, isdn_link_t *ilt);
#endif
/* global linktab functions for ING network driver */
drvr_link_t *ing_ret_linktab(int unit);
void ing_set_linktab(int unit, isdn_link_t *ilt);
/*---------------------------------------------------------------------------*
* this structure describes one call/connection on one B-channel
* and all its parameters
*---------------------------------------------------------------------------*/
typedef struct
{
u_int cdid; /* call descriptor id */
int controller; /* isdn controller number */
int cr; /* call reference value */
int crflag; /* call reference flag */
#define CRF_ORIG 0 /* originating side */
#define CRF_DEST 1 /* destinating side */
int channelid; /* channel id value */
int channelexcl; /* channel exclusive */
int bprot; /* B channel protocol BPROT_XXX */
int driver; /* driver to use for B channel */
int driver_unit; /* unit for above driver number */
cause_t cause_in; /* cause value from NT */
cause_t cause_out; /* cause value to NT */
int call_state; /* from incoming SETUP */
u_char dst_telno[TELNO_MAX]; /* destination number */
u_char src_telno[TELNO_MAX]; /* source number */
int scr_ind; /* screening ind for incoming call */
int prs_ind; /* presentation ind for incoming call */
int Q931state; /* Q.931 state for call */
int event; /* event to be processed */
int response; /* setup response type */
int T303; /* SETUP sent response timeout */
int T303_first_to; /* first timeout flag */
int T305; /* DISC without PROG IND */
int T308; /* RELEASE sent response timeout*/
int T308_first_to; /* first timeout flag */
int T309; /* data link disconnect timeout */
int T310; /* CALL PROC received */
int T313; /* CONNECT sent timeout */
int T400; /* L4 timeout */
isdn_link_t *ilt; /* isdn B channel linktab */
drvr_link_t *dlt; /* driver linktab */
int dir; /* outgoing or incoming call */
#define DIR_OUTGOING 0
#define DIR_INCOMING 1
int timeout_active; /* idle timeout() active flag */
#if (defined(__FreeBSD_version) && __FreeBSD_version >= 300001) || \
(!defined(__FreeBSD_version) && defined(__FreeBSD__) && __FreeBSD__ >= 3)
struct callout_handle idle_timeout_handle;
struct callout_handle T303_callout;
struct callout_handle T305_callout;
struct callout_handle T308_callout;
struct callout_handle T309_callout;
struct callout_handle T310_callout;
struct callout_handle T313_callout;
struct callout_handle T400_callout;
int callouts_inited; /* must init before use */
#endif
#if defined(__NetBSD__) && __NetBSD_Version__ >= 104230000
struct callout idle_timeout_handle;
struct callout T303_callout;
struct callout T305_callout;
struct callout T308_callout;
struct callout T309_callout;
struct callout T310_callout;
struct callout T313_callout;
struct callout T400_callout;
int callouts_inited; /* must init before use */
#endif
int idletime_state; /* wait for idle_time begin */
#define IST_IDLE 0 /* shorthold mode disabled */
#define IST_NONCHK 1 /* in non-checked window */
#define IST_CHECK 2 /* in idle check window */
#define IST_SAFE 3 /* in safety zone */
time_t idletimechk_start; /* check idletime window start */
time_t connect_time; /* time connect was made */
time_t last_active_time; /* last time with activity */
/* for incoming connections: */
time_t max_idle_time; /* max time without activity */
/* for outgoing connections: */
msg_shorthold_t shorthold_data; /* shorthold data to use */
int aocd_flag; /* AOCD used for unitlength calc*/
time_t last_aocd_time; /* last time AOCD received */
int units; /* number of AOCD charging units*/
int units_type; /* units type: AOCD, AOCE */
int cunits; /* calculated units */
int isdntxdelay; /* isdn tx delay after connect */
u_char display[DISPLAY_MAX]; /* display information element */
char datetime[DATETIME_MAX]; /* date/time information element*/
} call_desc_t;
extern call_desc_t call_desc[N_CALL_DESC];
/* forward decl. */
struct isdn_diagnostic_request;
struct isdn_dr_prot;
/*---------------------------------------------------------------------------*
* this structure "describes" one controller
*---------------------------------------------------------------------------*/
typedef struct
{
int unit; /* unit number of this contr. */
int ctrl_type; /* controller type (CTRL_XXX) */
int card_type; /* card manufacturer (CARD_XXX) */
int protocol; /* D-channel protocol type */
int dl_est; /* layer 2 established */
#define DL_DOWN 0
#define DL_UP 1
int bch_state[2]; /* states of the b channels */
#define BCH_ST_FREE 0 /* free to be used, idle */
#define BCH_ST_RSVD 1 /* reserved, may become free or used */
#define BCH_ST_USED 2 /* in use for data transfer */
int tei; /* current tei or -1 if invalid */
/* pointers to functions to be called from L4 */
void (*N_CONNECT_REQUEST) (unsigned int);
void (*N_CONNECT_RESPONSE) (unsigned int, int, int);
void (*N_DISCONNECT_REQUEST) (unsigned int, int);
void (*N_ALERT_REQUEST) (unsigned int);
int (*N_DOWNLOAD) (int unit, int numprotos, struct isdn_dr_prot *protocols);
int (*N_DIAGNOSTICS) (int unit, struct isdn_diagnostic_request*);
void (*N_MGMT_COMMAND) (int unit, int cmd, void *);
} ctrl_desc_t;
extern ctrl_desc_t ctrl_desc[MAX_CONTROLLERS];
#endif /* _I4B_Q931_H_ */
|