Skip to content

Commit

Permalink
[ipoib] Report packets as broadcast when ambiguous
Browse files Browse the repository at this point in the history
Avoid spurious matches for peer key 0 against empty peer cache
entries, and set the LL_MULTICAST flag in addition to LL_BROADCAST.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Nov 15, 2011
1 parent 91dd64a commit 8ccaec5
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions src/drivers/net/ipoib.c
Expand Up @@ -120,7 +120,10 @@ struct ipoib_peer {
static struct ipoib_peer ipoib_peer_cache[IPOIB_NUM_CACHED_PEERS];

/** Oldest IPoIB peer cache entry index */
static unsigned int ipoib_peer_cache_idx = 1;
static unsigned int ipoib_peer_cache_idx = 0;

/** IPoIB peer cache entry validity flag */
#define IPOIB_PEER_KEY_VALID 0x80

/**
* Look up cached peer by key
Expand All @@ -132,16 +135,17 @@ static struct ipoib_peer * ipoib_lookup_peer_by_key ( unsigned int key ) {
struct ipoib_peer *peer;
unsigned int i;

if ( ! key )
return NULL;

for ( i = 0 ; i < IPOIB_NUM_CACHED_PEERS ; i++ ) {
peer = &ipoib_peer_cache[i];
if ( peer->key == key )
return peer;
}

if ( key != 0 ) {
DBG ( "IPoIB warning: peer cache lost track of key %x while "
"still in use\n", key );
}
DBG ( "IPoIB warning: peer cache lost track of key %x while still in "
"use\n", key );
return NULL;
}

Expand All @@ -153,7 +157,7 @@ static struct ipoib_peer * ipoib_lookup_peer_by_key ( unsigned int key ) {
*/
static struct ipoib_peer * ipoib_cache_peer ( const struct ipoib_mac *mac ) {
struct ipoib_peer *peer;
unsigned int key;
uint8_t key;
unsigned int i;

/* Look for existing cache entry */
Expand All @@ -164,7 +168,7 @@ static struct ipoib_peer * ipoib_cache_peer ( const struct ipoib_mac *mac ) {
}

/* No entry found: create a new one */
key = ipoib_peer_cache_idx++;
key = ( ipoib_peer_cache_idx++ | IPOIB_PEER_KEY_VALID );
peer = &ipoib_peer_cache[ key % IPOIB_NUM_CACHED_PEERS ];
if ( peer->key )
DBG ( "IPoIB peer %x evicted from cache\n", peer->key );
Expand Down Expand Up @@ -257,7 +261,8 @@ static int ipoib_pull ( struct net_device *netdev,
*ll_dest = ( dest ? &dest->mac : &ipoib->broadcast );
*ll_source = ( source ? &source->mac : &ipoib->broadcast );
*net_proto = ipoib_hdr->proto;
*flags = ( ( *ll_dest == &ipoib->broadcast ) ? LL_BROADCAST : 0 );
*flags = ( ( *ll_dest == &ipoib->broadcast ) ?
( LL_MULTICAST | LL_BROADCAST ) : 0 );

return 0;
}
Expand Down

0 comments on commit 8ccaec5

Please sign in to comment.