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