etherdevice: Add ether_addr_equal_unaligned
authorJoe Perches <joe@perches.com>
Fri, 6 Dec 2013 22:21:01 +0000 (14:21 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 10 Dec 2013 01:58:10 +0000 (20:58 -0500)
Add a generic routine to test if possibly unaligned
to u16 Ethernet addresses are equal.

If CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is set,
this uses the slightly faster generic routine
ether_addr_equal, otherwise this uses memcmp.

Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/etherdevice.h

index 3526e819d7aee699f79fc869f33de2b8b6da5523..2f0e3d0818bce14a700f3b01cc61364129656ef2 100644 (file)
@@ -265,6 +265,24 @@ static inline bool ether_addr_equal_64bits(const u8 addr1[6+2],
 #endif
 }
 
+/**
+ * ether_addr_equal_unaligned - Compare two not u16 aligned Ethernet addresses
+ * @addr1: Pointer to a six-byte array containing the Ethernet address
+ * @addr2: Pointer other six-byte array containing the Ethernet address
+ *
+ * Compare two Ethernet addresses, returns true if equal
+ *
+ * Please note: Use only when any Ethernet address may not be u16 aligned.
+ */
+static inline bool ether_addr_equal_unaligned(const u8 *addr1, const u8 *addr2)
+{
+#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
+       return ether_addr_equal(addr1, addr2);
+#else
+       return memcmp(addr1, addr2, ETH_ALEN) == 0;
+#endif
+}
+
 /**
  * is_etherdev_addr - Tell if given Ethernet address belongs to the device.
  * @dev: Pointer to a device structure