Lines Matching refs:fve
212 static inline struct fve *flowlist_lookup(struct flowvalve *,
214 static inline struct fve *flowlist_reclaim(struct flowvalve *,
216 static inline void flowlist_move_to_head(struct flowvalve *, struct fve *);
221 struct fve **);
223 struct fve *);
354 struct fve *fve = NULL; in red_addq() local
357 if (fv_checkflow(rp->red_flowvalve, pktattr, &fve)) { in red_addq()
471 fv_dropbyred(rp->red_flowvalve, pktattr, fve); in red_addq()
1124 static inline struct fve *
1128 struct fve *fve; in flowlist_lookup() local
1147 TAILQ_FOREACH(fve, &fv->fv_flowlist, fve_lru){ in flowlist_lookup()
1148 if (fve->fve_lastdrop.tv_sec == 0) in flowlist_lookup()
1150 if (fve->fve_lastdrop.tv_sec < tthresh.tv_sec) { in flowlist_lookup()
1151 fve->fve_lastdrop.tv_sec = 0; in flowlist_lookup()
1154 if (fve->fve_flow.flow_af == AF_INET && in flowlist_lookup()
1155 fve->fve_flow.flow_ip.ip_src.s_addr == in flowlist_lookup()
1157 fve->fve_flow.flow_ip.ip_dst.s_addr == in flowlist_lookup()
1159 return fve; in flowlist_lookup()
1166 TAILQ_FOREACH(fve, &fv->fv_flowlist, fve_lru){ in flowlist_lookup()
1167 if (fve->fve_lastdrop.tv_sec == 0) in flowlist_lookup()
1169 if (fve->fve_lastdrop.tv_sec < tthresh.tv_sec) { in flowlist_lookup()
1170 fve->fve_lastdrop.tv_sec = 0; in flowlist_lookup()
1173 if (fve->fve_flow.flow_af == AF_INET6 && in flowlist_lookup()
1174 IN6_ARE_ADDR_EQUAL(&fve->fve_flow.flow_ip6.ip6_src, in flowlist_lookup()
1176 IN6_ARE_ADDR_EQUAL(&fve->fve_flow.flow_ip6.ip6_dst, in flowlist_lookup()
1178 return fve; in flowlist_lookup()
1192 static inline struct fve *
1195 struct fve *fve; in flowlist_reclaim() local
1204 fve = TAILQ_LAST(&fv->fv_flowlist, fv_flowhead); in flowlist_reclaim()
1209 fve->fve_flow.flow_af = AF_INET; in flowlist_reclaim()
1210 fve->fve_flow.flow_ip.ip_src = ip->ip_src; in flowlist_reclaim()
1211 fve->fve_flow.flow_ip.ip_dst = ip->ip_dst; in flowlist_reclaim()
1216 fve->fve_flow.flow_af = AF_INET6; in flowlist_reclaim()
1217 fve->fve_flow.flow_ip6.ip6_src = ip6->ip6_src; in flowlist_reclaim()
1218 fve->fve_flow.flow_ip6.ip6_dst = ip6->ip6_dst; in flowlist_reclaim()
1223 fve->fve_state = Green; in flowlist_reclaim()
1224 fve->fve_p = 0.0; in flowlist_reclaim()
1225 fve->fve_f = 0.0; in flowlist_reclaim()
1226 fve->fve_ifseq = fv->fv_ifseq - 1; in flowlist_reclaim()
1227 fve->fve_count = 0; in flowlist_reclaim()
1233 return fve; in flowlist_reclaim()
1237 flowlist_move_to_head(struct flowvalve *fv, struct fve *fve) in flowlist_move_to_head() argument
1239 if (TAILQ_FIRST(&fv->fv_flowlist) != fve) { in flowlist_move_to_head()
1240 TAILQ_REMOVE(&fv->fv_flowlist, fve, fve_lru); in flowlist_move_to_head()
1241 TAILQ_INSERT_HEAD(&fv->fv_flowlist, fve, fve_lru); in flowlist_move_to_head()
1252 struct fve *fve; in fv_alloc() local
1260 fv->fv_fves = malloc(sizeof(struct fve) * num, M_DEVBUF, in fv_alloc()
1270 fve = &fv->fv_fves[i]; in fv_alloc()
1271 fve->fve_lastdrop.tv_sec = 0; in fv_alloc()
1272 TAILQ_INSERT_TAIL(&fv->fv_flowlist, fve, fve_lru); in fv_alloc()
1329 struct fve **fcache) in fv_checkflow()
1331 struct fve *fve; in fv_checkflow() local
1337 if ((fve = flowlist_lookup(fv, pktattr, &now)) == NULL) in fv_checkflow()
1341 *fcache = fve; in fv_checkflow()
1344 if (++fve->fve_count == FV_N) { in fv_checkflow()
1348 fve->fve_f = in fv_checkflow()
1349 (FV_N << FP_SHIFT) / (fv->fv_ifseq - fve->fve_ifseq) in fv_checkflow()
1350 + fve->fve_f - FV_FUNSCALE(fve->fve_f); in fv_checkflow()
1351 fve->fve_ifseq = fv->fv_ifseq; in fv_checkflow()
1352 fve->fve_count = 0; in fv_checkflow()
1358 if (fve->fve_state == Green && fve->fve_p > fv->fv_pthresh) { in fv_checkflow()
1362 fthresh = fv_p2f(fv, fve->fve_p); in fv_checkflow()
1363 if (fve->fve_f > fthresh) in fv_checkflow()
1364 fve->fve_state = Red; in fv_checkflow()
1367 if (fve->fve_state == Red) { in fv_checkflow()
1371 if (now.tv_sec - fve->fve_lastdrop.tv_sec > FV_BACKOFFTHRESH) { in fv_checkflow()
1373 fve->fve_p = 0; in fv_checkflow()
1374 fve->fve_state = Green; in fv_checkflow()
1380 flowlist_move_to_head(fv, fve); in fv_checkflow()
1381 fve->fve_lastdrop = now; in fv_checkflow()
1392 fve->fve_p -= FV_PUNSCALE(fve->fve_p); in fv_checkflow()
1393 if (fve->fve_p < 0) in fv_checkflow()
1394 fve->fve_p = 0; in fv_checkflow()
1407 struct fve *fcache) in fv_dropbyred()
1409 struct fve *fve; in fv_dropbyred() local
1418 fve = fcache; in fv_dropbyred()
1419 else if ((fve = flowlist_lookup(fv, pktattr, &now)) == NULL) in fv_dropbyred()
1420 fve = flowlist_reclaim(fv, pktattr); in fv_dropbyred()
1422 flowlist_move_to_head(fv, fve); in fv_dropbyred()
1429 fve->fve_p = (1 << FP_SHIFT) + fve->fve_p; in fv_dropbyred()
1431 fve->fve_lastdrop = now; in fv_dropbyred()