summaryrefslogtreecommitdiffstats
path: root/src/drivers/net/forcedeth.c
diff options
context:
space:
mode:
authorMichael Brown2011-03-29 22:55:04 +0200
committerMichael Brown2011-03-29 22:57:31 +0200
commit797c29adda51718f850e1a58a214001181c85686 (patch)
tree29c3e5abeddf2983a906ec4071880673ab8be420 /src/drivers/net/forcedeth.c
parent[build] Fix compilation when gcc is patched to default to -fPIE -Wl,-pie (diff)
downloadipxe-797c29adda51718f850e1a58a214001181c85686.tar.gz
ipxe-797c29adda51718f850e1a58a214001181c85686.tar.xz
ipxe-797c29adda51718f850e1a58a214001181c85686.zip
[forcedeth] Remove software unicast MAC address filter
The forcedeth driver currently implements unicast MAC address filtering in software. This is almost invariably the wrong thing to do (since the network stack must already be able to cope with unwanted packets) and it breaks FCoE (which requires the card to operate in promiscuous mode). Also, the implementation is buggy: is_local_ether_addr() is used to check for a locally-assigned Ethernet address (not to check for a unicast address), and the current link-layer address is in netdev->ll_addr, not netdev->hw_addr. Fix by removing this code. Reported-by: Tal Aloni <tal.aloni.il@gmail.com> Tested-by: Tal Aloni <tal.aloni.il@gmail.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net/forcedeth.c')
-rw-r--r--src/drivers/net/forcedeth.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/src/drivers/net/forcedeth.c b/src/drivers/net/forcedeth.c
index a54eae44..bb3d6844 100644
--- a/src/drivers/net/forcedeth.c
+++ b/src/drivers/net/forcedeth.c
@@ -934,15 +934,8 @@ nv_process_rx_packets ( struct net_device *netdev )
} else {
len = flags & LEN_MASK_V1;
- /* Filter any frames that have as destination address a
- * local MAC address but are not meant for this NIC */
- if ( is_local_ether_addr ( curr_iob->data ) &&
- memcmp ( curr_iob->data, netdev->hw_addr, ETH_ALEN ) ) {
- free_iob ( curr_iob );
- } else {
- iob_put ( curr_iob, len );
- netdev_rx ( netdev, curr_iob );
- }
+ iob_put ( curr_iob, len );
+ netdev_rx ( netdev, curr_iob );
}
/* Invalidate iobuf */