From patchwork Tue Jun 13 10:13:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wojciech Drewek X-Patchwork-Id: 13278273 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECBA424147 for ; Tue, 13 Jun 2023 10:14:42 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 52AF1E6 for ; Tue, 13 Jun 2023 03:14:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1686651281; x=1718187281; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=B+kY5nKPaEBbwg7KCkefqdPraFJ7q9fYjmgFyXAw1YQ=; b=Bi8HufeE07vMBpFqIRnGfJNJKB3Hw3d2/4q3BoD+KYEwA6SARgkdSTz2 hILH508gJuT4peaEK+/DBoJt5HpW1BSOy62vE39HJ7n11u+IyhvnpSlw5 8qC50Oskfy1CRpItqd4udPsk0GGZG+/UZrHDmxgitl2CEdTVb2ph0gMzC 2ANAXJXLmDSFf7e1VdhAt4QhnkCcUyPELELb9nMyoFLNSkezg/zbR94wt k0LvoqtJSZqt91Nw7vM3Vg6mXAoMPNjW4i73r3Ev5IomElgralGUCZ6Ye ULvF0fStoG+qeySrnxVPw/GIxQdJgihlXLy/SrHrGfx5i6vphtF6Fxu2j A==; X-IronPort-AV: E=McAfee;i="6600,9927,10739"; a="424168041" X-IronPort-AV: E=Sophos;i="6.00,239,1681196400"; d="scan'208";a="424168041" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jun 2023 03:14:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10739"; a="885787114" X-IronPort-AV: E=Sophos;i="6.00,239,1681196400"; d="scan'208";a="885787114" Received: from irvmail002.ir.intel.com ([10.43.11.120]) by orsmga005.jf.intel.com with ESMTP; 13 Jun 2023 03:14:38 -0700 Received: from rozewie.igk.intel.com (rozewie.igk.intel.com [10.211.8.69]) by irvmail002.ir.intel.com (Postfix) with ESMTP id 21A5335428; Tue, 13 Jun 2023 11:14:37 +0100 (IST) From: Wojciech Drewek To: intel-wired-lan@lists.osuosl.org Cc: netdev@vger.kernel.org, alexandr.lobakin@intel.com, david.m.ertman@intel.com, michal.swiatkowski@linux.intel.com, marcin.szycik@linux.intel.com, pawel.chmielewski@intel.com, sridhar.samudrala@intel.com, pmenzel@molgen.mpg.de, simon.horman@corigine.com, dan.carpenter@linaro.org Subject: [PATCH iwl-next v5 00/12] ice: switchdev bridge offload Date: Tue, 13 Jun 2023 12:13:18 +0200 Message-Id: <20230613101330.87734-1-wojciech.drewek@intel.com> X-Mailer: git-send-email 2.40.1 Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Linux bridge provides ability to learn MAC addresses and vlans detected on bridge's ports. As a result of this, FDB (forward data base) entries are created and they can be offloaded to the HW. By adding VF's port representors to the bridge together with the uplink netdev, we can learn VF's and link partner's MAC addresses. This is achieved by slow/exception-path, where packets that do not match any filters (FDB entries in this case) are send to the bridge ports. Driver keeps track of the netdevs added to the bridge by listening for NETDEV_CHANGEUPPER event. We distinguish two types of bridge ports: uplink port and VF's representor port. Linux bridge always learns src MAC of the packet on rx path. With the current slow-path implementation, it means that we will learn VF's MAC on port repr (when the VF transmits the packet) and link partner's MAC on uplink (when we receive it on uplink from LAN). The driver is notified about learning of the MAC/VLAN by SWITCHDEV_FDB_{ADD|DEL}_TO_DEVICE events. This is followed by creation of the HW filter. The direction of the filter is based on port type (uplink or VF repr). In case of the uplink, rule forwards the packets to the LAN (matching on link partner's MAC). When the notification is received on VF repr then the rule forwards the packets to the associated VF (matching on VF's MAC). This approach would not work on its own however. This is because if one of the directions is offloaded, then the bridge would not be able to learn the other one. If the egress rule is added (learned on uplink) then the response from the VF will be sent directly to the LAN. The packet will not got through slow-path, it would not be seen on VF's port repr. Because of that, the bridge would not learn VF's MAC. This is solved by introducing guard rule. It prevents forward rule from working until the opposite direction is offloaded. Aging is not fully supported yet, aging time is static for now. The follow up submissions will introduce counters that will allow us to keep track if the rule is actually being used or not. A few fixes/changes are needed for this feature to work with ice driver. These are introduced in first 5 patches. --- v2: two patches were droped from the series: - "ice: Remove exclusion code for RDMA+SRIOV" was sent as separate patch: https://lore.kernel.org/netdev/20230516113055.7336-1-wojciech.drewek@intel.com/ - "ice: Ethtool fdb_cnt stats" was dropped because of the comments suggesting that ethtool is not a good option for such statistic. An alternative will be send as a separate patch. v3: small changes in patch 5, 7 and 8 including kdoc, style fixes. v4: split 1st patch in the series into 4 as Paul suggested v5: drop "ice: Accept LAG netdevs in bridge offloads" patch, it will go with LAG patchset, I kept dev_hold and dev_put since the discussion was not resolved Marcin Szycik (2): ice: Add guard rule when creating FDB in switchdev ice: Add VLAN FDB support in switchdev mode Michal Swiatkowski (2): ice: implement bridge port vlan ice: implement static version of ageing Pawel Chmielewski (1): ice: add tracepoints for the switchdev bridge Wojciech Drewek (7): ice: Skip adv rules removal upon switchdev release ice: Prohibit rx mode change in switchdev mode ice: Don't tx before switchdev is fully configured ice: Disable vlan pruning for uplink VSI ice: Unset src prune on uplink VSI ice: Implement basic eswitch bridge setup ice: Switchdev FDB events support drivers/net/ethernet/intel/ice/Makefile | 2 +- drivers/net/ethernet/intel/ice/ice.h | 5 +- drivers/net/ethernet/intel/ice/ice_eswitch.c | 46 +- .../net/ethernet/intel/ice/ice_eswitch_br.c | 1302 +++++++++++++++++ .../net/ethernet/intel/ice/ice_eswitch_br.h | 121 ++ drivers/net/ethernet/intel/ice/ice_lib.c | 25 + drivers/net/ethernet/intel/ice/ice_lib.h | 1 + drivers/net/ethernet/intel/ice/ice_main.c | 4 +- drivers/net/ethernet/intel/ice/ice_repr.c | 2 +- drivers/net/ethernet/intel/ice/ice_repr.h | 3 +- drivers/net/ethernet/intel/ice/ice_switch.c | 150 +- drivers/net/ethernet/intel/ice/ice_switch.h | 6 +- drivers/net/ethernet/intel/ice/ice_trace.h | 90 ++ drivers/net/ethernet/intel/ice/ice_type.h | 1 + .../ethernet/intel/ice/ice_vf_vsi_vlan_ops.c | 186 +-- .../ethernet/intel/ice/ice_vf_vsi_vlan_ops.h | 4 + .../net/ethernet/intel/ice/ice_vsi_vlan_lib.c | 84 +- .../net/ethernet/intel/ice/ice_vsi_vlan_lib.h | 8 + .../net/ethernet/intel/ice/ice_vsi_vlan_ops.h | 1 + 19 files changed, 1855 insertions(+), 186 deletions(-) create mode 100644 drivers/net/ethernet/intel/ice/ice_eswitch_br.c create mode 100644 drivers/net/ethernet/intel/ice/ice_eswitch_br.h