[ovs-dev] [overload 5/7] ofproto: Iterate through exact-match rules first during expiration.
Justin Pettit
jpettit at nicira.com
Thu Oct 7 06:55:47 UTC 2010
Looks good.
--Justin
On Sep 30, 2010, at 5:17 PM, Ben Pfaff wrote:
> A wildcarded flow is idle only if all of its subrules have expired because
> they were idle, so unless we expire exact-match rules first it is possible
> that a wildcarded flow fails to expire as soon as it should.
>
> (The current implementation of classifier_for_each() iterates through
> exact-match rules before wildcarded rules, but nothing in the interface
> guarantees that.)
> ---
> ofproto/ofproto.c | 8 ++++++--
> 1 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
> index 52f3ee7..0f07b23 100644
> --- a/ofproto/ofproto.c
> +++ b/ofproto/ofproto.c
> @@ -4202,9 +4202,13 @@ ofproto_expire(struct ofproto *ofproto)
> /* Update 'used' for each flow in the datapath. */
> ofproto_update_used(ofproto);
>
> - /* Expire idle flows. */
> + /* Expire idle flows.
> + *
> + * A wildcarded flow is idle only when all of its subrules have expired due
> + * to becoming idle, so iterate through the exact-match flows first. */
> cbdata.ofproto = ofproto;
> - classifier_for_each(&ofproto->cls, CLS_INC_ALL, rule_expire, &cbdata);
> + classifier_for_each(&ofproto->cls, CLS_INC_EXACT, rule_expire, &cbdata);
> + classifier_for_each(&ofproto->cls, CLS_INC_WILD, rule_expire, &cbdata);
>
> /* Let the hook know that we're at a stable point: all outstanding data
> * in existing flows has been accounted to the account_cb. Thus, the
> --
> 1.7.1
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
More information about the dev
mailing list