david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[ipoib] Resimplify test for received broadcast packets

Commit e62e52b ("[ipoib] Simplify test for received broadcast
packets") relies upon the multicast LID being present in the
destination address vector as passed to ipoib_complete_recv().
Unfortunately, this information is not present in many Infiniband
devices' completion queue entries.

Fix by testing instead for the presence of a multicast GID.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2016-03-08 17:02:24 +00:00
parent 076d772648
commit b5aa51ac62
2 changed files with 5 additions and 2 deletions

View File

@ -671,8 +671,8 @@ static void ipoib_complete_recv ( struct ib_device *ibdev __unused,
ethhdr->h_protocol = net_proto;
/* Construct destination address */
if ( IB_LID_MULTICAST ( dest->lid ) ) {
/* Multicast LID; use the Ethernet broadcast address */
if ( dest->gid_present && IB_GID_MULTICAST ( &dest->gid ) ) {
/* Multicast GID: use the Ethernet broadcast address */
memcpy ( &ethhdr->h_dest, eth_broadcast,
sizeof ( ethhdr->h_dest ) );
} else {

View File

@ -48,6 +48,9 @@ union ib_gid {
#define IB_GID_ARGS( gid ) \
IB_GUID_ARGS ( &(gid)->s.prefix ), IB_GUID_ARGS ( &(gid)->s.guid )
/** Test for multicast GID */
#define IB_GID_MULTICAST( gid ) ( (gid)->bytes[0] == 0xff )
/** An Infiniband Local Route Header */
struct ib_local_route_header {
/** Virtual lane and link version */