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

Ben Pfaff blp at nicira.com
Fri Jan 2 23:03:48 UTC 2015


Pravin, you already acked this on netdev.  This is the crossport to
the OVS tree.  I didn't know whether the netdev ack was good enough to
just push to OVS too, so to play it safe I separately posted it for
review here.

On Fri, Jan 02, 2015 at 02:54:50PM -0800, Ben Pfaff wrote:
> 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