On 10/16/13 1:17 PM, Simon Horman wrote:
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
I confirm that the above OFtests are passed on my (similar) setup as
well with the below patch.
pktact.WildcardPriorityWithDelete
pktact.WildcardPriority
These tests didn't fail on my setup, but the following two which did,
are now "ok":
counters.RxBytPerPort
counters.RxPktPerPort
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);
}
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev