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