etherdevice.h & bridge: netfilter: Add and use ether_addr_equal_masked
There are code duplications of a masked ethernet address comparison here so make it a separate function instead. Miscellanea: o Neaten alignment of FWINV macro uses to make it clearer for the reader Signed-off-by: Joe Perches <joe@perches.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
committed by
Pablo Neira Ayuso
parent
468b021b94
commit
4ae89ad924
@@ -373,6 +373,29 @@ static inline bool ether_addr_equal_unaligned(const u8 *addr1, const u8 *addr2)
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* ether_addr_equal_masked - Compare two Ethernet addresses with a mask
|
||||
* @addr1: Pointer to a six-byte array containing the 1st Ethernet address
|
||||
* @addr2: Pointer to a six-byte array containing the 2nd Ethernet address
|
||||
* @mask: Pointer to a six-byte array containing the Ethernet address bitmask
|
||||
*
|
||||
* Compare two Ethernet addresses with a mask, returns true if for every bit
|
||||
* set in the bitmask the equivalent bits in the ethernet addresses are equal.
|
||||
* Using a mask with all bits set is a slower ether_addr_equal.
|
||||
*/
|
||||
static inline bool ether_addr_equal_masked(const u8 *addr1, const u8 *addr2,
|
||||
const u8 *mask)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ETH_ALEN; i++) {
|
||||
if ((addr1[i] ^ addr2[i]) & mask[i])
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* is_etherdev_addr - Tell if given Ethernet address belongs to the device.
|
||||
* @dev: Pointer to a device structure
|
||||
|
||||
Reference in New Issue
Block a user