1/*
2 * Copyright (c) 2003-2004
3 *	Hartmut Brandt
4 *	All rights reserved.
5 *
6 * Copyright (c) 2001-2002
7 *	Fraunhofer Institute for Open Communication Systems (FhG Fokus).
8 *	All rights reserved.
9 *
10 * Author: Harti Brandt <harti@freebsd.org>
11 *
12 * Redistribution of this software and documentation and use in source and
13 * binary forms, with or without modification, are permitted provided that
14 * the following conditions are met:
15 *
16 * 1. Redistributions of source code or documentation must retain the above
17 *    copyright notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 *    notice, this list of conditions and the following disclaimer in the
20 *    documentation and/or other materials provided with the distribution.
21 *
22 * THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE AUTHORS
23 * AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
24 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
25 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
26 * THE AUTHORS OR ITS CONTRIBUTORS  BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
29 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
32 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 * $Begemot: libunimsg/netnatm/api/atmapi.h,v 1.1 2004/07/08 08:21:48 brandt Exp $
35 *
36 * ATM API as defined per af-saa-0108
37 */
38#ifndef _NETNATM_API_ATMAPI_H_
39#define _NETNATM_API_ATMAPI_H_
40
41#include <sys/types.h>
42
43/* size of an endpointlen including trailing \0 */
44#define	ATM_EPNAMSIZ	65
45
46enum atmstate {
47	ATM_A0,		/* non existent */
48	ATM_A1,		/* initial */
49	ATM_A2,		/* outgoing call preparation */
50	ATM_A3,		/* outgoing call requested */
51	ATM_A4,		/* incoming call preparation */
52	ATM_A5,		/* wait incoming call */
53	ATM_A6,		/* incoming call present */
54	ATM_A7,		/* incoming call requested */
55	ATM_A8,		/* p2p data transfer */
56	ATM_A9,		/* p2mp root data transfer */
57	ATM_A10,	/* p2mp leaf data transfer */
58	ATM_A11,	/* terminated */
59};
60
61enum atmop {
62	ATMOP_RESP,				/* 0 */
63	ATMOP_ABORT_CONNECTION,
64	ATMOP_ACCEPT_INCOMING_CALL,
65	ATMOP_ADD_PARTY,
66	ATMOP_ADD_PARTY_REJECT,
67	ATMOP_ADD_PARTY_SUCCESS,		/* 5 */
68	ATMOP_ARRIVAL_OF_INCOMING_CALL,
69	ATMOP_CALL_RELEASE,
70	ATMOP_CONNECT_OUTGOING_CALL,
71	ATMOP_DROP_PARTY,
72	ATMOP_GET_LOCAL_PORT_INFO,		/* 10 */
73	ATMOP_P2MP_CALL_ACTIVE,
74	ATMOP_P2P_CALL_ACTIVE,
75	ATMOP_PREPARE_INCOMING_CALL,
76	ATMOP_PREPARE_OUTGOING_CALL,
77	ATMOP_QUERY_CONNECTION_ATTRIBUTES,	/* 15 */
78	ATMOP_REJECT_INCOMING_CALL,
79	ATMOP_SET_CONNECTION_ATTRIBUTES,
80	ATMOP_WAIT_ON_INCOMING_CALL,
81	ATMOP_SET_CONNECTION_ATTRIBUTES_X,
82	ATMOP_QUERY_CONNECTION_ATTRIBUTES_X,	/* 20 */
83	ATMOP_QUERY_STATE,
84};
85
86#define ATM_DEFINE_ERRORS						\
87   DEF(ATMERR_OK,		 0, "OK")				\
88   DEF(ATMERR_SYS,		-1, "syscall error")			\
89   DEF(ATMERR_BAD_OP,		-2, "bad operation")			\
90   DEF(ATMERR_BAD_ARGS,		-3, "bad arguments for operation")	\
91   DEF(ATMERR_BAD_STATE,	-4, "operation in bad state")		\
92   DEF(ATMERR_BAD_ATTR,		-5, "unknown attribute")		\
93   DEF(ATMERR_BAD_VALUE,	-6, "bad attribute value")		\
94   DEF(ATMERR_BUSY,		-7, "busy")				\
95   DEF(ATMERR_RDONLY,		-8, "read-only attribute")		\
96   DEF(ATMERR_BAD_SAP,		-9, "bad SAP")				\
97   DEF(ATMERR_OVERLAP,		-10,"overlaping SAP")			\
98   DEF(ATMERR_BAD_ENDPOINT,	-11,"bad ATM endpoint")			\
99   DEF(ATMERR_PREVIOUSLY_ABORTED,-12,"previously aborted")		\
100   DEF(ATMERR_NO_CALL,		-13,"no incoming call")			\
101   DEF(ATMERR_BAD_LEAF_IDENT,	-14,"bad leaf identifier")		\
102   DEF(ATMERR_BAD_PORT,		-15,"unknown port")			\
103   DEF(ATMERR_BAD_SIGNAL,	-29-UNIAPI_ERROR_BAD_SIGNAL, "bad signal")\
104   DEF(ATMERR_BADCU,		-29-UNIAPI_ERROR_BADCU, "bad coordinator state")\
105   DEF(ATMERR_BAD_CALLSTATE,	-29-UNIAPI_ERROR_BAD_CALLSTATE, "bad call state")\
106   DEF(ATMERR_BAD_EPSTATE,	-29-UNIAPI_ERROR_BAD_EPSTATE, "bad party state")\
107   DEF(ATMERR_BAD_UNIARG,	-29-UNIAPI_ERROR_BAD_ARG, "bad uni argument")\
108   DEF(ATMERR_BAD_CALL,		-29-UNIAPI_ERROR_BAD_CALL, "unknown call")\
109   DEF(ATMERR_BAD_PARTY,	-29-UNIAPI_ERROR_BAD_PARTY, "unknown party")\
110   DEF(ATMERR_BAD_CTYPE,	-29-UNIAPI_ERROR_BAD_CTYPE, "wrong call type")\
111   DEF(ATMERR_BAD_IE,		-29-UNIAPI_ERROR_BAD_IE, "bad information element")\
112   DEF(ATMERR_EPREF_INUSE,	-29-UNIAPI_ERROR_EPREF_INUSE, "endpoint reference in use")\
113   DEF(ATMERR_MISSING_IE,	-29-UNIAPI_ERROR_MISSING_IE, "missing information element")\
114   DEF(ATMERR_ENCODING,		-29-UNIAPI_ERROR_ENCODING, "encoding error")\
115   DEF(ATMERR_NOMEM,		-29-UNIAPI_ERROR_NOMEM, "no memory")\
116   DEF(ATMERR_UNIBUSY,		-29-UNIAPI_ERROR_BUSY, "uni process busy")
117
118#define ATM_MKUNIERR(E)	(-29 - (E))
119
120enum atm_error {
121#define DEF(NAME,VAL,STR)	NAME = (VAL),
122ATM_DEFINE_ERRORS
123#undef DEF
124};
125
126enum atm_attribute {
127	ATM_ATTR_NONE = 0,
128	ATM_ATTR_BLLI_SELECTOR,
129	ATM_ATTR_BLLI,
130	ATM_ATTR_BEARER,
131	ATM_ATTR_TRAFFIC,
132	ATM_ATTR_QOS,
133	ATM_ATTR_EXQOS,
134	ATM_ATTR_CALLED,
135	ATM_ATTR_CALLEDSUB,
136	ATM_ATTR_CALLING,
137	ATM_ATTR_CALLINGSUB,
138	ATM_ATTR_AAL,
139	ATM_ATTR_EPREF,
140	ATM_ATTR_CONNED,
141	ATM_ATTR_CONNEDSUB,
142	ATM_ATTR_EETD,
143	ATM_ATTR_ABRSETUP,
144	ATM_ATTR_ABRADD,
145	ATM_ATTR_CONNID,
146	ATM_ATTR_MDCR,
147};
148
149struct atm_resp {
150	int32_t		resp;
151	uint32_t	data;		/* type of attached data */
152};
153enum {
154	ATMRESP_NONE,			/* no data */
155	ATMRESP_ATTRS,			/* attribute(s) */
156	ATMRESP_PORTS,			/* port info */
157	ATMRESP_STATE,			/* endpoint state */
158	ATMRESP_EXSTAT,			/* extended status */
159};
160
161struct atm_abort_connection {
162	struct uni_ie_cause cause;
163};
164
165struct atm_query_connection_attributes {
166	uint32_t	attr;
167};
168struct atm_set_connection_attributes {
169	uint32_t	attr;
170};
171struct atm_query_connection_attributes_x {
172	uint32_t	count;
173#if defined(__GNUC__) && __GNUC__ < 3
174	uint32_t	attr[0];
175#else
176	uint32_t	attr[];
177#endif
178};
179struct atm_set_connection_attributes_x {
180	uint32_t	count;
181#if defined(__GNUC__) && __GNUC__ < 3
182	uint32_t	attr[0];
183#else
184	uint32_t	attr[];
185#endif
186};
187struct atm_prepare_incoming_call {
188	struct uni_sap	sap;
189	uint32_t	queue_size;
190};
191struct atm_connect_outgoing_call {
192	struct uni_ie_called	called;
193};
194struct atm_call_release {
195	struct uni_ie_cause	cause[2];
196};
197struct atm_p2p_call_active {
198	struct uni_ie_connid	connid;
199};
200struct atm_p2mp_call_active {
201	struct uni_ie_connid	connid;
202};
203struct atm_accept_incoming_call {
204	char	newep[ATM_EPNAMSIZ];
205};
206struct atm_reject_incoming_call {
207	struct uni_ie_cause	cause;
208};
209struct atm_add_party {
210	uint16_t		leaf_ident;
211	struct uni_ie_called	called;
212};
213struct atm_add_party_success {
214	uint16_t		leaf_ident;
215};
216struct atm_add_party_reject {
217	uint16_t		leaf_ident;
218	struct uni_ie_cause	cause;
219};
220struct atm_drop_party {
221	uint16_t		leaf_ident;
222	struct uni_ie_cause	cause;
223};
224
225/*
226 * Get local port info. If port is 0, information on all ports is returned,
227 * otherwise only on the named port.
228 * The response consists of a header with two counters, a list of ports
229 * (struct atm_port_info) and a list of addresses (struct uni_addr).
230 * The port to which an address belongs is implicit in the num_addrs field
231 * of the port.
232 */
233struct atm_get_local_port_info {
234	uint32_t	port;
235};
236
237struct atm_port_list {
238	uint32_t	num_ports;	/* number of ports */
239	uint32_t	num_addrs;	/* total number of addresses */
240};
241
242struct atm_port_info {
243	uint32_t	port;
244	uint32_t	pcr;
245	uint32_t	max_vpi_bits;
246	uint32_t	max_vci_bits;
247	uint32_t	max_svpc_vpi;
248	uint32_t	max_svcc_vpi;
249	uint32_t	min_svcc_vci;
250	u_char		esi[6];
251	uint32_t	num_addrs;	/* number of addresses on this port */
252};
253
254/*
255 * Endpoint state info
256 */
257struct atm_epstate {
258	char	name[ATM_EPNAMSIZ];
259	uint8_t	state;
260};
261
262/*
263 * Extended status information.
264 */
265struct atm_exstatus {
266	uint32_t	neps;		/* endpoints */
267	uint32_t	nports;		/* ports */
268	uint32_t	nconns;		/* connections */
269	uint32_t	nparties;	/* number of parties */
270};
271struct atm_exstatus_ep {
272	char		name[ATM_EPNAMSIZ];
273	uint8_t		state;		/* Ux */
274};
275struct atm_exstatus_port {
276	uint32_t	portno;
277	uint8_t		state;
278};
279struct atm_exstatus_conn {
280	uint32_t	id;
281	uint32_t	cref;		/* (flag << 23) | cref */
282	uint32_t	port;
283	char		ep[ATM_EPNAMSIZ];	/* \0 - none */
284	uint8_t		state;		/* Cx */
285};
286struct atm_exstatus_party {
287	uint32_t	connid;
288	uint16_t	epref;
289	uint8_t		state;		/* Px */
290};
291#endif
292