/* * * =================================== * 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$ * */ /* * ATM Forum UNI 3.0/3.1 Signalling Manager * ---------------------------------------- * * Protocol control blocks * */ #ifndef _UNISIG_VAR_H #define _UNISIG_VAR_H #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif #ifdef ATM_KERNEL /* * Structure containing state information for each UNI protocol * instance. There will be one instance for each ATM device interface * using the UNI signalling manager. */ struct unisig { struct siginst us_inst; /* Header */ struct atm_time us_time; /* Timer controls */ void (*us_lower) /* Lower command handler */ __P((int, void *, int, int)); Atm_connection *us_conn; /* Signalling connection */ int us_cref; /* Call reference allocation */ u_int us_retry; /* Protocol retry count */ u_short us_headout; /* Headroom on sig ch output */ u_char us_proto; /* Signalling version */ }; #define us_next us_inst.si_next #define us_pif us_inst.si_pif #define us_addr us_inst.si_addr #define us_subaddr us_inst.si_subaddr #define us_vccq us_inst.si_vccq #define us_state us_inst.si_state #define us_ipserv us_inst.si_ipserv #endif /* ATM_KERNEL */ /* * Signalling manager states */ #define UNISIG_NULL 0 #define UNISIG_ADDR_WAIT 1 #define UNISIG_INIT 2 #define UNISIG_ACTIVE 3 #define UNISIG_DETACH 4 /* * Signalling manager events */ #define UNISIG_SIGMGR_TIMEOUT 0 #define UNISIG_SIGMGR_SSCF_EST_IND 1 #define UNISIG_SIGMGR_SSCF_EST_CNF 2 #define UNISIG_SIGMGR_SSCF_RLS_IND 3 #define UNISIG_SIGMGR_SSCF_RLS_CNF 4 #define UNISIG_SIGMGR_SSCF_DATA_IND 5 #define UNISIG_SIGMGR_SSCF_UDATA_IND 6 #define UNISIG_SIGMGR_CALL_CLEARED 7 #define UNISIG_SIGMGR_DETACH 8 #define UNISIG_SIGMGR_ADDR_SET 9 /* * Signalling manager timer values */ #define UNISIG_SSCF_TIMEOUT (3 * ATM_HZ) #ifdef ATM_KERNEL /* * UNI Virtual Channel Connection control block. All information * regarding the state of a UNI-controlled VCC will be recorded here. * There will be one UNI VCC control block for each UNI-controlled * VCC. */ struct unisig_vccb { struct vccb vcp_hdr; /* Generic VCCB */ u_short uv_retry; /* Xmit retry count */ u_int uv_call_ref; /* Q.2931 call reference */ }; #define uv_type vcp_hdr.vc_type #define uv_proto vcp_hdr.vc_proto #define uv_sstate vcp_hdr.vc_sstate #define uv_ustate vcp_hdr.vc_ustate #define uv_pif vcp_hdr.vc_pif #define uv_nif vcp_hdr.vc_nif #define uv_sigelem vcp_hdr.vc_sigelem #define uv_time vcp_hdr.vc_time #define uv_vpi vcp_hdr.vc_vpi #define uv_vci vcp_hdr.vc_vci #define uv_connvc vcp_hdr.vc_connvc #define uv_ipdus vcp_hdr.vc_ipdus #define uv_opdus vcp_hdr.vc_opdus #define uv_ibytes vcp_hdr.vc_ibytes #define uv_obytes vcp_hdr.vc_obytes #define uv_ierrors vcp_hdr.vc_ierrors #define uv_oerrors vcp_hdr.vc_oerrors #define uv_tstamp vcp_hdr.vc_tstamp #endif /* ATM_KERNEL */ /* * UNI VCC protocol states. Taken from The ATM Forum UNI 3.0 (section * 5.2.1.1) */ #define UNI_NULL 0 /* No call exists */ #define UNI_CALL_INITIATED 1 /* Initiating call */ #define UNI_CALL_OUT_PROC 3 /* Outgoing call proceeding */ #define UNI_CALL_DELIVERED 4 /* Not supported */ #define UNI_CALL_PRESENT 6 /* Call coming in */ #define UNI_CALL_RECEIVED 7 /* Not supported */ #define UNI_CONNECT_REQUEST 8 /* Call coming in */ #define UNI_CALL_IN_PROC 9 /* Incoming call proceeding */ #define UNI_ACTIVE 10 /* Call is established */ #define UNI_RELEASE_REQUEST 11 /* Clearing call */ #define UNI_RELEASE_IND 12 /* Network disconnecting */ /* * Additional states required for internal management of VCCs */ #define UNI_SSCF_RECOV 13 /* Signalling chan recovery */ #define UNI_FREE 14 /* Waiting for user to free */ #define UNI_PVC_ACTIVE 15 /* PVC Active */ #define UNI_PVC_ACT_DOWN 16 /* PVC Active - i/f down */ /* * UNI VCC events */ #define UNI_VC_TIMEOUT 0 /* Timer expired */ #define UNI_VC_CALLP_MSG 1 /* CALL PROCEEDING message */ #define UNI_VC_CONNECT_MSG 2 /* CONNECT message */ #define UNI_VC_CNCTACK_MSG 3 /* CONNECT ACK message */ #define UNI_VC_SETUP_MSG 4 /* SETUP message */ #define UNI_VC_RELEASE_MSG 5 /* RELEASE message */ #define UNI_VC_RLSCMP_MSG 6 /* RELEASE COMPLETE message */ #define UNI_VC_STATUS_MSG 7 /* STATUS message */ #define UNI_VC_STATUSENQ_MSG 8 /* STATUS ENQ message */ #define UNI_VC_ADDP_MSG 9 /* ADD PARTY message */ #define UNI_VC_ADDPACK_MSG 10 /* ADD PARTY ACK message */ #define UNI_VC_ADDPREJ_MSG 11 /* ADD PARTY REJ message */ #define UNI_VC_DROP_MSG 12 /* DROP PARTY message */ #define UNI_VC_DROPACK_MSG 13 /* DROP PARTY ACK message */ #define UNI_VC_SETUP_CALL 14 /* Setup routine called */ #define UNI_VC_ACCEPT_CALL 15 /* Accept call routine called */ #define UNI_VC_REJECT_CALL 16 /* Reject call routine called */ #define UNI_VC_RELEASE_CALL 17 /* Release routine called */ #define UNI_VC_ABORT_CALL 18 /* Abort routine called */ #define UNI_VC_SAAL_FAIL 19 /* Signalling AAL failed */ #define UNI_VC_SAAL_ESTAB 20 /* Signalling AAL back up */ #ifdef ATM_KERNEL /* * UNI Timer Values. These values (except for T317) are taken from * The ATM Forum UNI 3.0 (section 5.7.2). */ #define UNI_T303 (4 * ATM_HZ) #define UNI_T308 (30 * ATM_HZ) #define UNI_T309 (10 * ATM_HZ) #define UNI_T310 (10 * ATM_HZ) #define UNI_T313 (4 * ATM_HZ) #define UNI_T316 (120 * ATM_HZ) #define UNI_T317 (60 * ATM_HZ) #define UNI_T322 (4 * ATM_HZ) #define UNI_T398 (4 * ATM_HZ) #define UNI_T399 (14 * ATM_HZ) /* * Timer macros */ #define UNISIG_TIMER(s, t) atm_timeout(&(s)->us_time, (t), unisig_timer) #define UNISIG_CANCEL(s) atm_untimeout(&(s)->us_time) #define UNISIG_VC_TIMER(v, t) atm_timeout(&(v)->vc_time, (t), unisig_vctimer) #define UNISIG_VC_CANCEL(v) atm_untimeout(&(v)->vc_time) /* * Global function declarations */ struct usfmt; struct unisig_msg; /* unisig_decode.c */ int usf_dec_msg __P((struct usfmt *, struct unisig_msg *)); /* unisig_encode.c */ int usf_enc_msg __P((struct usfmt *, struct unisig_msg *)); /* unisig_if.c */ int unisig_start __P((void)); int unisig_stop __P((void)); int unisig_free __P((struct vccb *)); /* unisig_mbuf.c */ int usf_init __P((struct usfmt *, struct unisig *, KBuffer *, int, int)); int usf_byte __P((struct usfmt *, u_char *)); int usf_short __P((struct usfmt *, u_short *)); int usf_int3 __P((struct usfmt *, u_int *)); int usf_int __P((struct usfmt *, u_int *)); int usf_ext __P((struct usfmt *, u_int *)); int usf_count __P((struct usfmt *)); int usf_byte_mark __P((struct usfmt *, u_char *, u_char **)); /* unisig_msg.c */ struct ie_generic; void unisig_cause_from_attr __P((struct ie_generic *, Atm_attributes *)); void unisig_cause_from_msg __P((struct ie_generic *, struct unisig_msg *, int)); int unisig_send_msg __P((struct unisig *, struct unisig_msg *)); int unisig_send_setup __P((struct unisig *, struct unisig_vccb *)); int unisig_send_release __P((struct unisig *, struct unisig_vccb *, struct unisig_msg *, int)); int unisig_send_release_complete __P((struct unisig *, struct unisig_vccb *, struct unisig_msg *, int)); int unisig_send_status __P((struct unisig *, struct unisig_vccb *, struct unisig_msg *, int)); int unisig_rcv_msg __P((struct unisig *, KBuffer *)); /* unisig_print.c */ void usp_print_msg __P((struct unisig_msg *, int)); /* unisig_proto.c */ void unisig_timer __P((struct atm_time *)); void unisig_vctimer __P((struct atm_time *)); void unisig_saal_ctl __P((int, void *, void *)); void unisig_saal_data __P((void *, KBuffer *)); caddr_t unisig_getname __P((void *)); void unisig_connected __P((void *)); void unisig_cleared __P((void *, struct t_atm_cause *)); /* unisig_sigmgr_state.c */ int unisig_sigmgr_state __P((struct unisig *, int, KBuffer *)); /* unisig_subr.c */ void unisig_cause_attr_from_user __P((Atm_attributes *, int)); void unisig_cause_attr_from_ie __P((Atm_attributes *, struct ie_generic *)); int unisig_open_vcc __P((struct unisig *, Atm_connvc *)); int unisig_close_vcc __P((struct unisig *, struct unisig_vccb *)); int unisig_clear_vcc __P((struct unisig *, struct unisig_vccb *, int)); void unisig_switch_reset __P((struct unisig *, int)); void unisig_save_attrs __P((struct unisig *, struct unisig_msg *, Atm_attributes *)); int unisig_set_attrs __P((struct unisig *, struct unisig_msg *, Atm_attributes *)); /* unisig_util.c */ void unisig_free_msg __P((struct unisig_msg *)); int unisig_verify_vccb __P((struct unisig *, struct unisig_vccb *)); struct unisig_vccb * unisig_find_conn __P((struct unisig *, u_int)); struct unisig_vccb * unisig_find_vpvc __P((struct unisig *, int, int, u_char)); int unisig_alloc_call_ref __P((struct unisig *)); char * unisig_addr_print __P((Atm_addr *)); void unisig_print_mbuf __P((KBuffer *)); void unisig_print_buffer __P((KBuffer *)); /* unisig_vc_state.c */ int unisig_vc_state __P((struct unisig *, struct unisig_vccb *, int, struct unisig_msg *)); /* * External variables */ extern struct sp_info unisig_vcpool; extern struct sp_info unisig_msgpool; extern struct sp_info unisig_iepool; #endif /* ATM_KERNEL */ #endif /* _UNISIG_VAR_H */