FreeBSD-5.3/sys/netatm/spans/spans_xdr.x

%/*
% *
% * ===================================
% * 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.
% *
% *	@(#) $FreeBSD: src/sys/netatm/spans/spans_xdr.x,v 1.4 2002/09/17 08:57:52 peter Exp $
% *
% */
%
/*
 * SPANS Signalling Manager
 * ---------------------------
 *
 * SPANS Protocol Message XDR Specification
 *
 */

#ifdef RPC_HDR
%/*
% * SPANS Signalling Manager
% * ---------------------------
% *
% * SPANS Protocol Message Definitions
% *
% */
%
%#ifndef _SPANS_SPANS_XDR_H
%#define _SPANS_SPANS_XDR_H
%
%#include <netatm/spans/spans_kxdr.h>
%
#endif

#ifdef RPC_XDR
%/*
% * SPANS Signalling Manager
% * ---------------------------
% *
% * SPANS Protocol Message XDR Routines
% *
% */
%
%#ifndef lint
%static const char RCSid[] = "@(#) $FreeBSD: src/sys/netatm/spans/spans_xdr.x,v 1.4 2002/09/17 08:57:52 peter Exp $";
%#endif
%
#endif


/*
 * SPANS Signalling
 */
const	SPANS_SIG_VPI = 0;		/* Signalling VPI */
const	SPANS_SIG_VCI = 15;		/* Signalling VCI */
const	SPANS_CLS_VPI = 0;		/* Connectionless VPI */
const	SPANS_CLS_VCI = 14;		/* Connectionless VCI */

const	SPANS_MIN_VCI = 32;		/* Lowest VCI to allocate */
const	SPANS_MAX_VCI = 1023;		/* Highest VCI to allocate */
const	SPANS_VPI = 0;			/* Only VPI to allocate */

/*
 * SPANS Protocol Version
 *
 *	Major_version * 256 + Minor_version
 */
typedef u_int	spans_version;

const	SPANS_VERS_1_0 = 0x0100;	/* Version 1.0 */


/*
 * VPI/VCI
 *
 * Format:
 *	4 bits - unused
 *	12 bits - VPI value
 *	16 bits - VCI value
 */
typedef	u_int	spans_vpvc;		/* VPI/VCI value */

#ifdef RPC_HDR
%#define	SPANS_EXTRACT_VPI(p)	(((p) >> 16) & 0x0FFF)
%#define	SPANS_EXTRACT_VCI(p)	((p) & 0x0FFFF)
%#define	SPANS_PACK_VPIVCI(p, c)	((((p) & 0x0FFF) << 16) | ((c) & 0x0FFFF))
#endif


/*
 * VPI/VCI Preference
 */
struct spans_vpvc_pref {
	bool		vpf_valid;	/* VPI/VCI values valid */
	spans_vpvc	vpf_vpvc;	/* VPI/VCI value */
};


/*
 * SPANS ATM Address
 */
struct spans_addr {
	opaque		addr[8];	/* SPANS ATM address */
};


/*
 * Service Access Point (SAP)
 */
typedef u_int	spans_sap;		/* SAP value */

const	SPANS_SAP_IP = 1025;		/* TCP/IP */
const	SPANS_SAP_EPHEMERAL = 2048;	/* Start of ephemeral SAPs*/


/*
 * ATM Connection Identifier
 */
struct spans_atm_conn {
	spans_addr	con_dst;	/* Destination ATM address */
	spans_addr	con_src;	/* Source ATM address */
	spans_sap	con_dsap;	/* Destination SAP */
	spans_sap	con_ssap;	/* Source SAP */
};


/*
 * Connection Resources
 */
struct spans_resrc {
	u_int		rsc_peak;	/* Peak bandwidth (Kbps) */
	u_int		rsc_mean;	/* Mean bandwidth (Kbps) */
	u_int		rsc_burst;	/* Mean burst (Kb) */
};


/*
 * ATM Adaptation Layer (AAL) Types
 */
enum spans_aal {
	SPANS_AAL0 = 0,			/* NULL AAL */
	SPANS_AAL1 = 1,			/* AAL 1 */
	SPANS_AAL2 = 2,			/* AAL 2 */
	SPANS_AAL3 = 3,			/* AAL 3 */
	SPANS_AAL4 = 4,			/* AAL 4 */
	SPANS_AAL5 = 5			/* AAL 5 */
};


