Lines Matching refs:rp

209 	rio_t	*rp;
215 rp = zalloc(rio_zone);
216 if (rp == NULL)
219 bzero(rp, rio_size);
220 rp->rio_flags = (flags & RIOF_USERFLAGS);
221 rp->rio_ifp = ifp;
225 rp->rio_pkttime = 800;
227 rp->rio_pkttime = pkttime;
230 rp->rio_weight = weight;
233 rp->rio_weight = W_WEIGHT;
236 npkts_per_sec = 1000000 / rp->rio_pkttime;
239 rp->rio_weight = W_WEIGHT_2;
242 rp->rio_weight = W_WEIGHT_1;
247 w = rp->rio_weight;
250 rp->rio_wshift = i;
251 w = 1 << rp->rio_wshift;
252 if (w != rp->rio_weight) {
254 rp->rio_weight, w);
255 rp->rio_weight = w;
259 rp->rio_wtab = wtab_alloc(rp->rio_weight);
260 if (rp->rio_wtab == NULL) {
261 rio_destroy(rp);
266 struct dropprec_state *prec = &rp->rio_precstate[i];
288 prec->th_min_s = prec->th_min << (rp->rio_wshift + FP_SHIFT);
289 prec->th_max_s = prec->th_max << (rp->rio_wshift + FP_SHIFT);
301 return (rp);
305 rio_destroy(rio_t *rp)
307 if (rp->rio_wtab != NULL) {
308 wtab_destroy(rp->rio_wtab);
309 rp->rio_wtab = NULL;
311 zfree(rio_zone, rp);
315 rio_getstats(rio_t *rp, struct red_stats *sp)
320 bcopy(&rp->q_stats[i], sp, sizeof (struct red_stats));
321 sp->q_avg = rp->rio_precstate[i].avg >> rp->rio_wshift;
353 rio_addq(rio_t *rp, class_queue_t *q, struct mbuf *m, struct pf_mtag *tag)
371 prec = &rp->rio_precstate[i];
383 n = t / rp->rio_pkttime;
387 pow_w(rp->rio_wtab, n);
393 avg += (prec->qlen << FP_SHIFT) - (avg >> rp->rio_wshift);
402 prec = &rp->rio_precstate[dpindex];
415 } else if (drop_early((avg - prec->th_min_s) >> rp->rio_wshift,
434 rp->rio_precstate[i].count = 0;
437 rp->q_stats[dpindex].drop_unforced++;
439 rp->q_stats[dpindex].drop_forced++;
441 IFCQ_CONVERT_LOCK(&rp->rio_ifp->if_snd);
447 rp->rio_precstate[i].qlen++;
452 if (rp->rio_flags & RIOF_CLEARDSCP)
464 rio_getq_flow(struct rio *rp, class_queue_t *q, u_int32_t flow, boolean_t purge)
478 if (--rp->rio_precstate[i].qlen == 0) {
479 if (rp->rio_precstate[i].idle == 0) {
480 rp->rio_precstate[i].idle = 1;
481 microuptime(&rp->rio_precstate[i].last);
489 rio_getq(rio_t *rp, class_queue_t *q)
491 return (rio_getq_flow(rp, q, 0, FALSE));
495 rio_purgeq(struct rio *rp, class_queue_t *q, u_int32_t flow, u_int32_t *packets,
501 IFCQ_CONVERT_LOCK(&rp->rio_ifp->if_snd);
503 while ((m = rio_getq_flow(rp, q, flow, TRUE)) != NULL) {
516 rio_updateq(rio_t *rp, cqev_t ev)
518 #pragma unused(rp, ev)
523 rio_suspendq(rio_t *rp, class_queue_t *q, boolean_t on)
525 #pragma unused(rp, q, on)