Commit cbeeea70 authored by Debabrata Banerjee's avatar Debabrata Banerjee Committed by David S. Miller

bonding: use common mac addr checks

Replace homegrown mac addr checks with faster defs from etherdevice.h

Note that this will also prevent any rlb arp updates for multicast
addresses, however this should have been forbidden anyway.
Signed-off-by: default avatarDebabrata Banerjee <dbanerje@akamai.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 25780410
...@@ -40,11 +40,6 @@ ...@@ -40,11 +40,6 @@
#include <net/bonding.h> #include <net/bonding.h>
#include <net/bond_alb.h> #include <net/bond_alb.h>
static const u8 mac_bcast[ETH_ALEN + 2] __long_aligned = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
static const u8 mac_v6_allmcast[ETH_ALEN + 2] __long_aligned = { static const u8 mac_v6_allmcast[ETH_ALEN + 2] __long_aligned = {
0x33, 0x33, 0x00, 0x00, 0x00, 0x01 0x33, 0x33, 0x00, 0x00, 0x00, 0x01
}; };
...@@ -420,9 +415,7 @@ static void rlb_clear_slave(struct bonding *bond, struct slave *slave) ...@@ -420,9 +415,7 @@ static void rlb_clear_slave(struct bonding *bond, struct slave *slave)
if (assigned_slave) { if (assigned_slave) {
rx_hash_table[index].slave = assigned_slave; rx_hash_table[index].slave = assigned_slave;
if (!ether_addr_equal_64bits(rx_hash_table[index].mac_dst, if (is_valid_ether_addr(rx_hash_table[index].mac_dst)) {
mac_bcast) &&
!is_zero_ether_addr(rx_hash_table[index].mac_dst)) {
bond_info->rx_hashtbl[index].ntt = 1; bond_info->rx_hashtbl[index].ntt = 1;
bond_info->rx_ntt = 1; bond_info->rx_ntt = 1;
/* A slave has been removed from the /* A slave has been removed from the
...@@ -525,8 +518,7 @@ static void rlb_req_update_slave_clients(struct bonding *bond, struct slave *sla ...@@ -525,8 +518,7 @@ static void rlb_req_update_slave_clients(struct bonding *bond, struct slave *sla
client_info = &(bond_info->rx_hashtbl[hash_index]); client_info = &(bond_info->rx_hashtbl[hash_index]);
if ((client_info->slave == slave) && if ((client_info->slave == slave) &&
!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) && is_valid_ether_addr(client_info->mac_dst)) {
!is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1; client_info->ntt = 1;
ntt = 1; ntt = 1;
} }
...@@ -567,8 +559,7 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip) ...@@ -567,8 +559,7 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip)
if ((client_info->ip_src == src_ip) && if ((client_info->ip_src == src_ip) &&
!ether_addr_equal_64bits(client_info->slave->dev->dev_addr, !ether_addr_equal_64bits(client_info->slave->dev->dev_addr,
bond->dev->dev_addr) && bond->dev->dev_addr) &&
!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) && is_valid_ether_addr(client_info->mac_dst)) {
!is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1; client_info->ntt = 1;
bond_info->rx_ntt = 1; bond_info->rx_ntt = 1;
} }
...@@ -596,7 +587,7 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon ...@@ -596,7 +587,7 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon
if ((client_info->ip_src == arp->ip_src) && if ((client_info->ip_src == arp->ip_src) &&
(client_info->ip_dst == arp->ip_dst)) { (client_info->ip_dst == arp->ip_dst)) {
/* the entry is already assigned to this client */ /* the entry is already assigned to this client */
if (!ether_addr_equal_64bits(arp->mac_dst, mac_bcast)) { if (!is_broadcast_ether_addr(arp->mac_dst)) {
/* update mac address from arp */ /* update mac address from arp */
ether_addr_copy(client_info->mac_dst, arp->mac_dst); ether_addr_copy(client_info->mac_dst, arp->mac_dst);
} }
...@@ -644,8 +635,7 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon ...@@ -644,8 +635,7 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon
ether_addr_copy(client_info->mac_src, arp->mac_src); ether_addr_copy(client_info->mac_src, arp->mac_src);
client_info->slave = assigned_slave; client_info->slave = assigned_slave;
if (!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) && if (is_valid_ether_addr(client_info->mac_dst)) {
!is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1; client_info->ntt = 1;
bond->alb_info.rx_ntt = 1; bond->alb_info.rx_ntt = 1;
} else { } else {
...@@ -1418,9 +1408,9 @@ netdev_tx_t bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev) ...@@ -1418,9 +1408,9 @@ netdev_tx_t bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
case ETH_P_IP: { case ETH_P_IP: {
const struct iphdr *iph = ip_hdr(skb); const struct iphdr *iph = ip_hdr(skb);
if (ether_addr_equal_64bits(eth_data->h_dest, mac_bcast) || if (is_broadcast_ether_addr(eth_data->h_dest) ||
(iph->daddr == ip_bcast) || iph->daddr == ip_bcast ||
(iph->protocol == IPPROTO_IGMP)) { iph->protocol == IPPROTO_IGMP) {
do_tx_balance = false; do_tx_balance = false;
break; break;
} }
...@@ -1432,7 +1422,7 @@ netdev_tx_t bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev) ...@@ -1432,7 +1422,7 @@ netdev_tx_t bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
/* IPv6 doesn't really use broadcast mac address, but leave /* IPv6 doesn't really use broadcast mac address, but leave
* that here just in case. * that here just in case.
*/ */
if (ether_addr_equal_64bits(eth_data->h_dest, mac_bcast)) { if (is_broadcast_ether_addr(eth_data->h_dest)) {
do_tx_balance = false; do_tx_balance = false;
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment