summaryrefslogtreecommitdiffstats
path: root/sys/netatm/spans/spans_var.h
blob: 9043a912367334a49a52cc70088183e0ddea7573 (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
/*
 *
 * ===================================
 * 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$
 *
 */

/*
 * SPANS Signalling Manager
 * ---------------------------
 *
 * Protocol control blocks
 *
 */

#ifndef _SPANS_SPANS_VAR_H
#define _SPANS_SPANS_VAR_H

#ifdef _KERNEL

#include <vm/uma.h>	/* XXX arr: will remove rsn */

/*
 * 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 */
				(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	/* _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 _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	/* _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 _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)	\
	(bcopy((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(struct ipvcc *, struct in_addr *);
int		spansarp_svcin(struct ipvcc *, Atm_addr *, Atm_addr *);
int		spansarp_svcactive(struct ipvcc *);
void		spansarp_vcclose(struct ipvcc *);
void		spansarp_ipact(struct spanscls *);
void		spansarp_ipdact(struct spanscls *);
void		spansarp_start(void);
void		spansarp_stop(void);
void		spansarp_input(struct spanscls *, KBuffer *);
int		spansarp_ioctl(int, caddr_t, caddr_t);

	/* spans_cls.c */
int		spanscls_start(void);
void		spanscls_stop(void);
int		spanscls_attach(struct spans *);
void		spanscls_detach(struct spans *);
void		spanscls_closevc(struct spanscls *, struct t_atm_cause *);

	/* spans_if.c */
int		spans_abort(struct vccb *);
int		spans_free(struct vccb *);

	/* spans_msg.c */
int		spans_send_msg(struct spans *, spans_msg *);
int		spans_send_open_req(struct spans *, struct spans_vccb *);
int		spans_send_open_rsp(struct spans *,
				struct spans_vccb *,
				spans_result);
int		spans_send_close_req(struct spans *,
				struct spans_vccb *);
void		spans_rcv_msg(struct spans *, KBuffer *);

	/* spans_print.c */
void		spans_print_msg(spans_msg *);

	/* spans_proto.c */
void		spans_timer(struct atm_time *);
void		spans_vctimer(struct atm_time *);
void		spans_upper(int, void *, int, int);
void		spans_notify(void *, int, int);

	/* spans_subr.c */
int		spans_open_vcc(struct spans *, Atm_connvc *);
int		spans_close_vcc(struct spans *, struct spans_vccb *, int);
int		spans_clear_vcc(struct spans *, struct spans_vccb *);
void		spans_switch_reset(struct spans *, int);

	/* spans_util.c */
int		spans_get_spans_sap(Sap_t, spans_sap *);
int		spans_get_local_sap(spans_sap, Sap_t *);
int		spans_ephemeral_sap(struct spans *);
int		spans_get_spans_aal(Aal_t, spans_aal *);
int		spans_get_local_aal(spans_aal, Aal_t *);
int		spans_verify_vccb(struct spans *, struct spans_vccb *);
struct spans_vccb *
		spans_find_vpvc(struct spans *, int, int, u_char);
struct spans_vccb *
		spans_find_conn(struct spans *, struct spans_atm_conn *);
spans_vpvc	spans_alloc_vpvc(struct spans *);
char *		spans_addr_print(struct spans_addr *);
void		spans_dump_buffer(KBuffer *);


/*
 * External variables
 */
extern struct spans_addr	spans_bcastaddr;
extern uma_zone_t		spans_vc_zone;
extern uma_zone_t		spans_msg_zone;
extern struct t_atm_cause	spans_cause;

#endif	/* _KERNEL */

#endif	/* _SPANS_SPANS_VAR_H */
OpenPOWER on IntegriCloud