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
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
|
/*
*
* ===================================
* 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 _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 /* _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 _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 /* _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 _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 /* _KERNEL */
#endif /* _UNISIG_VAR_H */
|