Skip to content

Commit

Permalink
[ETH]: ether address compare
Browse files Browse the repository at this point in the history
Expose faster ether compare for use by protocols and other
driver. And change name to be more consistent with other ether
address manipulation routines in same file

Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
  • Loading branch information
Stephen Hemminger authored and Arnaldo Carvalho de Melo committed Oct 29, 2005
1 parent e83b860 commit 360ac8e
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 15 deletions.
16 changes: 16 additions & 0 deletions include/linux/etherdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,22 @@ static inline void random_ether_addr(u8 *addr)
addr [0] &= 0xfe; /* clear multicast bit */
addr [0] |= 0x02; /* set local assignment bit (IEEE802) */
}

/**
* compare_ether_addr - Compare two 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 0 if equal
*/
static inline unsigned compare_ether_addr(const u8 *_a, const u8 *_b)
{
const u16 *a = (const u16 *) _a;
const u16 *b = (const u16 *) _b;

BUILD_BUG_ON(ETH_ALEN != 6);
return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0;
}
#endif /* __KERNEL__ */

#endif /* _LINUX_ETHERDEVICE_H */
17 changes: 2 additions & 15 deletions net/ethernet/eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,19 +146,6 @@ int eth_rebuild_header(struct sk_buff *skb)
return 0;
}

static inline unsigned int compare_eth_addr(const unsigned char *__a, const unsigned char *__b)
{
const unsigned short *dest = (unsigned short *) __a;
const unsigned short *devaddr = (unsigned short *) __b;
unsigned int res;

BUILD_BUG_ON(ETH_ALEN != 6);
res = ((dest[0] ^ devaddr[0]) |
(dest[1] ^ devaddr[1]) |
(dest[2] ^ devaddr[2])) != 0;

return res;
}

/*
* Determine the packet's protocol ID. The rule here is that we
Expand All @@ -176,7 +163,7 @@ __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)
eth = eth_hdr(skb);

if (*eth->h_dest&1) {
if (!compare_eth_addr(eth->h_dest, dev->broadcast))
if (!compare_ether_addr(eth->h_dest, dev->broadcast))
skb->pkt_type = PACKET_BROADCAST;
else
skb->pkt_type = PACKET_MULTICAST;
Expand All @@ -191,7 +178,7 @@ __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)
*/

else if(1 /*dev->flags&IFF_PROMISC*/) {
if (unlikely(compare_eth_addr(eth->h_dest, dev->dev_addr)))
if (unlikely(compare_ether_addr(eth->h_dest, dev->dev_addr)))
skb->pkt_type = PACKET_OTHERHOST;
}

Expand Down

0 comments on commit 360ac8e

Please sign in to comment.