3 * ===================================
4 * HARP | Host ATM Research Platform
5 * ===================================
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.
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.
21 * Copyright 1994-1998 Network Computing Services, Inc.
23 * Copies of this Software may be made, however, the above copyright
24 * notice must be reproduced on all copies.
26 * @(#) $FreeBSD: src/sys/netatm/uni/q2110_subr.c,v 1.4 2000/01/17 20:49:49 mks Exp $
31 * ATM Forum UNI Support
32 * ---------------------
34 * ITU-T Q.2110 - Subroutines
38 #include <netatm/kern_include.h>
40 #include <netatm/uni/sscop.h>
41 #include <netatm/uni/sscop_misc.h>
42 #include <netatm/uni/sscop_var.h>
45 __RCSID("@(#) $FreeBSD: src/sys/netatm/uni/q2110_subr.c,v 1.4 2000/01/17 20:49:49 mks Exp $");
50 * Conditionally Clear Transmission Queues
53 * sop pointer to sscop connection block
64 * Only clear queues if 'Clear Buffers' == No
66 if (sop->so_flags & SOF_NOCLRBUF)
67 sscop_xmit_drain(sop);
72 * Initialize Data Transfer State Variables
75 * sop pointer to sscop connection block
86 * Initialize for entry into Data Transfer Ready state
99 * Prepare Queues for Data Retrieval
102 * sop pointer to sscop connection block
109 q2110_prep_retrieve(sop)
113 * If 'Clear Buffers' == No, just clear retransmit queue,
114 * else clear all transmission queues
116 if (sop->so_flags & SOF_NOCLRBUF) {
117 sop->so_rexmit_hd = NULL;
118 sop->so_rexmit_tl = NULL;
120 sscop_xmit_drain(sop);
123 * Clear receiver queue
125 sscop_rcvr_drain(sop);
130 * Prepare Queues for Error Recovery
133 * sop pointer to sscop connection block
140 q2110_prep_recovery(sop)
144 * If 'Clear Buffers' == No, just clear retransmit queue,
145 * else clear all transmission queues
147 if (sop->so_flags & SOF_NOCLRBUF) {
148 sop->so_rexmit_hd = NULL;
149 sop->so_rexmit_tl = NULL;
151 sscop_xmit_drain(sop);
156 * Conditionally Deliver Received Data to User
159 * sop pointer to sscop connection block
166 q2110_deliver_data(sop)
170 * If 'Clear Buffers' == No, give data to user
172 if (sop->so_flags & SOF_NOCLRBUF) {
174 * We don't support 'Clear Buffers' == No, so don't bother
179 * Clear receiver queue
181 sscop_rcvr_drain(sop);
186 * Enter Connection Recovery Mode
189 * sop pointer to sscop connection block
196 q2110_error_recovery(sop)
201 * Stop data transfer timers
203 sop->so_timer[SSCOP_T_POLL] = 0;
204 sop->so_timer[SSCOP_T_NORESP] = 0;
205 sop->so_timer[SSCOP_T_IDLE] = 0;
206 sop->so_flags &= ~SOF_KEEPALIVE;
209 * Initialize receiver window
211 SEQ_SET(sop->so_rcvmax, sop->so_parm.sp_rcvwin);
217 SEQ_INCR(sop->so_sendconn, 1);
218 (void) sscop_send_er(sop);
221 * Set retransmit timer
223 sop->so_timer[SSCOP_T_CC] = sop->so_parm.sp_timecc;
226 * Clear out appropriate queues
228 q2110_prep_recovery(sop);
233 sop->so_state = SOS_OUTRECOV;