aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/etherdevice.h
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@pobox.com>2005-11-05 15:39:24 -0500
committerJeff Garzik <jgarzik@pobox.com>2005-11-05 15:39:24 -0500
commit7211bb9b64f17b23834d91fc3d0c1d78671ee9a8 (patch)
tree541909f86c31fee97cd70d28ec2fe5c23e1ceb02 /include/linux/etherdevice.h
parentf1e691a24955ea987f021f378324fb5003b1b208 (diff)
parent70d9d825e0a5a78ec1dacaaaf5c72ff5b0206fab (diff)
Merge branch 'master'
Diffstat (limited to 'include/linux/etherdevice.h')
-rw-r--r--include/linux/etherdevice.h35
1 files changed, 28 insertions, 7 deletions
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
index 4522c7186bf3..5f49a30eb6f2 100644
--- a/include/linux/etherdevice.h
+++ b/include/linux/etherdevice.h
@@ -48,8 +48,10 @@ static inline void eth_copy_and_sum (struct sk_buff *dest,
48} 48}
49 49
50/** 50/**
51 * is_zero_ether_addr - Determine if give Ethernet address is all 51 * is_zero_ether_addr - Determine if give Ethernet address is all zeros.
52 * zeros. 52 * @addr: Pointer to a six-byte array containing the Ethernet address
53 *
54 * Return true if the address is all zeroes.
53 */ 55 */
54static inline int is_zero_ether_addr(const u8 *addr) 56static inline int is_zero_ether_addr(const u8 *addr)
55{ 57{
@@ -57,9 +59,7 @@ static inline int is_zero_ether_addr(const u8 *addr)
57} 59}
58 60
59/** 61/**
60 * is_multicast_ether_addr - Determine if the given Ethernet address is a 62 * is_multicast_ether_addr - Determine if the Ethernet address is a multicast.
61 * multicast address.
62 *
63 * @addr: Pointer to a six-byte array containing the Ethernet address 63 * @addr: Pointer to a six-byte array containing the Ethernet address
64 * 64 *
65 * Return true if the address is a multicast address. 65 * Return true if the address is a multicast address.
@@ -69,10 +69,15 @@ static inline int is_multicast_ether_addr(const u8 *addr)
69 return ((addr[0] != 0xff) && (0x01 & addr[0])); 69 return ((addr[0] != 0xff) && (0x01 & addr[0]));
70} 70}
71 71
72/**
73 * is_broadcast_ether_addr - Determine if the Ethernet address is broadcast
74 * @addr: Pointer to a six-byte array containing the Ethernet address
75 *
76 * Return true if the address is the broadcast address.
77 */
72static inline int is_broadcast_ether_addr(const u8 *addr) 78static inline int is_broadcast_ether_addr(const u8 *addr)
73{ 79{
74 return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && 80 return (addr[0] & addr[1] & addr[2] & addr[3] & addr[4] & addr[5]) == 0xff;
75 (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
76} 81}
77 82
78/** 83/**
@@ -104,6 +109,22 @@ static inline void random_ether_addr(u8 *addr)
104 addr [0] &= 0xfe; /* clear multicast bit */ 109 addr [0] &= 0xfe; /* clear multicast bit */
105 addr [0] |= 0x02; /* set local assignment bit (IEEE802) */ 110 addr [0] |= 0x02; /* set local assignment bit (IEEE802) */
106} 111}
112
113/**
114 * compare_ether_addr - Compare two Ethernet addresses
115 * @addr1: Pointer to a six-byte array containing the Ethernet address
116 * @addr2: Pointer other six-byte array containing the Ethernet address
117 *
118 * Compare two ethernet addresses, returns 0 if equal
119 */
120static inline unsigned compare_ether_addr(const u8 *addr1, const u8 *addr2)
121{
122 const u16 *a = (const u16 *) addr1;
123 const u16 *b = (const u16 *) addr2;
124
125 BUILD_BUG_ON(ETH_ALEN != 6);
126 return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0;
127}
107#endif /* __KERNEL__ */ 128#endif /* __KERNEL__ */
108 129
109#endif /* _LINUX_ETHERDEVICE_H */ 130#endif /* _LINUX_ETHERDEVICE_H */