netflow: Only query stats of installed flows.
authorJesse Gross <jesse@nicira.com>
Fri, 6 Nov 2009 21:26:42 +0000 (13:26 -0800)
committerJesse Gross <jesse@nicira.com>
Fri, 6 Nov 2009 22:24:20 +0000 (14:24 -0800)
NetFlow active timeouts was querying the stats of all exact match
flows that had reached a certain age including those that could
not be installed.  This was not harmful but it was wasteful and
produced log spew.  This changes it to only query the flows that
are actually installed.

Bug #2252

secchan/ofproto.c

index babf01e..cdb94b5 100644 (file)
@@ -3318,14 +3318,16 @@ active_timeout(struct ofproto *ofproto, struct rule *rule)
 
         /* Get updated flow stats. */
         memset(&odp_flow, 0, sizeof odp_flow);
-        odp_flow.key = rule->cr.flow;
-        odp_flow.flags = ODPFF_ZERO_TCP_FLAGS;
-        dpif_flow_get(&ofproto->dpif, &odp_flow);
-
-        if (odp_flow.stats.n_packets) {
-            update_time(ofproto, rule, &odp_flow.stats);
-            netflow_flow_update_flags(&rule->nf_flow, odp_flow.stats.ip_tos,
-                                      odp_flow.stats.tcp_flags);
+        if (rule->installed) {
+            odp_flow.key = rule->cr.flow;
+            odp_flow.flags = ODPFF_ZERO_TCP_FLAGS;
+            dpif_flow_get(&ofproto->dpif, &odp_flow);
+
+            if (odp_flow.stats.n_packets) {
+                update_time(ofproto, rule, &odp_flow.stats);
+                netflow_flow_update_flags(&rule->nf_flow, odp_flow.stats.ip_tos,
+                                          odp_flow.stats.tcp_flags);
+            }
         }
 
         expired.flow = rule->cr.flow;