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