Lines Matching defs:fv
222 static void fv_dropbyred(struct flowvalve *fv, struct altq_pktattr *,
889 struct flowvalve *fv = rp->red_flowvalve;
890 q_stats->fv_flows = fv->fv_flows;
891 q_stats->fv_pass = fv->fv_stats.pass;
892 q_stats->fv_predrop = fv->fv_stats.predrop;
893 q_stats->fv_alloc = fv->fv_stats.alloc;
894 q_stats->fv_escape = fv->fv_stats.escape;
1125 flowlist_lookup(struct flowvalve *fv, struct altq_pktattr *pktattr,
1147 TAILQ_FOREACH(fve, &fv->fv_flowlist, fve_lru){
1166 TAILQ_FOREACH(fve, &fv->fv_flowlist, fve_lru){
1188 fv->fv_flows = flows; /* save the number of active fve's */
1193 flowlist_reclaim(struct flowvalve *fv, struct altq_pktattr *pktattr)
1204 fve = TAILQ_LAST(&fv->fv_flowlist, fv_flowhead);
1226 fve->fve_ifseq = fv->fv_ifseq - 1;
1229 fv->fv_flows++;
1231 fv->fv_stats.alloc++;
1237 flowlist_move_to_head(struct flowvalve *fv, struct fve *fve)
1239 if (TAILQ_FIRST(&fv->fv_flowlist) != fve) {
1240 TAILQ_REMOVE(&fv->fv_flowlist, fve, fve_lru);
1241 TAILQ_INSERT_HEAD(&fv->fv_flowlist, fve, fve_lru);
1251 struct flowvalve *fv;
1256 fv = malloc(sizeof(struct flowvalve), M_DEVBUF, M_WAITOK|M_ZERO);
1257 if (fv == NULL)
1260 fv->fv_fves = malloc(sizeof(struct fve) * num, M_DEVBUF,
1262 if (fv->fv_fves == NULL) {
1263 free(fv, M_DEVBUF);
1267 fv->fv_flows = 0;
1268 TAILQ_INIT(&fv->fv_flowlist);
1270 fve = &fv->fv_fves[i];
1272 TAILQ_INSERT_TAIL(&fv->fv_flowlist, fve, fve_lru);
1276 fv->fv_pthresh = (FV_PSCALE(1) << FP_SHIFT) / rp->red_inv_pmax;
1279 fv->fv_p2ftab = malloc(sizeof(int) * BRTT_SIZE, M_DEVBUF, M_WAITOK);
1280 if (fv->fv_p2ftab == NULL) {
1281 free(fv->fv_fves, M_DEVBUF);
1282 free(fv, M_DEVBUF);
1293 fv->fv_p2ftab[i] = (f / (rp->red_thmax + FV_ALPHA)) >> 8;
1296 return fv;
1300 fv_destroy(struct flowvalve *fv)
1302 free(fv->fv_p2ftab, M_DEVBUF);
1303 free(fv->fv_fves, M_DEVBUF);
1304 free(fv, M_DEVBUF);
1308 fv_p2f(struct flowvalve *fv, int p)
1313 f = fv->fv_p2ftab[BRTT_SIZE-1];
1315 f = fv->fv_p2ftab[(val >> BRTT_SHIFT)];
1317 f = fv->fv_p2ftab[1];
1328 fv_checkflow(struct flowvalve *fv, struct altq_pktattr *pktattr,
1334 fv->fv_ifseq++;
1337 if ((fve = flowlist_lookup(fv, pktattr, &now)) == NULL)
1349 (FV_N << FP_SHIFT) / (fv->fv_ifseq - fve->fve_ifseq)
1351 fve->fve_ifseq = fv->fv_ifseq;
1358 if (fve->fve_state == Green && fve->fve_p > fv->fv_pthresh) {
1362 fthresh = fv_p2f(fv, fve->fve_p);
1376 fv->fv_stats.escape++;
1380 flowlist_move_to_head(fv, fve);
1383 fv->fv_stats.predrop++;
1396 fv->fv_stats.pass++;
1406 fv_dropbyred(struct flowvalve *fv, struct altq_pktattr *pktattr,
1419 else if ((fve = flowlist_lookup(fv, pktattr, &now)) == NULL)
1420 fve = flowlist_reclaim(fv, pktattr);
1422 flowlist_move_to_head(fv, fve);