Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1372796 > unrolled thread
| Started by | Debabrata Banerjee <dbanerje@akamai.com> |
|---|---|
| First post | 2016-04-06 22:30 +0200 |
| Last post | 2016-04-11 04:30 +0200 |
| Articles | 4 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH 1/3] bonding: do not allow rlb updates to invalid mac Debabrata Banerjee <dbanerje@akamai.com> - 2016-04-06 22:30 +0200
[PATCH 2/3] bonding: don't request extraneous rlb updates Debabrata Banerjee <dbanerje@akamai.com> - 2016-04-06 22:30 +0200
[PATCH 3/3] bonding: use common broadcast addr checks Debabrata Banerjee <dbanerje@akamai.com> - 2016-04-06 22:30 +0200
Re: [PATCH 1/3] bonding: do not allow rlb updates to invalid mac David Miller <davem@davemloft.net> - 2016-04-11 04:30 +0200
| From | Debabrata Banerjee <dbanerje@akamai.com> |
|---|---|
| Date | 2016-04-06 22:30 +0200 |
| Subject | [PATCH 1/3] bonding: do not allow rlb updates to invalid mac |
| Message-ID | <rl2fo-Yp-1@gated-at.bofh.it> |
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
[toc] | [next] | [standalone]
| From | Debabrata Banerjee <dbanerje@akamai.com> |
|---|---|
| Date | 2016-04-06 22:30 +0200 |
| Subject | [PATCH 2/3] bonding: don't request extraneous rlb updates |
| Message-ID | <rl2fo-Yp-5@gated-at.bofh.it> |
| In reply to | #1372796 |
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
[toc] | [prev] | [next] | [standalone]
| From | Debabrata Banerjee <dbanerje@akamai.com> |
|---|---|
| Date | 2016-04-06 22:30 +0200 |
| Subject | [PATCH 3/3] bonding: use common broadcast addr checks |
| Message-ID | <rl2fo-Yp-9@gated-at.bofh.it> |
| In reply to | #1372796 |
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
[toc] | [prev] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2016-04-11 04:30 +0200 |
| Message-ID | <rmzLY-6Ud-11@gated-at.bofh.it> |
| In reply to | #1372796 |
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.
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web