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 babf01ed0cac7d1f15f3b6b1e2c6d050e5ccbc4d..cdb94b5047ebd0bea3d90944423872c0ea1e03b9 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;