freebsd-dev/sys/netatm/atm_cm.h
Poul-Henning Kamp 1820df7a2d Add new files for HARP3
Host ATM Research Platform (HARP), Network Computing Services, Inc.
This software was developed with the support of the Defense Advanced
Research Projects Agency (DARPA).
1998-09-15 08:23:17 +00:00

349 lines
11 KiB
C

/*
*
* ===================================
* 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 */