[ovs-dev] [PATCH 05/11] ofproto-dpif: Collect TCP flags only when needed.

Jarno Rajahalme jarno.rajahalme at nsn.com
Mon Feb 11 14:46:21 UTC 2013


Collect TCP flags in stats only if needed for netflow or NXAST_FIN_TIMEOUT.

Signed-off-by: Jarno Rajahalme <jarno.rajahalme at nsn.com>
---
 ofproto/ofproto-dpif.c |   21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 4584987..594f3f3 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -3380,8 +3380,7 @@ init_flow_miss_execute_op(struct flow_miss *miss, struct ofpbuf *packet,
     op->dpif_op.u.execute.packet = packet;
 }
 
-/* Helper for handle_flow_miss_without_facet() and
- * handle_flow_miss_with_facet(). */
+/* Helper for handle_flow_miss_with_facet(). */
 static void
 handle_flow_miss_common(struct rule_dpif *rule,
                         struct ofpbuf *packet, const struct flow *flow)
@@ -3430,6 +3429,17 @@ flow_miss_should_make_facet(struct ofproto_dpif *ofproto,
                                         list_size(&miss->packets));
 }
 
+/* Initializes 'stats' with stats from a packet. */
+static inline void
+packet_stats_extract(const struct ofpbuf *packet,
+                     long long int used, struct dpif_flow_stats *stats)
+{
+    stats->tcp_flags = 0;
+    stats->n_bytes = packet->size;
+    stats->n_packets = 1;
+    stats->used = used;
+}
+
 /* Handles 'miss', which matches 'rule', without creating a facet or subfacet
  * or creating any datapath flow.  May add an "execute" operation to 'ops' and
  * increment '*n_ops'. */
@@ -3452,7 +3462,7 @@ handle_flow_miss_without_facet(struct flow_miss *miss,
 
         ofpbuf_use_stub(&odp_actions, op->stub, sizeof op->stub);
 
-        dpif_flow_stats_extract(&miss->flow, packet, now, &stats);
+        packet_stats_extract(packet, now, &stats);
         rule_credit_stats(rule, &stats);
 
         action_xlate_ctx_init(&ctx, ofproto, &miss->flow, miss->initial_tci,
@@ -3509,7 +3519,10 @@ handle_flow_miss_with_facet(struct flow_miss *miss, struct facet *facet,
             subfacet_make_actions(subfacet, packet, &odp_actions);
         }
 
-        dpif_flow_stats_extract(&facet->flow, packet, now, &stats);
+        packet_stats_extract(packet, now, &stats);
+        if (facet->has_fin_timeout || ofproto->netflow) {
+            stats.tcp_flags = packet_get_tcp_flags(packet, &facet->flow);
+        }
         subfacet_update_stats(subfacet, &stats);
 
         if (subfacet->actions_len) {
-- 
1.7.10.4




More information about the dev mailing list