/*
 * Result Codes
 */
enum spans_result {
	SPANS_OK = 0,			/* Success */
	SPANS_FAIL = 1,			/* Failure */
	SPANS_NOVPVC = 2,		/* No VP/VC */
	SPANS_NORSC = 3,		/* No resources */
	SPANS_BADDEST = 4		/* Bad destination */
};


/*
 * Message Types
 */
enum spans_msgtype {
	/*
	 * SPANS UNI message types
	 */
	SPANS_STAT_REQ = 0,		/* Status request */
	SPANS_STAT_IND = 1,		/* Status indication */
	SPANS_STAT_RSP = 2,		/* Status response */
	SPANS_OPEN_REQ = 3,		/* Open request */
	SPANS_OPEN_IND = 4,		/* Open indication */
	SPANS_OPEN_RSP = 5,		/* Open response */
	SPANS_OPEN_CNF = 6,		/* Open confirmation */
	SPANS_CLOSE_REQ = 7,		/* Close request */
	SPANS_CLOSE_IND = 8,		/* Close indication */
	SPANS_CLOSE_RSP = 9,		/* Close response */
	SPANS_CLOSE_CNF = 10,		/* Close confirmation */
	SPANS_RCLOSE_REQ = 11,		/* Reverse close request */
	SPANS_RCLOSE_IND = 12,		/* Reverse close indication */
	SPANS_RCLOSE_RSP = 13,		/* Reverse close response */
	SPANS_RCLOSE_CNF = 14,		/* Reverse close confirmation */
	SPANS_MULTI_REQ = 15,		/* Multicast request */
	SPANS_MULTI_IND = 16,		/* Multicast indication */
	SPANS_MULTI_RSP = 17,		/* Multicast response */
	SPANS_MULTI_CNF = 18,		/* Multicast confirmation */
	SPANS_ADD_REQ = 19,		/* Add request */
	SPANS_ADD_IND = 20,		/* Add indication */
	SPANS_ADD_RSP = 21,		/* Add response */
	SPANS_ADD_CNF = 22,		/* Add confirmation */
	SPANS_JOIN_REQ = 23,		/* Join request */
	SPANS_JOIN_CNF = 24,		/* Join confirmation */
	SPANS_LEAVE_REQ = 25,		/* Leave request */
	SPANS_LEAVE_CNF = 26,		/* Leave confirmation */

	/*
	 * SPANS NNI message types
	 */
	SPANS_NSAP_IND = 99,		/* NSAP routing message */
	SPANS_MAP_IND = 100,		/* Topology message */
	SPANS_SETUP_REQ = 101,		/* Setup request */
	SPANS_SETUP_RSP = 102,		/* Setup response */
	SPANS_CHANGE_REQ = 103,		/* Change request */
	SPANS_CHANGE_RSP = 104,		/* Change response */
	SPANS_RELOC_REQ = 105,		/* Relocation request */
	SPANS_RELOC_RSP = 106,		/* Relocation response */
	SPANS_HELLO_IND = 107,		/* Hello message */

	SPANS_VCIR_IND = 108,		/* VCI range indication */
	SPANS_QUERY_REQ = 110,		/* Conn. state query request */
	SPANS_QUERY_RSP = 111		/* Conn. state query response */
};


/*
 * Query types
 */
enum spans_query_type {
	SPANS_QUERY_NORMAL,		/* Normal--respond */
	SPANS_QUERY_DEBUG,		/* Debug--respond with state */
	SPANS_QUERY_END_TO_END		/* Not implemented */
};


/*
 * SPANS connection states
 */
enum spans_conn_state {
	SPANS_CONN_OPEN,		/* Connection is open */
	SPANS_CONN_OPEN_PEND,		/* Connection is being opened */
	SPANS_CONN_CLOSE_PEND,		/* Connection is being closed */
	SPANS_CONN_CLOSED		/* Connection does not exist */
};


/*
 * Message Parameters
 *
 * There is a separate message parameter structure for each 
 * message type.
 */
