Lines Matching +full:software +full:- +full:controlled
2 * Codel - The Controlled-Delay Active Queue Management algorithm.
8 * Implemented by Rasool Al-Saadi <ralsaadi@swin.edu.au>
10 * Copyright (C) 2011-2014 Kathleen Nichols <nichols@pollere.com>.
26 * products derived from this software without specific prior written
30 * software may be distributed under the terms of the GNU General Public
34 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
44 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
89 cst = q->aqm_status; in codel_dodequeue()
92 /* queue is empty - we can't be above target */ in codel_dodequeue()
93 cst->first_above_time= 0; in codel_dodequeue()
97 cprms = q->fs->aqmcfg; in codel_dodequeue()
100 * different AQMs in parallel. One is sojourn-time-based in codel_dodequeue()
101 * and takes effect when the time to send an MTU-sized in codel_dodequeue()
103 * below does this. The other is backlog-based and takes in codel_dodequeue()
104 * effect when the time to send an MTU-sized packet is >= in codel_dodequeue()
108 * interarrival time (MTU-sized packets arriving spaced in codel_dodequeue()
112 sojourn_time = now - pkt_ts; in codel_dodequeue()
113 if (sojourn_time < cprms->target || q->ni.len_bytes <= cst->maxpkt_size) { in codel_dodequeue()
114 /* went below - stay below for at least interval */ in codel_dodequeue()
115 cst->first_above_time = 0; in codel_dodequeue()
117 if (cst->first_above_time == 0) { in codel_dodequeue()
120 cst->first_above_time = now + cprms->interval; in codel_dodequeue()
121 } else if (now >= cst->first_above_time) { in codel_dodequeue()
140 cst = q->aqm_status; in codel_dequeue()
141 cprms = q->fs->aqmcfg; in codel_dequeue()
145 if (cst->dropping) { in codel_dequeue()
147 /* sojourn time below target - leave dropping state */ in codel_dequeue()
148 cst->dropping = false; in codel_dequeue()
157 while (now >= cst->drop_next_time && cst->dropping) { in codel_dequeue()
159 if (cprms->flags & CODEL_ECN_ENABLED && ecn_mark(m)) { in codel_dequeue()
160 cst->count++; in codel_dequeue()
162 cst->drop_next_time = control_law(cst, cprms, in codel_dequeue()
163 cst->drop_next_time); in codel_dequeue()
174 cst->dropping = false; in codel_dequeue()
176 cst->count++; in codel_dequeue()
178 cst->drop_next_time = control_law(cst, cprms, in codel_dequeue()
179 cst->drop_next_time); in codel_dequeue()
190 if (!(cprms->flags & CODEL_ECN_ENABLED) || !ecn_mark(m)) { in codel_dequeue()
196 cst->dropping = true; in codel_dequeue()
199 * below, assume that the drop rate that controlled the in codel_dequeue()
202 * later than the time of the last drop so 'now - drop_next' in codel_dequeue()
206 cst->count = (cst->count > 2 && ((aqm_stime_t)now - in codel_dequeue()
207 (aqm_stime_t)cst->drop_next_time) < 8* cprms->interval)? in codel_dequeue()
208 cst->count - 2 : 1; in codel_dequeue()
211 cst->drop_next_time = control_law(cst, cprms, now); in codel_dequeue()