1 /* $NetBSD: i4b_capi_msgs.h,v 1.3 2005/12/24 20:45:09 perry Exp $ */
4 * Copyright (c) 2001-2003 Cubical Solutions Ltd. All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * capi/capi_msgs.h The CAPI i4b message and handler declarations.
29 * $FreeBSD: src/sys/i4b/capi/capi_msgs.h,v 1.1 2001/05/25 08:39:31 hm Exp $
32 #ifndef _NETISDN_I4B_CAPI_MSGS_H_
33 #define _NETISDN_I4B_CAPI_MSGS_H_
37 #define CAPI_ALERT 0x01
38 #define CAPI_CONNECT 0x02
39 #define CAPI_CONNECT_ACTIVE 0x03
40 #define CAPI_CONNECT_B3 0x82
41 #define CAPI_CONNECT_B3_ACTIVE 0x83
42 #define CAPI_CONNECT_B3_T90_ACTIVE 0x88
43 #define CAPI_DATA_B3 0x86
44 #define CAPI_DISCONNECT_B3 0x84
45 #define CAPI_DISCONNECT 0x04
46 #define CAPI_FACILITY 0x80
47 #define CAPI_INFO 0x08
48 #define CAPI_LISTEN 0x05
49 #define CAPI_MANUFACTURER 0xff
50 #define CAPI_RESET_B3 0x87
51 #define CAPI_SELECT_B_PROTOCOL 0x41
53 /* CAPI subcommands */
56 #define CAPI_CONF 0x81
58 #define CAPI_RESP 0x83
60 /* CAPI combined commands */
62 #define CAPICMD(cmd,subcmd) (((subcmd)<<8)|(cmd))
64 #define CAPI_DISCONNECT_REQ CAPICMD(CAPI_DISCONNECT,CAPI_REQ)
65 #define CAPI_DISCONNECT_CONF CAPICMD(CAPI_DISCONNECT,CAPI_CONF)
66 #define CAPI_DISCONNECT_IND CAPICMD(CAPI_DISCONNECT,CAPI_IND)
67 #define CAPI_DISCONNECT_RESP CAPICMD(CAPI_DISCONNECT,CAPI_RESP)
69 #define CAPI_ALERT_REQ CAPICMD(CAPI_ALERT,CAPI_REQ)
70 #define CAPI_ALERT_CONF CAPICMD(CAPI_ALERT,CAPI_CONF)
72 #define CAPI_CONNECT_REQ CAPICMD(CAPI_CONNECT,CAPI_REQ)
73 #define CAPI_CONNECT_CONF CAPICMD(CAPI_CONNECT,CAPI_CONF)
74 #define CAPI_CONNECT_IND CAPICMD(CAPI_CONNECT,CAPI_IND)
75 #define CAPI_CONNECT_RESP CAPICMD(CAPI_CONNECT,CAPI_RESP)
77 #define CAPI_CONNECT_ACTIVE_REQ CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_REQ)
78 #define CAPI_CONNECT_ACTIVE_CONF CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_CONF)
79 #define CAPI_CONNECT_ACTIVE_IND CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_IND)
80 #define CAPI_CONNECT_ACTIVE_RESP CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_RESP)
82 #define CAPI_SELECT_B_PROTOCOL_REQ CAPICMD(CAPI_SELECT_B_PROTOCOL,CAPI_REQ)
83 #define CAPI_SELECT_B_PROTOCOL_CONF CAPICMD(CAPI_SELECT_B_PROTOCOL,CAPI_CONF)
85 #define CAPI_CONNECT_B3_REQ CAPICMD(CAPI_CONNECT_B3,CAPI_REQ)
86 #define CAPI_CONNECT_B3_CONF CAPICMD(CAPI_CONNECT_B3,CAPI_CONF)
87 #define CAPI_CONNECT_B3_IND CAPICMD(CAPI_CONNECT_B3,CAPI_IND)
88 #define CAPI_CONNECT_B3_RESP CAPICMD(CAPI_CONNECT_B3,CAPI_RESP)
90 #define CAPI_CONNECT_B3_ACTIVE_REQ CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_REQ)
91 #define CAPI_CONNECT_B3_ACTIVE_CONF CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_CONF)
92 #define CAPI_CONNECT_B3_ACTIVE_IND CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_IND)
93 #define CAPI_CONNECT_B3_ACTIVE_RESP CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_RESP)
95 #define CAPI_CONNECT_B3_T90_ACTIVE_IND CAPICMD(CAPI_CONNECT_B3_T90_ACTIVE,CAPI_IND)
96 #define CAPI_CONNECT_B3_T90_ACTIVE_RESP CAPICMD(CAPI_CONNECT_B3_T90_ACTIVE,CAPI_RESP)
98 #define CAPI_DATA_B3_REQ CAPICMD(CAPI_DATA_B3,CAPI_REQ)
99 #define CAPI_DATA_B3_CONF CAPICMD(CAPI_DATA_B3,CAPI_CONF)
100 #define CAPI_DATA_B3_IND CAPICMD(CAPI_DATA_B3,CAPI_IND)
101 #define CAPI_DATA_B3_RESP CAPICMD(CAPI_DATA_B3,CAPI_RESP)
103 #define CAPI_DISCONNECT_B3_REQ CAPICMD(CAPI_DISCONNECT_B3,CAPI_REQ)
104 #define CAPI_DISCONNECT_B3_CONF CAPICMD(CAPI_DISCONNECT_B3,CAPI_CONF)
105 #define CAPI_DISCONNECT_B3_IND CAPICMD(CAPI_DISCONNECT_B3,CAPI_IND)
106 #define CAPI_DISCONNECT_B3_RESP CAPICMD(CAPI_DISCONNECT_B3,CAPI_RESP)
108 #define CAPI_RESET_B3_REQ CAPICMD(CAPI_RESET_B3,CAPI_REQ)
109 #define CAPI_RESET_B3_CONF CAPICMD(CAPI_RESET_B3,CAPI_CONF)
110 #define CAPI_RESET_B3_IND CAPICMD(CAPI_RESET_B3,CAPI_IND)
111 #define CAPI_RESET_B3_RESP CAPICMD(CAPI_RESET_B3,CAPI_RESP)
113 #define CAPI_LISTEN_REQ CAPICMD(CAPI_LISTEN,CAPI_REQ)
114 #define CAPI_LISTEN_CONF CAPICMD(CAPI_LISTEN,CAPI_CONF)
116 #define CAPI_MANUFACTURER_REQ CAPICMD(CAPI_MANUFACTURER,CAPI_REQ)
117 #define CAPI_MANUFACTURER_CONF CAPICMD(CAPI_MANUFACTURER,CAPI_CONF)
118 #define CAPI_MANUFACTURER_IND CAPICMD(CAPI_MANUFACTURER,CAPI_IND)
119 #define CAPI_MANUFACTURER_RESP CAPICMD(CAPI_MANUFACTURER,CAPI_RESP)
121 #define CAPI_FACILITY_REQ CAPICMD(CAPI_FACILITY,CAPI_REQ)
122 #define CAPI_FACILITY_CONF CAPICMD(CAPI_FACILITY,CAPI_CONF)
123 #define CAPI_FACILITY_IND CAPICMD(CAPI_FACILITY,CAPI_IND)
124 #define CAPI_FACILITY_RESP CAPICMD(CAPI_FACILITY,CAPI_RESP)
126 #define CAPI_INFO_REQ CAPICMD(CAPI_INFO,CAPI_REQ)
127 #define CAPI_INFO_CONF CAPICMD(CAPI_INFO,CAPI_CONF)
128 #define CAPI_INFO_IND CAPICMD(CAPI_INFO,CAPI_IND)
129 #define CAPI_INFO_RESP CAPICMD(CAPI_INFO,CAPI_RESP)
131 /* CAPI message access helpers */
134 * CAPI message header:
141 * Note that in the following, Controller/PLCI/NCCI is coded as follows:
142 * bits 0..6 = controller, bit 7 = ext/int, bits 8..15 = PLCI, and
143 * bits 16..31 = NCCI value.
147 * struct Additional Info
151 * word Info (0 = OK, other = cause)
153 * CONNECT_REQ, 02 80:
156 * struct Called party number
157 * struct Calling party number
158 * struct Called party subaddress
159 * struct Calling party subaddress
160 * struct Bearer Capability
161 * struct Low Layer Compatibility
162 * struct High Layer Compatibility
163 * struct Additional Info
165 * CONNECT_CONF, 02 81:
167 * word Info (0 = OK, other = cause)
169 * CONNECT_IND, 02 82:
172 * struct Called party number
173 * struct Calling party number
174 * struct Called party subaddress
175 * struct Calling party subaddress
176 * struct Bearer Capability
177 * struct Low Layer Compatibility
178 * struct High Layer Compatibility
179 * struct Additional Info
180 * struct Second Calling party number
182 * CONNECT_RESP, 02 83:
184 * word Reject (0 = accept, 1 = ignore, 2 = reject/normal clearing)
186 * struct Connected number
187 * struct Connected subaddress
188 * struct Low Layer Compatibility
189 * struct Additional Info
191 * CONNECT_ACTIVE_IND, 03 82:
193 * struct Connected number
194 * struct Connected subaddress
195 * struct Low Layer Compatibility
197 * CONNECT_ACTIVE_RESP, 03 83:
200 * CONNECT_B3_REQ, 82 80:
204 * CONNECT_B3_CONF, 82 81:
206 * word Info (0 = connected, other = cause)
208 * CONNECT_B3_IND, 82 82:
212 * CONNECT_B3_RESP, 82 83:
214 * word Reject (0 = accept, 2 = reject/normal clearing)
217 * CONNECT_B3_ACTIVE_IND, 83 82:
221 * CONNECT_B3_ACTIVE_RESP, 83 83:
224 * DATA_B3_REQ, 86 80:
228 * word Data handle (packet id)
229 * word Flags (02 = more)
231 * DATA_B3_CONF, 86 81:
233 * word Data handle (packet id)
234 * word Info (0 = OK, other = cause)
236 * DATA_B3_IND, 86 82:
240 * word Data handle (packet id)
241 * word Flags (02 = more)
243 * DATA_B3_RESP, 86 83:
245 * word Data handle (packet id)
247 * DISCONNECT_B3_REQ, 84 80:
251 * DISCONNECT_B3_CONF, 84 81:
253 * word Info (0 = OK, other = cause)
255 * DISCONNECT_B3_IND, 84 82:
260 * DISCONNECT_B3_RESP, 84 83:
263 * DISCONNECT_REQ, 04 80:
265 * struct Additional Info
267 * DISCONNECT_CONF, 04 81:
269 * word Info (0 = OK, other = cause)
271 * DISCONNECT_IND, 04 82:
275 * DISCONNECT_RESP, 04 83:
280 * dword Info mask (bits 0..9 used)
281 * dword CIP Mask (bit 0 = any match)
282 * dword CIP Mask 2 (bit 0 = any match)
283 * struct Calling party number
284 * struct Calling party subaddress
286 * LISTEN_CONF, 05 81:
288 * word Info (0 = OK, other = cause)
291 * dword Controller/PLCI
292 * struct Called party number
293 * struct Additional Info
296 * dword Controller/PLCI
297 * word Info (0 = OK, other = cause)
300 * dword Controller/PLCI
302 * struct Info element
305 * dword Controller/PLCI
308 #define CAPIMSG_LEN(msg) (msg[0]|(msg[1]<<8))
309 #define CAPIMSG_DATALEN(msg) (msg[16]|(msg[17]<<8))
311 static __inline u_int8_t
* capimsg_getu8(u_int8_t
*msg
, u_int8_t
*val
)
317 static __inline u_int8_t
* capimsg_getu16(u_int8_t
*msg
, u_int16_t
*val
)
319 *val
= (msg
[0]|(msg
[1]<<8));
323 static __inline u_int8_t
* capimsg_getu32(u_int8_t
*msg
, u_int32_t
*val
)
325 *val
= (msg
[0]|(msg
[1]<<8)|(msg
[2]<<16)|(msg
[3]<<24));
329 static __inline u_int8_t
* capimsg_setu8(u_int8_t
*msg
, u_int8_t val
)
335 static __inline u_int8_t
* capimsg_setu16(u_int8_t
*msg
, u_int16_t val
)
337 msg
[0] = (val
& 0xff);
338 msg
[1] = (val
>> 8) & 0xff;
342 static __inline u_int8_t
* capimsg_setu32(u_int8_t
*msg
, u_int32_t val
)
344 msg
[0] = (val
& 0xff);
345 msg
[1] = (val
>> 8) & 0xff;
346 msg
[2] = (val
>> 16) & 0xff;
347 msg
[3] = (val
>> 24) & 0xff;
352 // CAPI message handlers called by higher layers
355 extern void capi_listen_req(capi_softc_t
*sc
, u_int32_t CIP
);
356 extern void capi_alert_req(capi_softc_t
*sc
, call_desc_t
*cd
);
357 extern void capi_connect_req(capi_softc_t
*sc
, call_desc_t
*cd
);
358 extern void capi_connect_b3_req(capi_softc_t
*sc
, call_desc_t
*cd
);
359 extern void capi_connect_resp(capi_softc_t
*sc
, call_desc_t
*cd
);
360 extern void capi_data_b3_req(capi_softc_t
*sc
, int chan
, struct mbuf
*m
);
361 extern void capi_disconnect_req(capi_softc_t
*sc
, call_desc_t
*cd
);
364 // CAPI message handlers called by the receive routine
367 extern void capi_listen_conf(capi_softc_t
*sc
, struct mbuf
*m
);
368 extern void capi_info_ind(capi_softc_t
*sc
, struct mbuf
*m
);
369 extern void capi_alert_conf(capi_softc_t
*sc
, struct mbuf
*m
);
370 extern void capi_connect_conf(capi_softc_t
*sc
, struct mbuf
*m
);
371 extern void capi_connect_active_ind(capi_softc_t
*sc
, struct mbuf
*m
);
372 extern void capi_connect_b3_conf(capi_softc_t
*sc
, struct mbuf
*m
);
373 extern void capi_connect_b3_active_ind(capi_softc_t
*sc
, struct mbuf
*m
);
374 extern void capi_connect_ind(capi_softc_t
*sc
, struct mbuf
*m
);
375 extern void capi_connect_b3_ind(capi_softc_t
*sc
, struct mbuf
*m
);
376 extern void capi_data_b3_conf(capi_softc_t
*sc
, struct mbuf
*m
);
377 extern void capi_data_b3_ind(capi_softc_t
*sc
, struct mbuf
*m
);
378 extern void capi_disconnect_conf(capi_softc_t
*sc
, struct mbuf
*m
);
379 extern void capi_disconnect_b3_ind(capi_softc_t
*sc
, struct mbuf
*m
);
380 extern void capi_disconnect_ind(capi_softc_t
*sc
, struct mbuf
*m
);
382 #endif /* !_NETISDN_I4B_CAPI_MSGS_H_ */