aboutsummaryrefslogtreecommitdiff
path: root/sys/netatm/spans/spans_var.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netatm/spans/spans_var.h')
-rw-r--r--sys/netatm/spans/spans_var.h259
1 files changed, 259 insertions, 0 deletions
diff --git a/sys/netatm/spans/spans_var.h b/sys/netatm/spans/spans_var.h
new file mode 100644
index 000000000000..8f9ac8a31b56
--- /dev/null
+++ b/sys/netatm/spans/spans_var.h
@@ -0,0 +1,259 @@
+/*
+ *
+ * ===================================
+ * 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: spans_var.h,v 1.7 1998/04/09 14:24:18 johnc Exp $
+ *
+ */
+
+/*
+ * SPANS Signalling Manager
+ * ---------------------------
+ *
+ * Protocol control blocks
+ *
+ */
+
+#ifndef _SPANS_SPANS_VAR_H
+#define _SPANS_SPANS_VAR_H
+
+#ifdef ATM_KERNEL
+/*
+ * Constants to indicate the state of the signalling interface
+ */
+#define SPANS_UNI_UP 1
+#define SPANS_UNI_DOWN -1
+
+
+/*
+ * Structure containing state information for each SPANS protocol
+ * instance. There will be one instance for each ATM device interface
+ * using the SPANS signalling manager.
+ */
+struct spans {
+ struct siginst sp_inst; /* Header */
+ struct atm_time sp_time; /* Timer controls */
+ void (*sp_lower) /* Lower command handler */
+ __P((int, void *, int, int));
+ Atm_connection *sp_conn; /* Signalling connection */
+ long sp_s_epoch; /* Switch epoch */
+ long sp_h_epoch; /* Host epoch */
+ u_int sp_probe_ct; /* Status_req msgs unanswered */
+ u_int sp_alloc_vci; /* Next VCI to allocate */
+ u_int sp_alloc_vpi; /* Next VPI to allocate */
+ u_int sp_min_vci; /* Lowest VCI to allocate */
+ u_int sp_max_vci; /* Highest VCI to allocate */
+ struct spanscls *sp_cls; /* CLS instance */
+};
+
+#define sp_next sp_inst.si_next
+#define sp_pif sp_inst.si_pif
+#define sp_addr sp_inst.si_addr
+#define sp_subaddr sp_inst.si_subaddr
+#define sp_vccq sp_inst.si_vccq
+#define sp_state sp_inst.si_state
+#define sp_ipserv sp_inst.si_ipserv
+#endif /* ATM_KERNEL */
+
+/*
+ * SPANS Protocol States
+ */
+#define SPANS_ACTIVE 1 /* Active */
+#define SPANS_DETACH 2 /* Detach in progress */
+#define SPANS_INIT 3 /* Initializing */
+#define SPANS_PROBE 4 /* Exchanging status info */
+
+#define SPANS_PROBE_INTERVAL (ATM_HZ) /* Interval between SPANS_STAT_REQs */
+#define SPANS_PROBE_THRESH 10 /* Probe time-out threshold */
+#define SPANS_PROBE_ERR_WAIT (3 * ATM_HZ) /* Time to wait if send probe fails */
+
+
+#ifdef ATM_KERNEL
+/*
+ * SPANS Virtual Channel Connection control block. All information
+ * regarding the state of a SPANS-controlled VCC will be recorded here.
+ * There will be one SPANS VCC control block for each SPANS-controlled
+ * VCC.
+ */
+struct spans_vccb {
+ struct vccb vcp_hdr; /* Generic VCCB */
+ u_short sv_retry; /* Xmit retry count */
+ spans_atm_conn sv_conn; /* SPANS connection info */
+ spans_resrc sv_spans_qos; /* QoS for VCC */
+ spans_aal sv_spans_aal; /* AAL for VCC */
+};
+
+#define sv_type vcp_hdr.vc_type
+#define sv_proto vcp_hdr.vc_proto
+#define sv_sstate vcp_hdr.vc_sstate
+#define sv_ustate vcp_hdr.vc_ustate
+#define sv_pif vcp_hdr.vc_pif
+#define sv_nif vcp_hdr.vc_nif
+#define sv_sigelem vcp_hdr.vc_sigelem
+#define sv_time vcp_hdr.vc_time
+#define sv_vpi vcp_hdr.vc_vpi
+#define sv_vci vcp_hdr.vc_vci
+#define sv_connvc vcp_hdr.vc_connvc
+#define sv_ipdus vcp_hdr.vc_ipdus
+#define sv_opdus vcp_hdr.vc_opdus
+#define sv_ibytes vcp_hdr.vc_ibytes
+#define sv_obytes vcp_hdr.vc_obytes
+#define sv_ierrors vcp_hdr.vc_ierrors
+#define sv_oerrors vcp_hdr.vc_oerrors
+#define sv_tstamp vcp_hdr.vc_tstamp
+#define sv_daddr sv_conn.daddr
+#define sv_saddr sv_conn.saddr
+#define sv_dsap sv_conn.dsap
+#define sv_ssap sv_conn.ssap
+
+#define SV_MAX_RETRY 3
+#define SV_TIMEOUT (ATM_HZ)
+
+#endif /* ATM_KERNEL */
+
+
+/*
+ * SPANS VCC Signalling Protocol States
+ */
+#define SPANS_VC_NULL 0 /* No state */
+#define SPANS_VC_ACTIVE 1 /* Active */
+#define SPANS_VC_ACT_DOWN 2 /* Active - Interface down */
+#define SPANS_VC_POPEN 3 /* VCC open in progress */
+#define SPANS_VC_R_POPEN 4 /* VCC rmt open in progress */
+#define SPANS_VC_OPEN 5 /* VCC open */
+#define SPANS_VC_CLOSE 6 /* VCC close in progress */
+#define SPANS_VC_ABORT 7 /* VCC abort in progress */
+#define SPANS_VC_FREE 8 /* Waiting for user to free resources */
+
+
+#ifdef ATM_KERNEL
+/*
+ * Macro to compare two SPANS addresses.
+ *
+ * Returns 0 if the addresses are equal.
+ */
+#define spans_addr_cmp(a, b) \
+ (bcmp((caddr_t)a, (caddr_t)b, sizeof(struct spans_addr)))
+
+/*
+ * Macro to copy a SPANS address from a to b.
+ */
+#define spans_addr_copy(a, b) \
+ (KM_COPY((caddr_t)a, (caddr_t)b, sizeof(struct spans_addr)))
+
+
+/*
+ * Timer macros
+ */
+#define SPANS_TIMER(s, t) atm_timeout(&(s)->sp_time, (t), spans_timer)
+#define SPANS_CANCEL(s) atm_untimeout(&(s)->sp_time)
+#define SPANS_VC_TIMER(v, t) atm_timeout(&(v)->vc_time, (t), spans_vctimer)
+#define SPANS_VC_CANCEL(v) atm_untimeout(&(v)->vc_time)
+
+
+/*
+ * Global function declarations
+ */
+struct ipvcc;
+
+ /* spans_arp.c */
+int spansarp_svcout __P((struct ipvcc *, struct in_addr *));
+int spansarp_svcin __P((struct ipvcc *, Atm_addr *, Atm_addr *));
+int spansarp_svcactive __P((struct ipvcc *));
+void spansarp_vcclose __P((struct ipvcc *));
+void spansarp_ipact __P((struct spanscls *));
+void spansarp_ipdact __P((struct spanscls *));
+void spansarp_stop __P((void));
+void spansarp_input __P((struct spanscls *, KBuffer *));
+int spansarp_ioctl __P((int, caddr_t, caddr_t));
+
+ /* spans_cls.c */
+int spanscls_start __P((void));
+void spanscls_stop __P((void));
+int spanscls_attach __P((struct spans *));
+void spanscls_detach __P((struct spans *));
+void spanscls_closevc __P((struct spanscls *,
+ struct t_atm_cause *));
+
+ /* spans_if.c */
+int spans_abort __P((struct vccb *));
+int spans_free __P((struct vccb *));
+
+ /* spans_msg.c */
+int spans_send_msg __P((struct spans *, spans_msg *));
+int spans_send_open_req __P((struct spans *,
+ struct spans_vccb *));
+int spans_send_open_rsp __P((struct spans *,
+ struct spans_vccb *,
+ spans_result));
+int spans_send_close_req __P((struct spans *,
+ struct spans_vccb *));
+void spans_rcv_msg __P((struct spans *, KBuffer *));
+
+ /* spans_print.c */
+void spans_print_msg __P((spans_msg *));
+
+ /* spans_proto.c */
+void spans_timer __P((struct atm_time *));
+void spans_vctimer __P((struct atm_time *));
+void spans_upper __P((int, void *, int, int));
+void spans_notify __P((void *, int, int));
+
+ /* spans_subr.c */
+int spans_open_vcc __P((struct spans *, Atm_connvc *));
+int spans_close_vcc __P((struct spans *,
+ struct spans_vccb *, int));
+int spans_clear_vcc __P((struct spans *,
+ struct spans_vccb *));
+void spans_switch_reset __P((struct spans *, int));
+
+ /* spans_util.c */
+int spans_get_spans_sap __P((Sap_t, spans_sap *));
+int spans_get_local_sap __P((spans_sap, Sap_t *));
+int spans_ephemeral_sap __P((struct spans *));
+int spans_get_spans_aal __P((Aal_t, spans_aal *));
+int spans_get_local_aal __P((spans_aal, Aal_t *));
+int spans_verify_vccb __P((struct spans *,
+ struct spans_vccb *));
+struct spans_vccb *
+ spans_find_vpvc __P((struct spans *, int, int, u_char));
+struct spans_vccb *
+ spans_find_conn __P((struct spans *,
+ struct spans_atm_conn *));
+spans_vpvc spans_alloc_vpvc __P((struct spans *));
+char * spans_addr_print __P((struct spans_addr *));
+void spans_dump_buffer __P((KBuffer *));
+
+
+/*
+ * External variables
+ */
+extern struct spans_addr spans_bcastaddr;
+extern struct sp_info spans_vcpool;
+extern struct sp_info spans_msgpool;
+extern struct t_atm_cause spans_cause;
+
+#endif /* ATM_KERNEL */
+
+#endif /* _SPANS_SPANS_VAR_H */