In the standard case, rate limiting facet_learn() to once ever 500ms, makes sense. The worst that can happen is a learning entry is expired half a second to early. However, when using fin_timeouts, we really need react quickly to delete the newly stale flow.
Bug #15915. Signed-off-by: Ethan Jackson <et...@nicira.com> --- ofproto/ofproto-dpif.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 32ed091..47830c1 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -4585,13 +4585,14 @@ facet_learn(struct facet *facet) struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto); struct subfacet *subfacet= CONTAINER_OF(list_front(&facet->subfacets), struct subfacet, list_node); + long long int now = time_msec(); struct action_xlate_ctx ctx; - if (time_msec() < facet->learn_rl) { + if (!facet->has_fin_timeout && now < facet->learn_rl) { return; } - facet->learn_rl = time_msec() + 500; + facet->learn_rl = now + 500; if (!facet->has_learn && !facet->has_normal -- 1.7.9.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev