aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2015-07-06 13:06:55 +0100
committerMichael Brown <mcb30@ipxe.org>2015-07-06 13:10:40 +0100
commit652e5a96db85a86633b5c40fc1699ae5c8039942 (patch)
tree67fbbd16a638d97d04607048f0629459ee7ec2bb
parent38afcc51ea6cccbbcc40cc4a5bae1213431943ec (diff)
downloadipxe-652e5a96db85a86633b5c40fc1699ae5c8039942.zip
ipxe-652e5a96db85a86633b5c40fc1699ae5c8039942.tar.gz
ipxe-652e5a96db85a86633b5c40fc1699ae5c8039942.tar.bz2
[ipoib] Transmit multicast packets as broadcasts
Multicast MAC addresses will never have REMAC cache entries, and the corresponding multicast IPoIB MAC address cannot be obtained simply by issuing an ARP request. For the trivial volume of multicast packets that we expect to send in any realistic scenario, the simplest solution is to send them as broadcasts instead. Reported-by: Wissam Shoukair <wissams@mellanox.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/drivers/net/ipoib.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/drivers/net/ipoib.c b/src/drivers/net/ipoib.c
index bec4bba..7ecb2c5 100644
--- a/src/drivers/net/ipoib.c
+++ b/src/drivers/net/ipoib.c
@@ -146,8 +146,10 @@ static struct ipoib_mac * ipoib_find_remac ( struct ipoib_device *ipoib,
const struct ipoib_remac *remac ) {
struct ipoib_peer *peer;
- /* Check for broadcast REMAC */
- if ( is_broadcast_ether_addr ( remac ) )
+ /* Check for broadcast or multicast REMAC. We transmit
+ * multicasts as broadcasts for simplicity.
+ */
+ if ( is_multicast_ether_addr ( remac ) )
return &ipoib->broadcast;
/* Try to find via REMAC cache */