[ovs-dev] [overload 5/7] ofproto: Iterate through exact-match rules first during expiration.
Ben Pfaff
blp at nicira.com
Thu Sep 30 17:17:39 PDT 2010
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
More information about the dev
mailing list