datapath: Add clean compat layer for dev_get_stats().
[openvswitch] / datapath / vport.c
index 91b650e54695f751b26dcec98e526b8282eb2159..f0c81823fdde09c3e6e993e4947321e02ba1ddf8 100644 (file)
@@ -910,7 +910,7 @@ int vport_set_stats(struct vport *vport, struct odp_vport_stats *stats)
 
        if (vport->ops->flags & VPORT_F_GEN_STATS) {
                spin_lock_bh(&vport->stats_lock);
-               memcpy(&vport->offset_stats, stats, sizeof(struct odp_vport_stats));
+               vport->offset_stats = *stats;
                spin_unlock_bh(&vport->stats_lock);
 
                return 0;
@@ -1030,7 +1030,7 @@ int vport_get_stats(struct vport *vport, struct odp_vport_stats *stats)
 
                spin_lock_bh(&vport->stats_lock);
 
-               memcpy(stats, &vport->offset_stats, sizeof(struct odp_vport_stats));
+               *stats = vport->offset_stats;
 
                stats->rx_errors        += vport->err_stats.rx_errors
                                                + vport->err_stats.rx_frame_err
@@ -1217,6 +1217,9 @@ void vport_receive(struct vport *vport, struct sk_buff *skb)
                local_bh_enable();
        }
 
+       if (!(vport->ops->flags & VPORT_F_FLOW))
+               OVS_CB(skb)->flow = NULL;
+
        if (!(vport->ops->flags & VPORT_F_TUN_ID))
                OVS_CB(skb)->tun_id = 0;