[ovs-dev] [PATCH] datapath: Consistently include VLAN header in flow and port stats.

Ben Pfaff blp at nicira.com
Fri Jan 2 22:54:50 UTC 2015


Until now, when VLAN acceleration was in use, the bytes of the VLAN header
were not included in port or flow byte counters.  They were however
included when VLAN acceleration was not used.  This commit corrects the
inconsistency, by always including the VLAN header in byte counters.

Previous discussion at
http://openvswitch.org/pipermail/dev/2014-December/049521.html

Already committed to upstream Linux netdev tree as
24cc59d1ebaac54d933dc0b30abcd8bd86193eef.

Reported-by: Motonori Shindo <mshindo at vmware.com>
Signed-off-by: Ben Pfaff <blp at nicira.com>
Reviewed-by: Flavio Leitner <fbl at sysclose.org>
Acked-by: Pravin B Shelar <pshelar at nicira.com>
---
 datapath/flow.c  |    5 +++--
 datapath/vport.c |    2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/datapath/flow.c b/datapath/flow.c
index 69b13b3..b3a59e7 100644
--- a/datapath/flow.c
+++ b/datapath/flow.c
@@ -71,6 +71,7 @@ void ovs_flow_stats_update(struct sw_flow *flow, __be16 tcp_flags,
 {
 	struct flow_stats *stats;
 	int node = numa_node_id();
+	int len = skb->len + (vlan_tx_tag_present(skb) ? VLAN_HLEN : 0);
 
 	stats = rcu_dereference(flow->stats[node]);
 
@@ -106,7 +107,7 @@ void ovs_flow_stats_update(struct sw_flow *flow, __be16 tcp_flags,
 				if (likely(new_stats)) {
 					new_stats->used = jiffies;
 					new_stats->packet_count = 1;
-					new_stats->byte_count = skb->len;
+					new_stats->byte_count = len;
 					new_stats->tcp_flags = tcp_flags;
 					spin_lock_init(&new_stats->lock);
 
@@ -121,7 +122,7 @@ void ovs_flow_stats_update(struct sw_flow *flow, __be16 tcp_flags,
 
 	stats->used = jiffies;
 	stats->packet_count++;
-	stats->byte_count += skb->len;
+	stats->byte_count += len;
 	stats->tcp_flags |= tcp_flags;
 unlock:
 	spin_unlock(&stats->lock);
diff --git a/datapath/vport.c b/datapath/vport.c
index e3f495e..06560fa 100644
--- a/datapath/vport.c
+++ b/datapath/vport.c
@@ -453,7 +453,7 @@ void ovs_vport_receive(struct vport *vport, struct sk_buff *skb,
 	stats = this_cpu_ptr(vport->percpu_stats);
 	u64_stats_update_begin(&stats->syncp);
 	stats->rx_packets++;
-	stats->rx_bytes += skb->len;
+	stats->rx_bytes += skb->len + (vlan_tx_tag_present(skb) ? VLAN_HLEN : 0);
 	u64_stats_update_end(&stats->syncp);
 
 	ovs_skb_init_inner_protocol(skb);
-- 
1.7.10.4




More information about the dev mailing list