ofproto: Update stats for exact match flows before expiration.
authorJesse Gross <jesse@nicira.com>
Wed, 11 Nov 2009 19:13:37 +0000 (11:13 -0800)
committerJesse Gross <jesse@nicira.com>
Wed, 11 Nov 2009 19:13:37 +0000 (11:13 -0800)
When a wildcarded flow is expired we remove all of the subrules to
collect their stats before sending a flow expiration message.  However,
we were only removing exact match flows after the expiration message
is composed.  This uninstalls it first.

CC: David Erickson <derickso@stanford.edu>
secchan/ofproto.c

index 6319b03..cfaf0cf 100644 (file)
@@ -3292,14 +3292,16 @@ expire_rule(struct cls_rule *cls_rule, void *p_)
     }
 
     COVERAGE_INC(ofproto_expired);
+
+    /* Update stats.  This code will be a no-op if the rule expired
+     * due to an idle timeout. */
     if (rule->cr.wc.wildcards) {
-        /* Update stats.  (This code will be a no-op if the rule expired
-         * due to an idle timeout, because in that case the rule has no
-         * subrules left.) */
         struct rule *subrule, *next;
         LIST_FOR_EACH_SAFE (subrule, next, struct rule, list, &rule->list) {
             rule_remove(p, subrule);
         }
+    } else {
+        rule_uninstall(p, rule);
     }
 
     send_flow_exp(p, rule, now,