struct spans_parm_stat_req {
	u_long		streq_es_epoch;	/* End system epoch */
};

struct spans_parm_stat_ind {
	u_long		stind_sw_epoch;	/* Switch epoch */
	spans_addr	stind_es_addr;	/* End system ATM address */
	spans_addr	stind_sw_addr;	/* Switch ATM address */
};

struct spans_parm_stat_rsp {
	u_long		strsp_es_epoch;	/* End system epoch */
	spans_addr	strsp_es_addr;	/* End system ATM address */
};

struct spans_parm_open_req {
	spans_atm_conn	opreq_conn;	/* Connection identity */
	spans_aal	opreq_aal;	/* AAL type */
	spans_resrc	opreq_desrsrc;	/* Desired resources */
	spans_resrc	opreq_minrsrc;	/* Minimum resources */
	spans_vpvc_pref	opreq_vpvc;	/* VPI/VCI preference */
};

struct spans_parm_open_ind {
	spans_atm_conn	opind_conn;	/* Connection identity */
	spans_aal	opind_aal;	/* AAL type */
	spans_resrc	opind_desrsrc;	/* Desired resources */
	spans_resrc	opind_minrsrc;	/* Minimum resources */
	spans_vpvc_pref	opind_vpvc;	/* VPI/VCI preference */
};

struct spans_parm_open_rsp {
	spans_atm_conn	oprsp_conn;	/* Connection identity */
	spans_result	oprsp_result;	/* Open result */
	spans_resrc	oprsp_rsrc;	/* Allocated resources */
	spans_vpvc	oprsp_vpvc;	/* Allocated VPI/VCI */
};

struct spans_parm_open_cnf {
	spans_atm_conn	opcnf_conn;	/* Connection identity */
	spans_result	opcnf_result;	/* Open result */
	spans_resrc	opcnf_rsrc;	/* Allocated resources */
	spans_vpvc	opcnf_vpvc;	/* Allocated VPI/VCI */
};

struct spans_parm_close_req {
	spans_atm_conn	clreq_conn;	/* Connection identity */
};

struct spans_parm_close_ind {
	spans_atm_conn	clind_conn;	/* Connection identity */
};

struct spans_parm_close_rsp {
	spans_atm_conn	clrsp_conn;	/* Connection identity */
	spans_result	clrsp_result;	/* Close result */
};

struct spans_parm_close_cnf {
	spans_atm_conn	clcnf_conn;	/* Connection identity */
	spans_result	clcnf_result;	/* Close result */
};

struct spans_parm_rclose_req {
	spans_atm_conn	rcreq_conn;	/* Connection identity */
};

struct spans_parm_rclose_ind {
	spans_atm_conn	rcind_conn;	/* Connection identity */
};

struct spans_parm_rclose_rsp {
	spans_atm_conn	rcrsp_conn;	/* Connection identity */
	spans_result	rcrsp_result;	/* Rclose result */
};

struct spans_parm_rclose_cnf {
	spans_atm_conn	rccnf_conn;	/* Connection identity */
	spans_result	rccnf_result;	/* Rclose result */
};

struct spans_parm_multi_req {
	spans_atm_conn	mureq_conn;	/* Connection identity */
	spans_aal	mureq_aal;	/* AAL type */
	spans_resrc	mureq_desrsrc;	/* Desired resources */
	spans_resrc	mureq_minrsrc;	/* Minimum resources */
	spans_vpvc	mureq_vpvc;	/* VPI/VCI preference */
};

struct spans_parm_multi_ind {
	spans_atm_conn	muind_conn;	/* Connection identity */
	spans_aal	muind_aal;	/* AAL type */
	spans_resrc	muind_desrsrc;	/* Desired resources */
	spans_resrc	muind_minrsrc;	/* Minimum resources */
	spans_vpvc	muind_vpvc;	/* VPI/VCI preference */
};

struct spans_parm_multi_rsp {
	spans_atm_conn	mursp_conn;	/* Connection identity */
	spans_result	mursp_result;	/* Multi result */
	spans_resrc	mursp_rsrc;	/* Allocated resources */
	spans_vpvc	mursp_vpvc;	/* Allocated VPI/VCI */
};

