Add the DragonFly cvs id and perform general cleanups on cvs/rcs/sccs ids. Most
[dragonfly.git] / sys / netproto / atm / uni / sscop_var.h
1 /*
2  *
3  * ===================================
4  * HARP  |  Host ATM Research Platform
5  * ===================================
6  *
7  *
8  * This Host ATM Research Platform ("HARP") file (the "Software") is
9  * made available by Network Computing Services, Inc. ("NetworkCS")
10  * "AS IS".  NetworkCS does not provide maintenance, improvements or
11  * support of any kind.
12  *
13  * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
14  * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
15  * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
16  * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
17  * In no event shall NetworkCS be responsible for any damages, including
18  * but not limited to consequential damages, arising from or relating to
19  * any use of the Software or related support.
20  *
21  * Copyright 1994-1998 Network Computing Services, Inc.
22  *
23  * Copies of this Software may be made, however, the above copyright
24  * notice must be reproduced on all copies.
25  *
26  *      @(#) $FreeBSD: src/sys/netatm/uni/sscop_var.h,v 1.2 1999/08/28 00:49:01 peter Exp $
27  *      @(#) $DragonFly: src/sys/netproto/atm/uni/sscop_var.h,v 1.2 2003/06/17 04:28:49 dillon Exp $
28  *
29  */
30
31 /*
32  * ATM Forum UNI Support
33  * ---------------------
34  *
35  * SSCOP protocol control blocks
36  *
37  */
38
39 #ifndef _UNI_SSCOP_VAR_H
40 #define _UNI_SSCOP_VAR_H
41
42 /*
43  * Structure containing information for each SSCOP connection.
44  */
45 struct sscop {
46         struct sscop    *so_next;       /* Next connection in chain */
47         u_char          so_state;       /* Connection state (see below) */
48         u_short         so_flags;       /* Connection flags (see below) */
49         enum sscop_vers so_vers;        /* SSCOP version */
50
51         /* Transmitter variables */
52         sscop_seq       so_send;        /* VT(S) - next SD to send */
53         sscop_seq       so_sendmax;     /* VT(MS) - max SD to send + 1 */
54         sscop_seq       so_ack;         /* VT(A) - next expected ack */
55         sscop_seq       so_pollsend;    /* VT(PS) - last POLL sent */
56         sscop_seq       so_pollack;     /* VT(PA) - next expected STAT */
57         short           so_polldata;    /* VT(PD) - SD's sent between POLLs */
58         short           so_connctl;     /* VT(CC) - un-ack'd BGN,END,ER,RS */
59         u_char          so_sendconn;    /* VT(SQ) - last BGN,ER,RS sent */
60
61         /* Receiver variables */
62         sscop_seq       so_rcvnext;     /* VR(R) - next SD to receive */
63         sscop_seq       so_rcvhigh;     /* VR(H) - next highest SD to receive */
64         sscop_seq       so_rcvmax;      /* VR(MR) - max SD to receive + 1 */
65         u_char          so_rcvconn;     /* VR(SQ) - last BGN,ER,RS received */
66
67         /* PDU queues */
68         KBuffer         *so_xmit_hd;    /* SD transmission queue head */
69         KBuffer         *so_xmit_tl;    /* SD transmission queue tail */
70         struct pdu_hdr  *so_rexmit_hd;  /* SD retransmission queue head */
71         struct pdu_hdr  *so_rexmit_tl;  /* SD retransmission queue head */
72         struct pdu_hdr  *so_pack_hd;    /* SD pending ack queue head */
73         struct pdu_hdr  *so_pack_tl;    /* SD pending ack queue tail */
74         struct pdu_hdr  *so_recv_hd;    /* SD receive queue head */
75         struct pdu_hdr  *so_recv_tl;    /* SD receive queue tail */
76
77         /* Connection parameters */
78         struct sscop_parms so_parm;     /* Connection parameters */
79
80         /* Timers */
81         u_short         so_timer[SSCOP_T_NUM];  /* Connection timers */
82
83         /* Stack variables */
84         Atm_connvc      *so_connvc;     /* Connection vcc for this stack */
85         void            *so_toku;       /* Stack upper layer's token */
86         void            *so_tokl;       /* Stack lower layer's token */
87         void            (*so_upper)     /* Stack upper layer's interface */
88                                 __P((int, void *, int, int));
89         void            (*so_lower)     /* Stack lower layer's interface */
90                                 __P((int, void *, int, int));
91         u_short         so_headout;     /* Output buffer headroom */
92 };
93
94 /*
95  * Connection States
96  *
97  * Notes:
98  *      #  - state valid only for Q.SAAL1
99  *      ## - state valid only for Q.2110
100  */
101 #define SOS_INST        0               /* Instantiated, waiting for INIT */
102 #define SOS_IDLE        1               /* Idle connection */
103 #define SOS_OUTCONN     2               /* Outgoing connection pending */
104 #define SOS_INCONN      3               /* Incoming connection pending */
105 #define SOS_OUTDISC     4               /* Outgoing disconnection pending */
106 #define SOS_OUTRESYN    5               /* Outgoing resynchronization pending */
107 #define SOS_INRESYN     6               /* Incoming resynchronization pending */
108 #define SOS_CONRESYN    7               /* Concurrent resynch pending (#) */
109 #define SOS_OUTRECOV    7               /* Outgoing recovery pending (##) */
110 #define SOS_RECOVRSP    8               /* Recovery response pending (##) */
111 #define SOS_INRECOV     9               /* Incoming recovery pending (##) */
112 #define SOS_READY       10              /* Data transfer ready */
113 #define SOS_TERM        11              /* Waiting for TERM */
114
115 #define SOS_MAXSTATE    11              /* Maximum state value */
116 #define SOS_NUMSTATES   (SOS_MAXSTATE+1)/* Number of states */
117
118 /*
119  * Connection Flags
120  */
121 #define SOF_NOCLRBUF    0x0001          /* Clear buffers = no */
122 #define SOF_REESTAB     0x0002          /* SSCOP initiated reestablishment */
123 #define SOF_XMITSRVC    0x0004          /* Transmit queues need servicing */
124 #define SOF_KEEPALIVE   0x0008          /* Polling in transient phase */
125 #define SOF_ENDSSCOP    0x0010          /* Last END PDU, SOURCE=SSCOP */
126 #define SOF_NOCREDIT    0x0020          /* Transmit window closed */
127
128
129 /*
130  * SSCOP statistics
131  */
132 struct sscop_stat {
133         u_long          sos_connects;   /* Connection instances */
134         u_long          sos_aborts;     /* Connection aborts */
135         u_long          sos_maa_error[MAA_ERROR_COUNT]; /* Management errors */
136 };
137
138 #ifdef ATM_KERNEL
139 /*
140  * Global function declarations
141  */
142         /* sscop.c */
143 int             sscop_start __P((void));
144 int             sscop_stop __P((void));
145 void            sscop_maa_error __P((struct sscop *, int));
146 void            sscop_abort __P((struct sscop *, char *));
147
148         /* sscop_lower.c */
149 void            sscop_lower __P((int, void *, int, int));
150 void            sscop_aa_noop_0 __P((struct sscop *, int, int));
151 void            sscop_aa_noop_1 __P((struct sscop *, int, int));
152 void            sscop_init_inst __P((struct sscop *, int, int));
153 void            sscop_term_all __P((struct sscop *, int, int));
154
155         /* sscop_pdu.c */
156 int             sscop_send_bgn __P((struct sscop *, int));
157 int             sscop_send_bgak __P((struct sscop *));
158 int             sscop_send_bgrej __P((struct sscop *));
159 int             sscop_send_end __P((struct sscop *, int));
160 int             sscop_send_endak __P((struct sscop *));
161 int             sscop_send_rs __P((struct sscop *));
162 int             sscop_send_rsak __P((struct sscop *));
163 int             sscop_send_er __P((struct sscop *));
164 int             sscop_send_erak __P((struct sscop *));
165 int             sscop_send_poll __P((struct sscop *));
166 int             sscop_send_stat __P((struct sscop *, sscop_seq));
167 int             sscop_send_ustat __P((struct sscop *, sscop_seq));
168 int             sscop_send_ud __P((struct sscop *, KBuffer *));
169 void            sscop_pdu_print __P((struct sscop *, KBuffer *, char *));
170
171         /* sscop_sigaa.c */
172 void            sscop_estreq_idle __P((struct sscop *, int, int));
173 void            sscop_estrsp_inconn __P((struct sscop *, int, int));
174 void            sscop_relreq_outconn __P((struct sscop *, int, int));
175 void            sscop_relreq_inconn __P((struct sscop *, int, int));
176 void            sscop_relreq_ready __P((struct sscop *, int, int));
177 void            sscop_datreq_ready __P((struct sscop *, int, int));
178 void            sscop_udtreq_all __P((struct sscop *, int, int));
179
180         /* sscop_sigcpcs.c */
181 void            sscop_noop __P((struct sscop *, KBuffer *, caddr_t));
182 void            sscop_bgn_idle __P((struct sscop *, KBuffer *, caddr_t));
183 void            sscop_bgn_outdisc __P((struct sscop *, KBuffer *, caddr_t));
184 void            sscop_bgn_outresyn __P((struct sscop *, KBuffer *, caddr_t));
185 void            sscop_bgn_inresyn __P((struct sscop *, KBuffer *, caddr_t));
186 void            sscop_bgak_error __P((struct sscop *, KBuffer *, caddr_t));
187 void            sscop_bgak_idle __P((struct sscop *, KBuffer *, caddr_t));
188 void            sscop_bgak_outconn __P((struct sscop *, KBuffer *, caddr_t));
189 void            sscop_bgrej_error __P((struct sscop *, KBuffer *, caddr_t));
190 void            sscop_bgrej_outconn __P((struct sscop *, KBuffer *, caddr_t));
191 void            sscop_bgrej_inconn __P((struct sscop *, KBuffer *, caddr_t));
192 void            sscop_bgrej_outresyn __P((struct sscop *, KBuffer *, caddr_t));
193 void            sscop_bgrej_ready __P((struct sscop *, KBuffer *, caddr_t));
194 void            sscop_end_idle __P((struct sscop *, KBuffer *, caddr_t));
195 void            sscop_end_inconn __P((struct sscop *, KBuffer *, caddr_t));
196 void            sscop_end_outdisc __P((struct sscop *, KBuffer *, caddr_t));
197 void            sscop_endak_error __P((struct sscop *, KBuffer *, caddr_t));
198 void            sscop_endak_inconn __P((struct sscop *, KBuffer *, caddr_t));
199 void            sscop_endak_outdisc __P((struct sscop *, KBuffer *, caddr_t));
200 void            sscop_endak_ready __P((struct sscop *, KBuffer *, caddr_t));
201 void            sscop_rs_error __P((struct sscop *, KBuffer *, caddr_t));
202 void            sscop_rs_idle __P((struct sscop *, KBuffer *, caddr_t));
203 void            sscop_rsak_error __P((struct sscop *, KBuffer *, caddr_t));
204 void            sscop_rsak_idle __P((struct sscop *, KBuffer *, caddr_t));
205 void            sscop_rsak_outresyn __P((struct sscop *, KBuffer *, caddr_t));
206 void            sscop_sd_error __P((struct sscop *, KBuffer *, caddr_t));
207 void            sscop_sd_idle __P((struct sscop *, KBuffer *, caddr_t));
208 void            sscop_sd_inconn __P((struct sscop *, KBuffer *, caddr_t));
209 void            sscop_poll_error __P((struct sscop *, KBuffer *, caddr_t));
210 void            sscop_poll_idle __P((struct sscop *, KBuffer *, caddr_t));
211 void            sscop_poll_inconn __P((struct sscop *, KBuffer *, caddr_t));
212 void            sscop_stat_error __P((struct sscop *, KBuffer *, caddr_t));
213 void            sscop_stat_idle __P((struct sscop *, KBuffer *, caddr_t));
214 void            sscop_stat_inconn __P((struct sscop *, KBuffer *, caddr_t));
215 void            sscop_stat_ready __P((struct sscop *, KBuffer *, caddr_t));
216 void            sscop_ustat_error __P((struct sscop *, KBuffer *, caddr_t));
217 void            sscop_ustat_idle __P((struct sscop *, KBuffer *, caddr_t));
218 void            sscop_ustat_inconn __P((struct sscop *, KBuffer *, caddr_t));
219 void            sscop_ustat_ready __P((struct sscop *, KBuffer *, caddr_t));
220 void            sscop_ud_all __P((struct sscop *, KBuffer *, caddr_t));
221 void            sscop_md_all __P((struct sscop *, KBuffer *, caddr_t));
222
223         /* sscop_subr.c */
224 KBuffer *       sscop_stat_getelem __P((KBuffer *, sscop_seq *));
225 struct pdu_hdr *sscop_pack_locate __P((struct sscop *, sscop_seq));
226 void            sscop_pack_free __P((struct sscop *, sscop_seq));
227 void            sscop_rexmit_insert __P((struct sscop *, struct pdu_hdr *));
228 void            sscop_rexmit_unlink __P((struct sscop *, struct pdu_hdr *));
229 void            sscop_xmit_drain __P((struct sscop *));
230 int             sscop_recv_insert __P((struct sscop *, struct pdu_hdr *));
231 void            sscop_rcvr_drain __P((struct sscop *));
232 void            sscop_service_xmit __P((struct sscop *));
233 int             sscop_is_rexmit __P((struct sscop *, u_char));
234 void            sscop_set_poll __P((struct sscop *));
235
236         /* sscop_timer.c */
237 void            sscop_timeout __P((struct atm_time *));
238
239         /* sscop_upper.c */
240 void            sscop_upper __P((int, void *, int, int));
241
242         /* q2110_sigaa.c */
243
244         /* q2110_sigcpcs.c */
245
246         /* q2110_subr.c */
247 void            q2110_clear_xmit __P((struct sscop *));
248 void            q2110_init_state __P((struct sscop *));
249 void            q2110_prep_retrieve __P((struct sscop *));
250 void            q2110_prep_recovery __P((struct sscop *));
251 void            q2110_deliver_data __P((struct sscop *));
252 void            q2110_error_recovery __P((struct sscop *));
253
254         /* qsaal1_sigaa.c */
255
256         /* qsaal1_sigcpcs.c */
257
258         /* qsaal1_subr.c */
259 void            qsaal1_reestablish __P((struct sscop *));
260 void            qsaal1_reset_xmit __P((struct sscop *));
261 void            qsaal1_reset_rcvr __P((struct sscop *));
262 void            qsaal1_clear_connection __P((struct sscop *));
263
264
265 /*
266  * External variables
267  */
268 extern struct sp_info   sscop_pool;
269 extern int              sscop_vccnt;
270 extern struct sscop     *sscop_head;
271 extern struct sscop_stat        sscop_stat;
272 extern struct atm_time  sscop_timer;
273 extern void             (*(*sscop_qsaal_aatab[]))
274                                 __P((struct sscop *, int, int));
275 extern void             (*(*sscop_q2110_aatab[]))
276                                 __P((struct sscop *, int, int));
277 extern void             (*(*sscop_qsaal_pdutab[]))
278                                 __P((struct sscop *, KBuffer *, caddr_t));
279 extern void             (*(*sscop_q2110_pdutab[]))
280                                 __P((struct sscop *, KBuffer *, caddr_t));
281
282 #endif  /* ATM_KERNEL */
283
284 #endif  /* _UNI_SSCOP_VAR_H */