* [PATCH 1/3] bonding: do not allow rlb updates to invalid mac
@ 2016-04-06 20:24 Debabrata Banerjee
2016-04-06 20:24 ` [PATCH 2/3] bonding: don't request extraneous rlb updates Debabrata Banerjee
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Debabrata Banerjee @ 2016-04-06 20:24 UTC (permalink / raw)
To: Jay Vosburgh, Veaceslav Falico, Andy Gospodarek, netdev
Cc: linux-kernel, Debabrata Banerjee
Make sure multicast, broadcast, and zero mac's cannot be the output of rlb
updates, which should all be directed arps. Receive load balancing will be
collapsed if any of these happen, as the switch will broadcast.
Signed-off-by: Debabrata Banerjee <dbanerje@akamai.com>
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index c5ac160..1b45378 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -453,7 +453,7 @@ static void rlb_update_client(struct rlb_client_info *client_info)
{
int i;
- if (!client_info->slave)
+ if (!client_info->slave || !is_valid_ether_addr(client_info->mac_dst))
return;
for (i = 0; i < RLB_ARP_BURST_SIZE; i++) {
--
2.8.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/3] bonding: don't request extraneous rlb updates
2016-04-06 20:24 [PATCH 1/3] bonding: do not allow rlb updates to invalid mac Debabrata Banerjee
@ 2016-04-06 20:24 ` Debabrata Banerjee
2016-04-06 20:24 ` [PATCH 3/3] bonding: use common broadcast addr checks Debabrata Banerjee
2016-04-11 2:26 ` [PATCH 1/3] bonding: do not allow rlb updates to invalid mac David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Debabrata Banerjee @ 2016-04-06 20:24 UTC (permalink / raw)
To: Jay Vosburgh, Veaceslav Falico, Andy Gospodarek, netdev
Cc: linux-kernel, Debabrata Banerjee
Don't attempt to send rlb updates for incomplete entries, which can't be
sent anyway.
Signed-off-by: Debabrata Banerjee <dbanerje@akamai.com>
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index 1b45378..b7c7027 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -424,7 +424,8 @@ static void rlb_clear_slave(struct bonding *bond, struct slave *slave)
if (assigned_slave) {
rx_hash_table[index].slave = assigned_slave;
if (!ether_addr_equal_64bits(rx_hash_table[index].mac_dst,
- mac_bcast)) {
+ mac_bcast) &&
+ !is_zero_ether_addr(rx_hash_table[index].mac_dst)) {
bond_info->rx_hashtbl[index].ntt = 1;
bond_info->rx_ntt = 1;
/* A slave has been removed from the
@@ -527,7 +528,8 @@ static void rlb_req_update_slave_clients(struct bonding *bond, struct slave *sla
client_info = &(bond_info->rx_hashtbl[hash_index]);
if ((client_info->slave == slave) &&
- !ether_addr_equal_64bits(client_info->mac_dst, mac_bcast)) {
+ !ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) &&
+ !is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1;
ntt = 1;
}
@@ -568,7 +570,8 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip)
if ((client_info->ip_src == src_ip) &&
!ether_addr_equal_64bits(client_info->slave->dev->dev_addr,
bond->dev->dev_addr) &&
- !ether_addr_equal_64bits(client_info->mac_dst, mac_bcast)) {
+ !ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) &&
+ !is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1;
bond_info->rx_ntt = 1;
}
@@ -644,7 +647,8 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon
ether_addr_copy(client_info->mac_src, arp->mac_src);
client_info->slave = assigned_slave;
- if (!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast)) {
+ if (!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) &&
+ !is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1;
bond->alb_info.rx_ntt = 1;
} else {
@@ -735,8 +739,10 @@ static void rlb_rebalance(struct bonding *bond)
assigned_slave = __rlb_next_rx_slave(bond);
if (assigned_slave && (client_info->slave != assigned_slave)) {
client_info->slave = assigned_slave;
- client_info->ntt = 1;
- ntt = 1;
+ if (!is_zero_ether_addr(client_info->mac_dst)) {
+ client_info->ntt = 1;
+ ntt = 1;
+ }
}
}
--
2.8.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 3/3] bonding: use common broadcast addr checks
2016-04-06 20:24 [PATCH 1/3] bonding: do not allow rlb updates to invalid mac Debabrata Banerjee
2016-04-06 20:24 ` [PATCH 2/3] bonding: don't request extraneous rlb updates Debabrata Banerjee
@ 2016-04-06 20:24 ` Debabrata Banerjee
2016-04-11 2:26 ` [PATCH 1/3] bonding: do not allow rlb updates to invalid mac David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Debabrata Banerjee @ 2016-04-06 20:24 UTC (permalink / raw)
To: Jay Vosburgh, Veaceslav Falico, Andy Gospodarek, netdev
Cc: linux-kernel, Debabrata Banerjee
Replace homegrown broadcast checks with faster defs from etherdevice.h
Signed-off-by: Debabrata Banerjee <dbanerje@akamai.com>
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index b7c7027..27238f3 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -45,9 +45,6 @@
#ifndef __long_aligned
#define __long_aligned __attribute__((aligned((sizeof(long)))))
#endif
-static const u8 mac_bcast[ETH_ALEN] __long_aligned = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-};
static const u8 mac_v6_allmcast[ETH_ALEN] __long_aligned = {
0x33, 0x33, 0x00, 0x00, 0x00, 0x01
};
@@ -423,8 +420,8 @@ static void rlb_clear_slave(struct bonding *bond, struct slave *slave)
if (assigned_slave) {
rx_hash_table[index].slave = assigned_slave;
- if (!ether_addr_equal_64bits(rx_hash_table[index].mac_dst,
- mac_bcast) &&
+
+ if (!is_broadcast_ether_addr(rx_hash_table[index].mac_dst) &&
!is_zero_ether_addr(rx_hash_table[index].mac_dst)) {
bond_info->rx_hashtbl[index].ntt = 1;
bond_info->rx_ntt = 1;
@@ -528,7 +525,7 @@ static void rlb_req_update_slave_clients(struct bonding *bond, struct slave *sla
client_info = &(bond_info->rx_hashtbl[hash_index]);
if ((client_info->slave == slave) &&
- !ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) &&
+ !is_broadcast_ether_addr(client_info->mac_dst) &&
!is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1;
ntt = 1;
@@ -570,7 +567,7 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip)
if ((client_info->ip_src == src_ip) &&
!ether_addr_equal_64bits(client_info->slave->dev->dev_addr,
bond->dev->dev_addr) &&
- !ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) &&
+ !is_broadcast_ether_addr(client_info->mac_dst) &&
!is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1;
bond_info->rx_ntt = 1;
@@ -599,7 +596,7 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon
if ((client_info->ip_src == arp->ip_src) &&
(client_info->ip_dst == arp->ip_dst)) {
/* 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 */
ether_addr_copy(client_info->mac_dst, arp->mac_dst);
}
@@ -647,7 +644,7 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon
ether_addr_copy(client_info->mac_src, arp->mac_src);
client_info->slave = assigned_slave;
- if (!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast) &&
+ if (!is_broadcast_ether_addr(client_info->mac_dst) &&
!is_zero_ether_addr(client_info->mac_dst)) {
client_info->ntt = 1;
bond->alb_info.rx_ntt = 1;
@@ -1386,7 +1383,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
case ETH_P_IP: {
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->protocol == IPPROTO_IGMP)) {
do_tx_balance = false;
@@ -1400,7 +1397,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
/* IPv6 doesn't really use broadcast mac address, but leave
* 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;
break;
}
--
2.8.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/3] bonding: do not allow rlb updates to invalid mac
2016-04-06 20:24 [PATCH 1/3] bonding: do not allow rlb updates to invalid mac Debabrata Banerjee
2016-04-06 20:24 ` [PATCH 2/3] bonding: don't request extraneous rlb updates Debabrata Banerjee
2016-04-06 20:24 ` [PATCH 3/3] bonding: use common broadcast addr checks Debabrata Banerjee
@ 2016-04-11 2:26 ` David Miller
2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2016-04-11 2:26 UTC (permalink / raw)
To: dbanerje; +Cc: j.vosburgh, vfalico, gospo, netdev, linux-kernel
Please resubmit this patch series with a proper cover letter.
It should have "[PATCH 0/3] ..." as the subject line and explain
at a high level what your patch series is doing, how it is doing
it, and why it is doing it that way.
You must also be explicit about which of my trees your changes
are targetting.
Thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-04-11 2:26 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-06 20:24 [PATCH 1/3] bonding: do not allow rlb updates to invalid mac Debabrata Banerjee
2016-04-06 20:24 ` [PATCH 2/3] bonding: don't request extraneous rlb updates Debabrata Banerjee
2016-04-06 20:24 ` [PATCH 3/3] bonding: use common broadcast addr checks Debabrata Banerjee
2016-04-11 2:26 ` [PATCH 1/3] bonding: do not allow rlb updates to invalid mac David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).