From patchwork Mon Aug 23 18:02:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 502199 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=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT 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 0225AC4338F for ; Mon, 23 Aug 2021 18:03:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D474661374 for ; Mon, 23 Aug 2021 18:03:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231797AbhHWSDs (ORCPT ); Mon, 23 Aug 2021 14:03:48 -0400 Received: from mail-db8eur05on2051.outbound.protection.outlook.com ([40.107.20.51]:4129 "EHLO EUR05-DB8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S230382AbhHWSDp (ORCPT ); Mon, 23 Aug 2021 14:03:45 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TEVfV4kAYghwySgpTkgQXY23LG+7kLrsn7Ltm+MEeSFBzILonCSsG/pJVkY9wKzDJMzjtmWPhxayti/sJx5U5/mvwvjxhcdIsc9BXE+ypfmuFtm2sFj+G4xvC34N2rGda0bR457X+v7Zzb1hS/JLhIS3SLtgpXyPDmr1Dntd5TX6zXJLAHNUiwtCxnQjdFKukh2cHbGo9pMcBan6tBkU2tYb1wE3A3PVsd6/A5GawLAqFI11S7asIMazUXW0Ilc2XCNq/zcvAetm1oObWZ3ZE2w5q0X8VHSkjjPIKcr4bgu1trj9TCuddfX1n0yeCErBqMM/bByKNQr55J8BT7EZZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=030Z5IStRDMRx2CKoVf7FsHUQTu+sfJrc1sCy5YfcGY=; b=iLSoK1/QtaIilz5QfTBzlwvWvvGrn1/Ap7/mRaxV9cNttwurV4goAUBDPn4CURpsGQghcF2BOtqSQIwWeWxPayFEAOp3Nr0kio8YyfDNnkM39J5lO9y9MwsVCW6f45RfvgPkcBgw8xuj/Y1rNWLvN2mYenkO3vgoG0jpgS50fyMR768QsHalJp1bj1+fZ7mSnd2N/QKyP2YAhpZ+YVCjyqfYnzLkfKgO8UDSe5+bAFcs2jzunFJwae0i+oc+As3lmTn7xq7AOStE36dJ7SKBR3bHyStYSHDwVINYkVCYTx9BqeIKBPoRuaVdqwXj863CXwZ9tYtIXb4iRzdPRPfCtA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=030Z5IStRDMRx2CKoVf7FsHUQTu+sfJrc1sCy5YfcGY=; b=E6smhaLpiQQfT0VqDlGyicIjRRYL3OD/Og92OyQDWcWhAZvhwMkf7jJTL9cQ/yp26l/wqeNg53TbOkdfPNKidnxiHgf/HiCA1y0/q4d539m4VviK1uHqpSKfqtnq0LaY0bMifN4bpNnFDX2DH8BK+CD5XBhGQLavwo97Gh7RqrU= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by VE1PR04MB6639.eurprd04.prod.outlook.com (2603:10a6:803:129::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.23; Mon, 23 Aug 2021 18:02:59 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::109:1995:3e6b:5bd0]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::109:1995:3e6b:5bd0%2]) with mapi id 15.20.4436.024; Mon, 23 Aug 2021 18:02:59 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Florian Fainelli , Andrew Lunn , Vivien Didelot , Vladimir Oltean , Tobias Waldekranz , Kurt Kanzenbach , =?utf-8?q?Alvin_=C5=A0ipraga?= Subject: [PATCH net-next 1/3] net: dsa: properly fall back to software bridging Date: Mon, 23 Aug 2021 21:02:40 +0300 Message-Id: <20210823180242.2842161-2-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210823180242.2842161-1-vladimir.oltean@nxp.com> References: <20210823180242.2842161-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: AM9P193CA0007.EURP193.PROD.OUTLOOK.COM (2603:10a6:20b:21e::12) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (188.25.144.60) by AM9P193CA0007.EURP193.PROD.OUTLOOK.COM (2603:10a6:20b:21e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Mon, 23 Aug 2021 18:02:58 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9fdbf7b0-b7ae-4cc2-f3c1-08d966603de9 X-MS-TrafficTypeDiagnostic: VE1PR04MB6639: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /FDF5rlkZsl5H2BpRimyIua3k+d9tub8v7ccANRNUfvO/yokBMDOICC+p+7xBqSNXIvT0tqnKsBAgu6dOMQPIjFzbXsG0UFZvPHCmwgjP4AK3oHxzldAKRA70fvm4+0ehgcSXRl0NGL+xpQj+AegvK+KuRKRNcK+XORa48oTNNGlJZoKDr6rPC8Uy0WI2S9upPvPmNjsYKYLzAvcFjH4gQYJzoM48Zs+ZWg1lNYxT1qiJtRM1i0WcHXaA7o7nPvNqrRbSc8n3sJwDYx6KtVIP74CA1+J7RAJ5Iz4mlBcOXPnbOlpWNwlN35mTcU8QtoEeoYUfmGKTOP7T3a/wu2WgPX/8g3o90pVkNz75ez3OsdTdTklFFsB29buS/qFLwaEiIqJAfa5fI3o6pUe+FkqAZMES9vNMUsrBf/N1FS0bORQcbVGEdbZ6lRQ9/JKIzmF8rgSi8Koz0eJ03anu3N4ETXSeSf2LYtwdPeWWWQS2qmOBi6qGkKEqtK3MrzsXkzcsSuqgo44nzKBDiH8z7C6DOGxqkd0I4HMdwa29Y46hKIZN1f34ccr7M/iLggX7RqxAFGRqZ62aCdu5XHRqXPobAyIgZosZ0G/hyjRulHvoJbF4+ALpoNAfSiXNuK/z2lgLjeKKtTxMuoUC5LcsI3H7uq4+5+QPTipasuVFCMmP45x85OnuqP+56KQbHnuwqXbX0eDQXMDyNISfhhXT1JYPg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR04MB5136.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39850400004)(346002)(376002)(136003)(396003)(36756003)(478600001)(1076003)(5660300002)(66476007)(6512007)(6916009)(6506007)(86362001)(38100700002)(38350700002)(26005)(66556008)(66574015)(83380400001)(2906002)(2616005)(316002)(54906003)(4326008)(6666004)(186003)(52116002)(8676002)(66946007)(8936002)(6486002)(956004)(44832011); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?yjchU9ju1SJZCV0oEGWqIAXqt?= =?utf-8?q?qmZUu4zhw7hzAdS4T4dPOVt1FHWTYyPxoaReApkC+LZJi3JsOIvGQSup?= =?utf-8?q?cpMmg5NxKybW5qzN1IgPc3wYBhl2LsQI2DxOGyAk638+3rgLzi9znO1G?= =?utf-8?q?ii444BSb7NXZD7IEGLDq3wetAH1xi42gS2Ssc/5hLu31TGBjMPp6ITN/?= =?utf-8?q?RbjjGxQ7lKViEG0QBBykJdy5N851RnfmIYngWkH4n85miDD49TS9HI2X?= =?utf-8?q?XjeRcXH9F8JhxRD3r3IGzuham9rJaehwE+9WHPWird5e9x/F3Fs5uaFN?= =?utf-8?q?G3xwSlXqWc0g0QiDyf26QYmO/IuZlOjLHK31nQdfCBx26bo9ycuBEw4O?= =?utf-8?q?v1ePYkWwdhzscXmxmCTeI7DsVLmg/qcEf5+7zWhbZ4J3R2X8KoJqytOi?= =?utf-8?q?hUzFJGBuqHVgLJCsLTWD9sz8aRJ3+kLwIOvRYnIHtL8rPC89ku5gXvPC?= =?utf-8?q?kTb1FFP5yzWoj+yZj9DUehJRIcxjQlMshc7WU0XMCUmQ4W0aOYA+J8Md?= =?utf-8?q?+JqnsieCG3c16IRR7cmUWbKBOjaefesh2vhMMsB8bMReUdHspgvIPDVi?= =?utf-8?q?nF9rdszK50+SAF/764FEOCrkuOJtxDHcwvRpUSF6GdH0H1BtJQxGCZoE?= =?utf-8?q?XJHEGRd/qLnkvWHG9Am0ODJBjOyr4JPw1Z6rQzKM2L9FvEC6G7R8I54A?= =?utf-8?q?TT96akjGkbK4hqMZUjbMA9ftiv9tLT2Fu9JmfhFxuma6ZQcwDTIbQt0x?= =?utf-8?q?uIU4C3+uQOAikxFgmp/Zkx5SnQAGtxezyJ7JiflsRddPU/KVoN3fH9Ww?= =?utf-8?q?OqBfK5WYF5JGwH6CVD1pvGHXZIqUbvFeHlBQgPbpRH1JgjNPwo5uea42?= =?utf-8?q?Ve7CjKpvh8fJwIGM6UJ0it+xqrVuJhMX9got1MgQLI2q+g0DBRx4/oVX?= =?utf-8?q?qs+bi4ozNUek/BnrF93PbckFNVODOtSMGUJFRWuZgWbkfhGN80gj1h3y?= =?utf-8?q?OGRv3XF/InpR3THV3ieEXG2p2k2aHfDbg5Vbn9qb6ka7sdKB5kkRLIOS?= =?utf-8?q?UrG7ylo3lWh7DmoHYmKfqi7p8dWVJvHtIozs9KxO96RmCFcrXtxyKUTD?= =?utf-8?q?eT3FhrMWeJ+P+k098zJYotElSNMVpqf6+bBcaiZhfhXTc3eDRzRPvWme?= =?utf-8?q?DvlyC0ts2M7zynngwJ4tqiRlIYQp2T9RlnSscMJz+E+wvojdcO610H1j?= =?utf-8?q?/Hg3KA8pqbhQD+m5PYYE0n0HYT2bgX5wU+xNSoglNb5k9Xp5p6VhhXHa?= =?utf-8?q?qHPQ//PmXDSZyyduccnq6pmDzGKu0GyZwIf/QhpqOS3G5Thx+LsPQUKm?= =?utf-8?q?RYGcVdQNuoZuPq6YmjFpUkFFMU4yAID?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9fdbf7b0-b7ae-4cc2-f3c1-08d966603de9 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2021 18:02:59.4400 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XIJ3h3paxao2REptJCqEWQrnVGXTJJkcV1dgLYqlDgct/7LxnlOaOKfcrkwQ3EcbQcyHHsJgPW1Ho5ERlm9WwA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6639 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If the driver does not implement .port_bridge_{join,leave}, then we must fall back to standalone operation on that port, and trigger the error path of dsa_port_bridge_join. This sets dp->bridge_dev = NULL. In turn, having dp->bridge_dev = NULL makes the following things go wrong: - dsa_default_offload_fwd_mark make the wrong decision in setting skb->offload_fwd_mark. It should set skb->offload_fwd_mark = 0 for ports that don't offload the bridge, which should instruct the bridge to forward in software. But this does not happen, dp->bridge_dev is incorrectly set to point to the bridge, so the bridge is told that packets have been forwarded in hardware, which they haven't. - switchdev objects (MDBs, VLANs) should not be offloaded by ports that don't offload the bridge. Standalone ports should behave as packet-in, packet-out and the bridge should not be able to manipulate the pvid of the port, or tag stripping on egress, or ingress filtering. This should already work fine because dsa_slave_port_obj_add has: case SWITCHDEV_OBJ_ID_PORT_VLAN: if (!dsa_port_offloads_bridge_port(dp, obj->orig_dev)) return -EOPNOTSUPP; err = dsa_slave_vlan_add(dev, obj, extack); but since dsa_port_offloads_bridge_port works based on dp->bridge_dev, this is again sabotaging us. All the above work in case the port has an unoffloaded LAG interface, so this is well exercised code, we should apply it for plain unoffloaded bridge ports too. Reported-by: Alvin Šipraga Signed-off-by: Vladimir Oltean --- net/dsa/slave.c | 5 +++++ net/dsa/switch.c | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index eb9d9e53c536..f785d24fcf23 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -2009,6 +2009,11 @@ static int dsa_slave_changeupper(struct net_device *dev, err = dsa_port_bridge_join(dp, info->upper_dev, extack); if (!err) dsa_bridge_mtu_normalization(dp); + if (err == -EOPNOTSUPP) { + NL_SET_ERR_MSG_MOD(extack, + "Offloading not supported"); + err = 0; + } err = notifier_from_errno(err); } else { dsa_port_bridge_leave(dp, info->upper_dev); diff --git a/net/dsa/switch.c b/net/dsa/switch.c index fd1a1c6bf9cf..dd042fd7f800 100644 --- a/net/dsa/switch.c +++ b/net/dsa/switch.c @@ -92,8 +92,10 @@ static int dsa_switch_bridge_join(struct dsa_switch *ds, struct dsa_switch_tree *dst = ds->dst; int err; - if (dst->index == info->tree_index && ds->index == info->sw_index && - ds->ops->port_bridge_join) { + if (dst->index == info->tree_index && ds->index == info->sw_index) { + if (!ds->ops->port_bridge_join) + return -EOPNOTSUPP; + err = ds->ops->port_bridge_join(ds, info->port, info->br); if (err) return err;