|
@@ -217,6 +217,28 @@ static inline void eth_hw_addr_random(struct net_device *dev)
|
|
|
eth_random_addr(dev->dev_addr);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * ether_addr_copy - Copy an Ethernet address
|
|
|
+ * @dst: Pointer to a six-byte array Ethernet address destination
|
|
|
+ * @src: Pointer to a six-byte array Ethernet address source
|
|
|
+ *
|
|
|
+ * Please note: dst & src must both be aligned to u16.
|
|
|
+ */
|
|
|
+static inline void ether_addr_copy(u8 *dst, const u8 *src)
|
|
|
+{
|
|
|
+#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
|
|
|
+ *(u32 *)dst = *(const u32 *)src;
|
|
|
+ *(u16 *)(dst + 4) = *(const u16 *)(src + 4);
|
|
|
+#else
|
|
|
+ u16 *a = (u16 *)dst;
|
|
|
+ const u16 *b = (const u16 *)src;
|
|
|
+
|
|
|
+ a[0] = b[0];
|
|
|
+ a[1] = b[1];
|
|
|
+ a[2] = b[2];
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* eth_hw_addr_inherit - Copy dev_addr from another net_device
|
|
|
* @dst: pointer to net_device to copy dev_addr to
|
|
@@ -229,7 +251,7 @@ static inline void eth_hw_addr_inherit(struct net_device *dst,
|
|
|
struct net_device *src)
|
|
|
{
|
|
|
dst->addr_assign_type = src->addr_assign_type;
|
|
|
- memcpy(dst->dev_addr, src->dev_addr, ETH_ALEN);
|
|
|
+ ether_addr_copy(dst->dev_addr, src->dev_addr);
|
|
|
}
|
|
|
|
|
|
/**
|