summaryrefslogtreecommitdiffstats
path: root/sys/netatm/spans/spans_var.h
blob: 8f9ac8a31b56ee6eb1add19a6dccf1f7f40d50af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
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 */
OpenPOWER on IntegriCloud