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