1131826Sharti/*
2131826Sharti * Copyright (c) 2003-2004
3131826Sharti *	Hartmut Brandt
4131826Sharti *	All rights reserved.
5131826Sharti *
6131826Sharti * Copyright (c) 2001-2002
7131826Sharti *	Fraunhofer Institute for Open Communication Systems (FhG Fokus).
8131826Sharti *	All rights reserved.
9131826Sharti *
10131826Sharti * Author: Harti Brandt <harti@freebsd.org>
11131826Sharti *
12131826Sharti * Redistribution of this software and documentation and use in source and
13131826Sharti * binary forms, with or without modification, are permitted provided that
14131826Sharti * the following conditions are met:
15131826Sharti *
16131826Sharti * 1. Redistributions of source code or documentation must retain the above
17131826Sharti *    copyright notice, this list of conditions and the following disclaimer.
18131826Sharti * 2. Redistributions in binary form must reproduce the above copyright
19131826Sharti *    notice, this list of conditions and the following disclaimer in the
20131826Sharti *    documentation and/or other materials provided with the distribution.
21131826Sharti *
22131826Sharti * THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE AUTHORS
23131826Sharti * AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
24131826Sharti * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
25131826Sharti * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
26131826Sharti * THE AUTHORS OR ITS CONTRIBUTORS  BE LIABLE FOR ANY DIRECT, INDIRECT,
27131826Sharti * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28131826Sharti * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
29131826Sharti * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30131826Sharti * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31131826Sharti * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
32131826Sharti * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33131826Sharti *
34131826Sharti * $Begemot: libunimsg/netnatm/api/atmapi.h,v 1.1 2004/07/08 08:21:48 brandt Exp $
35131826Sharti *
36131826Sharti * ATM API as defined per af-saa-0108
37131826Sharti */
38131826Sharti#ifndef _NETNATM_API_ATMAPI_H_
39131826Sharti#define _NETNATM_API_ATMAPI_H_
40131826Sharti
41131826Sharti#include <sys/types.h>
42131826Sharti
43131826Sharti/* size of an endpointlen including trailing \0 */
44131826Sharti#define	ATM_EPNAMSIZ	65
45131826Sharti
46131826Shartienum atmstate {
47131826Sharti	ATM_A0,		/* non existent */
48131826Sharti	ATM_A1,		/* initial */
49131826Sharti	ATM_A2,		/* outgoing call preparation */
50131826Sharti	ATM_A3,		/* outgoing call requested */
51131826Sharti	ATM_A4,		/* incoming call preparation */
52131826Sharti	ATM_A5,		/* wait incoming call */
53131826Sharti	ATM_A6,		/* incoming call present */
54131826Sharti	ATM_A7,		/* incoming call requested */
55131826Sharti	ATM_A8,		/* p2p data transfer */
56131826Sharti	ATM_A9,		/* p2mp root data transfer */
57131826Sharti	ATM_A10,	/* p2mp leaf data transfer */
58131826Sharti	ATM_A11,	/* terminated */
59131826Sharti};
60131826Sharti
61131826Shartienum atmop {
62131826Sharti	ATMOP_RESP,				/* 0 */
63131826Sharti	ATMOP_ABORT_CONNECTION,
64131826Sharti	ATMOP_ACCEPT_INCOMING_CALL,
65131826Sharti	ATMOP_ADD_PARTY,
66131826Sharti	ATMOP_ADD_PARTY_REJECT,
67131826Sharti	ATMOP_ADD_PARTY_SUCCESS,		/* 5 */
68131826Sharti	ATMOP_ARRIVAL_OF_INCOMING_CALL,
69131826Sharti	ATMOP_CALL_RELEASE,
70131826Sharti	ATMOP_CONNECT_OUTGOING_CALL,
71131826Sharti	ATMOP_DROP_PARTY,
72131826Sharti	ATMOP_GET_LOCAL_PORT_INFO,		/* 10 */
73131826Sharti	ATMOP_P2MP_CALL_ACTIVE,
74131826Sharti	ATMOP_P2P_CALL_ACTIVE,
75131826Sharti	ATMOP_PREPARE_INCOMING_CALL,
76131826Sharti	ATMOP_PREPARE_OUTGOING_CALL,
77131826Sharti	ATMOP_QUERY_CONNECTION_ATTRIBUTES,	/* 15 */
78131826Sharti	ATMOP_REJECT_INCOMING_CALL,
79131826Sharti	ATMOP_SET_CONNECTION_ATTRIBUTES,
80131826Sharti	ATMOP_WAIT_ON_INCOMING_CALL,
81131826Sharti	ATMOP_SET_CONNECTION_ATTRIBUTES_X,
82131826Sharti	ATMOP_QUERY_CONNECTION_ATTRIBUTES_X,	/* 20 */
83131826Sharti	ATMOP_QUERY_STATE,
84131826Sharti};
85131826Sharti
86131826Sharti#define ATM_DEFINE_ERRORS						\
87131826Sharti   DEF(ATMERR_OK,		 0, "OK")				\
88131826Sharti   DEF(ATMERR_SYS,		-1, "syscall error")			\
89131826Sharti   DEF(ATMERR_BAD_OP,		-2, "bad operation")			\
90131826Sharti   DEF(ATMERR_BAD_ARGS,		-3, "bad arguments for operation")	\
91131826Sharti   DEF(ATMERR_BAD_STATE,	-4, "operation in bad state")		\
92131826Sharti   DEF(ATMERR_BAD_ATTR,		-5, "unknown attribute")		\
93131826Sharti   DEF(ATMERR_BAD_VALUE,	-6, "bad attribute value")		\
94131826Sharti   DEF(ATMERR_BUSY,		-7, "busy")				\
95131826Sharti   DEF(ATMERR_RDONLY,		-8, "read-only attribute")		\
96131826Sharti   DEF(ATMERR_BAD_SAP,		-9, "bad SAP")				\
97131826Sharti   DEF(ATMERR_OVERLAP,		-10,"overlaping SAP")			\
98131826Sharti   DEF(ATMERR_BAD_ENDPOINT,	-11,"bad ATM endpoint")			\
99131826Sharti   DEF(ATMERR_PREVIOUSLY_ABORTED,-12,"previously aborted")		\
100131826Sharti   DEF(ATMERR_NO_CALL,		-13,"no incoming call")			\
101131826Sharti   DEF(ATMERR_BAD_LEAF_IDENT,	-14,"bad leaf identifier")		\
102131826Sharti   DEF(ATMERR_BAD_PORT,		-15,"unknown port")			\
103131826Sharti   DEF(ATMERR_BAD_SIGNAL,	-29-UNIAPI_ERROR_BAD_SIGNAL, "bad signal")\
104131826Sharti   DEF(ATMERR_BADCU,		-29-UNIAPI_ERROR_BADCU, "bad coordinator state")\
105131826Sharti   DEF(ATMERR_BAD_CALLSTATE,	-29-UNIAPI_ERROR_BAD_CALLSTATE, "bad call state")\
106131826Sharti   DEF(ATMERR_BAD_EPSTATE,	-29-UNIAPI_ERROR_BAD_EPSTATE, "bad party state")\
107131826Sharti   DEF(ATMERR_BAD_UNIARG,	-29-UNIAPI_ERROR_BAD_ARG, "bad uni argument")\
108131826Sharti   DEF(ATMERR_BAD_CALL,		-29-UNIAPI_ERROR_BAD_CALL, "unknown call")\
109131826Sharti   DEF(ATMERR_BAD_PARTY,	-29-UNIAPI_ERROR_BAD_PARTY, "unknown party")\
110131826Sharti   DEF(ATMERR_BAD_CTYPE,	-29-UNIAPI_ERROR_BAD_CTYPE, "wrong call type")\
111131826Sharti   DEF(ATMERR_BAD_IE,		-29-UNIAPI_ERROR_BAD_IE, "bad information element")\
112131826Sharti   DEF(ATMERR_EPREF_INUSE,	-29-UNIAPI_ERROR_EPREF_INUSE, "endpoint reference in use")\
113131826Sharti   DEF(ATMERR_MISSING_IE,	-29-UNIAPI_ERROR_MISSING_IE, "missing information element")\
114131826Sharti   DEF(ATMERR_ENCODING,		-29-UNIAPI_ERROR_ENCODING, "encoding error")\
115131826Sharti   DEF(ATMERR_NOMEM,		-29-UNIAPI_ERROR_NOMEM, "no memory")\
116131826Sharti   DEF(ATMERR_UNIBUSY,		-29-UNIAPI_ERROR_BUSY, "uni process busy")
117131826Sharti
118131826Sharti#define ATM_MKUNIERR(E)	(-29 - (E))
119131826Sharti
120131826Shartienum atm_error {
121131826Sharti#define DEF(NAME,VAL,STR)	NAME = (VAL),
122131826ShartiATM_DEFINE_ERRORS
123131826Sharti#undef DEF
124131826Sharti};
125131826Sharti
126131826Shartienum atm_attribute {
127131826Sharti	ATM_ATTR_NONE = 0,
128131826Sharti	ATM_ATTR_BLLI_SELECTOR,
129131826Sharti	ATM_ATTR_BLLI,
130131826Sharti	ATM_ATTR_BEARER,
131131826Sharti	ATM_ATTR_TRAFFIC,
132131826Sharti	ATM_ATTR_QOS,
133131826Sharti	ATM_ATTR_EXQOS,
134131826Sharti	ATM_ATTR_CALLED,
135131826Sharti	ATM_ATTR_CALLEDSUB,
136131826Sharti	ATM_ATTR_CALLING,
137131826Sharti	ATM_ATTR_CALLINGSUB,
138131826Sharti	ATM_ATTR_AAL,
139131826Sharti	ATM_ATTR_EPREF,
140131826Sharti	ATM_ATTR_CONNED,
141131826Sharti	ATM_ATTR_CONNEDSUB,
142131826Sharti	ATM_ATTR_EETD,
143131826Sharti	ATM_ATTR_ABRSETUP,
144131826Sharti	ATM_ATTR_ABRADD,
145131826Sharti	ATM_ATTR_CONNID,
146131826Sharti	ATM_ATTR_MDCR,
147131826Sharti};
148131826Sharti
149131826Shartistruct atm_resp {
150131826Sharti	int32_t		resp;
151131826Sharti	uint32_t	data;		/* type of attached data */
152131826Sharti};
153131826Shartienum {
154131826Sharti	ATMRESP_NONE,			/* no data */
155131826Sharti	ATMRESP_ATTRS,			/* attribute(s) */
156131826Sharti	ATMRESP_PORTS,			/* port info */
157131826Sharti	ATMRESP_STATE,			/* endpoint state */
158131826Sharti	ATMRESP_EXSTAT,			/* extended status */
159131826Sharti};
160131826Sharti
161131826Shartistruct atm_abort_connection {
162131826Sharti	struct uni_ie_cause cause;
163131826Sharti};
164131826Sharti
165131826Shartistruct atm_query_connection_attributes {
166131826Sharti	uint32_t	attr;
167131826Sharti};
168131826Shartistruct atm_set_connection_attributes {
169131826Sharti	uint32_t	attr;
170131826Sharti};
171131826Shartistruct atm_query_connection_attributes_x {
172131826Sharti	uint32_t	count;
173131826Sharti#if defined(__GNUC__) && __GNUC__ < 3
174131826Sharti	uint32_t	attr[0];
175131826Sharti#else
176131826Sharti	uint32_t	attr[];
177131826Sharti#endif
178131826Sharti};
179131826Shartistruct atm_set_connection_attributes_x {
180131826Sharti	uint32_t	count;
181131826Sharti#if defined(__GNUC__) && __GNUC__ < 3
182131826Sharti	uint32_t	attr[0];
183131826Sharti#else
184131826Sharti	uint32_t	attr[];
185131826Sharti#endif
186131826Sharti};
187131826Shartistruct atm_prepare_incoming_call {
188131826Sharti	struct uni_sap	sap;
189131826Sharti	uint32_t	queue_size;
190131826Sharti};
191131826Shartistruct atm_connect_outgoing_call {
192131826Sharti	struct uni_ie_called	called;
193131826Sharti};
194131826Shartistruct atm_call_release {
195131826Sharti	struct uni_ie_cause	cause[2];
196131826Sharti};
197131826Shartistruct atm_p2p_call_active {
198131826Sharti	struct uni_ie_connid	connid;
199131826Sharti};
200131826Shartistruct atm_p2mp_call_active {
201131826Sharti	struct uni_ie_connid	connid;
202131826Sharti};
203131826Shartistruct atm_accept_incoming_call {
204131826Sharti	char	newep[ATM_EPNAMSIZ];
205131826Sharti};
206131826Shartistruct atm_reject_incoming_call {
207131826Sharti	struct uni_ie_cause	cause;
208131826Sharti};
209131826Shartistruct atm_add_party {
210131826Sharti	uint16_t		leaf_ident;
211131826Sharti	struct uni_ie_called	called;
212131826Sharti};
213131826Shartistruct atm_add_party_success {
214131826Sharti	uint16_t		leaf_ident;
215131826Sharti};
216131826Shartistruct atm_add_party_reject {
217131826Sharti	uint16_t		leaf_ident;
218131826Sharti	struct uni_ie_cause	cause;
219131826Sharti};
220131826Shartistruct atm_drop_party {
221131826Sharti	uint16_t		leaf_ident;
222131826Sharti	struct uni_ie_cause	cause;
223131826Sharti};
224131826Sharti
225131826Sharti/*
226131826Sharti * Get local port info. If port is 0, information on all ports is returned,
227131826Sharti * otherwise only on the named port.
228131826Sharti * The response consists of a header with two counters, a list of ports
229131826Sharti * (struct atm_port_info) and a list of addresses (struct uni_addr).
230131826Sharti * The port to which an address belongs is implicit in the num_addrs field
231131826Sharti * of the port.
232131826Sharti */
233131826Shartistruct atm_get_local_port_info {
234131826Sharti	uint32_t	port;
235131826Sharti};
236131826Sharti
237131826Shartistruct atm_port_list {
238131826Sharti	uint32_t	num_ports;	/* number of ports */
239131826Sharti	uint32_t	num_addrs;	/* total number of addresses */
240131826Sharti};
241131826Sharti
242131826Shartistruct atm_port_info {
243131826Sharti	uint32_t	port;
244131826Sharti	uint32_t	pcr;
245131826Sharti	uint32_t	max_vpi_bits;
246131826Sharti	uint32_t	max_vci_bits;
247131826Sharti	uint32_t	max_svpc_vpi;
248131826Sharti	uint32_t	max_svcc_vpi;
249131826Sharti	uint32_t	min_svcc_vci;
250131826Sharti	u_char		esi[6];
251131826Sharti	uint32_t	num_addrs;	/* number of addresses on this port */
252131826Sharti};
253131826Sharti
254131826Sharti/*
255131826Sharti * Endpoint state info
256131826Sharti */
257131826Shartistruct atm_epstate {
258131826Sharti	char	name[ATM_EPNAMSIZ];
259131826Sharti	uint8_t	state;
260131826Sharti};
261131826Sharti
262131826Sharti/*
263131826Sharti * Extended status information.
264131826Sharti */
265131826Shartistruct atm_exstatus {
266131826Sharti	uint32_t	neps;		/* endpoints */
267131826Sharti	uint32_t	nports;		/* ports */
268131826Sharti	uint32_t	nconns;		/* connections */
269131826Sharti	uint32_t	nparties;	/* number of parties */
270131826Sharti};
271131826Shartistruct atm_exstatus_ep {
272131826Sharti	char		name[ATM_EPNAMSIZ];
273131826Sharti	uint8_t		state;		/* Ux */
274131826Sharti};
275131826Shartistruct atm_exstatus_port {
276131826Sharti	uint32_t	portno;
277131826Sharti	uint8_t		state;
278131826Sharti};
279131826Shartistruct atm_exstatus_conn {
280131826Sharti	uint32_t	id;
281131826Sharti	uint32_t	cref;		/* (flag << 23) | cref */
282131826Sharti	uint32_t	port;
283131826Sharti	char		ep[ATM_EPNAMSIZ];	/* \0 - none */
284131826Sharti	uint8_t		state;		/* Cx */
285131826Sharti};
286131826Shartistruct atm_exstatus_party {
287131826Sharti	uint32_t	connid;
288131826Sharti	uint16_t	epref;
289131826Sharti	uint8_t		state;		/* Px */
290131826Sharti};
291131826Sharti#endif
292