diff options
| author | Joe Perches <joe@perches.com> | 2016-06-24 14:32:26 -0400 |
|---|---|---|
| committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-07-01 10:37:06 -0400 |
| commit | 4ae89ad92477219b504a49966ee010fe8dcb85af (patch) | |
| tree | 6f276cd42d61899ce9f6952c87361c059295790f /include/linux/etherdevice.h | |
| parent | 468b021b944922e8fe0a30b6b6e0532bb95e4edc (diff) | |
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>
Diffstat (limited to 'include/linux/etherdevice.h')
| -rw-r--r-- | include/linux/etherdevice.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index 37ff4a6faa9a..6fec9e81bd70 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h | |||
| @@ -374,6 +374,29 @@ static inline bool ether_addr_equal_unaligned(const u8 *addr1, const u8 *addr2) | |||
| 374 | } | 374 | } |
| 375 | 375 | ||
| 376 | /** | 376 | /** |
| 377 | * ether_addr_equal_masked - Compare two Ethernet addresses with a mask | ||
| 378 | * @addr1: Pointer to a six-byte array containing the 1st Ethernet address | ||
| 379 | * @addr2: Pointer to a six-byte array containing the 2nd Ethernet address | ||
| 380 | * @mask: Pointer to a six-byte array containing the Ethernet address bitmask | ||
| 381 | * | ||
| 382 | * Compare two Ethernet addresses with a mask, returns true if for every bit | ||
| 383 | * set in the bitmask the equivalent bits in the ethernet addresses are equal. | ||
| 384 | * Using a mask with all bits set is a slower ether_addr_equal. | ||
| 385 | */ | ||
| 386 | static inline bool ether_addr_equal_masked(const u8 *addr1, const u8 *addr2, | ||
| 387 | const u8 *mask) | ||
| 388 | { | ||
| 389 | int i; | ||
| 390 | |||
| 391 | for (i = 0; i < ETH_ALEN; i++) { | ||
| 392 | if ((addr1[i] ^ addr2[i]) & mask[i]) | ||
| 393 | return false; | ||
| 394 | } | ||
| 395 | |||
| 396 | return true; | ||
| 397 | } | ||
| 398 | |||
| 399 | /** | ||
| 377 | * is_etherdev_addr - Tell if given Ethernet address belongs to the device. | 400 | * is_etherdev_addr - Tell if given Ethernet address belongs to the device. |
| 378 | * @dev: Pointer to a device structure | 401 | * @dev: Pointer to a device structure |
| 379 | * @addr: Pointer to a six-byte array containing the Ethernet address | 402 | * @addr: Pointer to a six-byte array containing the Ethernet address |
