From bbe2f399b222f1f2fcf5cd2ea78e4f5c9a66c64e Mon Sep 17 00:00:00 2001 From: Alex Williamson Date: Fri, 5 Jun 2009 14:47:02 -0600 Subject: [PATCH] virtio-net: reorganize receive_filter() Reorganize receive_filter to better handle the split between unicast and multicast filtering. This allows us to skip the broadcast check on unicast packets and leads to more opportunities for optimization. Signed-off-by: Alex Williamson Signed-off-by: Mark McLoughlin --- hw/virtio-net.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/hw/virtio-net.c b/hw/virtio-net.c index 13eb0d1..445976a 100644 --- a/hw/virtio-net.c +++ b/hw/virtio-net.c @@ -347,14 +347,17 @@ static int receive_filter(VirtIONet *n, const uint8_t *buf, int size) return 0; } - if ((ptr[0] & 1) && n->allmulti) - return 1; - - if (!memcmp(ptr, bcast, sizeof(bcast))) - return 1; - - if (!memcmp(ptr, n->mac, ETH_ALEN)) - return 1; + if (ptr[0] & 1) { // multicast + if (!memcmp(ptr, bcast, sizeof(bcast))) { + return 1; + } else if (n->allmulti) { + return 1; + } + } else { // unicast + if (!memcmp(ptr, n->mac, ETH_ALEN)) { + return 1; + } + } for (i = 0; i < n->mac_table.in_use; i++) { if (!memcmp(ptr, &n->mac_table.macs[i * ETH_ALEN], ETH_ALEN)) -- 1.7.9.5