struct spans_parm_multi_cnf {
	spans_atm_conn	mucnf_conn;	/* Connection identity */
	spans_result	mucnf_result;	/* Multi result */
	spans_resrc	mucnf_rsrc;	/* Allocated resources */
	spans_vpvc	mucnf_vpvc;	/* Allocated VPI/VCI */
};

struct spans_parm_add_req {
	spans_atm_conn	adreq_desconn;	/* Desired connection identity */
	spans_atm_conn	adreq_xstconn;	/* Existing connection identity */
};

struct spans_parm_add_ind {
	spans_atm_conn	adind_desconn;	/* Desired connection identity */
	spans_atm_conn	adind_xstconn;	/* Existing connection identity */
};

struct spans_parm_add_rsp {
	spans_atm_conn	adrsp_conn;	/* Connection identity */
	spans_result	adrsp_result;	/* Add result */
	spans_resrc	adrsp_rsrc;	/* Allocated resources */
};

struct spans_parm_add_cnf {
	spans_atm_conn	adcnf_conn;	/* Connection identity */
	spans_result	adcnf_result;	/* Add result */
	spans_resrc	adcnf_rsrc;	/* Allocated resources */
};

struct spans_parm_join_req {
	spans_addr	jnreq_addr;	/* Group address */
};

struct spans_parm_join_cnf {
	spans_addr	jncnf_addr;	/* Group address */
	spans_result	jncnf_result;	/* Join result */
};

struct spans_parm_leave_req {
	spans_addr	lvreq_addr;	/* Group address */
};

struct spans_parm_leave_cnf {
	spans_addr	lvcnf_addr;	/* Group address */
	spans_result	lvcnf_result;	/* Leave result */
};

struct spans_parm_vcir_ind {
	u_int		vrind_min;	/* Lowest VCI available */
	u_int		vrind_max;	/* Highest VCI available */
};

struct spans_parm_query_req {
	spans_atm_conn	qyreq_conn;	/* Conn. being queried */
	spans_query_type	qyreq_type;	/* Query type */
};

struct spans_parm_query_rsp {
	spans_atm_conn	qyrsp_conn;	/* Conn. being queried */
	spans_query_type	qyrsp_type;	/* Query type */
	spans_conn_state	qyrsp_state;	/* Conn. state */
	u_int		qyrsp_data;	/* Extra state data */
};


/*
 * Message Body
 */
union spans_msgbody switch (spans_msgtype mb_type) {

case SPANS_STAT_REQ:		spans_parm_stat_req	mb_stat_req;
case SPANS_STAT_IND:		spans_parm_stat_ind	mb_stat_ind;
case SPANS_STAT_RSP:		spans_parm_stat_rsp	mb_stat_rsp;
case SPANS_OPEN_REQ:		spans_parm_open_req	mb_open_req;
case SPANS_OPEN_IND:		spans_parm_open_ind	mb_open_ind;
case SPANS_OPEN_RSP:		spans_parm_open_rsp	mb_open_rsp;
case SPANS_OPEN_CNF:		spans_parm_open_cnf	mb_open_cnf;
case SPANS_CLOSE_REQ:		spans_parm_close_req	mb_close_req;
case SPANS_CLOSE_IND:		spans_parm_close_ind	mb_close_ind;
case SPANS_CLOSE_RSP:		spans_parm_close_rsp	mb_close_rsp;
case SPANS_CLOSE_CNF:		spans_parm_close_cnf	mb_close_cnf;
case SPANS_RCLOSE_REQ:		spans_parm_rclose_req	mb_rclose_req;
case SPANS_RCLOSE_IND:		spans_parm_rclose_ind	mb_rclose_ind;
case SPANS_RCLOSE_RSP:		spans_parm_rclose_rsp	mb_rclose_rsp;
case SPANS_RCLOSE_CNF:		spans_parm_rclose_cnf	mb_rclose_cnf;
case SPANS_MULTI_REQ:		spans_parm_multi_req	mb_multi_req;
case SPANS_MULTI_IND:		spans_parm_multi_ind	mb_multi_ind;
case SPANS_MULTI_RSP:		spans_parm_multi_rsp	mb_multi_rsp;
case SPANS_MULTI_CNF:		spans_parm_multi_cnf	mb_multi_cnf;
case SPANS_ADD_REQ:		spans_parm_add_req	mb_add_req;
case SPANS_ADD_IND:		spans_parm_add_ind	mb_add_ind;
case SPANS_ADD_RSP:		spans_parm_add_rsp	mb_add_rsp;
case SPANS_ADD_CNF:		spans_parm_add_cnf	mb_add_cnf;
case SPANS_JOIN_REQ:		spans_parm_join_req	mb_join_req;
case SPANS_JOIN_CNF:		spans_parm_join_cnf	mb_join_cnf;
case SPANS_LEAVE_REQ:		spans_parm_leave_req	mb_leave_req;
case SPANS_LEAVE_CNF:		spans_parm_leave_cnf	mb_leave_cnf;
case SPANS_VCIR_IND:		spans_parm_vcir_ind	mb_vcir_ind;
case SPANS_QUERY_REQ:		spans_parm_query_req	mb_query_req;
case SPANS_QUERY_RSP:		spans_parm_query_rsp	mb_query_rsp;
};


