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_ioctl.h - messages kernel <--> userland
28 * -------------------------------------------
29 *
30 * $FreeBSD$
31 *
32 * last edit-date: [Sun Dec 16 15:09:12 2001]
33 *
34 *---------------------------------------------------------------------------*/
35
36 #ifndef _I4B_IOCTL_H_
37 #define _I4B_IOCTL_H_
38
39 #if defined(__FreeBSD__) && __FreeBSD__ >= 3
40 #ifndef _MACHINE_TYPES_H_
41 #include <machine/types.h>
42 #endif /* _MACHINE_TYPES_H_ */
43 #endif /* __FreeBSD__ */
44
45 /*---------------------------------------------------------------------------*
46 * version and release number for isdn4bsd package
47 *---------------------------------------------------------------------------*/
48 #define VERSION 1 /* version number */
49 #define REL 1 /* release number */
50 #define STEP 1 /* release step */
51
52 /*---------------------------------------------------------------------------*
53 * date/time format in i4b log messages
54 * ------------------------------------
55 * Being year 2000 clean is not easy with the current state of the
56 * ANSI C library standard and it's implementation for some locales.
57 * You might like to use the "%c" format of "strftime" sometimes,
58 * but this breaks Y2K in some locales. Also the old standard logfile
59 * format "%d.%m.%y %H:%M:%S" is non compliant.
60 * NetBSD's current toolset warns about this problems, and we compile
61 * with -Werror, so this problems need to be resolved.
62 *---------------------------------------------------------------------------*/
63 #define I4B_TIME_FORMAT "%d.%m.%Y %H:%M:%S"
64
65 /*---------------------------------------------------------------------------*
66 * max number of controllers in system
67 *---------------------------------------------------------------------------*/
68 #define MAX_CONTROLLERS 8 /* max number of controllers */
69
70 /*---------------------------------------------------------------------------*
71 * ISDN D-channel protocols
72 *---------------------------------------------------------------------------*/
73 #define PROTOCOL_DSS1 0 /* default, Euro-ISDN/DSS1 */
74 #define PROTOCOL_D64S 1 /* 64k leased line, no protocol */
75
76 /*---------------------------------------------------------------------------*
77 * controller types
78 *---------------------------------------------------------------------------*/
79 #define CTRL_INVALID (-1) /* invalid, error */
80 #define CTRL_UNKNOWN 0 /* unknown controller type */
81 #define CTRL_PASSIVE 1 /* passive ISDN controller cards*/
82 #define CTRL_DAIC 2 /* Diehl active controller cards*/
83 #define CTRL_TINADD 3 /* Stollmann Tina-dd active card*/
84 #define CTRL_AVMB1 4 /* AVM B1 active card */
85 #define CTRL_CAPI 5 /* cards seen via the CAPI layer*/
86 #define CTRL_NUMTYPES 6 /* number of controller types */
87
88 /*---------------------------------------------------------------------------*
89 * CTRL_PASSIVE: driver types
90 *---------------------------------------------------------------------------*/
91 #define MAXL1UNITS 8 /* max number of units */
92
93 #define L1DRVR_ISIC 0 /* isic - driver */
94 #define L1DRVR_IWIC 1 /* iwic - driver */
95 #define L1DRVR_IFPI 2 /* ifpi - driver */
96 #define L1DRVR_IHFC 3 /* ihfc - driver */
97 #define L1DRVR_IFPNP 4 /* ifpnp - driver */
98 #define L1DRVR_ICCHP 5 /* icchp - driver */
99 #define L1DRVR_ITJC 6 /* itjc - driver */
100 #define L1DRVR_IFPI2 7 /* ifpi2 - driver */
101
102 /* MAXL1DRVR MUST be updated when more passive drivers are added !!! */
103 #define MAXL1DRVR (L1DRVR_IFPI2 + 1)
104
105 /*---------------------------------------------------------------------------*
106 * card types for CTRL_PASSIVE
107 *---------------------------------------------------------------------------*/
108 #define CARD_TYPEP_INVAL (-1) /* invalid, error */
109 #define CARD_TYPEP_UNK 0 /* unknown */
110 #define CARD_TYPEP_8 1 /* Teles, S0/8 */
111 #define CARD_TYPEP_16 2 /* Teles, S0/16 */
112 #define CARD_TYPEP_16_3 3 /* Teles, S0/16.3 */
113 #define CARD_TYPEP_AVMA1 4 /* AVM A1 or AVM Fritz!Card */
114 #define CARD_TYPEP_163P 5 /* Teles, S0/16.3 PnP */
115 #define CARD_TYPEP_CS0P 6 /* Creatix, S0 PnP */
116 #define CARD_TYPEP_USRTA 7 /* US Robotics ISDN TA internal */
117 #define CARD_TYPEP_DRNNGO 8 /* Dr. Neuhaus Niccy GO@ */
118 #define CARD_TYPEP_SWS 9 /* Sedlbauer Win Speed */
119 #define CARD_TYPEP_DYNALINK 10 /* Dynalink IS64PH */
120 #define CARD_TYPEP_BLMASTER 11 /* ISDN Blaster / ISDN Master */
121 #define CARD_TYPEP_PCFRITZ 12 /* AVM PCMCIA Fritz!Card */
122 #define CARD_TYPEP_ELSAQS1ISA 13 /* ELSA QuickStep 1000pro ISA */
123 #define CARD_TYPEP_ELSAQS1PCI 14 /* ELSA QuickStep 1000pro PCI */
124 #define CARD_TYPEP_SIEMENSITALK 15 /* Siemens I-Talk */
125 #define CARD_TYPEP_ELSAMLIMC 16 /* ELSA MicroLink ISDN/MC */
126 #define CARD_TYPEP_ELSAMLMCALL 17 /* ELSA MicroLink MCall */
127 #define CARD_TYPEP_ITKIX1 18 /* ITK ix1 micro */
128 #define CARD_TYPEP_AVMA1PCI 19 /* AVM FRITZ!CARD PCI */
129 #define CARD_TYPEP_PCC16 20 /* ELSA PCC-16 */
130 #define CARD_TYPEP_AVM_PNP 21 /* AVM FRITZ!CARD PnP */
131 #define CARD_TYPEP_SIE_ISURF2 22 /* Siemens I-Surf 2 PnP */
132 #define CARD_TYPEP_ASUSCOMIPAC 23 /* Asuscom ISDNlink 128 K PnP */
133 #define CARD_TYPEP_WINB6692 24 /* Winbond W6692 based */
134 #define CARD_TYPEP_16_3C 25 /* Teles S0/16.3c PnP (HFC-S/SP */
135 #define CARD_TYPEP_ACERP10 26 /* Acer ISDN P10 (HFC-S) */
136 #define CARD_TYPEP_TELEINT_NO_1 27 /* TELEINT ISDN SPEED No. 1 (HFC-1) */
137 #define CARD_TYPEP_CCD_HFCS_PCI 28 /* Cologne Chip HFC-S PCI based */
138 #define CARD_TYPEP_NETJET_S 29 /* Traverse NetJet-S (Tiger300) */
139 #define CARD_TYPEP_DIVA_ISA 30 /* Eicon DIVA ISA PnP 2.0 or 2.02 */
140 #define CARD_TYPEP_COMPAQ_M610 31 /* Compaq Microcom 610 */
141 #define CARD_TYPEP_AVMA1PCI_V2 32 /* AVM FRITZ!CARD PCI Ver. 2 */
142 /*
143 * in case you add support for more cards, please update:
144 *
145 * isdnd: controller.c, name_of_controller()
146 *
147 * and adjust CARD_TYPEP_MAX below.
148 */
149
150 #define CARD_TYPEP_MAX 32 /* max type */
151
152 /*---------------------------------------------------------------------------*
153 * card types for CTRL_DAIC
154 *---------------------------------------------------------------------------*/
155 #define CARD_TYPEA_DAIC_UNK 0
156 #define CARD_TYPEA_DAIC_S 1
157 #define CARD_TYPEA_DAIC_SX 2
158 #define CARD_TYPEA_DAIC_SCOM 3
159 #define CARD_TYPEA_DAIC_QUAD 4
160
161 /*---------------------------------------------------------------------------*
162 * card types for CTRL_CAPI
163 *---------------------------------------------------------------------------*/
164 #define CARD_TYPEC_CAPI_UNK 0
165 #define CARD_TYPEC_AVM_T1_PCI 1
166 #define CARD_TYPEC_AVM_B1_PCI 2
167 #define CARD_TYPEC_AVM_B1_ISA 3
168
169 /*---------------------------------------------------------------------------*
170 * max length of some strings
171 *---------------------------------------------------------------------------*/
172 #define TELNO_MAX 41 /* max length of a telephone number (+ '\0') */
173 #define DISPLAY_MAX 91 /* max length of display information (+ '\0') */
174 #define DATETIME_MAX 21 /* max length of datetime information (+ '\0')*/
175 #define KEYPAD_MAX 35 /* max length of a keypad string (+ '\0') */
176
177 /*---------------------------------------------------------------------------*
178 * in case the src or dst telephone number is empty
179 *---------------------------------------------------------------------------*/
180 #define TELNO_EMPTY "NotAvailable"
181
182 /*---------------------------------------------------------------------------*
183 * B channel parameters
184 *---------------------------------------------------------------------------*/
185 #define BCH_MAX_DATALEN 2048 /* max length of a B channel frame */
186
187 /*---------------------------------------------------------------------------*
188 * userland driver types
189 * ---------------------
190 * a "driver" is defined here as a piece of software interfacing an
191 * ISDN B channel with a userland service, such as IP, Telephony etc.
192 *---------------------------------------------------------------------------*/
193 #define BDRV_RBCH 0 /* raw b-channel interface driver */
194 #define BDRV_TEL 1 /* telephone (speech) interface driver */
195 #define BDRV_IPR 2 /* IP over raw HDLC interface driver */
196 #define BDRV_ISPPP 3 /* sync Kernel PPP interface driver */
197 #define BDRV_IBC 4 /* BSD/OS point to point driver */
198 #define BDRV_ING 5 /* NetGraph ing driver */
199
200 /*---------------------------------------------------------------------------*
201 * B channel protocol
202 *---------------------------------------------------------------------------*/
203 #define BPROT_NONE 0 /* no protocol at all, raw data */
204 #define BPROT_RHDLC 1 /* raw HDLC: flag, data, crc, flag */
205
206 /*---------------------------------------------------------------------------*
207 * causes data type
208 *---------------------------------------------------------------------------*/
209 typedef unsigned int cause_t; /* 32 bit unsigned int */
210
211 /*---------------------------------------------------------------------------*
212 * call descriptor id (cdid) definitions
213 *---------------------------------------------------------------------------*/
214 #define CDID_UNUSED 0 /* cdid is invalid and unused */
215 #define CDID_MAX 99999 /* highest valid cdid, wraparound to 1 */
216
217 /*---------------------------------------------------------------------------*
218 * The shorthold algorithm to use
219 *---------------------------------------------------------------------------*/
220 #define SHA_FIXU 0 /* timeout algorithm for fix unit charging */
221 #define SHA_VARU 1 /* timeout algorithm for variable unit charging */
222
223 /*---------------------------------------------------------------------------*
224 * The shorthold data struct
225 *---------------------------------------------------------------------------*/
226 typedef struct {
227 int shorthold_algorithm; /* shorthold algorithm to use */
228 int unitlen_time; /* length of a charging unit */
229 int idle_time; /* time without activity on b ch*/
230 int earlyhup_time; /* safety area at end of unit */
231 } msg_shorthold_t;
232
233
234 /****************************************************************************
235
236 outgoing call:
237 --------------
238
239 userland kernel
240 -------- ------
241
242 CDID_REQ ----------------->
243
244 <------------------ cdid
245
246 CONNECT_REQ -------------->
247
248 <------------------ PROCEEDING_IND (if connect req ok)
249
250 <------------------ CONNECT_ACTIVE_IND (if connection ok)
251
252 or
253
254 <------------------ DISCONNECT_IND (if connection failed)
255
256
257
258 incoming call:
259 --------------
260
261 userland kernel
262 -------- ------
263
264 <------------------ CONNECT_IND
265
266 CONNECT_RESP ------------->
267
268 <------------------ CONNECT_ACTIVE_IND (if accepted)
269
270
271
272 active disconnect:
273 ------------------
274
275 userland kernel
276 -------- ------
277
278 DISCONNECT_REQ ------------>
279
280 <------------------ DISCONNECT_IND
281
282
283 passive disconnect:
284 -------------------
285
286 userland kernel
287 -------- ------
288
289 <------------------ DISCONNECT_IND
290
291
292 ****************************************************************************/
293
294
295 /*===========================================================================*
296 *===========================================================================*
297 * "read" messages from kernel -> userland
298 *===========================================================================*
299 *===========================================================================*/
300
301
302 /*---------------------------------------------------------------------------*
303 * message header, included in every message
304 *---------------------------------------------------------------------------*/
305 typedef struct {
306 char type; /* message identifier */
307 #define MSG_CONNECT_IND 'a'
308 #define MSG_CONNECT_ACTIVE_IND 'b'
309 #define MSG_DISCONNECT_IND 'c'
310 #define MSG_DIALOUT_IND 'd'
311 #define MSG_IDLE_TIMEOUT_IND 'e'
312 #define MSG_ACCT_IND 'f'
313 #define MSG_CHARGING_IND 'g'
314 #define MSG_PROCEEDING_IND 'h'
315 #define MSG_ALERT_IND 'i'
316 #define MSG_DRVRDISC_REQ 'j'
317 #define MSG_L12STAT_IND 'k'
318 #define MSG_TEIASG_IND 'l'
319 #define MSG_PDEACT_IND 'm'
320 #define MSG_NEGCOMP_IND 'n'
321 #define MSG_IFSTATE_CHANGED_IND 'o'
322 #define MSG_DIALOUTNUMBER_IND 'p'
323 #define MSG_PACKET_IND 'q'
324 #define MSG_KEYPAD_IND 'r'
325 int cdid; /* call descriptor id */
326 } msg_hdr_t;
327
328 /*---------------------------------------------------------------------------*
329 * connect indication
330 * indicates incoming connection
331 *---------------------------------------------------------------------------*/
332 typedef struct {
333 msg_hdr_t header; /* common header */
334 int controller; /* controller number */
335 int channel; /* channel number */
336 #define CHAN_B1 0 /* this _must_ be 0, HSCX B1 is also 0 */
337 #define CHAN_B2 1 /* this _must_ be 1, HSCX B2 is also 1 */
338 #define CHAN_ANY (-1) /* outgoing, not possible for incoming */
339 #define CHAN_NO (-2) /* call waiting (CW) for incoming */
340 int bprot; /* b channel protocot, see BPROT_XXX */
341 char dst_telno[TELNO_MAX]; /* destination telno */
342 char src_telno[TELNO_MAX]; /* source telno */
343 int scr_ind;/* screening indicator */
344 #define SCR_NONE 0 /* no screening indicator transmitted */
345 #define SCR_USR_NOSC 1 /* screening user provided, not screened*/
346 #define SCR_USR_PASS 2 /* screening user provided, verified & passed */
347 #define SCR_USR_FAIL 3 /* screening user provided, verified & failed */
348 #define SCR_NET 4 /* screening network provided */
349 int prs_ind;/* presentation indicator */
350 #define PRS_NONE 0 /* no presentation indicator transmitted*/
351 #define PRS_ALLOWED 1 /* presentation allowed */
352 #define PRS_RESTRICT 2 /* presentation restricted */
353 #define PRS_NNINTERW 3 /* number not available due to interworking */
354 #define PRS_RESERVED 4 /* reserved */
355 char display[DISPLAY_MAX]; /* content of display IE*/
356 } msg_connect_ind_t;
357
358 /*---------------------------------------------------------------------------*
359 * connect active indication
360 * indicates active connection
361 *---------------------------------------------------------------------------*/
362 typedef struct {
363 msg_hdr_t header; /* common header */
364 int controller; /* controller number actually used */
365 int channel; /* channel number actually used */
366 char datetime[DATETIME_MAX]; /* content of date/time IE */
367 } msg_connect_active_ind_t;
368
369 /*---------------------------------------------------------------------------*
370 * disconnect indication
371 * indicates a disconnect
372 *---------------------------------------------------------------------------*/
373 typedef struct {
374 msg_hdr_t header; /* common header */
375 cause_t cause; /* cause code */
376 } msg_disconnect_ind_t;
377
378 /*---------------------------------------------------------------------------*
379 * negotiation complete
380 * indicates an interface is completely up & running
381 *---------------------------------------------------------------------------*/
382 typedef struct {
383 msg_hdr_t header; /* common header */
384 } msg_negcomplete_ind_t;
385
386 /*---------------------------------------------------------------------------*
387 * interface changes internal state
388 * indicates an interface has somehow switched its FSM
389 *---------------------------------------------------------------------------*/
390 typedef struct {
391 msg_hdr_t header; /* common header */
392 int state; /* new interface state */
393 } msg_ifstatechg_ind_t;
394
395 /*---------------------------------------------------------------------------*
396 * initiate a call to a remote site
397 * i.e. the IP driver got a packet and wants a connection
398 *---------------------------------------------------------------------------*/
399 typedef struct {
400 msg_hdr_t header; /* common header */
401 int driver; /* driver type */
402 int driver_unit; /* driver unit number */
403 } msg_dialout_ind_t;
404
405 /*---------------------------------------------------------------------------*
406 * dial a number
407 *---------------------------------------------------------------------------*/
408 typedef struct {
409 msg_hdr_t header; /* common header */
410 int driver; /* driver type */
411 int driver_unit; /* driver unit number */
412 int cmdlen; /* length of string */
413 char cmd[TELNO_MAX]; /* the number to dial */
414 } msg_dialoutnumber_ind_t;
415
416 /*---------------------------------------------------------------------------*
417 * send keypad string
418 *---------------------------------------------------------------------------*/
419 typedef struct {
420 msg_hdr_t header; /* common header */
421 int driver; /* driver type */
422 int driver_unit; /* driver unit number */
423 int cmdlen; /* length of string */
424 char cmd[KEYPAD_MAX];/* keypad string */
425 } msg_keypad_ind_t;
426
427 /*---------------------------------------------------------------------------*
428 * idle timeout disconnect sent indication
429 * kernel has sent disconnect request because of b-ch idle
430 *---------------------------------------------------------------------------*/
431 typedef struct {
432 msg_hdr_t header; /* common header */
433 } msg_idle_timeout_ind_t;
434
435 /*---------------------------------------------------------------------------*
436 * accounting information from userland interface driver to daemon
437 *---------------------------------------------------------------------------*/
438 typedef struct {
439 msg_hdr_t header; /* common header */
440 int accttype; /* accounting type */
441 #define ACCT_DURING 0
442 #define ACCT_FINAL 1
443 int driver; /* driver type */
444 int driver_unit; /* driver unit number */
445 int ioutbytes; /* ISDN # of bytes sent */
446 int iinbytes; /* ISDN # of bytes received */
447 int outbps; /* bytes per sec out */
448 int inbps; /* bytes per sec in */
449 int outbytes; /* driver # of bytes sent */
450 int inbytes; /* driver # of bytes received */
451 } msg_accounting_ind_t;
452
453 /*---------------------------------------------------------------------------*
454 * charging information from isdn driver to daemon
455 *---------------------------------------------------------------------------*/
456 typedef struct {
457 msg_hdr_t header; /* common header */
458 int units; /* number of units */
459 int units_type; /* type of units info */
460 #define CHARGE_INVALID 0 /* invalid, unknown */
461 #define CHARGE_AOCD 1 /* advice of charge during call */
462 #define CHARGE_AOCE 2 /* advice of charge at end of call */
463 #define CHARGE_CALC 3 /* locally calculated from rates information */
464 } msg_charging_ind_t;
465
466 /*---------------------------------------------------------------------------*
467 * call proceeding indication
468 * indicates outgoing SETUP has been acknowleged
469 *---------------------------------------------------------------------------*/
470 typedef struct {
471 msg_hdr_t header; /* common header */
472 int controller; /* controller number actually used */
473 int channel; /* channel number actually used */
474 } msg_proceeding_ind_t;
475
476 /*---------------------------------------------------------------------------*
477 * alert indication
478 * indicates remote user side "rings"
479 *---------------------------------------------------------------------------*/
480 typedef struct {
481 msg_hdr_t header; /* common header */
482 } msg_alert_ind_t;
483
484 /*---------------------------------------------------------------------------*
485 * driver requests to disconnect line
486 *---------------------------------------------------------------------------*/
487 typedef struct {
488 msg_hdr_t header; /* common header */
489 int driver; /* driver type */
490 int driver_unit; /* driver unit number */
491 } msg_drvrdisc_req_t;
492
493 /*---------------------------------------------------------------------------*
494 * connect packet logging
495 *---------------------------------------------------------------------------*/
496
497 typedef struct {
498 msg_hdr_t header; /* common header */
499 int driver; /* driver type */
500 int driver_unit; /* driver unit number */
501 int direction; /* 0=in 1=out */
502 #define DIRECTION_IN 0 /* sending packet to remote */
503 #define DIRECTION_OUT 1 /* received packet from remote */
504 #define MAX_PACKET_LOG 40 /* space for IP and TCP header */
505 u_int8_t pktdata[MAX_PACKET_LOG];
506 } msg_packet_ind_t;
507
508 /*---------------------------------------------------------------------------*
509 * state of layer 1/2
510 *---------------------------------------------------------------------------*/
511 typedef struct {
512 msg_hdr_t header; /* common header */
513 int controller; /* controller unit */
514 int layer; /* layer number (1/2) */
515 #define LAYER_ONE 1
516 #define LAYER_TWO 2
517 int state; /* state info */
518 #define LAYER_IDLE 0
519 #define LAYER_ACTIVE 1
520 } msg_l12stat_ind_t;
521
522 /*---------------------------------------------------------------------------*
523 * TEI assignment messages
524 *---------------------------------------------------------------------------*/
525 typedef struct {
526 msg_hdr_t header; /* common header */
527 int controller; /* controller unit */
528 int tei; /* TEI or -1 if invalid */
529 } msg_teiasg_ind_t;
530
531 /*---------------------------------------------------------------------------*
532 * persistent deactivation state of stack
533 *---------------------------------------------------------------------------*/
534 typedef struct {
535 msg_hdr_t header; /* common header */
536 int controller; /* controller unit */
537 int numactive; /* number of active connections */
538 } msg_pdeact_ind_t;
539
540
541 /*===========================================================================*
542 *===========================================================================*
543 * "ioctl" messages from userland -> kernel
544 *===========================================================================*
545 *===========================================================================*/
546
547 /*---------------------------------------------------------------------------*
548 * request a unique cdid (to setup an outgoing call)
549 *---------------------------------------------------------------------------*/
550 typedef struct {
551 int cdid; /* call descriptor id */
552 } msg_cdid_req_t;
553
554 #define I4B_CDID_REQ _IOWR('4', 0, int)
555
556 /*---------------------------------------------------------------------------*
557 * connect request
558 * requests an outgoing connection
559 *---------------------------------------------------------------------------*/
560 typedef struct {
561 int cdid; /* call descriptor id */
562 int controller; /* controller to use */
563 int channel; /* channel to use */
564 int txdelay; /* tx delay after connect */
565 int bprot; /* b channel protocol */
566 int driver; /* driver to route b channel data to */
567 int driver_unit; /* unit number for above driver */
568 msg_shorthold_t shorthold_data; /* the shorthold data */
569 int unitlen_method; /* how to calculate the unitlength */
570 #define ULEN_METHOD_STATIC 0 /* use unitlen_time value (see above) */
571 #define ULEN_METHOD_DYNAMIC 1 /* use AOCD */
572 char dst_telno[TELNO_MAX]; /* destination telephone no */
573 char src_telno[TELNO_MAX]; /* source telephone number */
574 char keypad[KEYPAD_MAX]; /* keypad string */
575 } msg_connect_req_t;
576
577 #define I4B_CONNECT_REQ _IOW('4', 1, msg_connect_req_t)
578
579 /*---------------------------------------------------------------------------*
580 * connect response
581 * this is the answer to an incoming connect indication
582 *---------------------------------------------------------------------------*/
583 typedef struct {
584 int cdid; /* call descriptor id */
585 int response; /* what to do with incoming call */
586 #define SETUP_RESP_DNTCRE 0 /* dont care, call is not for me */
587 #define SETUP_RESP_REJECT 1 /* reject call */
588 #define SETUP_RESP_ACCEPT 2 /* accept call */
589 cause_t cause; /* cause for case SETUP_RESP_REJECT */
590 /* the following are only used for SETUP_RESP_ACCEPT !! */
591 int txdelay; /* tx delay after connect */
592 int bprot; /* B chan protocol */
593 int driver; /* driver to route b channel data to */
594 int driver_unit; /* unit number for above driver */
595 int max_idle_time; /* max time without activity on b ch */
596 } msg_connect_resp_t;
597
598 #define I4B_CONNECT_RESP _IOW('4', 2, msg_connect_resp_t)
599
600 /*---------------------------------------------------------------------------*
601 * disconnect request
602 * active disconnect request
603 *---------------------------------------------------------------------------*/
604 typedef struct {
605 int cdid; /* call descriptor id */
606 cause_t cause; /* protocol independent cause */
607 } msg_discon_req_t;
608
609 #define I4B_DISCONNECT_REQ _IOW('4', 3, msg_discon_req_t)
610
611 /*---------------------------------------------------------------------------*
612 * controller info request
613 *---------------------------------------------------------------------------*/
614 typedef struct {
615 int controller; /* controller number */
616 int ncontroller; /* number of controllers in system */
617 int ctrl_type; /* controller type passive/active */
618 int card_type; /* brand / version */
619 int tei; /* tei controller probably has */
620 int nbch; /* number of b channels provided */
621 } msg_ctrl_info_req_t;
622
623 #define I4B_CTRL_INFO_REQ _IOWR('4', 4, msg_ctrl_info_req_t)
624
625 /*---------------------------------------------------------------------------*
626 * dialout response
627 * status report to driver who requested a dialout
628 *---------------------------------------------------------------------------*/
629 typedef struct {
630 int driver; /* driver to route b channel data to */
631 int driver_unit; /* unit number for above driver */
632 int stat; /* state of dialout request */
633 #define DSTAT_NONE 0
634 #define DSTAT_TFAIL 1 /* transient failure */
635 #define DSTAT_PFAIL 2 /* permanent failure */
636 #define DSTAT_INONLY 3 /* no outgoing dials allowed */
637 cause_t cause; /* exact i4b cause */
638 } msg_dialout_resp_t;
639
640 #define I4B_DIALOUT_RESP _IOW('4', 5, msg_dialout_resp_t)
641
642 /*---------------------------------------------------------------------------*
643 * timeout value update
644 *---------------------------------------------------------------------------*/
645 typedef struct {
646 int cdid; /* call descriptor id */
647 msg_shorthold_t shorthold_data;
648 } msg_timeout_upd_t;
649
650 #define I4B_TIMEOUT_UPD _IOW('4', 6, msg_timeout_upd_t)
651
652 /*---------------------------------------------------------------------------*
653 * soft enable/disable
654 *---------------------------------------------------------------------------*/
655 typedef struct {
656 int driver; /* driver to route b channel data to */
657 int driver_unit; /* unit number for above driver */
658 int updown; /* what to do */
659 #define SOFT_ENA 0 /* enable interface */
660 #define SOFT_DIS 1 /* disable interface */
661 } msg_updown_ind_t;
662
663 #define I4B_UPDOWN_IND _IOW('4', 7, msg_updown_ind_t)
664
665 /*---------------------------------------------------------------------------*
666 * send alert request
667 *---------------------------------------------------------------------------*/
668 typedef struct {
669 int cdid; /* call descriptor id */
670 } msg_alert_req_t;
671
672 #define I4B_ALERT_REQ _IOW('4', 8, msg_alert_req_t)
673
674 /*---------------------------------------------------------------------------*
675 * request version and release info from kernel part
676 * (msg_vr_req_t is also used by tel & rbch drivers)
677 *---------------------------------------------------------------------------*/
678 typedef struct {
679 int version; /* version number */
680 int release; /* release number */
681 int step; /* release step number */
682 } msg_vr_req_t;
683
684 #define I4B_VR_REQ _IOR('4', 9, msg_vr_req_t)
685
686 /*---------------------------------------------------------------------------*
687 * set ISDN protocol used by a controller
688 *---------------------------------------------------------------------------*/
689 typedef struct {
690 int controller; /* controller number */
691 int protocol; /* ISDN D-channel protocol type */
692 } msg_prot_ind_t;
693
694 #define I4B_PROT_IND _IOW('4', 10, msg_prot_ind_t)
695
696 /*---------------------------------------------------------------------------*
697 * Protocol download to active cards
698 *---------------------------------------------------------------------------*/
699 struct isdn_dr_prot {
700 size_t bytecount; /* length of code */
701 u_int8_t *microcode; /* pointer to microcode */
702 };
703
704 struct isdn_download_request {
705 int controller; /* controller number */
706 int numprotos; /* number of protocols in 'protocols' */
707 struct isdn_dr_prot *protocols;
708 };
709
710 #define I4B_CTRL_DOWNLOAD _IOW('4', 100, struct isdn_download_request)
711
712 /*---------------------------------------------------------------------------*
713 * Generic diagnostic interface for active cards
714 *---------------------------------------------------------------------------*/
715 struct isdn_diagnostic_request {
716 int controller; /* controller number */
717 u_int32_t cmd; /* diagnostic command to execute */
718 size_t in_param_len; /* length of additional input parameter */
719 #define I4B_ACTIVE_DIAGNOSTIC_MAXPARAMLEN 65536
720 void *in_param; /* optional input parameter */
721 size_t out_param_len; /* available output space */
722 void *out_param; /* output data goes here */
723 };
724
725 #define I4B_ACTIVE_DIAGNOSTIC _IOW('4', 102, struct isdn_diagnostic_request)
726
727 #endif /* _I4B_IOCTL_H_ */
Cache object: c2651947baa06c533ca8c1e33af7bc3f
|