diff options
Diffstat (limited to 'sys/netatm/atm_cm.h')
-rw-r--r-- | sys/netatm/atm_cm.h | 348 |
1 files changed, 348 insertions, 0 deletions
diff --git a/sys/netatm/atm_cm.h b/sys/netatm/atm_cm.h new file mode 100644 index 0000000..9e000ab --- /dev/null +++ b/sys/netatm/atm_cm.h @@ -0,0 +1,348 @@ +/* + * + * =================================== + * HARP | Host ATM Research Platform + * =================================== + * + * + * This Host ATM Research Platform ("HARP") file (the "Software") is + * made available by Network Computing Services, Inc. ("NetworkCS") + * "AS IS". NetworkCS does not provide maintenance, improvements or + * support of any kind. + * + * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED, + * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE + * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE. + * In no event shall NetworkCS be responsible for any damages, including + * but not limited to consequential damages, arising from or relating to + * any use of the Software or related support. + * + * Copyright 1994-1998 Network Computing Services, Inc. + * + * Copies of this Software may be made, however, the above copyright + * notice must be reproduced on all copies. + * + * @(#) $Id: atm_cm.h,v 1.3 1998/03/24 20:41:40 mks Exp $ + * + */ + +/* + * Core ATM Services + * ----------------- + * + * ATM Connection Management definitions + * + */ + +#ifndef _NETATM_ATM_CM_H +#define _NETATM_ATM_CM_H + +/* + * Forward declaration + */ +struct atm_connection; +struct atm_attributes; + + +#ifdef ATM_KERNEL +/* + * Structure used to define a kernel ATM endpoint service module and its + * associated entry points. An endpoint service is defined as a kernel + * entity which will serve as the endpoint of an ATM connection, i.e. it is + * responsible for issuing/receiving requests to/from the connection manager. + */ +struct atm_endpoint { + struct atm_endpoint *ep_next; /* Next in registry list */ + u_int ep_id; /* Endpoint ID (see below) */ + +/* Exported functions: Miscellaneous */ + int (*ep_ioctl) /* Ioctl */ + __P((int, caddr_t, caddr_t)); + caddr_t (*ep_getname) /* Get application/owner name */ + __P((void *)); + +/* Exported functions: Connection Manager Control API */ + void (*ep_connected) /* Call connected */ + __P((void *)); + void (*ep_cleared) /* Call cleared */ + __P((void *, struct t_atm_cause *)); + int (*ep_incoming) /* Incoming call */ + __P((void *, struct atm_connection *, + struct atm_attributes *, void **)); + int (*ep_addparty) /* Add Party notification */ + __P((void *, int, int)); + int (*ep_dropparty) /* Drop Party notification */ + __P((void *, int, int)); + +/* Exported functions: Connection Manager Data API: CPCS */ + void (*ep_cpcs_ctl) /* Control operation */ + __P((int, void *, void *)); + void (*ep_cpcs_data) /* Received data */ + __P((void *, KBuffer *)); + +/* Exported functions: Connection Manager Data API: SAAL */ + void (*ep_saal_ctl) /* Control operation */ + __P((int, void *, void *)); + void (*ep_saal_data) /* Received data */ + __P((void *, KBuffer *)); + +/* Exported functions: Connection Manager Data API: SSCOP */ + void (*ep_sscop_ctl) /* Control operation */ + __P((int, void *, void *, void *)); + void (*ep_sscop_data) /* Received data */ + __P((void *, KBuffer *, u_int)); +}; +typedef struct atm_endpoint Atm_endpoint; +#endif /* ATM_KERNEL */ + +/* + * Endpoint IDs + */ +#define ENDPT_UNKNOWN 0 /* Unknown */ +#define ENDPT_IP 1 /* IP over ATM */ +#define ENDPT_ATMARP 2 /* ATMARP */ +#define ENDPT_SPANS_SIG 3 /* SPANS Signalling */ +#define ENDPT_SPANS_CLS 4 /* SPANS CLS */ +#define ENDPT_UNI_SIG 5 /* UNI Signalling */ +#define ENDPT_SOCK_AAL5 6 /* Socket - AAL5 */ +#define ENDPT_SOCK_SSCOP 7 /* Socket - SSCOP */ +#define ENDPT_MAX 7 + + +/* + * ATM Connection Attributes + * + * Note: Attribute tag values are the same as the SVE_tag values. + * Unless otherwise specified, attribute field values are the same + * as the corresponding socket option values. + * The above values are all defined in netatm/atm.h. + */ + +/* AAL Attributes */ +struct t_atm_aal4 { + int32_t forward_max_SDU_size; + int32_t backward_max_SDU_size; + int32_t SSCS_type; + int32_t mid_low; + int32_t mid_high; +}; + +struct attr_aal { + int tag; /* Attribute tag */ + Aal_t type; /* AAL type (discriminator) */ + union { + struct t_atm_aal4 aal4; + struct t_atm_aal5 aal5; + } v; /* Attribute value */ +}; + +/* Traffic Descriptor Attributes */ +struct attr_traffic { + int tag; /* Attribute tag */ + struct t_atm_traffic v; /* Attribute value */ +}; + +/* Broadband Bearer Attributes */ +struct attr_bearer { + int tag; /* Attribute tag */ + struct t_atm_bearer v; /* Attribute value */ +}; + +/* Broadband High Layer Information Attributes */ +struct attr_bhli { + int tag; /* Attribute tag */ + struct t_atm_bhli v; /* Attribute value */ +}; + +/* Broadband Low Layer Information Attributes */ +struct attr_blli { + int tag_l2; /* Layer 2 attribute tag */ + int tag_l3; /* Layer 3 attribute tag */ + struct t_atm_blli v; /* Attribute value */ +}; + +/* Logical Link Control Attributes (multiplexing use only, not signalled) */ +struct attr_llc { + int tag; /* Attribute tag */ + struct t_atm_llc v; /* Attribute value */ +}; + +/* Called Party Attributes */ +struct attr_called { + int tag; /* Attribute tag */ + Atm_addr addr; /* Called party address */ + Atm_addr subaddr; /* Called party subaddress */ +}; + +/* Calling Party Attributes */ +struct attr_calling { + int tag; /* Attribute tag */ + Atm_addr addr; /* Calling party address */ + Atm_addr subaddr; /* Calling party subaddress */ + struct t_atm_caller_id cid; /* Caller ID */ +}; + +/* Quality of Service Attributes */ +struct attr_qos { + int tag; /* Attribute tag */ + struct t_atm_qos v; /* Attribute value */ +}; + +/* Transit Network Attributes */ +struct attr_transit { + int tag; /* Attribute tag */ + struct t_atm_transit v; /* Attribute value */ +}; + +/* Cause Attributes */ +struct attr_cause { + int tag; /* Attribute tag */ + struct t_atm_cause v; /* Attribute value */ +}; + + +struct atm_attributes { + struct atm_nif *nif; /* Network interface */ + u_int api; /* Connect Mgr Data API (see below) */ + int api_init;/* API initialization parameter */ + u_short headin; /* Input buffer headroom */ + u_short headout;/* Output buffer headroom */ + struct attr_aal aal; /* AAL attributes */ + struct attr_traffic traffic;/* Traffic descriptor attributes */ + struct attr_bearer bearer; /* Broadband bearer attributes */ + struct attr_bhli bhli; /* Broadband high layer attributes */ + struct attr_blli blli; /* Broadband low layer attributes */ + struct attr_llc llc; /* Logical link control attributes */ + struct attr_called called; /* Called party attributes */ + struct attr_calling calling;/* Calling party attributes */ + struct attr_qos qos; /* Quality of service attributes */ + struct attr_transit transit;/* Transit network attributes */ + struct attr_cause cause; /* Cause attributes */ +}; +typedef struct atm_attributes Atm_attributes; + +/* + * Connection Manager Data APIs + */ +#define CMAPI_CPCS 0 /* AAL CPCS */ +#define CMAPI_SAAL 1 /* Signalling AAL */ +#define CMAPI_SSCOP 2 /* Reliable data (SSCOP) */ + + +#ifdef ATM_KERNEL +/* + * ATM Connection Instance + * + * There will be one connection block for each endpoint <-> Connection Manager + * API instance. Note that with connection multiplexors (e.g. LLC), there + * may be multiple connections per VCC. + */ +struct atm_connection { + struct atm_connection *co_next; /* Multiplexor/listen queue link */ + struct atm_connection *co_mxh; /* Connection multiplexor head */ + u_char co_flags; /* Connection flags (see below) */ + u_char co_state; /* User <-> CM state (see below) */ + Encaps_t co_mpx; /* Multiplexor type */ + void *co_toku; /* Endpoint's session token */ + Atm_endpoint *co_endpt; /* Endpoint service */ + struct atm_connvc *co_connvc; /* Connection VCC */ + struct attr_llc co_llc; /* Connection LLC header */ + Atm_attributes *co_lattr; /* Listening attributes */ +}; +typedef struct atm_connection Atm_connection; + +/* + * Connection Flags + */ +#define COF_P2P 0x01 /* Point-to-point */ +#define COF_P2MP 0x02 /* Point-to-multipoint */ + +/* + * Endpoint <-> Connection Manager States + */ +#define COS_FREE 0 /* Not allocated */ +#define COS_OUTCONN 1 /* Outgoing connection pending */ +#define COS_LISTEN 2 /* Listening for connection */ +#define COS_INCONN 3 /* Incoming connection pending */ +#define COS_INACCEPT 4 /* Incoming connection accepted */ +#define COS_ACTIVE 5 /* Connection active */ +#define COS_CLEAR 6 /* Connection is clearing */ + + +/* + * ATM Connection VCC Instance + * + * There will be one connection-vcc block for each VCC created by the + * Connection Manager. For multiplexed connections, there may be multiple + * connection blocks associated with each connection-vcc. This block is + * used to control the Connection Manager <-> VCC interface, including the + * interfaces to stack management and the signalling manager. + */ +struct atm_connvc { + Qelem_t cvc_q; /* Queueing links */ + Atm_connection *cvc_conn; /* Connection head */ + struct vccb *cvc_vcc; /* VCC for connection */ + struct sigmgr *cvc_sigmgr; /* VCC signalling manager */ + u_char cvc_flags; /* Connection flags (see below) */ + u_char cvc_state; /* CM - VCC state (see below) */ + void *cvc_tokl; /* Stack lower layer token */ + void (*cvc_lower) /* Stack lower layer handler */ + __P((int, void *, int, int)); + u_short cvc_upcnt; /* Up stack calls in progress */ + u_short cvc_downcnt; /* Down stack calls in progress */ + KBuffer *cvc_rcvq; /* Packet receive queue */ + int cvc_rcvqlen; /* Receive queue length */ + Atm_attributes cvc_attr; /* VCC attributes */ + struct atm_time cvc_time; /* Timer controls */ +}; +typedef struct atm_connvc Atm_connvc; + +/* + * Connection Flags + */ +#define CVCF_ABORTING 0x01 /* VCC abort is pending */ +#define CVCF_INCOMQ 0x02 /* VCC is on incoming queue */ +#define CVCF_CONNQ 0x04 /* VCC is on connection queue */ +#define CVCF_CALLER 0x08 /* We are the call originator */ + +/* + * Connection Manager <-> VCC States + */ +#define CVCS_FREE 0 /* Not allocated */ +#define CVCS_SETUP 1 /* Call setup pending */ +#define CVCS_INIT 2 /* Stack INIT pending */ +#define CVCS_INCOMING 3 /* Incoming call present */ +#define CVCS_ACCEPT 4 /* Incoming call accepted */ +#define CVCS_REJECT 5 /* Incoming call rejected */ +#define CVCS_ACTIVE 6 /* Stack active */ +#define CVCS_RELEASE 7 /* Connection release pending */ +#define CVCS_CLEAR 8 /* Call has been cleared */ +#define CVCS_TERM 9 /* Stack TERM pending */ + + +/* + * Connection VCC variables + */ +#define CVC_RCVQ_MAX 3 /* Max length of receive queue */ + + +/* + * Timer macros + */ +#define CVC_TIMER(s, t) atm_timeout(&(s)->cvc_time, (t), atm_cm_timeout) +#define CVC_CANCEL(s) atm_untimeout(&(s)->cvc_time) + + +/* + * Connection Manager Statistics + */ +struct atm_cm_stat { + u_long cms_llcdrop; /* Packets dropped by llc demux'ing */ + u_long cms_llcid; /* Packets with unknown llc id */ + u_long cms_rcvconn; /* Packets dropped, bad conn state */ + u_long cms_rcvconnvc; /* Packets dropped, bad connvc state */ +}; +#endif /* ATM_KERNEL */ + +#endif /* _NETATM_ATM_CM_H */ |