This alters the way rx packets are accounted for by counting them when they are processed by netdev_dummy_rx_recv(), which seems to be a common path used by all received packets.
Previously accounting was done earlier, in netdev_dummy_receive(), however this does not appear to count packets that are received via a socket. This resolves packet counting errors reported by the following OFtest tests: port_stats.MultiFlowStats port_stats.SingleFlowStats pktact.WildcardPriorityWithDelete pktact.WildcardPriority Signed-off-by: Simon Horman <ho...@verge.net.au> --- lib/netdev-dummy.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index e40c099..061ad0c 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -468,8 +468,15 @@ netdev_dummy_rx_recv(struct netdev_rx *rx_, void *buffer, size_t size) } if (packet->size <= size) { + struct netdev_dummy *dummy_dev = netdev_dummy_cast(netdev); + memcpy(buffer, packet->data, packet->size); retval = packet->size; + ovs_mutex_lock(&dummy_dev->mutex); + dummy_dev->stats.rx_packets++; + dummy_dev->stats.rx_bytes += packet->size; + ovs_mutex_unlock(&dummy_dev->mutex); + } else { retval = -EMSGSIZE; } @@ -870,8 +877,6 @@ netdev_dummy_receive(struct unixctl_conn *conn, } ovs_mutex_lock(&dummy_dev->mutex); - dummy_dev->stats.rx_packets++; - dummy_dev->stats.rx_bytes += packet->size; netdev_dummy_queue_packet(dummy_dev, packet); ovs_mutex_unlock(&dummy_dev->mutex); } -- 1.8.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev