From patchwork Tue May 18 21:08:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jarod Wilson X-Patchwork-Id: 12265659 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0A410C43461 for ; Tue, 18 May 2021 21:09:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D967161360 for ; Tue, 18 May 2021 21:09:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352409AbhERVKk (ORCPT ); Tue, 18 May 2021 17:10:40 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:21736 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352390AbhERVKh (ORCPT ); Tue, 18 May 2021 17:10:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621372158; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UVC1r939/JQx8mQNZjOgRyXe8/h7CYJeJrfHIrtd7Tc=; b=OJ1TBPkwetG1vcqtzbBKDlkugqLz/sA2+Nyr+kL8wlYYvEWDUlv5Seozl1Ca+zma6Yv1vZ Y6OXpSXuUVe/b3v/IOR0Lv2VpbyfHnBe8j36VXu8pPKAXuCqgUuWJ0pverU0xK7d2ug0GG BD30QJ7t8mzBJ091OtZZ6WQ9OcyMZBs= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-495-KRf3jJCXOUSRHXWaMrbaDQ-1; Tue, 18 May 2021 17:09:14 -0400 X-MC-Unique: KRf3jJCXOUSRHXWaMrbaDQ-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 49B9464162; Tue, 18 May 2021 21:09:12 +0000 (UTC) Received: from f33vm.wilsonet.com (dhcp-17-185.bos.redhat.com [10.18.17.185]) by smtp.corp.redhat.com (Postfix) with ESMTP id D5FFF5C1CF; Tue, 18 May 2021 21:09:10 +0000 (UTC) From: Jarod Wilson To: linux-kernel@vger.kernel.org Cc: Jarod Wilson , Jay Vosburgh , Veaceslav Falico , Andy Gospodarek , "David S. Miller" , Jakub Kicinski , Thomas Davis , netdev@vger.kernel.org Subject: [PATCH 1/4] bonding: add pure source-mac-based tx hashing option Date: Tue, 18 May 2021 17:08:46 -0400 Message-Id: <20210518210849.1673577-2-jarod@redhat.com> In-Reply-To: <20210518210849.1673577-1-jarod@redhat.com> References: <20210518210849.1673577-1-jarod@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org As it turns out, a pure source-mac only tx hash has a place for some VM setups. The previously added vlan+srcmac hash doesn't work as well for a VM with a single MAC and multiple vlans -- these types of setups path traffic more efficiently if the load is split by source mac alone. Cc: Jay Vosburgh Cc: Veaceslav Falico Cc: Andy Gospodarek Cc: "David S. Miller" Cc: Jakub Kicinski Cc: Thomas Davis Cc: netdev@vger.kernel.org Signed-off-by: Jarod Wilson --- Documentation/networking/bonding.rst | 13 +++++++++++++ drivers/net/bonding/bond_main.c | 26 +++++++++++++++++--------- drivers/net/bonding/bond_options.c | 1 + include/linux/netdevice.h | 1 + include/uapi/linux/if_bonding.h | 1 + 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Documentation/networking/bonding.rst b/Documentation/networking/bonding.rst index 62f2aab8eaec..66c3fa3a9040 100644 --- a/Documentation/networking/bonding.rst +++ b/Documentation/networking/bonding.rst @@ -964,6 +964,19 @@ xmit_hash_policy hash = (vlan ID) XOR (source MAC vendor) XOR (source MAC dev) + srcmac + + This policy uses a very rudimentary source mac hash to + load-balance traffic per-source-mac, with failover should + one leg fail. The intended use case is for a bond shared + by multiple virtual machines, each with their own virtual + mac address, keeping the VMs traffic all limited to the + same outbound interface. + + The formula for the hash is simply + + hash = (source MAC vendor) XOR (source MAC dev) + The default value is layer2. This option was added in bonding version 2.6.3. In earlier versions of bonding, this parameter does not exist, and the layer2 policy is the only policy. The diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 20bbda1b36e1..d71e398642fb 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -167,7 +167,8 @@ module_param(xmit_hash_policy, charp, 0); MODULE_PARM_DESC(xmit_hash_policy, "balance-alb, balance-tlb, balance-xor, 802.3ad hashing method; " "0 for layer 2 (default), 1 for layer 3+4, " "2 for layer 2+3, 3 for encap layer 2+3, " - "4 for encap layer 3+4, 5 for vlan+srcmac"); + "4 for encap layer 3+4, 5 for vlan+srcmac, " + "6 for srcmac"); module_param(arp_interval, int, 0); MODULE_PARM_DESC(arp_interval, "arp interval in milliseconds"); module_param_array(arp_ip_target, charp, NULL, 0); @@ -1459,6 +1460,8 @@ static enum netdev_lag_hash bond_lag_hash_type(struct bonding *bond, return NETDEV_LAG_HASH_E34; case BOND_XMIT_POLICY_VLAN_SRCMAC: return NETDEV_LAG_HASH_VLAN_SRCMAC; + case BOND_XMIT_POLICY_SRCMAC: + return NETDEV_LAG_HASH_SRCMAC; default: return NETDEV_LAG_HASH_UNKNOWN; } @@ -3521,11 +3524,11 @@ static bool bond_flow_ip(struct sk_buff *skb, struct flow_keys *fk, return true; } -static u32 bond_vlan_srcmac_hash(struct sk_buff *skb) +static u32 bond_vlan_srcmac_hash(struct sk_buff *skb, bool with_vlan) { - struct ethhdr *mac_hdr = (struct ethhdr *)skb_mac_header(skb); + struct ethhdr *mac_hdr = eth_hdr(skb); u32 srcmac_vendor = 0, srcmac_dev = 0; - u16 vlan; + u32 hash; int i; for (i = 0; i < 3; i++) @@ -3534,12 +3537,14 @@ static u32 bond_vlan_srcmac_hash(struct sk_buff *skb) for (i = 3; i < ETH_ALEN; i++) srcmac_dev = (srcmac_dev << 8) | mac_hdr->h_source[i]; - if (!skb_vlan_tag_present(skb)) - return srcmac_vendor ^ srcmac_dev; + hash = srcmac_vendor ^ srcmac_dev; + + if (!with_vlan || !skb_vlan_tag_present(skb)) + return hash; - vlan = skb_vlan_tag_get(skb); + hash ^= skb_vlan_tag_get(skb); - return vlan ^ srcmac_vendor ^ srcmac_dev; + return hash; } /* Extract the appropriate headers based on bond's xmit policy */ @@ -3618,8 +3623,11 @@ u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb) skb->l4_hash) return skb->hash; + if (bond->params.xmit_policy == BOND_XMIT_POLICY_SRCMAC) + return bond_vlan_srcmac_hash(skb, false); + if (bond->params.xmit_policy == BOND_XMIT_POLICY_VLAN_SRCMAC) - return bond_vlan_srcmac_hash(skb); + return bond_vlan_srcmac_hash(skb, true); if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER2 || !bond_flow_dissect(bond, skb, &flow)) diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c index c9d3604ae129..ff68ad2589f0 100644 --- a/drivers/net/bonding/bond_options.c +++ b/drivers/net/bonding/bond_options.c @@ -102,6 +102,7 @@ static const struct bond_opt_value bond_xmit_hashtype_tbl[] = { { "encap2+3", BOND_XMIT_POLICY_ENCAP23, 0}, { "encap3+4", BOND_XMIT_POLICY_ENCAP34, 0}, { "vlan+srcmac", BOND_XMIT_POLICY_VLAN_SRCMAC, 0}, + { "srcmac", BOND_XMIT_POLICY_SRCMAC, 0}, { NULL, -1, 0}, }; diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 5cbc950b34df..d88319fca1d3 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -2732,6 +2732,7 @@ enum netdev_lag_hash { NETDEV_LAG_HASH_E23, NETDEV_LAG_HASH_E34, NETDEV_LAG_HASH_VLAN_SRCMAC, + NETDEV_LAG_HASH_SRCMAC, NETDEV_LAG_HASH_UNKNOWN, }; diff --git a/include/uapi/linux/if_bonding.h b/include/uapi/linux/if_bonding.h index d174914a837d..f3b4d412a73f 100644 --- a/include/uapi/linux/if_bonding.h +++ b/include/uapi/linux/if_bonding.h @@ -95,6 +95,7 @@ #define BOND_XMIT_POLICY_ENCAP23 3 /* encapsulated layer 2+3 */ #define BOND_XMIT_POLICY_ENCAP34 4 /* encapsulated layer 3+4 */ #define BOND_XMIT_POLICY_VLAN_SRCMAC 5 /* vlan + source MAC */ +#define BOND_XMIT_POLICY_SRCMAC 6 /* source MAC only */ /* 802.3ad port state definitions (43.4.2.2 in the 802.3ad standard) */ #define LACP_STATE_LACP_ACTIVITY 0x1 From patchwork Tue May 18 21:08:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jarod Wilson X-Patchwork-Id: 12265657 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5BF4DC433B4 for ; Tue, 18 May 2021 21:09:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 355BE611BD for ; Tue, 18 May 2021 21:09:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352403AbhERVKi (ORCPT ); Tue, 18 May 2021 17:10:38 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:26670 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352364AbhERVKf (ORCPT ); Tue, 18 May 2021 17:10:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621372157; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=V9gVBAPRX5DhRtI6vP4WZYcb3SfeyZ7GrIMEVvYHEpI=; b=h1YFYnZy4AMjc2ICdLCn5fhRG8tDFihPcqBKUBnJvXuMl6+X9taSqsN2DG9b6GotBt8buX UNd81xyhasZCe1qlI7tZ7bCx64Jlolys+THZ2Gv6vwJypAXeFv8i96uCPVZkh5SqqBwYh9 QuuKcl39+4m2Nx1eGUcfOt+xe8T8lOk= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-57-qN96nNgmPaWsUCsrpB7XZw-1; Tue, 18 May 2021 17:09:15 -0400 X-MC-Unique: qN96nNgmPaWsUCsrpB7XZw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B1568106BAA6; Tue, 18 May 2021 21:09:13 +0000 (UTC) Received: from f33vm.wilsonet.com (dhcp-17-185.bos.redhat.com [10.18.17.185]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7A8CC5C1A1; Tue, 18 May 2021 21:09:12 +0000 (UTC) From: Jarod Wilson To: linux-kernel@vger.kernel.org Cc: Jarod Wilson , Jay Vosburgh , Veaceslav Falico , Andy Gospodarek , "David S. Miller" , Jakub Kicinski , Thomas Davis , netdev@vger.kernel.org Subject: [PATCH 2/4] bond_alb: don't rewrite bridged non-local MACs Date: Tue, 18 May 2021 17:08:47 -0400 Message-Id: <20210518210849.1673577-3-jarod@redhat.com> In-Reply-To: <20210518210849.1673577-1-jarod@redhat.com> References: <20210518210849.1673577-1-jarod@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org With a virtual machine behind a bridge on top of a bond, outgoing traffic should retain the VM's source MAC. That works fine most of the time, until doing a failover, and then the MAC gets rewritten to the bond slave's MAC, and the return traffic gets dropped. If we don't rewrite the MAC there, we don't lose any traffic. Cc: Jay Vosburgh Cc: Veaceslav Falico Cc: Andy Gospodarek Cc: "David S. Miller" Cc: Jakub Kicinski Cc: Thomas Davis Cc: netdev@vger.kernel.org Signed-off-by: Jarod Wilson --- drivers/net/bonding/bond_alb.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c index 3455f2cc13f2..ce8257c7cbea 100644 --- a/drivers/net/bonding/bond_alb.c +++ b/drivers/net/bonding/bond_alb.c @@ -1302,6 +1302,26 @@ void bond_alb_deinitialize(struct bonding *bond) rlb_deinitialize(bond); } +static bool bond_alb_bridged_mac(struct bonding *bond, struct ethhdr *eth_data) +{ + struct list_head *iter; + struct slave *slave; + + if (BOND_MODE(bond) != BOND_MODE_ALB) + return false; + + /* Don't modify source MACs that do not originate locally + * (e.g.,arrive via a bridge). + */ + if (!netif_is_bridge_port(bond->dev)) + return false; + + if (bond_slave_has_mac_rx(bond, eth_data->h_source)) + return false; + + return true; +} + static netdev_tx_t bond_do_alb_xmit(struct sk_buff *skb, struct bonding *bond, struct slave *tx_slave) { @@ -1316,7 +1336,8 @@ static netdev_tx_t bond_do_alb_xmit(struct sk_buff *skb, struct bonding *bond, } if (tx_slave && bond_slave_can_tx(tx_slave)) { - if (tx_slave != rcu_access_pointer(bond->curr_active_slave)) { + if (tx_slave != rcu_access_pointer(bond->curr_active_slave) && + !bond_alb_bridged_mac(bond, eth_data)) { ether_addr_copy(eth_data->h_source, tx_slave->dev->dev_addr); } From patchwork Tue May 18 21:08:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jarod Wilson X-Patchwork-Id: 12265661 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB0C3C433ED for ; Tue, 18 May 2021 21:09:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BD955611BD for ; Tue, 18 May 2021 21:09:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352437AbhERVKq (ORCPT ); Tue, 18 May 2021 17:10:46 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:21516 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352388AbhERVKh (ORCPT ); Tue, 18 May 2021 17:10:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621372157; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0EdZKGLvpg9XNYKF32LxZQi1X77ds8QQ+CclE0BiKbw=; b=FDIInr1d8rn9+d+Hcvmj/jVnVb00V2glczNbyR/3Fzg8CnYIdaMcSpmWX/Yo3QMeyYK2w4 z4pKszdo1Jy5l/GYF5QtlbdR/RRghrZHBziHYSW/OJpKEa/RtRWIPCy6yUY/blv1c/Powp dLUXEM0Ckda2w1EhQHvQahWUJd4cHeA= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-340-Xs4YkqEcMvaI2ZvTCuosww-1; Tue, 18 May 2021 17:09:16 -0400 X-MC-Unique: Xs4YkqEcMvaI2ZvTCuosww-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 23F74106BAA7; Tue, 18 May 2021 21:09:15 +0000 (UTC) Received: from f33vm.wilsonet.com (dhcp-17-185.bos.redhat.com [10.18.17.185]) by smtp.corp.redhat.com (Postfix) with ESMTP id E32475C1A1; Tue, 18 May 2021 21:09:13 +0000 (UTC) From: Jarod Wilson To: linux-kernel@vger.kernel.org Cc: Jarod Wilson , Jay Vosburgh , Veaceslav Falico , Andy Gospodarek , "David S. Miller" , Jakub Kicinski , Thomas Davis , netdev@vger.kernel.org Subject: [PATCH 3/4] bond_alb: don't tx balance multicast traffic either Date: Tue, 18 May 2021 17:08:48 -0400 Message-Id: <20210518210849.1673577-4-jarod@redhat.com> In-Reply-To: <20210518210849.1673577-1-jarod@redhat.com> References: <20210518210849.1673577-1-jarod@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org 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 multicast traffic 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 Cc: Veaceslav Falico Cc: Andy Gospodarek Cc: "David S. Miller" Cc: Jakub Kicinski Cc: Thomas Davis Cc: netdev@vger.kernel.org Signed-off-by: Jarod Wilson --- drivers/net/bonding/bond_alb.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c index ce8257c7cbea..4df661b77252 100644 --- a/drivers/net/bonding/bond_alb.c +++ b/drivers/net/bonding/bond_alb.c @@ -1422,6 +1422,7 @@ struct slave *bond_xmit_alb_slave_get(struct bonding *bond, const struct iphdr *iph; if (is_broadcast_ether_addr(eth_data->h_dest) || + is_multicast_ether_addr(eth_data->h_dest) || !pskb_network_may_pull(skb, sizeof(*iph))) { do_tx_balance = false; break; @@ -1441,7 +1442,8 @@ 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_broadcast_ether_addr(eth_data->h_dest) || + is_multicast_ether_addr(eth_data->h_dest)) { do_tx_balance = false; break; } From patchwork Tue May 18 21:08:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jarod Wilson X-Patchwork-Id: 12265663 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 33073C433B4 for ; Tue, 18 May 2021 21:09:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0ED7E611BD for ; Tue, 18 May 2021 21:09:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352456AbhERVKt (ORCPT ); Tue, 18 May 2021 17:10:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:35473 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352364AbhERVKj (ORCPT ); Tue, 18 May 2021 17:10:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1621372160; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=prvD609VA1uqqbSC01aL2lSdSeHhEcopBWufKRbRPx8=; b=OL7wZ2+wY7TBPSzsra4mqe/TzLRwLe+MKEVGFGE1Ji3JUOTSTs2V4Q6BxtKdzMjDJ4yQ9o e0UEHaIgkCt/AWrBD6YHqRXC2iEWyq+8NWD+z8jt6iLDTub/4eQMvft1/8huuxejtJnhBu t0V5ynpowYTCk2cEeo1P7KmhKlBAqsc= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-195-Be5p2DJaNYep39DMoDgl_g-1; Tue, 18 May 2021 17:09:18 -0400 X-MC-Unique: Be5p2DJaNYep39DMoDgl_g-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 89E288015DB; Tue, 18 May 2021 21:09:16 +0000 (UTC) Received: from f33vm.wilsonet.com (dhcp-17-185.bos.redhat.com [10.18.17.185]) by smtp.corp.redhat.com (Postfix) with ESMTP id 554A95C1A1; Tue, 18 May 2021 21:09:15 +0000 (UTC) From: Jarod Wilson To: linux-kernel@vger.kernel.org Cc: Jarod Wilson , Jay Vosburgh , Veaceslav Falico , Andy Gospodarek , "David S. Miller" , Jakub Kicinski , Thomas Davis , netdev@vger.kernel.org Subject: [PATCH 4/4] bond_alb: put all slaves into promisc Date: Tue, 18 May 2021 17:08:49 -0400 Message-Id: <20210518210849.1673577-5-jarod@redhat.com> In-Reply-To: <20210518210849.1673577-1-jarod@redhat.com> References: <20210518210849.1673577-1-jarod@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org ALB mode bonding can receive on all slaves, so it would seem to make sense that they're all in promisc, unlike other modes that have a primary interface and can only receive on that interface. Cc: Jay Vosburgh Cc: Veaceslav Falico Cc: Andy Gospodarek Cc: "David S. Miller" Cc: Jakub Kicinski Cc: Thomas Davis Cc: netdev@vger.kernel.org Signed-off-by: Jarod Wilson --- drivers/net/bonding/bond_main.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index d71e398642fb..93f57ff1c552 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -644,9 +644,10 @@ static int bond_check_dev_link(struct bonding *bond, static int bond_set_promiscuity(struct bonding *bond, int inc) { struct list_head *iter; - int err = 0; + int mode, err = 0; - if (bond_uses_primary(bond)) { + mode = BOND_MODE(bond); + if (mode == BOND_MODE_ACTIVEBACKUP || mode == BOND_MODE_TLB) { struct slave *curr_active = rtnl_dereference(bond->curr_active_slave); if (curr_active)