/*
 * Message Format
 */
struct spans_msg {
	spans_version		sm_vers;
	spans_msgbody		sm_body;
};

#ifdef RPC_HDR
%#define	sm_type		sm_body.mb_type
%#define	sm_stat_req	sm_body.spans_msgbody_u.mb_stat_req
%#define	sm_stat_ind	sm_body.spans_msgbody_u.mb_stat_ind
%#define	sm_stat_rsp	sm_body.spans_msgbody_u.mb_stat_rsp
%#define	sm_open_req	sm_body.spans_msgbody_u.mb_open_req
%#define	sm_open_ind	sm_body.spans_msgbody_u.mb_open_ind
%#define	sm_open_rsp	sm_body.spans_msgbody_u.mb_open_rsp
%#define	sm_open_cnf	sm_body.spans_msgbody_u.mb_open_cnf
%#define	sm_close_req	sm_body.spans_msgbody_u.mb_close_req
%#define	sm_close_ind	sm_body.spans_msgbody_u.mb_close_ind
%#define	sm_close_rsp	sm_body.spans_msgbody_u.mb_close_rsp
%#define	sm_close_cnf	sm_body.spans_msgbody_u.mb_close_cnf
%#define	sm_rclose_req	sm_body.spans_msgbody_u.mb_rclose_req
%#define	sm_rclose_ind	sm_body.spans_msgbody_u.mb_rclose_ind
%#define	sm_rclose_rsp	sm_body.spans_msgbody_u.mb_rclose_rsp
%#define	sm_rclose_cnf	sm_body.spans_msgbody_u.mb_rclose_cnf
%#define	sm_multi_req	sm_body.spans_msgbody_u.mb_multi_req
%#define	sm_multi_ind	sm_body.spans_msgbody_u.mb_multi_ind
%#define	sm_multi_rsp	sm_body.spans_msgbody_u.mb_multi_rsp
%#define	sm_multi_cnf	sm_body.spans_msgbody_u.mb_multi_cnf
%#define	sm_add_req	sm_body.spans_msgbody_u.mb_add_req
%#define	sm_add_ind	sm_body.spans_msgbody_u.mb_add_ind
%#define	sm_add_rsp	sm_body.spans_msgbody_u.mb_add_rsp
%#define	sm_add_cnf	sm_body.spans_msgbody_u.mb_add_cnf
%#define	sm_join_req	sm_body.spans_msgbody_u.mb_join_req
%#define	sm_join_cnf	sm_body.spans_msgbody_u.mb_join_cnf
%#define	sm_leave_req	sm_body.spans_msgbody_u.mb_leave_req
%#define	sm_leave_cnf	sm_body.spans_msgbody_u.mb_leave_cnf
%#define	sm_vcir_ind	sm_body.spans_msgbody_u.mb_vcir_ind
%#define	sm_query_req	sm_body.spans_msgbody_u.mb_query_req
%#define	sm_query_rsp	sm_body.spans_msgbody_u.mb_query_rsp
#endif

#ifdef RPC_HDR
%#endif	/* _SPANS_SPANS_XDR_H */
#endif