Message ID | 20210521132756.1811620-4-jarod@redhat.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next,v2,1/4] bonding: add pure source-mac-based tx hashing option | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | warning | Series does not have a cover letter |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for net-next |
netdev/subject_prefix | success | Link |
netdev/cc_maintainers | success | CCed 6 of 6 maintainers |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 16 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
Jarod Wilson <jarod@redhat.com> wrote: >Multicast traffic going out the non-primary interface can come back in >through the primary interface in alb mode. When there's a bridge sitting >on top of the bond, with virtual machines behind it, attached to vnetX >interfaces also acting as bridge ports, this can cause problems. The >looped frame has the source MAC of the VM behind the bridge, and ends up >rewriting the bridge forwarding database entries, replacing a vnetX entry >in the fdb with the bond instead, at which point, we lose traffic. If we >don't tx balance multicast traffic, we don't break connectivity. > >Cc: Jay Vosburgh <j.vosburgh@gmail.com> >Cc: Veaceslav Falico <vfalico@gmail.com> >Cc: Andy Gospodarek <andy@greyhouse.net> >Cc: "David S. Miller" <davem@davemloft.net> >Cc: Jakub Kicinski <kuba@kernel.org> >Cc: Thomas Davis <tadavis@lbl.gov> >Cc: netdev@vger.kernel.org >Signed-off-by: Jarod Wilson <jarod@redhat.com> Acked-by: Jay Vosburgh <jay.vosburgh@canonical.com> >--- > drivers/net/bonding/bond_alb.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > >diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c >index c57f62e43328..cddc4d8b2519 100644 >--- a/drivers/net/bonding/bond_alb.c >+++ b/drivers/net/bonding/bond_alb.c >@@ -1418,7 +1418,7 @@ struct slave *bond_xmit_alb_slave_get(struct bonding *bond, > case ETH_P_IP: { > const struct iphdr *iph; > >- if (is_broadcast_ether_addr(eth_data->h_dest) || >+ if (is_multicast_ether_addr(eth_data->h_dest) || > !pskb_network_may_pull(skb, sizeof(*iph))) { > do_tx_balance = false; > break; >@@ -1438,7 +1438,7 @@ struct slave *bond_xmit_alb_slave_get(struct bonding *bond, > /* IPv6 doesn't really use broadcast mac address, but leave > * that here just in case. > */ >- if (is_broadcast_ether_addr(eth_data->h_dest)) { >+ if (is_multicast_ether_addr(eth_data->h_dest)) { > do_tx_balance = false; > break; > } >-- >2.30.2 >
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c index c57f62e43328..cddc4d8b2519 100644 --- a/drivers/net/bonding/bond_alb.c +++ b/drivers/net/bonding/bond_alb.c @@ -1418,7 +1418,7 @@ struct slave *bond_xmit_alb_slave_get(struct bonding *bond, case ETH_P_IP: { const struct iphdr *iph; - if (is_broadcast_ether_addr(eth_data->h_dest) || + if (is_multicast_ether_addr(eth_data->h_dest) || !pskb_network_may_pull(skb, sizeof(*iph))) { do_tx_balance = false; break; @@ -1438,7 +1438,7 @@ struct slave *bond_xmit_alb_slave_get(struct bonding *bond, /* IPv6 doesn't really use broadcast mac address, but leave * that here just in case. */ - if (is_broadcast_ether_addr(eth_data->h_dest)) { + if (is_multicast_ether_addr(eth_data->h_dest)) { do_tx_balance = false; break; }
Multicast traffic going out the non-primary interface can come back in through the primary interface in alb mode. When there's a bridge sitting on top of the bond, with virtual machines behind it, attached to vnetX interfaces also acting as bridge ports, this can cause problems. The looped frame has the source MAC of the VM behind the bridge, and ends up rewriting the bridge forwarding database entries, replacing a vnetX entry in the fdb with the bond instead, at which point, we lose traffic. If we don't tx balance multicast traffic, we don't break connectivity. Cc: Jay Vosburgh <j.vosburgh@gmail.com> Cc: Veaceslav Falico <vfalico@gmail.com> Cc: Andy Gospodarek <andy@greyhouse.net> Cc: "David S. Miller" <davem@davemloft.net> Cc: Jakub Kicinski <kuba@kernel.org> Cc: Thomas Davis <tadavis@lbl.gov> Cc: netdev@vger.kernel.org Signed-off-by: Jarod Wilson <jarod@redhat.com> --- drivers/net/bonding/bond_alb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)