From patchwork Wed Jan 16 23:06:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026260 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="R2o3wyVA"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2rv6kQ9z9sBn for ; Thu, 17 Jan 2019 10:06:39 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388040AbfAPXGi (ORCPT ); Wed, 16 Jan 2019 18:06:38 -0500 Received: from mail-eopbgr00050.outbound.protection.outlook.com ([40.107.0.50]:53954 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731729AbfAPXGh (ORCPT ); Wed, 16 Jan 2019 18:06:37 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dpAFfnI/oKH+rJN5rJ2+bBbLLhkMklOAqrQ4D9G1yus=; b=R2o3wyVAuLMUA8XL34JsMwYEF7wefCcdYFf1Hdm96QtEuwHvXiKdADorIDSAL745CSUQBZkeZs07h4U73sysJ5IgHF82heQ8DtCr3rQj0Ip/cMP/A+f/K8Kqeg5N7mQp4pavQkEQ+sWFBM1MROceLh6rWEa65NxrhYwpnWNTx1w= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4058.eurprd05.prod.outlook.com (52.134.68.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Wed, 16 Jan 2019 23:06:30 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:30 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 01/13] vxlan: Move up vxlan_fdb_free(), vxlan_fdb_destroy() Thread-Topic: [PATCH net-next 01/13] vxlan: Move up vxlan_fdb_free(), vxlan_fdb_destroy() Thread-Index: AQHUrfAdZCknJxFZqkWocjra9PcRgA== Date: Wed, 16 Jan 2019 23:06:30 +0000 Message-ID: <10c79ed3d98d6e29dfb785e5fc577f7a861f89ff.1547679599.git.petrm@mellanox.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0036.eurprd03.prod.outlook.com (2603:10a6:20b::49) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4058; 6:dnCSonVtHbqmOIZiY2y8rvFHN6/2zSNIVLz845E8SIqzyw8fmyu0VF6bX4RI15UpQG54g0Sp9+oKlcJ0SBh6UYQlp0G377n4eTYWDDRzdF9l4BQdqJLmeuLXQ20ubQSr5ytvvURfbQ2GKTGZeQEhoUgyQqjdHDqypAQSrZNCy++4Aab+RfJpHPZnG2xmqE3BpAYRTKH0Y6virO4K4kki5mj/bQBrBbes89VDcP0x2nupBw0Q4aNVfklztjkDfcHPeXGnNk6xTTs1D5O1XFKc8fN/Ubq0LrzqClm3KXpBCXi+hrrltrUS75Xez/49wjwLeSw7dp3PN8utYHZixQE6yVr0sA1Sb5BSZmK4oPu08aaN7zhalndM2e21h1Eb9WHhcc1wH5w2A94KA+ZTQWF6dSpHQnBTgUMu2WcwV/oabKaY9oXzzT4qZ5CSTPtNm1X8UM6OgZUUr7XDqHLNQQ9WfQ==; 5:y3ArR6hz0DNcR+isw3MCduVSYekQGVU5eHafOKqj2HlRhD0VEtLGaRFTJqGPD3VNrJLnp44TQjwi/Lfwtn2mnL3Left7ASV1U5P4dDmtYUK2nEn/c2UQGCOau1/kNzJBya3oNtRsp529cUdz7KAnvjQsTgaU/8du4DjN9IOOy3hQ8sOasK66WgjQCmSDkPzVscxCVqaAKsF6bz8qRW+Mkg==; 7:SfHnqFBsxQAzmUP+4/F5GZbwqgiepMcR0fCZj5C2J5frmRu9oEbAz/BVsSjovDxMfgKPzAh9jAbBbP7qgvg1TwzrL8xYGaifeqrq+Y6etCmp2XURJaKMXH0CrieOGnBO6TWTRy9ncSYLZnHzp2ee+A== x-ms-office365-filtering-correlation-id: 77d26561-56af-459f-c42e-08d67c074057 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4058; x-ms-traffictypediagnostic: DB3PR0502MB4058: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(366004)(396003)(376002)(346002)(189003)(199004)(71200400001)(106356001)(71190400001)(105586002)(118296001)(81166006)(2351001)(1730700003)(7736002)(14444005)(256004)(5660300001)(6436002)(8936002)(305945005)(6916009)(478600001)(14454004)(5640700003)(81156014)(8676002)(53936002)(68736007)(36756003)(6512007)(99286004)(186003)(52116002)(6506007)(6116002)(3846002)(486006)(76176011)(66066001)(2906002)(6486002)(25786009)(26005)(54906003)(446003)(316002)(476003)(2616005)(11346002)(386003)(97736004)(4326008)(2501003)(86362001)(102836004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4058; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: ey7vMx2G8SjXbfkxIGwD0n6KmZ4k75bvqofH3426SMuwyg3d+hj7+zYSgJtPLOwHQ6DUSjLnzjEC122PNhICvmvV7qN+/ug1r3D1vwmvLszA0jaGHOHWNwaC0bPoA36ekneLM799xJYKZR+Utnz7JWQL5J0w7ofmGCEbSYl1et0xNc4iaYfVTKbQ1Uf6H3imLka+69xOtE92+TwIHo7XfxBRyMOqjai6+fr97RWD8y0AghA+omqESOtTsYqNZlF9ymNE3snYGUTF2GdVsKt5SgyZlS5v50Ps+YfWBInW2/Dyna5kyEXa53deAFc21B8e4KjG31Wh1E8D8ABAJeTzz1gVy4oiVOusZGjApfpsnYQhacu668byoecLCZxt7i3ZNqbqgd7RHwZE9IHY7vnPatmF2NvYyg0yFD0fMoYzW9w= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 77d26561-56af-459f-c42e-08d67c074057 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:30.1820 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4058 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org These functions will be needed for rollbacks of vetoed FDB entries. Move them up so that they are visible at their intended point of use. Signed-off-by: Petr Machata --- drivers/net/vxlan.c | 59 ++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 5209ee9aac47..e4ace5e917a7 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -826,6 +826,35 @@ static int vxlan_fdb_create(struct vxlan_dev *vxlan, return 0; } +static void vxlan_fdb_free(struct rcu_head *head) +{ + struct vxlan_fdb *f = container_of(head, struct vxlan_fdb, rcu); + struct vxlan_rdst *rd, *nd; + + list_for_each_entry_safe(rd, nd, &f->remotes, list) { + dst_cache_destroy(&rd->dst_cache); + kfree(rd); + } + kfree(f); +} + +static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, + bool do_notify, bool swdev_notify) +{ + struct vxlan_rdst *rd; + + netdev_dbg(vxlan->dev, "delete %pM\n", f->eth_addr); + + --vxlan->addrcnt; + if (do_notify) + list_for_each_entry(rd, &f->remotes, list) + vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH, + swdev_notify); + + hlist_del_rcu(&f->hlist); + call_rcu(&f->rcu, vxlan_fdb_free); +} + /* Add new entry to forwarding table -- assumes lock held */ static int vxlan_fdb_update(struct vxlan_dev *vxlan, const u8 *mac, union vxlan_addr *ip, @@ -912,36 +941,6 @@ static int vxlan_fdb_update(struct vxlan_dev *vxlan, return 0; } -static void vxlan_fdb_free(struct rcu_head *head) -{ - struct vxlan_fdb *f = container_of(head, struct vxlan_fdb, rcu); - struct vxlan_rdst *rd, *nd; - - list_for_each_entry_safe(rd, nd, &f->remotes, list) { - dst_cache_destroy(&rd->dst_cache); - kfree(rd); - } - kfree(f); -} - -static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, - bool do_notify, bool swdev_notify) -{ - struct vxlan_rdst *rd; - - netdev_dbg(vxlan->dev, - "delete %pM\n", f->eth_addr); - - --vxlan->addrcnt; - if (do_notify) - list_for_each_entry(rd, &f->remotes, list) - vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH, - swdev_notify); - - hlist_del_rcu(&f->hlist); - call_rcu(&f->rcu, vxlan_fdb_free); -} - static void vxlan_dst_free(struct rcu_head *head) { struct vxlan_rdst *rd = container_of(head, struct vxlan_rdst, rcu); From patchwork Wed Jan 16 23:06:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026273 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="E/9NkZJm"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2t6543Zz9sBQ for ; Thu, 17 Jan 2019 10:07:42 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387935AbfAPXHl (ORCPT ); Wed, 16 Jan 2019 18:07:41 -0500 Received: from mail-eopbgr00050.outbound.protection.outlook.com ([40.107.0.50]:53954 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727337AbfAPXGm (ORCPT ); Wed, 16 Jan 2019 18:06:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0v1G0UKn1ecfzledbmcYKsQ53oZ0FSR5q9k3QOsUMIA=; b=E/9NkZJmxA1vV7a7x5bjSVkmSMO08gBfsEO2b2mpkHGWRkaq3Oq0dlagGyhXoCQXFLEVuwm8b8Bze3+k5P3RZHnPnFWxAPoNqBCRPQa7riU/RxXTceWiLhWv4OntSXMwXYjYbam0RJGYfjmhYODaeQ/uxGbXh+tGrtXCPC4P7YI= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4058.eurprd05.prod.outlook.com (52.134.68.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Wed, 16 Jan 2019 23:06:32 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:32 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 02/13] vxlan: Split vxlan_fdb_update() in two Thread-Topic: [PATCH net-next 02/13] vxlan: Split vxlan_fdb_update() in two Thread-Index: AQHUrfAe7H3vnp5WOEuhpqVAFHufJQ== Date: Wed, 16 Jan 2019 23:06:32 +0000 Message-ID: <423b211ae0a08c579092f8113530c424a9d7c0d5.1547679599.git.petrm@mellanox.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR0502CA0033.eurprd05.prod.outlook.com (2603:10a6:209:1::46) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4058; 6:5VgziQJ7jG34ch3/SrK9+4XXxvn3Mth/wg8k3jIjlgzatPmxr5d1EiC4g2OjSRMeyMqqYw40bKRpJ/bQDU/xmfC87/X7fisKN8+QbyDN9BwXcdDw5kXOPLFFuiIk65Emd9rVa8AVe/ghdv3bXhQKdmxVUSysgbXusTRp6vMLZDFVnzyDGkcNGoGBjCSjVzGbKrK4QUbjk5WPLgDr/+lY8Jcqc3hdDH/HdijLgdPEPRl480r/0VtZcHkBYpVGjyGq9MvB5Y3sOdzX8yfIjVfQm5wT+pGZPXmXT87He6zgnUH8LvYx9ASqALH1p1Z/6196oCUMANnJ+X2hI+3mti3USkFyiaCAKCtgdT8q9U5sX2UQlk0yLJBYpnOjx6wgQtvGw2eJkwhbtv27IFqw4xH4OqPE54Gv/YVovzz/1nGHfobdxjIE8PkETvy74KtjrsDj4pJuklFbOLS4vbVQmLsLCQ==; 5:zPo7IpsumHf2uFVQOO8WHJClwFdDA3E9kaISxPw0wS8CcgyzmRxrXXlWo8btaSx0AlGHkuwDYClul8JA09t2DYA0zEYJuGVGTSLSSwl+WZbnYpxEfMOZ3lXBRbHZyrZPVC2nOEpHHU0NwdshiXMkIaIPIupz7My25E6TXboh8dklyh7c4FWWFYjT2uisE1nRfdOE6MQG5ybDODaFVTd8gw==; 7:P3JwyQn0aHvb9Uo4k/PbmqQBzP3z/nxGzePwKb8c7hozEMiqPLTi6utlrAf5sgOSzSbSPIIZAaHlb/H/mhEx0jHUKqBC+zIqfqzCuXlbd1nXSbjJCgC1S9bqHSmYpsfqe3obxbIA3ATs3TTWoNwgzQ== x-ms-office365-filtering-correlation-id: 66273710-d664-4c4c-56c7-08d67c074152 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4058; x-ms-traffictypediagnostic: DB3PR0502MB4058: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(366004)(396003)(376002)(346002)(189003)(199004)(71200400001)(106356001)(71190400001)(105586002)(118296001)(81166006)(2351001)(1730700003)(7736002)(14444005)(256004)(5660300001)(6436002)(8936002)(305945005)(6916009)(478600001)(14454004)(5640700003)(81156014)(8676002)(53936002)(68736007)(36756003)(6512007)(99286004)(186003)(52116002)(6506007)(6116002)(3846002)(486006)(76176011)(66066001)(2906002)(6486002)(25786009)(26005)(54906003)(446003)(316002)(476003)(2616005)(11346002)(386003)(97736004)(4326008)(2501003)(86362001)(102836004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4058; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: fccMXgZTg7kbqgg0LD52HKl7RmW3fceIV/z0PP1LbFdAKOwQH5H83QDrXkhtAPo2gQMMI5GqE6FdXn972kg6eecDePQq3vipdkvVjCSxCIkK47NGE+67VOaJpLtZ+5o9NeoHVA/tKTpeXtGxSIHtfc7IYzvW4AJO7+N0miR4SlC7y1IYuDXxCyOrIxVV2XSCLR1la3LaWqHX4vhHj3XhctvoKLfkSJm1mP/RzW4fxBYhU6/f+C8iX/qKxzxgI8poRm9MXS8UiuxNbI08Nvh/1ZXRxdSsx6I0jmmphwAM8ngW7Nbon8mMMTxNwe3tiMgFs6MIzZdRPRz6igXIvteML9UjaXUFYgBAw2UPVNKuTVANNL7LodnJuiMimrfbgs3AcaX+R/DiUbwnjxtxY0TjOfeWVkLU7KsBw0GHvezjLV8= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 66273710-d664-4c4c-56c7-08d67c074152 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:31.8611 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4058 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org In order to make it easier to implement rollbacks after FDB update vetoing, separate the FDB update code to two parts: one that deals with updates of existing FDB entries, and one that creates new entries. Signed-off-by: Petr Machata --- drivers/net/vxlan.c | 158 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 97 insertions(+), 61 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index e4ace5e917a7..aeaa429229c7 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -855,92 +855,128 @@ static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, call_rcu(&f->rcu, vxlan_fdb_free); } -/* Add new entry to forwarding table -- assumes lock held */ -static int vxlan_fdb_update(struct vxlan_dev *vxlan, - const u8 *mac, union vxlan_addr *ip, - __u16 state, __u16 flags, - __be16 port, __be32 src_vni, __be32 vni, - __u32 ifindex, __u16 ndm_flags, - bool swdev_notify) +static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, + union vxlan_addr *ip, + __u16 state, __u16 flags, + __be16 port, __be32 vni, + __u32 ifindex, __u16 ndm_flags, + struct vxlan_fdb *f, + bool swdev_notify) { __u16 fdb_flags = (ndm_flags & ~NTF_USE); struct vxlan_rdst *rd = NULL; - struct vxlan_fdb *f; int notify = 0; int rc; - f = __vxlan_find_mac(vxlan, mac, src_vni); - if (f) { - if (flags & NLM_F_EXCL) { - netdev_dbg(vxlan->dev, - "lost race to create %pM\n", mac); - return -EEXIST; - } - - /* Do not allow an externally learned entry to take over an - * entry added by the user. - */ - if (!(fdb_flags & NTF_EXT_LEARNED) || - !(f->flags & NTF_VXLAN_ADDED_BY_USER)) { - if (f->state != state) { - f->state = state; - f->updated = jiffies; - notify = 1; - } - if (f->flags != fdb_flags) { - f->flags = fdb_flags; - f->updated = jiffies; - notify = 1; - } + /* Do not allow an externally learned entry to take over an entry added + * by the user. + */ + if (!(fdb_flags & NTF_EXT_LEARNED) || + !(f->flags & NTF_VXLAN_ADDED_BY_USER)) { + if (f->state != state) { + f->state = state; + f->updated = jiffies; + notify = 1; } - - if ((flags & NLM_F_REPLACE)) { - /* Only change unicasts */ - if (!(is_multicast_ether_addr(f->eth_addr) || - is_zero_ether_addr(f->eth_addr))) { - notify |= vxlan_fdb_replace(f, ip, port, vni, - ifindex); - } else - return -EOPNOTSUPP; + if (f->flags != fdb_flags) { + f->flags = fdb_flags; + f->updated = jiffies; + notify = 1; } - if ((flags & NLM_F_APPEND) && - (is_multicast_ether_addr(f->eth_addr) || - is_zero_ether_addr(f->eth_addr))) { - rc = vxlan_fdb_append(f, ip, port, vni, ifindex, &rd); + } - if (rc < 0) - return rc; + if ((flags & NLM_F_REPLACE)) { + /* Only change unicasts */ + if (!(is_multicast_ether_addr(f->eth_addr) || + is_zero_ether_addr(f->eth_addr))) { + rc = vxlan_fdb_replace(f, ip, port, vni, + ifindex); notify |= rc; - } - - if (ndm_flags & NTF_USE) - f->used = jiffies; - } else { - if (!(flags & NLM_F_CREATE)) - return -ENOENT; - - /* Disallow replace to add a multicast entry */ - if ((flags & NLM_F_REPLACE) && - (is_multicast_ether_addr(mac) || is_zero_ether_addr(mac))) + } else { return -EOPNOTSUPP; + } + } + if ((flags & NLM_F_APPEND) && + (is_multicast_ether_addr(f->eth_addr) || + is_zero_ether_addr(f->eth_addr))) { + rc = vxlan_fdb_append(f, ip, port, vni, ifindex, &rd); - netdev_dbg(vxlan->dev, "add %pM -> %pIS\n", mac, ip); - rc = vxlan_fdb_create(vxlan, mac, ip, state, port, src_vni, - vni, ifindex, fdb_flags, &f); if (rc < 0) return rc; - notify = 1; + notify |= rc; } + if (ndm_flags & NTF_USE) + f->used = jiffies; + if (notify) { if (rd == NULL) rd = first_remote_rtnl(f); + vxlan_fdb_notify(vxlan, f, rd, RTM_NEWNEIGH, swdev_notify); } return 0; } +static int vxlan_fdb_update_create(struct vxlan_dev *vxlan, + const u8 *mac, union vxlan_addr *ip, + __u16 state, __u16 flags, + __be16 port, __be32 src_vni, __be32 vni, + __u32 ifindex, __u16 ndm_flags, + bool swdev_notify) +{ + __u16 fdb_flags = (ndm_flags & ~NTF_USE); + struct vxlan_fdb *f; + int rc; + + /* Disallow replace to add a multicast entry */ + if ((flags & NLM_F_REPLACE) && + (is_multicast_ether_addr(mac) || is_zero_ether_addr(mac))) + return -EOPNOTSUPP; + + netdev_dbg(vxlan->dev, "add %pM -> %pIS\n", mac, ip); + rc = vxlan_fdb_create(vxlan, mac, ip, state, port, src_vni, + vni, ifindex, fdb_flags, &f); + if (rc < 0) + return rc; + + vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH, + swdev_notify); + return 0; +} + +/* Add new entry to forwarding table -- assumes lock held */ +static int vxlan_fdb_update(struct vxlan_dev *vxlan, + const u8 *mac, union vxlan_addr *ip, + __u16 state, __u16 flags, + __be16 port, __be32 src_vni, __be32 vni, + __u32 ifindex, __u16 ndm_flags, + bool swdev_notify) +{ + struct vxlan_fdb *f; + + f = __vxlan_find_mac(vxlan, mac, src_vni); + if (f) { + if (flags & NLM_F_EXCL) { + netdev_dbg(vxlan->dev, + "lost race to create %pM\n", mac); + return -EEXIST; + } + + return vxlan_fdb_update_existing(vxlan, ip, state, flags, port, + vni, ifindex, ndm_flags, f, + swdev_notify); + } else { + if (!(flags & NLM_F_CREATE)) + return -ENOENT; + + return vxlan_fdb_update_create(vxlan, mac, ip, state, flags, + port, src_vni, vni, ifindex, + ndm_flags, swdev_notify); + } +} + static void vxlan_dst_free(struct rcu_head *head) { struct vxlan_rdst *rd = container_of(head, struct vxlan_rdst, rcu); From patchwork Wed Jan 16 23:06:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026262 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="pm4DpuO7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2s24Tknz9sBQ for ; Thu, 17 Jan 2019 10:06:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388176AbfAPXGp (ORCPT ); Wed, 16 Jan 2019 18:06:45 -0500 Received: from mail-eopbgr00050.outbound.protection.outlook.com ([40.107.0.50]:53954 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388106AbfAPXGo (ORCPT ); Wed, 16 Jan 2019 18:06:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V8bDYH40/ZFtwqhghX3vMcHRb38n9wt92OaY3zSBfDg=; b=pm4DpuO7L7PpEGr6shovRANoX5TWMNlSnGOSfoEEZZ7t6j5G3n9Po7I/PzV/UJQ+28O14sc+RLOdaply51wrHpM1pPfrcriRmtSz6BKGu9s9r8pFu802g6U5nTz8PGyDYONcYz9X1wQwqqrHlgkrs9h9Fhz2Y0zpNdTpIQ4Ca/c= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4058.eurprd05.prod.outlook.com (52.134.68.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Wed, 16 Jan 2019 23:06:34 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:34 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 03/13] vxlan: Have vxlan_fdb_replace() save original rdst value Thread-Topic: [PATCH net-next 03/13] vxlan: Have vxlan_fdb_replace() save original rdst value Thread-Index: AQHUrfAggnUHENtNe0aZJ2i0XogFCA== Date: Wed, 16 Jan 2019 23:06:34 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5PR0601CA0043.eurprd06.prod.outlook.com (2603:10a6:203:68::29) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4058; 6:sR5kPFoavDpQVpPixdeTGTa8su1frVO27aHZIKRPO0gFGi181jbmlyT19639L95/OiEZ04pYdOooj7Kty3gcwa/Hc2vj2VVIBNN0HPqoILK3IL0yoHhi76JylN/Kl1U/N+QESMSkDGPV0Q6HtHnLPuugcU/j+XCFq27BsDeDvpWjOSczVrcJD9JYfR3cfut4tVHgsxWIYw9ohja9TOKL4dpv+qzcV98MvV8jdr/DOnbqyNBsxn9YY+ZqSuCOssKUi0Os456sf1y/QlNfYCARdDfu1jSqwhaEtdiJjWibvaaLeuTs8mYbXK3nRcUnl3J9UU5M4Vuk9dOz0OWWvaPzMje9ibUULZfh7Ypr2Lkpbpl/MwEwSIeoVNXigPEY/gdqEUnfYrtQRpnWAFaNn8oRmdJWwHJtLcO8imdJD9Drsm03TPPm5w1/C/tcJ3L4c/ZEGM9+5gxD2vUhVUvVb4cQ8Q==; 5:yWaarw6QVjbUEcALWSrY7nOztUPFRmhGR7h2JdRhZrpcicWggE8bLCNa6qfukYlwWQPUge4HhOtHcX0heoBmkZJ/qe1t/9Ux/mF1V5owGVHLFFohbGwPel6aVkrcdPUE2rNfRBEvU84WdB8Oc+U7tlKP/RbGeFGHL9vpcAP28rBcApfZZhgh4+mjkdL5An4Gh7iheEzuR9i253KwZcQE/g==; 7:24QUNvXBBNzMsy6LPziUvPXxlTMGoe+lzjdtmCFSYAWdbzkRe9c1IXwQu39QEGhBgfjBdxs3sECw0DAOMG56e45qS0p3BKaUUDS2ECdVsr8k2VrXv2NZdsyxdBvdmmTxE99f0A3wSgt5VapNdhIbvw== x-ms-office365-filtering-correlation-id: bbf426eb-a70b-4062-419b-08d67c074285 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4058; x-ms-traffictypediagnostic: DB3PR0502MB4058: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(366004)(396003)(376002)(346002)(189003)(199004)(71200400001)(106356001)(71190400001)(105586002)(118296001)(81166006)(2351001)(1730700003)(7736002)(14444005)(256004)(5660300001)(6436002)(8936002)(305945005)(6916009)(478600001)(14454004)(5640700003)(81156014)(8676002)(53936002)(68736007)(36756003)(6512007)(99286004)(186003)(52116002)(6506007)(6116002)(3846002)(486006)(76176011)(66066001)(2906002)(6486002)(25786009)(26005)(54906003)(446003)(316002)(476003)(2616005)(11346002)(386003)(97736004)(4326008)(2501003)(86362001)(102836004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4058; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: G2pP9NSzDqnxqaf4T4//gdNegtOwQhX7ZzPErZUA0vUQTF5l4JMyX8YeAxrTgVKRPQFbnV6N5lgenICtIHjqxHGAB+DG2Jari0wLQj4F7WUgMVEfkUM1O/xeAnDdfJw6KXm/7GUiukp/NPuM5OlQTJJd488E4wVQZvQmYdGowQyaHoXnWEAIt8sv0pwwHJKktQ450DCfu+9j/vqXRtZBDoyJtggftnogptBA7Hr6mj2cY6NIiGnFH5KWBAXDdjbfydz9iAMXA+9rX+awudGJBDQJgAyTHo3myLF4+EnmWbrNCQGAyizgLrL8MqVxaLfLzdC2K1GaYSFT0GuiJSPUo5gEzoOOXvhvetcAMlPZGbqZG38KBNWm4JA76flrcL+QLU90Pd/xHQ/6KOlrOFhesQKFJ02zzaSjaSJdLlQkkig= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: bbf426eb-a70b-4062-419b-08d67c074285 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:33.8716 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4058 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org To enable rollbacks after vetoed FDB updates, extend vxlan_fdb_replace() to take an additional argument where it should store the original values of a modified rdst. Update the sole caller. The following patch will make use of the saved value. Signed-off-by: Petr Machata --- drivers/net/vxlan.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index aeaa429229c7..1c8d8c8e0961 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -625,7 +625,7 @@ EXPORT_SYMBOL_GPL(vxlan_fdb_clear_offload); /* Replace destination of unicast mac */ static int vxlan_fdb_replace(struct vxlan_fdb *f, union vxlan_addr *ip, __be16 port, __be32 vni, - __u32 ifindex) + __u32 ifindex, struct vxlan_rdst *oldrd) { struct vxlan_rdst *rd; @@ -637,6 +637,7 @@ static int vxlan_fdb_replace(struct vxlan_fdb *f, if (!rd) return 0; + *oldrd = *rd; dst_cache_reset(&rd->dst_cache); rd->remote_ip = *ip; rd->remote_port = port; @@ -865,6 +866,7 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, { __u16 fdb_flags = (ndm_flags & ~NTF_USE); struct vxlan_rdst *rd = NULL; + struct vxlan_rdst oldrd; int notify = 0; int rc; @@ -890,7 +892,7 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, if (!(is_multicast_ether_addr(f->eth_addr) || is_zero_ether_addr(f->eth_addr))) { rc = vxlan_fdb_replace(f, ip, port, vni, - ifindex); + ifindex, &oldrd); notify |= rc; } else { return -EOPNOTSUPP; From patchwork Wed Jan 16 23:06:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026263 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="YwxIIok+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2s43cQ3z9sBQ for ; Thu, 17 Jan 2019 10:06:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388180AbfAPXGr (ORCPT ); Wed, 16 Jan 2019 18:06:47 -0500 Received: from mail-eopbgr00050.outbound.protection.outlook.com ([40.107.0.50]:53954 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731049AbfAPXGq (ORCPT ); Wed, 16 Jan 2019 18:06:46 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1sYYXIzHIXkA8VfMurS7wMvuG92Ns5KL8tejZz9MygE=; b=YwxIIok+QGeq9Zi2ED4a42ec/CNZsPfXB0aSQh0rH1O8LtlScTocZiunIfsUhyZT+K8EuffS4gPtXlIunh2ikSsqigQsrN+FLXU9S/Pud59eo3I9ABpoVZWU2kt2NguXN/0s8lCefkV7o9KkXEBcNn3nxv+LOhkyKq53ZPROvc4= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4058.eurprd05.prod.outlook.com (52.134.68.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Wed, 16 Jan 2019 23:06:38 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:38 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 04/13] vxlan: Allow vetoing of FDB notifications Thread-Topic: [PATCH net-next 04/13] vxlan: Allow vetoing of FDB notifications Thread-Index: AQHUrfAiRRsR8zjWjUKrmI0WFDw2KQ== Date: Wed, 16 Jan 2019 23:06:38 +0000 Message-ID: <64781263f79d3669af32233ff9e190bc88516cb2.1547679599.git.petrm@mellanox.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0035.eurprd03.prod.outlook.com (2603:10a6:20b::48) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4058; 6:wtVem69NU/+SSojRvhbYYs1Xwlrp+nYKwcMupO1QS3Vryk59qIr0z7dCBWcIhBXbiJejKasgIJ9DzYcUcNe9d8uylBMdFjyCtTPoM7eayPdon0cnpJCYjtrs7F7qg9xf0oucf3PD9fHNYOFN2Mq7rRACwjK7ChaIwnLyyX0wn73qgtJGKeveQ8gmgXpSZ5rrBhzI48I7zjJ5JLHoUHaUK2PuFFY2m9Uh0Xxc/MAyV9nX+mLvVEr0wj3/maoRgjAJJIFXdE+RjK4IvIb5cU3E17UG37pJwtB3iHForrcjKoxsih5+LRiAIWDXFA/icgGb+nCDxYb0ndwa5g4yaWH9YqR3hWQdcnwXw5HuER9b6Nrte3t0+iDANJ07ipPrhazL6w24mGgx96eJqGcFHNztSkTiznTdb/oGd2wU12OcPxCE0zgqKG6g48jOt9du6RB1dTsKLMWxiRXXKCVqynXwJA==; 5:0pkSOJ7r4zijeJN/ZAJow6VGyMY50FnQ373JpnjVo/pOqdt3SBSXoyn1CVaoCwTC0sDk7Uam4lGcw09gFbrGmJdG9+TuMQ4jqO0BAoR47KlJepfeNfVzz9qP8T+FXruXjbsZL3TysycrUwRMVmNOW4pByIT0PoW6grEHPPec+xtu02DIMVyq6zmu8I5CfjqqyliYJpFN9EmmfCz3gQPhuA==; 7:3vuh616MDg0vfTp7ZegPDfl3SlQIT/mut04uqZw3hqnuIFoi4pjLyqZs293F5dmxMIx2StkrZofeQsuX6geHUmrVGlHvZrIo+41qxKY9x0u3+3nhvecQaKtGyKohBGe2I8GaMsHuUR+JrjuVXwPHmg== x-ms-office365-filtering-correlation-id: 6642efde-6745-48d3-55df-08d67c07438e x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4058; x-ms-traffictypediagnostic: DB3PR0502MB4058: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(366004)(396003)(376002)(346002)(189003)(199004)(71200400001)(106356001)(71190400001)(105586002)(118296001)(81166006)(2351001)(1730700003)(7736002)(14444005)(256004)(5660300001)(6436002)(8936002)(305945005)(6916009)(478600001)(14454004)(5640700003)(81156014)(8676002)(53936002)(68736007)(36756003)(6512007)(99286004)(186003)(52116002)(6506007)(6116002)(3846002)(486006)(76176011)(66066001)(2906002)(6486002)(25786009)(26005)(54906003)(446003)(316002)(476003)(2616005)(11346002)(386003)(97736004)(4326008)(2501003)(86362001)(102836004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4058; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: RFtIpeu+3UAULl5UymGmifqG9XKNt6b5ojCl9G1tmzIZIZ5ZG8NOgpQ0ovLDjPpCcJP6ta3RHybykN1KG3spSznucQnt8U1J3AZR3uJE1BSN/EMiKvGHgZYpu0Ifrc9UcHQ7FxNN8IFV184rz+aVFN6l+ZojWyp4wCYr69nc36lbNqkM96LhyOxEY4xXUjrBvaVkW6m+P9r9vfxaMM99bwB8PlAjzOPUeAYuioTnqmp9S2rQrfe7fxvb4shm/NMMZUCrNuxSk/fW1+0UYJGJEQQWywueeWUuLVuhp+wKnvYUgmPlxS+1cV+IA0Wqd2sj9MV0QGM0uQTbbfAc2TBI0nrT10UuMIOKylqf2L5nJZ249SrwnTByVoMgz4DE53XIIIsipVQQCwonnsLsoI11Pc+i8W3QnEKFssR7mADKLQg= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6642efde-6745-48d3-55df-08d67c07438e X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:35.6078 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4058 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Change vxlan_fdb_switchdev_call_notifiers() to return the result from calling switchdev notifiers. Propagate the error number up the stack. In vxlan_fdb_update_existing() and vxlan_fdb_update_create() add rollbacks to clean up the work that was done before the veto. Signed-off-by: Petr Machata --- drivers/net/vxlan.c | 64 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 1c8d8c8e0961..92904ee16053 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -375,32 +375,38 @@ static void vxlan_fdb_switchdev_notifier_info(const struct vxlan_dev *vxlan, fdb_info->added_by_user = fdb->flags & NTF_VXLAN_ADDED_BY_USER; } -static void vxlan_fdb_switchdev_call_notifiers(struct vxlan_dev *vxlan, - struct vxlan_fdb *fdb, - struct vxlan_rdst *rd, - bool adding) +static int vxlan_fdb_switchdev_call_notifiers(struct vxlan_dev *vxlan, + struct vxlan_fdb *fdb, + struct vxlan_rdst *rd, + bool adding) { struct switchdev_notifier_vxlan_fdb_info info; enum switchdev_notifier_type notifier_type; + int ret; if (WARN_ON(!rd)) - return; + return 0; notifier_type = adding ? SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE : SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE; vxlan_fdb_switchdev_notifier_info(vxlan, fdb, rd, &info); - call_switchdev_notifiers(notifier_type, vxlan->dev, - &info.info); + ret = call_switchdev_notifiers(notifier_type, vxlan->dev, + &info.info); + return notifier_to_errno(ret); } -static void vxlan_fdb_notify(struct vxlan_dev *vxlan, struct vxlan_fdb *fdb, - struct vxlan_rdst *rd, int type, bool swdev_notify) +static int vxlan_fdb_notify(struct vxlan_dev *vxlan, struct vxlan_fdb *fdb, + struct vxlan_rdst *rd, int type, bool swdev_notify) { + int err; + if (swdev_notify) { switch (type) { case RTM_NEWNEIGH: - vxlan_fdb_switchdev_call_notifiers(vxlan, fdb, rd, - true); + err = vxlan_fdb_switchdev_call_notifiers(vxlan, fdb, rd, + true); + if (err) + return err; break; case RTM_DELNEIGH: vxlan_fdb_switchdev_call_notifiers(vxlan, fdb, rd, @@ -410,6 +416,7 @@ static void vxlan_fdb_notify(struct vxlan_dev *vxlan, struct vxlan_fdb *fdb, } __vxlan_fdb_notify(vxlan, fdb, rd, type); + return 0; } static void vxlan_ip_miss(struct net_device *dev, union vxlan_addr *ipa) @@ -868,7 +875,8 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, struct vxlan_rdst *rd = NULL; struct vxlan_rdst oldrd; int notify = 0; - int rc; + int rc = 0; + int err; /* Do not allow an externally learned entry to take over an entry added * by the user. @@ -915,10 +923,20 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, if (rd == NULL) rd = first_remote_rtnl(f); - vxlan_fdb_notify(vxlan, f, rd, RTM_NEWNEIGH, swdev_notify); + err = vxlan_fdb_notify(vxlan, f, rd, RTM_NEWNEIGH, + swdev_notify); + if (err) + goto err_notify; } return 0; + +err_notify: + if ((flags & NLM_F_REPLACE) && rc) + *rd = oldrd; + else if ((flags & NLM_F_APPEND) && rc) + list_del_rcu(&rd->list); + return err; } static int vxlan_fdb_update_create(struct vxlan_dev *vxlan, @@ -943,9 +961,16 @@ static int vxlan_fdb_update_create(struct vxlan_dev *vxlan, if (rc < 0) return rc; - vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH, - swdev_notify); + rc = vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH, + swdev_notify); + if (rc) + goto err_notify; + return 0; + +err_notify: + vxlan_fdb_destroy(vxlan, f, false, false); + return rc; } /* Add new entry to forwarding table -- assumes lock held */ @@ -3515,9 +3540,12 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, goto errout; /* notify default fdb entry */ - if (f) - vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH, - true); + if (f) { + err = vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), + RTM_NEWNEIGH, true); + if (err) + goto errout; + } list_add(&vxlan->next, &vn->vxlan_list); return 0; From patchwork Wed Jan 16 23:06:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026264 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="tu+lG50T"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2sB1x5Lz9sBQ for ; Thu, 17 Jan 2019 10:06:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388049AbfAPXGw (ORCPT ); Wed, 16 Jan 2019 18:06:52 -0500 Received: from mail-eopbgr00050.outbound.protection.outlook.com ([40.107.0.50]:53954 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388106AbfAPXGw (ORCPT ); Wed, 16 Jan 2019 18:06:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=r2aigsimj+4rCjgffxjwrRWxRaCEsMwGXEFRcsuTMKg=; b=tu+lG50TIJx2GnTTqlCHXIenq5tMickY6Qgum8MSK217GFTaTlgqAfhDHNil/nHKXDVAM6jv+4lnX6VIJTVnyWQZPMyY+kD6VG/NsqmRHu9LbqXDS1vcLnfitkVrt0MoFmvpL2ba9GUuf2TNpYIk++DYDUwZ+ft/hTRDQcPK6GI= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4058.eurprd05.prod.outlook.com (52.134.68.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Wed, 16 Jan 2019 23:06:40 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:39 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 05/13] vxlan: changelink: Inline vxlan_dev_configure() Thread-Topic: [PATCH net-next 05/13] vxlan: changelink: Inline vxlan_dev_configure() Thread-Index: AQHUrfAjthIqnV+cuUa1D5lNfzFv4A== Date: Wed, 16 Jan 2019 23:06:39 +0000 Message-ID: <287f680e9670c41141d07cdd24245c36f3b1407c.1547679599.git.petrm@mellanox.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5PR06CA0006.eurprd06.prod.outlook.com (2603:10a6:206:2::19) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4058; 6:ZFY5yPPWjKg7TF5ujsIULBMgT4qvpY6gvEWyaY/aCQAyea3xlMj9Z1XjfUpoJh2ZtZNaZT2Y7gdolwDOHcIlEuIzDtladumPwfkxf1Z4Ej7VMvjOy6zfK/BAPJ/2FXCtkemVpnF0qBx1sHGOK6rlQZLNdvtGjq3Qt/YhKgwWToqsh6NvF6hloHdrThOnvPHgf3gj3pqjiisRszbbUK1AFcjXr2aeM6hDqkA5FX2VpNuL4JkoeoSuS0Fc3LiAo63n4kaOVfiXra8yujVCcBVhzYAtdO6KEzB8cNAag5lH6nFmrgcE+SRuJBl/SGWe4niNNTtk0OO7PlWXQffmPdJIAeGetSQTbHq7OZf1eAVjFCkYERSGXGQZ9F3UAqZ5da+s/U1fmZxQ6jhfZCWOKVpTcGJNyTVlXbgxasZsz7bXeeVdyT2mayAcxMb7tJSOGwOX0r8dcc24FdLYsjJ52AvFIg==; 5:F6AvzrcU3v9WCNA31XPJShLjcxKS5I2f77gKAci4VZ7HiD2MERe4Iays7e4iUAmEfGlqHt8VF5tqLfN9EQZy/JEwFKzPc/29+Dk1if3kbrr8gBhrYtbQ5X/kblJnq94ct1JBINzi0khxGE4SMLw1ZiFJDWzzquDRf1/QS0VqbYtu3h82R4TcTJDlRtsVXutCvDeWN/jzDp3YWgxeDJRiEA==; 7:boPguvGEdvcE4dIAZjuJC2kj250S9+vySeU6VDj6kvkG+FCqHIDLUAijc7G4gRBb9EigaVGyv0E2sJCkANYtKJsIcbY4xVN9WT2VdXHnIUcav8hq9fqZaTuVhCRte1di8qCviJp2AcFPoKSmDhfgWA== x-ms-office365-filtering-correlation-id: 60e15ee4-4f9a-4e3d-3018-08d67c0745d3 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4058; x-ms-traffictypediagnostic: DB3PR0502MB4058: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(366004)(396003)(376002)(346002)(189003)(199004)(71200400001)(106356001)(71190400001)(105586002)(118296001)(81166006)(2351001)(1730700003)(7736002)(14444005)(256004)(5660300001)(6436002)(8936002)(305945005)(6916009)(478600001)(14454004)(5640700003)(81156014)(8676002)(53936002)(68736007)(36756003)(6512007)(99286004)(186003)(52116002)(6506007)(6116002)(3846002)(486006)(76176011)(66066001)(2906002)(6486002)(25786009)(26005)(54906003)(446003)(316002)(476003)(2616005)(11346002)(386003)(97736004)(4326008)(2501003)(86362001)(102836004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4058; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: XJzCXs54aD+6Vc0n6z6Buje5k7NvI+gQj0c0DPZXJM4kFtBp9R8iZg4Rx3PbCj5zkYFHM2U2Im/9nXRHKR4crtaBWsneroGI5vD1/lnD41B1UA+WdT19A3ccG2SfI3R2VsnwHdOFGZpCHeG03nbksn/Xw6TefxAlw+Pyw/ivEpp8tAuI7q9cktPMRzPJJiKjAfXEgjqUwGdQYXTdi7PEIm0n7WvlzSNFUVWS3qHu0MNSNnx1iffIiEzEQv8csf1P8jlMRie+7qlZQ4CG6raKOFI9/zEIKXHEneQt5LRq0k1o2h+4cNF9W3+rIjFjrz+4R5KMyOwQWoOeT7MXn+9hmIRKb4gCo+tN1QzfouoDU5jVRLcQqmKBdLw/3h6IlJFHphYvjFUQqemCPhsSUCgESqHVeHZIUtKpLUED0YbqVk0= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 60e15ee4-4f9a-4e3d-3018-08d67c0745d3 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:39.4115 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4058 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The changelink operation may cause change in remote address, and therefore an FDB update, which can be vetoed. To properly handle vetoing, vxlan_changelink() needs to be gradually updated. In this patch simply replace vxlan_dev_configure() with the two constituent calls. Signed-off-by: Petr Machata --- drivers/net/vxlan.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 92904ee16053..f2f419c60dfe 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -3793,6 +3793,7 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], struct vxlan_dev *vxlan = netdev_priv(dev); struct vxlan_rdst *dst = &vxlan->default_dst; unsigned long old_age_interval; + struct net_device *lowerdev; struct vxlan_rdst old_dst; struct vxlan_config conf; int err; @@ -3805,10 +3806,13 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], old_age_interval = vxlan->cfg.age_interval; memcpy(&old_dst, dst, sizeof(struct vxlan_rdst)); - err = vxlan_dev_configure(vxlan->net, dev, &conf, true, extack); + err = vxlan_config_validate(vxlan->net, &conf, &lowerdev, + vxlan, extack); if (err) return err; + vxlan_config_apply(dev, &conf, lowerdev, vxlan->net, true); + if (old_age_interval != vxlan->cfg.age_interval) mod_timer(&vxlan->age_timer, jiffies); From patchwork Wed Jan 16 23:06:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026265 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="ldgJ+qIZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2sC6knWz9sBQ for ; Thu, 17 Jan 2019 10:06:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388069AbfAPXGz (ORCPT ); Wed, 16 Jan 2019 18:06:55 -0500 Received: from mail-eopbgr00050.outbound.protection.outlook.com ([40.107.0.50]:53954 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731049AbfAPXGy (ORCPT ); Wed, 16 Jan 2019 18:06:54 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0ZrX+V74WFOXK0zfb38hqi2FjHZ9WFXwuQ+8CHZcdrk=; b=ldgJ+qIZHTtsalfxDAcgSt1bvzUaK7Uo3CrQTFnX61PuS7sdm2zW4f/wdF17IUPikRXtVlLuzQQj4RN/iqKnYH1Q8BvasjQYhV88N9PipMe3fS5GmOMIXrQEQZ3CbTPiX7fHxhLbPydSfXfTK0AVXQtQ/EKT6CV1yBBw7Pod8wY= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4058.eurprd05.prod.outlook.com (52.134.68.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Wed, 16 Jan 2019 23:06:41 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:41 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 06/13] vxlan: changelink: Postpone vxlan_config_apply() Thread-Topic: [PATCH net-next 06/13] vxlan: changelink: Postpone vxlan_config_apply() Thread-Index: AQHUrfAkXxKoW3XKmUygGQaTT8LW/w== Date: Wed, 16 Jan 2019 23:06:41 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P190CA0035.EURP190.PROD.OUTLOOK.COM (2603:10a6:206:14::48) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4058; 6:K10m6KEz/a00h+u64pcdmLcGKXeJs/ZhLgdlHPBS+zK6TUT0gsczNORu3r+q5S8sbpgp61s35qGkHSSbL8oVep0cuVwpchrhdbcDLhad1pkxuAAbLuqh60sWmbhShbTkmaET/odDM/G5Fr2AaALIr/phTZp8qR+yiyJhMMmzk0NW3WXaA0GtT5jGZegVBCTQQ7VrBVaBo3ChRwTXzFgPs3MkCzTchFPeRkaamH4EankUbud9H+I5f2CTYmn1+XIGRNX3+IFaFy77AbsxXLrdOrAYYisrv6Mll8GTiAgoBBDdD5bmQEc6TyIlgUNLCap1Beua4sjuUPP/DCG4WZmuVC6ccczoqX9xfc2XHRJSoXoeZozM8XEqhbwfmfz8DULu3UG9cndQlTfMOdhNwMRmVtiai9qd4jdUDfh6QdFC2h4to4Uw9dXlZDufjQi9KDixYjZ1QYXcstB13tFqW+YXCw==; 5:PrTCgixYNNDEBTXjl+tMad+xmeVDP77TWNNK9sAiZnnj4g5bXCw0fyeKSoWRSq1EDHqO58GOW74W6dcpmeZD9obWaeFh/wHEV+hB+eGnDF+X3ERzOXzwG8wg1HeTM6T6oJi7NA6dfF11xr5B2j9MFUwU8OPIyzmC5KfOFyJ1rlET1vbY3V9F7H1iWq8G274f3n0WnQXlrY1JSyvc1yInFA==; 7:WOYMOZGftomeVSOn6fziHyLwgirUhQNDVtaf+yWElEmClF2at9uXA+5TTEf8HS8ptNbtEsOzuauOqn4n6w7RmRnp/6X9+pUz7WLgM/RmsKudkW7JbDCjSZ7NHNL0wZG+XEkBY+6eWGv7S7iP0NyY3g== x-ms-office365-filtering-correlation-id: 96a5a48a-b9a2-4c5a-4e57-08d67c0746e1 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4058; x-ms-traffictypediagnostic: DB3PR0502MB4058: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(366004)(396003)(376002)(346002)(189003)(199004)(71200400001)(106356001)(71190400001)(105586002)(118296001)(81166006)(2351001)(1730700003)(7736002)(14444005)(256004)(5660300001)(6436002)(8936002)(305945005)(6916009)(478600001)(14454004)(5640700003)(81156014)(8676002)(53936002)(68736007)(36756003)(6512007)(99286004)(186003)(52116002)(6506007)(6116002)(3846002)(486006)(76176011)(66066001)(2906002)(6486002)(25786009)(26005)(54906003)(446003)(316002)(476003)(2616005)(11346002)(386003)(97736004)(4326008)(2501003)(86362001)(102836004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4058; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: yHNmc+f/JoIV34PKnoXvE5c7jTslCTWWno+dC6xhuewqw85g5jLo3uhBL6H4/Q9EyeC1I4qjew2Wqnjf51A88FD34RqPmim/AWmT680vmBle8wljauYEC/lDMapb+kkNuTMZNQmr9sxcuY4koBruz/BwzalpSoEpbm6LUPs2OaH+f7jc3sO/45Oo6WJp0wlwRgYRXEA0rsNWQm+fDTFe7ihxXNk99PXRutqi5TE+a+ZzSNNo9XvVt3IWM50mziGCfL1F68uBw5Urq4Ybyf7RX8FC+6FN8AZE055cVPl6SJGURqZN7lqA/p/ZSn21HohrfcU1eh8ItzIFTkVXRrBZLkpGbA4ILR6iMjOC/1DYHQsB8Vn2ywiCFyI3EsEXf/Yi+jRP7kGNtyCRvjB9xWTsLrM3W+PycNU5pFrA2JnhrTo= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 96a5a48a-b9a2-4c5a-4e57-08d67c0746e1 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:41.1797 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4058 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When an FDB entry is vetoed, it is necessary to unroll the changes that have already been done. To avoid having to unroll vxlan_config_apply(), postpone the call after the point where the vetoing takes place. Since the call can't fail, it doesn't necessitate any cleanups in the preceding FDB update logic. Correspondingly, move down the mod_timer() call as well. References to *dst need to be replaced with references to conf. Additionally, old_dst and old_age_interval are not necessary anymore, and therefore drop them. Signed-off-by: Petr Machata --- drivers/net/vxlan.c | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index f2f419c60dfe..51e10f47d4f1 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -3792,9 +3792,7 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], { struct vxlan_dev *vxlan = netdev_priv(dev); struct vxlan_rdst *dst = &vxlan->default_dst; - unsigned long old_age_interval; struct net_device *lowerdev; - struct vxlan_rdst old_dst; struct vxlan_config conf; int err; @@ -3803,40 +3801,31 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], if (err) return err; - old_age_interval = vxlan->cfg.age_interval; - memcpy(&old_dst, dst, sizeof(struct vxlan_rdst)); - err = vxlan_config_validate(vxlan->net, &conf, &lowerdev, vxlan, extack); if (err) return err; - vxlan_config_apply(dev, &conf, lowerdev, vxlan->net, true); - - if (old_age_interval != vxlan->cfg.age_interval) - mod_timer(&vxlan->age_timer, jiffies); - /* handle default dst entry */ - if (!vxlan_addr_equal(&dst->remote_ip, &old_dst.remote_ip)) { + if (!vxlan_addr_equal(&conf.remote_ip, &dst->remote_ip)) { spin_lock_bh(&vxlan->hash_lock); - if (!vxlan_addr_any(&old_dst.remote_ip)) + if (!vxlan_addr_any(&dst->remote_ip)) __vxlan_fdb_delete(vxlan, all_zeros_mac, - old_dst.remote_ip, + dst->remote_ip, vxlan->cfg.dst_port, - old_dst.remote_vni, - old_dst.remote_vni, - old_dst.remote_ifindex, + dst->remote_vni, + dst->remote_vni, + dst->remote_ifindex, true); - if (!vxlan_addr_any(&dst->remote_ip)) { + if (!vxlan_addr_any(&conf.remote_ip)) { err = vxlan_fdb_update(vxlan, all_zeros_mac, - &dst->remote_ip, + &conf.remote_ip, NUD_REACHABLE | NUD_PERMANENT, NLM_F_APPEND | NLM_F_CREATE, vxlan->cfg.dst_port, - dst->remote_vni, - dst->remote_vni, - dst->remote_ifindex, + conf.vni, conf.vni, + conf.remote_ifindex, NTF_SELF, true); if (err) { spin_unlock_bh(&vxlan->hash_lock); @@ -3846,6 +3835,10 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], spin_unlock_bh(&vxlan->hash_lock); } + if (conf.age_interval != vxlan->cfg.age_interval) + mod_timer(&vxlan->age_timer, jiffies); + + vxlan_config_apply(dev, &conf, lowerdev, vxlan->net, true); return 0; } From patchwork Wed Jan 16 23:06:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026266 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="LzRhmFw4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2sF3J4Hz9sBQ for ; Thu, 17 Jan 2019 10:06:57 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388075AbfAPXG4 (ORCPT ); Wed, 16 Jan 2019 18:06:56 -0500 Received: from mail-eopbgr00050.outbound.protection.outlook.com ([40.107.0.50]:53954 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388051AbfAPXG4 (ORCPT ); Wed, 16 Jan 2019 18:06:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TtYX7V9Xqh0jIcbN0ZFa60vQd3WZBSR1R4vPFrZbDPk=; b=LzRhmFw4KUxAnEngUR1ncsZKtF/FvViyj4OB5I3eMlmnhNMGEKB0opHG8G8S9d3yrMw8YnXc9SEGPIEFuUr1pWzcciephiTWXHKcUP26Uhil0J7ZkmEGMrl5HBCXj4EGpPVI18XGLFQy4oKoMWHyZXOsAC9iY7WMk3uohni+HK8= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4058.eurprd05.prod.outlook.com (52.134.68.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Wed, 16 Jan 2019 23:06:43 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:43 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 07/13] vxlan: changelink: Delete remote after update Thread-Topic: [PATCH net-next 07/13] vxlan: changelink: Delete remote after update Thread-Index: AQHUrfAlpZiWdMGA9E2RFx6dUq2kPQ== Date: Wed, 16 Jan 2019 23:06:43 +0000 Message-ID: <63e9eeafa3f989e298722119aeca900492899bd9.1547679599.git.petrm@mellanox.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P190CA0020.EURP190.PROD.OUTLOOK.COM (2603:10a6:206:14::33) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4058; 6:pLv1pndOFNHNYpkw4Fq7xLsIaxZ3aTDXnEEDWrPrSXT16LbOVWY+7vufT84a5mHAwq7u54Cd3+rZHqsHhaZah9SSbYRcpugDfFVPBTcfmipZp/91eTDP+bnmHRc46LvuAB/HB4VMxw9PF8coI7liZWsPiBFPKGZkXFZwPnzCKi0YyihM7dCJedMG/r77gZkHeytNk3vVf8utZjj5wiJr6VOD5+Ym2k1hVjfPlVo6D+v2Bjzh10Xmc65MSOSg9JO6PFVD828rz9sDJSelsgivXQHFzNluPRN5BEAvLKH3O71gDrAXaC0b3fkQLQvyWApCZIb+ATEXHIKeFMLj+g4zICMw9uA0nSvMezp6rG+UrrhcWIkjWqv2sSbPiotqOknt+S62hauBiALVZ4R1s446H/mxP+7wRFBVv2LwQlE8gsdc24GJcFELoPz7YIyp/JBJVFeGL7T6suw9sbJGkT8CXg==; 5:0sExwPqodPP5Qo8t9dHvA3o++nbB+U2HiMD3bqWLdKRTOOL6PTahxzhNH80aG0seW4hNP9bb+CYFDFkAOGsVekQ/VxShdAAriOjWHF3N98dx7Zrd3gtFlxb0TY7+XQW5cJQ+moMsGgHtzaQc+j49frI7wIX/vpj0O5HF9i3nen0eeMPjmXcr+s/3BJTqMJ8N+av9P+kH8SvgSGqvQsuFow==; 7:4pc67jKBiEmvPIR7IXQylkwVj7WF4vwIVRghcHZoEe6WwNpAen/1rdOBVmkbphY+RjoXPKBWLz94SkGpxCk34BvNv+nGhXAGdDzVUi1JDE7hGCfJO90F3VgYp4GEMSNKGn9+agZmWgoUJbcPA7d3Mg== x-ms-office365-filtering-correlation-id: 1fa356bc-cdc0-4060-8fd8-08d67c0747f1 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4058; x-ms-traffictypediagnostic: DB3PR0502MB4058: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(366004)(396003)(376002)(346002)(189003)(199004)(71200400001)(106356001)(71190400001)(105586002)(118296001)(81166006)(2351001)(1730700003)(7736002)(14444005)(256004)(5660300001)(6436002)(8936002)(305945005)(6916009)(478600001)(14454004)(5640700003)(81156014)(8676002)(53936002)(68736007)(36756003)(6512007)(99286004)(186003)(52116002)(6506007)(6116002)(3846002)(486006)(76176011)(66066001)(2906002)(6486002)(25786009)(26005)(54906003)(446003)(316002)(476003)(2616005)(11346002)(386003)(97736004)(4326008)(2501003)(86362001)(102836004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4058; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: f16D+liE5CnEQRZBEmFTWojWJ0AlEGFgN7+5PIHrlFNhMpgl+/33PD50VL3evEKB95E1eDNrTaXMOg/nKfpmhWO+yYpSrmA822Piw7Amp736odQRIdyrh5HI3uUZh+qvPORnHNVIKsGwUoEXRuvngYvW+zCuX7c3gt0I8b3m7O4x3vstiuH2OnHCzoK6rLc77ZRKHsgD+zGYHnWCNZOeqFeERuwTxw6qpFXOMyh0+cRE1fGR/jfGOj1nDz3REl3pz7mCCESJ/wvE0i9OZc54oAAC1+Y/WP6eB23wAwlQZt/BpD13KE8SAhEfRpasQitQsTsgPULw8ncOFftBCaRhpaQd5qPV3430aiw9NqObA0Z6S4DH3Wb26Z/bkUlXyJm5nWpEJMkuPMhsXmZm4YaHsY8w4yTyjrSfj8/kwgPYly8= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1fa356bc-cdc0-4060-8fd8-08d67c0747f1 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:42.9730 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4058 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If a change in remote address prompts a change in a default FDB entry, that change might be vetoed. If that happens, it would then be necessary to reinstate the already-removed default FDB entry corresponding to the previous remote address. Instead, arrange to have the previous address removed only after the FDB is successfully vetted. Signed-off-by: Petr Machata --- drivers/net/vxlan.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 51e10f47d4f1..83f65eb3085f 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -3809,15 +3809,6 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], /* handle default dst entry */ if (!vxlan_addr_equal(&conf.remote_ip, &dst->remote_ip)) { spin_lock_bh(&vxlan->hash_lock); - if (!vxlan_addr_any(&dst->remote_ip)) - __vxlan_fdb_delete(vxlan, all_zeros_mac, - dst->remote_ip, - vxlan->cfg.dst_port, - dst->remote_vni, - dst->remote_vni, - dst->remote_ifindex, - true); - if (!vxlan_addr_any(&conf.remote_ip)) { err = vxlan_fdb_update(vxlan, all_zeros_mac, &conf.remote_ip, @@ -3832,6 +3823,14 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], return err; } } + if (!vxlan_addr_any(&dst->remote_ip)) + __vxlan_fdb_delete(vxlan, all_zeros_mac, + dst->remote_ip, + vxlan->cfg.dst_port, + dst->remote_vni, + dst->remote_vni, + dst->remote_ifindex, + true); spin_unlock_bh(&vxlan->hash_lock); } From patchwork Wed Jan 16 23:06:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026267 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="Zh91dMUj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2sH61pSz9sBQ for ; Thu, 17 Jan 2019 10:06:59 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388105AbfAPXG6 (ORCPT ); Wed, 16 Jan 2019 18:06:58 -0500 Received: from mail-eopbgr00050.outbound.protection.outlook.com ([40.107.0.50]:53954 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731049AbfAPXG6 (ORCPT ); Wed, 16 Jan 2019 18:06:58 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KDlFEhnqmsEH6fSjbvceMb0CFQc9rU06+5GODNYAL8M=; b=Zh91dMUj0KHcWUOpKK8wSGd7aQ0NHVRCoye/vUSem+HKsrHlZ8myjSlfJIdSe2Mw4rxf9Iclp9bOJ9cGDQwPVyjifm6EBDC9FoyIQuQso0UE9lBaceBIOCJz4ZPcomZyCmRMds9hn1r8m4Fr5fRrd+H4J9S9RagRcEJk8jnFrsM= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4058.eurprd05.prod.outlook.com (52.134.68.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Wed, 16 Jan 2019 23:06:51 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:51 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 08/13] net: Add extack argument to ndo_fdb_add() Thread-Topic: [PATCH net-next 08/13] net: Add extack argument to ndo_fdb_add() Thread-Index: AQHUrfApqnkjaQJ4oESsZJsQdGDEig== Date: Wed, 16 Jan 2019 23:06:50 +0000 Message-ID: <29fd5997447c839f27ef0b1d712559c39a6e7e78.1547679599.git.petrm@mellanox.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5PR06CA0006.eurprd06.prod.outlook.com (2603:10a6:206:2::19) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4058; 6:BO3tT87GlBfpTTpdUVNu6COLzVImdCG3O29e+d+VNRxARJQIxD8NQbtFxaTOhxmWf00WGITGKB5zuFV+tWi5baC2jPEbS3y+R5WdMfnAelWTJpfuixRD164OtMTmtCdEIGLpsGkXnOe4r8Q8CjjgNlgv16A2NHV5zCZHPyYSOALkG8W54kWO9PKUnHmIGNfKCDVPMhKaagViJXbnxsU5URmr4mbiGttAeRsio/fwFhHrBwlAowfnV1jqIp33bCOpPqtH2ob/bYKxISnfuAA0bdVImrlRuadXPdWEi0sLbboYYmTM+W2xB6g0Ke062g608O7Cb55CRo5RyryEzXu3oB7LLoEHGIjzXl4M3ItcDp9GtHcdTdgHDa2s7JMS6yyGOrQFVxwAbACTTOJLbMsYTGnNqlbL/KGVuCF5kzykeZX8YYQk5nwuJQl61J6I/ByO6xFLnnyxdtxdfSnzfEFMyw==; 5:FCQ0+T6yf0opLDnSgoEdGpOjDJjqgaX4EisUuS8aTlHYjS6W5f+MvuzgejeeHg6k9EOVXRIF8KW5YLYDRya1vm5Wqx/i8HbmFd7eBKcnxcjtgrntF98VJq7Yv1c36NYgpSfiPeHtndRsSLg3qYo2rNkSIku379+g/xTzyHwzd2Qrfh+ooHwjJuUcYVsUBPgtBjyN5n62dkBV7mQGtT8b7Q==; 7:dYITxM2fFh3k102eC4GeXfr/Z+s285zzKBQ3/FIBDg/qmq/F4xe/PLVu5BzN7nYKepYrvGV1vhEQl0QabAzkrje52Kzxyb15cD6txaSBBc/Y9zzDYlhaLjRhWnOLzHukd376gp2/tBrZm0XyFLyagg== x-ms-office365-filtering-correlation-id: eef400fb-8c94-45e6-3caa-08d67c0748fd x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4058; x-ms-traffictypediagnostic: DB3PR0502MB4058: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(366004)(396003)(376002)(346002)(189003)(199004)(71200400001)(106356001)(71190400001)(105586002)(118296001)(81166006)(2351001)(1730700003)(7736002)(14444005)(256004)(5660300001)(6436002)(8936002)(305945005)(6916009)(478600001)(14454004)(5640700003)(81156014)(8676002)(53936002)(68736007)(36756003)(6512007)(99286004)(186003)(52116002)(6506007)(6116002)(3846002)(486006)(76176011)(66066001)(2906002)(6486002)(25786009)(26005)(54906003)(446003)(316002)(476003)(2616005)(11346002)(386003)(97736004)(4326008)(2501003)(86362001)(102836004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4058; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: FvCuHiy+MSo/nRA5zuZfmJ/9SRZar+E0aQwm/Gl01clkvdYcgqEvQHtEcjSOLFQiDdwAaciPSvyV0i/KbypCu8nPv22G2zuCgpPEZuFjpb+X/d94zvjDKpJ23spvIWmaLQAFEdSuxhu4vMRyXTPzwF4k9gCfK7OxV8gtPd/k6J4BUU/yiRLTSHWCR/qjwwOq1BJCQoG0yVTvbb8tBOEpCtJO4nusWdf1jZXN40DjQ5ml9nh4WsnetLMVxZAG7A46tPmRedgbKRwuV8Vlk8weiFTkUTZYcR8kWJjVvXYs9PhvqIqkjR8oufAsQ8mEJqm7BEQa1fWlQim37WcEoHJSYdMErWNXzYWrjlZoToOtAGvCmMtSZALy/3mDjoaySKRTxQgKII0e20u8ncbGscIkGZqoPbiGVIEDq7m/Pym6Acw= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: eef400fb-8c94-45e6-3caa-08d67c0748fd X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:44.7152 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4058 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Drivers may not be able to support certain FDB entries, and an error code is insufficient to give clear hints as to the reasons of rejection. In order to make it possible to communicate the rejection reason, extend ndo_fdb_add() with an extack argument. Adapt the existing implementations of ndo_fdb_add() to take the parameter (and ignore it). Pass the extack parameter when invoking ndo_fdb_add() from rtnl_fdb_add(). Signed-off-by: Petr Machata --- drivers/net/ethernet/intel/i40e/i40e_main.c | 3 ++- drivers/net/ethernet/intel/ice/ice_main.c | 3 ++- drivers/net/ethernet/intel/igb/igb_main.c | 3 ++- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 3 ++- drivers/net/ethernet/mscc/ocelot.c | 3 ++- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 3 ++- drivers/net/macvlan.c | 3 ++- drivers/net/vxlan.c | 3 ++- include/linux/netdevice.h | 6 ++++-- net/bridge/br_fdb.c | 3 ++- net/bridge/br_private.h | 3 ++- net/core/rtnetlink.c | 5 +++-- net/dsa/dsa_priv.h | 3 ++- net/dsa/slave.c | 3 ++- 14 files changed, 31 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index f52e2c46e6a7..0ee641c41be4 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -11644,7 +11644,8 @@ static int i40e_get_phys_port_id(struct net_device *netdev, static int i40e_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, const unsigned char *addr, u16 vid, - u16 flags) + u16 flags, + struct netlink_ext_ack *extack) { struct i40e_netdev_priv *np = netdev_priv(dev); struct i40e_pf *pf = np->vsi->back; diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c index f4bf6bda32a9..48f033928aa2 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -2438,7 +2438,8 @@ static void ice_set_rx_mode(struct net_device *netdev) */ static int ice_fdb_add(struct ndmsg *ndm, struct nlattr __always_unused *tb[], struct net_device *dev, const unsigned char *addr, - u16 vid, u16 flags) + u16 vid, u16 flags, + struct netlink_ext_ack *extack) { int err; diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 87bdf1604ae2..3615e2e52399 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -2486,7 +2486,8 @@ static int igb_set_features(struct net_device *netdev, static int igb_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, const unsigned char *addr, u16 vid, - u16 flags) + u16 flags, + struct netlink_ext_ack *extack) { /* guarantee we can provide a unique filter for the unicast address */ if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr)) { diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index daff8183534b..b53087a980ef 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -9910,7 +9910,8 @@ static void ixgbe_del_udp_tunnel_port(struct net_device *dev, static int ixgbe_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, const unsigned char *addr, u16 vid, - u16 flags) + u16 flags, + struct netlink_ext_ack *extack) { /* guarantee we can provide a unique filter for the unicast address */ if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr)) { diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc/ocelot.c index 215a45374d7b..c6a575eb0ff5 100644 --- a/drivers/net/ethernet/mscc/ocelot.c +++ b/drivers/net/ethernet/mscc/ocelot.c @@ -721,7 +721,8 @@ static void ocelot_get_stats64(struct net_device *dev, static int ocelot_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, const unsigned char *addr, - u16 vid, u16 flags) + u16 vid, u16 flags, + struct netlink_ext_ack *extack) { struct ocelot_port *port = netdev_priv(dev); struct ocelot *ocelot = port->ocelot; diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index 16d0479f6891..7a873002e626 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c @@ -396,7 +396,8 @@ static int qlcnic_fdb_del(struct ndmsg *ndm, struct nlattr *tb[], static int qlcnic_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *netdev, - const unsigned char *addr, u16 vid, u16 flags) + const unsigned char *addr, u16 vid, u16 flags, + struct netlink_ext_ack *extack) { struct qlcnic_adapter *adapter = netdev_priv(netdev); int err = 0; diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index fc726ce4c164..084a1b3fbc80 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -963,7 +963,8 @@ static int macvlan_vlan_rx_kill_vid(struct net_device *dev, static int macvlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, const unsigned char *addr, u16 vid, - u16 flags) + u16 flags, + struct netlink_ext_ack *extack) { struct macvlan_dev *vlan = netdev_priv(dev); int err = -EINVAL; diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 83f65eb3085f..11f38fd71678 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -1087,7 +1087,8 @@ static int vxlan_fdb_parse(struct nlattr *tb[], struct vxlan_dev *vxlan, /* Add static entry (via netlink) */ static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, - const unsigned char *addr, u16 vid, u16 flags) + const unsigned char *addr, u16 vid, u16 flags, + struct netlink_ext_ack *extack) { struct vxlan_dev *vxlan = netdev_priv(dev); /* struct net *net = dev_net(vxlan->dev); */ diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 1377d085ef99..a57b9a853aab 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1152,7 +1152,8 @@ struct dev_ifalias { * * int (*ndo_fdb_add)(struct ndmsg *ndm, struct nlattr *tb[], * struct net_device *dev, - * const unsigned char *addr, u16 vid, u16 flags) + * const unsigned char *addr, u16 vid, u16 flags, + * struct netlink_ext_ack *extack); * Adds an FDB entry to dev for addr. * int (*ndo_fdb_del)(struct ndmsg *ndm, struct nlattr *tb[], * struct net_device *dev, @@ -1376,7 +1377,8 @@ struct net_device_ops { struct net_device *dev, const unsigned char *addr, u16 vid, - u16 flags); + u16 flags, + struct netlink_ext_ack *extack); int (*ndo_fdb_del)(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c index fe3c758791ca..6664cb8590f8 100644 --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c @@ -915,7 +915,8 @@ static int __br_fdb_add(struct ndmsg *ndm, struct net_bridge *br, /* Add new permanent fdb entry with RTM_NEWNEIGH */ int br_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, - const unsigned char *addr, u16 vid, u16 nlh_flags) + const unsigned char *addr, u16 vid, u16 nlh_flags, + struct netlink_ext_ack *extack) { struct net_bridge_vlan_group *vg; struct net_bridge_port *p = NULL; diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index eabf8bf28a3f..00deef7fc1f3 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -573,7 +573,8 @@ void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source, int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, const unsigned char *addr, u16 vid); int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[], struct net_device *dev, - const unsigned char *addr, u16 vid, u16 nlh_flags); + const unsigned char *addr, u16 vid, u16 nlh_flags, + struct netlink_ext_ack *extack); int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb, struct net_device *dev, struct net_device *fdev, int *idx); int br_fdb_get(struct sk_buff *skb, struct nlattr *tb[], struct net_device *dev, diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 5ea1bed08ede..b302df0cd5ae 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -3639,7 +3639,7 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, const struct net_device_ops *ops = br_dev->netdev_ops; err = ops->ndo_fdb_add(ndm, tb, dev, addr, vid, - nlh->nlmsg_flags); + nlh->nlmsg_flags, extack); if (err) goto out; else @@ -3651,7 +3651,8 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, if (dev->netdev_ops->ndo_fdb_add) err = dev->netdev_ops->ndo_fdb_add(ndm, tb, dev, addr, vid, - nlh->nlmsg_flags); + nlh->nlmsg_flags, + extack); else err = ndo_dflt_fdb_add(ndm, tb, dev, addr, vid, nlh->nlmsg_flags); diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h index 026a05774bf7..1f4972dab9f2 100644 --- a/net/dsa/dsa_priv.h +++ b/net/dsa/dsa_priv.h @@ -103,7 +103,8 @@ static inline void dsa_legacy_unregister(void) { } int dsa_legacy_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, const unsigned char *addr, u16 vid, - u16 flags); + u16 flags, + struct netlink_ext_ack *extack); int dsa_legacy_fdb_del(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, const unsigned char *addr, u16 vid); diff --git a/net/dsa/slave.c b/net/dsa/slave.c index a3fcc1d01615..d5680a98a7f0 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -1009,7 +1009,8 @@ static const struct ethtool_ops dsa_slave_ethtool_ops = { int dsa_legacy_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], struct net_device *dev, const unsigned char *addr, u16 vid, - u16 flags) + u16 flags, + struct netlink_ext_ack *extack) { struct dsa_port *dp = dsa_slave_to_port(dev); From patchwork Wed Jan 16 23:06:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026268 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="IRZQuZQ/"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2sL36SBz9sBQ for ; Thu, 17 Jan 2019 10:07:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388111AbfAPXHB (ORCPT ); Wed, 16 Jan 2019 18:07:01 -0500 Received: from mail-eopbgr10075.outbound.protection.outlook.com ([40.107.1.75]:14144 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388051AbfAPXG7 (ORCPT ); Wed, 16 Jan 2019 18:06:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u6GOLriRhp1kS126pAwehu15zORfH7fOWOnquChDV20=; b=IRZQuZQ/T7+lsNyEi0ichltrUejNSqtPz9rpjMWBV1U47HGbR9UVdHPNSNgcEO9PGB044tTzc0lurE5Zs4ALVGavoOFSlrx1SX0U3itSeRaHfni75HXWzTKH6z99e+SEkWTJzS7SLIX1qXx/jhkSjbMgimR5mRoAxBioaOxizfw= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4076.eurprd05.prod.outlook.com (52.134.66.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1516.14; Wed, 16 Jan 2019 23:06:53 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:53 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 09/13] mlxsw: Add extack to mlxsw_sp_nve_ops.fdb_replay Thread-Topic: [PATCH net-next 09/13] mlxsw: Add extack to mlxsw_sp_nve_ops.fdb_replay Thread-Index: AQHUrfArrWGpaPPCbEKxYZ3VgY4IRw== Date: Wed, 16 Jan 2019 23:06:52 +0000 Message-ID: <95fcd325144fd913c6e756fc584d7b052fe9affa.1547679599.git.petrm@mellanox.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6P192CA0071.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::48) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4076; 6:aJNmDXb/VdpcCLxkrSdKWMZOeJRSZKUzCgMhi86wkuKflki+k3XruK0H54ciPlUnlUzGkfMYU2Y9EFDWu7aqXB1HiKzxowuk8UyqKICVfZzgoBYwfRue2AqVS70Pf/+K/uz/pjwTs/f76r1I0jidnBk8ov58JuG9wj6jt4kHhc2iS+ZI82Vi+whxAeVIVoPobprI+InYslQS5cyBWjb2ZjY7Tm+DEe0MOsP3JYN52oz24YAsz5S5aGmWKohnBy/lQ4GUbtKrQ6hf82NI6arZxp0mOuvirLpr89v+QCIdRQ0YzWuQKiCH1r/OD/dd5ji74oFRONEbQSWKzH4hd2OQb8mzQXqumgx5dVonK2Oq9/uvBlT504YfBiO2FqYFeX4IiuQ9rqhKSsQ/nNs+jFzGvSKCiL4JdL8FvWKk4ZKYO9LEFAb7jORhK1nrD0iA/SFMfWtAMdZcJfKE3eQ8+KBD1A==; 5:9N2M39ZayEZVLLDBqSBkYfVdz+moArbOi+8sEIS28spIvDYOKoqQlW7osScKcoYMePlcTWVJvHagjfZRRM8JN/N9Y6dJ5BNFz0DzJplBpsjBS3f0yFrOBvx4RLkfKuhnoMA5c2yyYjaODuDJrfn2JpEijcx0OCurEWmdT0+5i5sL0TklGkyBhYvF+FBthazzqCmxD65iq7hE1R/EgG0Z/g==; 7:NLivizUbYZmMzdkbHaiwEUtWIfIplbgdewzFqeVRzXN6KIuacADmG/LZCLWnjw4vAm64MQGYToj8O0ku8a9H8CGtv2xZyr40xAUeKbRhnrSc8F5m30LvVxAi05NG8HYVDztttHLiANwLEuCpw6nqsg== x-ms-office365-filtering-correlation-id: b582446f-1815-4ebc-a949-08d67c074d8d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4076; x-ms-traffictypediagnostic: DB3PR0502MB4076: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(396003)(376002)(136003)(366004)(199004)(189003)(76176011)(26005)(5660300001)(66066001)(6506007)(386003)(2906002)(316002)(102836004)(305945005)(53936002)(7736002)(6916009)(52116002)(186003)(4326008)(105586002)(2351001)(106356001)(2501003)(14454004)(99286004)(6512007)(256004)(86362001)(25786009)(54906003)(3846002)(68736007)(118296001)(6116002)(478600001)(6436002)(71200400001)(97736004)(5640700003)(8676002)(36756003)(476003)(11346002)(446003)(2616005)(81156014)(1730700003)(486006)(8936002)(81166006)(71190400001)(6486002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4076; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: so7urhhq0nTdMwAYhofYZXS2uzuw6diCxnUg2uzdrlDk5eZRr/Xr9LjSNq52IIB6zbfAfZDaPxkFtJSsXgePtn1di/jDP6tDsKJm7sa5pCyOvzhP40R1ZJEhC6Vn1TeZuQa8uvQxOAGcyooaVti3eBsQ4q2/b95iVemubs0KXtGK6HSEYE05nWA8Dvkt8nZSsKDayl81M9/ndOQfqIWWAIxsZw2nL8Dip5Y+QtAxWQL8zenW/R6vG+A6J9I/gLfdaSCqvSKUbkMEkvZPOJVt8huDeyC8J1FxitVRDPIlD7d4JX5yxlbnm8lLTG7Bu34AoFiMBQIcaLnUy9CE+P3h+R0Bi/TrZwtCsz17iLUwchS6MsVDxLaeCW/w/8utZ40PRtLEl/7+IP2bRtStExFUo5+26NXCYrdQZqKpWYLP9ns= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: b582446f-1815-4ebc-a949-08d67c074d8d X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:52.2155 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4076 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org A follow-up patch will extend vxlan_fdb_replay() with an extack argument. Extend the fdb_replay callback in mlxsw likewise so that the argument is ready for the vxlan conversion. Signed-off-by: Petr Machata --- drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c | 2 +- drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.h | 3 ++- drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c index 9019548d731b..94e07767f18e 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c @@ -841,7 +841,7 @@ int mlxsw_sp_nve_fid_enable(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_fid *fid, nve->config = config; - err = ops->fdb_replay(params->dev, params->vni); + err = ops->fdb_replay(params->dev, params->vni, extack); if (err) { NL_SET_ERR_MSG_MOD(extack, "Failed to offload the FDB"); goto err_fdb_replay; diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.h index 02937ea95bc3..20d99b41611d 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.h @@ -41,7 +41,8 @@ struct mlxsw_sp_nve_ops { int (*init)(struct mlxsw_sp_nve *nve, const struct mlxsw_sp_nve_config *config); void (*fini)(struct mlxsw_sp_nve *nve); - int (*fdb_replay)(const struct net_device *nve_dev, __be32 vni); + int (*fdb_replay)(const struct net_device *nve_dev, __be32 vni, + struct netlink_ext_ack *extack); void (*fdb_clear_offload)(const struct net_device *nve_dev, __be32 vni); }; diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c index 74e564c4ac19..bc565f2aa121 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c @@ -212,7 +212,8 @@ static void mlxsw_sp1_nve_vxlan_fini(struct mlxsw_sp_nve *nve) } static int -mlxsw_sp_nve_vxlan_fdb_replay(const struct net_device *nve_dev, __be32 vni) +mlxsw_sp_nve_vxlan_fdb_replay(const struct net_device *nve_dev, __be32 vni, + struct netlink_ext_ack *extack) { if (WARN_ON(!netif_is_vxlan(nve_dev))) return -EINVAL; From patchwork Wed Jan 16 23:06:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026269 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="DiwsAmD0"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2sS2Vcmz9sBQ for ; Thu, 17 Jan 2019 10:07:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388189AbfAPXHG (ORCPT ); Wed, 16 Jan 2019 18:07:06 -0500 Received: from mail-eopbgr10075.outbound.protection.outlook.com ([40.107.1.75]:14144 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388106AbfAPXHE (ORCPT ); Wed, 16 Jan 2019 18:07:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OdoYVN6WaNwOAc7hnp8/nMHppKEObgB6DF26+KrME7o=; b=DiwsAmD0cGwG3rBcWCvIjTWrK2NvFskYGUvfKlvIVNn0rJFQQtynTT5QY8KQUx6qs6JEbO0WFfBJfQazOYvT9yzinHVAn9+xZ30YkKnBhakwH3wUcRNGDLPKUQAanZrW3BVh/emd3iHhBuV19y26+e+UgiK5mDUMKzZHAKD6KGw= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4076.eurprd05.prod.outlook.com (52.134.66.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1516.14; Wed, 16 Jan 2019 23:06:55 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:54 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 10/13] vxlan: Add extack to switchdev operations Thread-Topic: [PATCH net-next 10/13] vxlan: Add extack to switchdev operations Thread-Index: AQHUrfAsAEmVCWLLGkeRtmcCjfNRsQ== Date: Wed, 16 Jan 2019 23:06:54 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:206:14::35) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4076; 6:0cX8OH0jZdi1W15WedUUj1wW7Yv2AFxJ8pqfhEe3Sr0QcpxNthIODceTpgkBEi3JLtxH2sA4I6pygBHl5U/QFGilY7X02SR92PyYG/ElgIx2bJu3cGsURHXPHa/7bCwiCjtCJpwenkMqAnYSAnKbcKrZ3ialQsjR50H8ihjxwCkXSUDHWoBZmLsvMdXPxWUUl7QJetaH1Fk6eLssTwkXbGm7DbohSs1ooYvj4gifnXfceByBmguRQlD6SUDrILaGV5VBcQN1aRdS1Rdysr4bBFJ2cMNwhqCOibBMqdknAKQimAlayJBYTRk8qZSXLtUxLj8Nk0JUuRHGFqR9TSjHBXzkPnEEndN86CWJmJ/IrMf+heJhxA2pLvUkQUsmcldTdPsCeKF/CS9ZruCgir7Av+1v6bXuJIla7UPmFG2uKocg5QNvFNaROOgRdkKqFbjJ4wNUfJkPK+I8qFphF5QKKQ==; 5:UGUNXZTdj6+a4bHxiAUYElWtP4mIjP1wsMzNFXfal8PtCs3Tq947wMvrrsvnhzTLy4Cla5r7X7RzPiYP9MZBapwMteGtBiRUB8XCh5pRHgSqQl27EeWvQcPmB/K4UQIjj6eNYBXE/YxdIl22+70v+dXcCFUiAU+Eyc89XMJ5ta41wDj8FfRowBl2erhE9yrQo3IKpN5NYWtNcM2/Y5Jjqg==; 7:2QtXyB3d2jLfojEqzIQGHI4oe0VtYwgxeLKFDwOOVgXarPuyYib3yjgAyHJIlvzRdT5sKlNUBydfVYqKiARnw59A1xGoaoWsGxB4eKzDoSky59Wh9TVR7fN6apVcT27OhXLtiQnUfEeMjNZs5g+k7Q== x-ms-office365-filtering-correlation-id: 6ffb4d0f-bb11-4d90-2a36-08d67c074eba x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4076; x-ms-traffictypediagnostic: DB3PR0502MB4076: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(396003)(376002)(136003)(366004)(199004)(50084003)(189003)(76176011)(26005)(5660300001)(66066001)(6506007)(386003)(2906002)(316002)(102836004)(305945005)(53936002)(7736002)(6916009)(52116002)(186003)(4326008)(30864003)(105586002)(2351001)(106356001)(2501003)(14454004)(99286004)(6512007)(256004)(86362001)(25786009)(14444005)(54906003)(3846002)(68736007)(118296001)(6116002)(478600001)(6436002)(71200400001)(97736004)(4744004)(5640700003)(8676002)(36756003)(476003)(11346002)(446003)(2616005)(81156014)(1730700003)(486006)(8936002)(81166006)(71190400001)(6486002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4076; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: L5LI2Pui+vHfl+hHiDEKaR2EyR0TOgIaj67k8ccfxSfFZ0hymYi0BcUD+IRPofAYYcTT5s4+smy+9JgGDYwceezkV+4XRCwZ/urGAQgDD3CwDklDhpDxWDGlTgeob/EoYbDfJ3ZaPZYCgm5l/J82Se1ukNdmW4WEgscEGng92s17AXoBdDPXdEItcouGW9tGFBS5vrTivD0zJgFrWaVuq7Tgwq0j88XnVOffgtjzS+o07ZDfDA2eLZAtnWGUFJjiz31jmHqOScgI0w2/USE4EFjAroVaucIK8aKtHB2HCN+6dSXUDyFvoQgDpuQzLPvGXcVkm9Amr+f4Vp80kIg5tCn7FBTc2gmo62+EquDnfwm2rEgARyiXmrtM5na7+lV2u973rfonKQ8M3vrFW0SmRTk0Sb8Fxq03peq+S75nlMY= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ffb4d0f-bb11-4d90-2a36-08d67c074eba X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:54.3390 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4076 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There are four sources of VXLAN switchdev notifier calls: - the changelink() link operation, which already supports extack, - ndo_fdb_add() which got extack support in a previous patch, - FDB updates due to packet forwarding, - and vxlan_fdb_replay(). Extend vxlan_fdb_switchdev_call_notifiers() to include extack in the switchdev message that it sends, and propagate the argument upwards to the callers. For the first two cases, pass in the extack gotten through the operation. For case #3, pass in NULL. To cover the last case, extend vxlan_fdb_replay() to take extack argument, which might come from whatever operation necessitated the FDB replay. Signed-off-by: Petr Machata --- .../ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c | 3 +- drivers/net/vxlan.c | 68 +++++++++++++--------- include/net/vxlan.h | 6 +- 3 files changed, 46 insertions(+), 31 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c index bc565f2aa121..9ba0b83bd949 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c @@ -217,7 +217,8 @@ mlxsw_sp_nve_vxlan_fdb_replay(const struct net_device *nve_dev, __be32 vni, { if (WARN_ON(!netif_is_vxlan(nve_dev))) return -EINVAL; - return vxlan_fdb_replay(nve_dev, vni, &mlxsw_sp_switchdev_notifier); + return vxlan_fdb_replay(nve_dev, vni, &mlxsw_sp_switchdev_notifier, + extack); } static void diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 11f38fd71678..a9e90159bb61 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -361,10 +361,11 @@ static void __vxlan_fdb_notify(struct vxlan_dev *vxlan, struct vxlan_fdb *fdb, static void vxlan_fdb_switchdev_notifier_info(const struct vxlan_dev *vxlan, const struct vxlan_fdb *fdb, const struct vxlan_rdst *rd, + struct netlink_ext_ack *extack, struct switchdev_notifier_vxlan_fdb_info *fdb_info) { fdb_info->info.dev = vxlan->dev; - fdb_info->info.extack = NULL; + fdb_info->info.extack = extack; fdb_info->remote_ip = rd->remote_ip; fdb_info->remote_port = rd->remote_port; fdb_info->remote_vni = rd->remote_vni; @@ -378,7 +379,8 @@ static void vxlan_fdb_switchdev_notifier_info(const struct vxlan_dev *vxlan, static int vxlan_fdb_switchdev_call_notifiers(struct vxlan_dev *vxlan, struct vxlan_fdb *fdb, struct vxlan_rdst *rd, - bool adding) + bool adding, + struct netlink_ext_ack *extack) { struct switchdev_notifier_vxlan_fdb_info info; enum switchdev_notifier_type notifier_type; @@ -389,14 +391,15 @@ static int vxlan_fdb_switchdev_call_notifiers(struct vxlan_dev *vxlan, notifier_type = adding ? SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE : SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE; - vxlan_fdb_switchdev_notifier_info(vxlan, fdb, rd, &info); + vxlan_fdb_switchdev_notifier_info(vxlan, fdb, rd, NULL, &info); ret = call_switchdev_notifiers(notifier_type, vxlan->dev, &info.info); return notifier_to_errno(ret); } static int vxlan_fdb_notify(struct vxlan_dev *vxlan, struct vxlan_fdb *fdb, - struct vxlan_rdst *rd, int type, bool swdev_notify) + struct vxlan_rdst *rd, int type, bool swdev_notify, + struct netlink_ext_ack *extack) { int err; @@ -404,13 +407,13 @@ static int vxlan_fdb_notify(struct vxlan_dev *vxlan, struct vxlan_fdb *fdb, switch (type) { case RTM_NEWNEIGH: err = vxlan_fdb_switchdev_call_notifiers(vxlan, fdb, rd, - true); + true, extack); if (err) return err; break; case RTM_DELNEIGH: vxlan_fdb_switchdev_call_notifiers(vxlan, fdb, rd, - false); + false, extack); break; } } @@ -430,7 +433,7 @@ static void vxlan_ip_miss(struct net_device *dev, union vxlan_addr *ipa) .remote_vni = cpu_to_be32(VXLAN_N_VID), }; - vxlan_fdb_notify(vxlan, &f, &remote, RTM_GETNEIGH, true); + vxlan_fdb_notify(vxlan, &f, &remote, RTM_GETNEIGH, true, NULL); } static void vxlan_fdb_miss(struct vxlan_dev *vxlan, const u8 eth_addr[ETH_ALEN]) @@ -442,7 +445,7 @@ static void vxlan_fdb_miss(struct vxlan_dev *vxlan, const u8 eth_addr[ETH_ALEN]) memcpy(f.eth_addr, eth_addr, ETH_ALEN); - vxlan_fdb_notify(vxlan, &f, &remote, RTM_GETNEIGH, true); + vxlan_fdb_notify(vxlan, &f, &remote, RTM_GETNEIGH, true, NULL); } /* Hash Ethernet address */ @@ -552,7 +555,7 @@ int vxlan_fdb_find_uc(struct net_device *dev, const u8 *mac, __be32 vni, } rdst = first_remote_rcu(f); - vxlan_fdb_switchdev_notifier_info(vxlan, f, rdst, fdb_info); + vxlan_fdb_switchdev_notifier_info(vxlan, f, rdst, NULL, fdb_info); out: rcu_read_unlock(); @@ -563,19 +566,21 @@ EXPORT_SYMBOL_GPL(vxlan_fdb_find_uc); static int vxlan_fdb_notify_one(struct notifier_block *nb, const struct vxlan_dev *vxlan, const struct vxlan_fdb *f, - const struct vxlan_rdst *rdst) + const struct vxlan_rdst *rdst, + struct netlink_ext_ack *extack) { struct switchdev_notifier_vxlan_fdb_info fdb_info; int rc; - vxlan_fdb_switchdev_notifier_info(vxlan, f, rdst, &fdb_info); + vxlan_fdb_switchdev_notifier_info(vxlan, f, rdst, extack, &fdb_info); rc = nb->notifier_call(nb, SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE, &fdb_info); return notifier_to_errno(rc); } int vxlan_fdb_replay(const struct net_device *dev, __be32 vni, - struct notifier_block *nb) + struct notifier_block *nb, + struct netlink_ext_ack *extack) { struct vxlan_dev *vxlan; struct vxlan_rdst *rdst; @@ -593,7 +598,8 @@ int vxlan_fdb_replay(const struct net_device *dev, __be32 vni, if (f->vni == vni) { list_for_each_entry(rdst, &f->remotes, list) { rc = vxlan_fdb_notify_one(nb, vxlan, - f, rdst); + f, rdst, + extack); if (rc) goto out; } @@ -857,7 +863,7 @@ static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, if (do_notify) list_for_each_entry(rd, &f->remotes, list) vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH, - swdev_notify); + swdev_notify, NULL); hlist_del_rcu(&f->hlist); call_rcu(&f->rcu, vxlan_fdb_free); @@ -869,7 +875,8 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, __be16 port, __be32 vni, __u32 ifindex, __u16 ndm_flags, struct vxlan_fdb *f, - bool swdev_notify) + bool swdev_notify, + struct netlink_ext_ack *extack) { __u16 fdb_flags = (ndm_flags & ~NTF_USE); struct vxlan_rdst *rd = NULL; @@ -924,7 +931,7 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, rd = first_remote_rtnl(f); err = vxlan_fdb_notify(vxlan, f, rd, RTM_NEWNEIGH, - swdev_notify); + swdev_notify, extack); if (err) goto err_notify; } @@ -944,7 +951,8 @@ static int vxlan_fdb_update_create(struct vxlan_dev *vxlan, __u16 state, __u16 flags, __be16 port, __be32 src_vni, __be32 vni, __u32 ifindex, __u16 ndm_flags, - bool swdev_notify) + bool swdev_notify, + struct netlink_ext_ack *extack) { __u16 fdb_flags = (ndm_flags & ~NTF_USE); struct vxlan_fdb *f; @@ -962,7 +970,7 @@ static int vxlan_fdb_update_create(struct vxlan_dev *vxlan, return rc; rc = vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH, - swdev_notify); + swdev_notify, extack); if (rc) goto err_notify; @@ -979,7 +987,8 @@ static int vxlan_fdb_update(struct vxlan_dev *vxlan, __u16 state, __u16 flags, __be16 port, __be32 src_vni, __be32 vni, __u32 ifindex, __u16 ndm_flags, - bool swdev_notify) + bool swdev_notify, + struct netlink_ext_ack *extack) { struct vxlan_fdb *f; @@ -993,14 +1002,14 @@ static int vxlan_fdb_update(struct vxlan_dev *vxlan, return vxlan_fdb_update_existing(vxlan, ip, state, flags, port, vni, ifindex, ndm_flags, f, - swdev_notify); + swdev_notify, extack); } else { if (!(flags & NLM_F_CREATE)) return -ENOENT; return vxlan_fdb_update_create(vxlan, mac, ip, state, flags, port, src_vni, vni, ifindex, - ndm_flags, swdev_notify); + ndm_flags, swdev_notify, extack); } } @@ -1016,7 +1025,7 @@ static void vxlan_fdb_dst_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, struct vxlan_rdst *rd, bool swdev_notify) { list_del_rcu(&rd->list); - vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH, swdev_notify); + vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH, swdev_notify, NULL); call_rcu(&rd->rcu, vxlan_dst_free); } @@ -1118,7 +1127,7 @@ static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], err = vxlan_fdb_update(vxlan, addr, &ip, ndm->ndm_state, flags, port, src_vni, vni, ifindex, ndm->ndm_flags | NTF_VXLAN_ADDED_BY_USER, - true); + true, extack); spin_unlock_bh(&vxlan->hash_lock); return err; @@ -1286,7 +1295,7 @@ static bool vxlan_snoop(struct net_device *dev, rdst->remote_ip = *src_ip; f->updated = jiffies; - vxlan_fdb_notify(vxlan, f, rdst, RTM_NEWNEIGH, true); + vxlan_fdb_notify(vxlan, f, rdst, RTM_NEWNEIGH, true, NULL); } else { /* learned new entry */ spin_lock(&vxlan->hash_lock); @@ -1299,7 +1308,7 @@ static bool vxlan_snoop(struct net_device *dev, vxlan->cfg.dst_port, vni, vxlan->default_dst.remote_vni, - ifindex, NTF_SELF, true); + ifindex, NTF_SELF, true, NULL); spin_unlock(&vxlan->hash_lock); } @@ -3543,7 +3552,7 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, /* notify default fdb entry */ if (f) { err = vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), - RTM_NEWNEIGH, true); + RTM_NEWNEIGH, true, extack); if (err) goto errout; } @@ -3818,7 +3827,7 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[], vxlan->cfg.dst_port, conf.vni, conf.vni, conf.remote_ifindex, - NTF_SELF, true); + NTF_SELF, true, extack); if (err) { spin_unlock_bh(&vxlan->hash_lock); return err; @@ -4113,8 +4122,11 @@ vxlan_fdb_external_learn_add(struct net_device *dev, struct switchdev_notifier_vxlan_fdb_info *fdb_info) { struct vxlan_dev *vxlan = netdev_priv(dev); + struct netlink_ext_ack *extack; int err; + extack = switchdev_notifier_info_to_extack(&fdb_info->info); + spin_lock_bh(&vxlan->hash_lock); err = vxlan_fdb_update(vxlan, fdb_info->eth_addr, &fdb_info->remote_ip, NUD_REACHABLE, @@ -4124,7 +4136,7 @@ vxlan_fdb_external_learn_add(struct net_device *dev, fdb_info->remote_vni, fdb_info->remote_ifindex, NTF_USE | NTF_SELF | NTF_EXT_LEARNED, - false); + false, extack); spin_unlock_bh(&vxlan->hash_lock); return err; diff --git a/include/net/vxlan.h b/include/net/vxlan.h index 236403eb5ba6..09767819c3d4 100644 --- a/include/net/vxlan.h +++ b/include/net/vxlan.h @@ -428,7 +428,8 @@ struct switchdev_notifier_vxlan_fdb_info { int vxlan_fdb_find_uc(struct net_device *dev, const u8 *mac, __be32 vni, struct switchdev_notifier_vxlan_fdb_info *fdb_info); int vxlan_fdb_replay(const struct net_device *dev, __be32 vni, - struct notifier_block *nb); + struct notifier_block *nb, + struct netlink_ext_ack *extack); void vxlan_fdb_clear_offload(const struct net_device *dev, __be32 vni); #else @@ -440,7 +441,8 @@ vxlan_fdb_find_uc(struct net_device *dev, const u8 *mac, __be32 vni, } static inline int vxlan_fdb_replay(const struct net_device *dev, __be32 vni, - struct notifier_block *nb) + struct notifier_block *nb, + struct netlink_ext_ack *extack) { return -EOPNOTSUPP; } From patchwork Wed Jan 16 23:06:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026270 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="expxyM8t"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2sV2Srsz9sDL for ; Thu, 17 Jan 2019 10:07:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388199AbfAPXHJ (ORCPT ); Wed, 16 Jan 2019 18:07:09 -0500 Received: from mail-eopbgr10075.outbound.protection.outlook.com ([40.107.1.75]:14144 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731049AbfAPXHH (ORCPT ); Wed, 16 Jan 2019 18:07:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OgyzQY3R/Jzs61EMyG1Y4TVZGsMzkmUysirZRQoYkL4=; b=expxyM8tHAjgZ0dBkJVK/VOlJKy9CvJvI6n0QjEmfb0PX6YdzPGkeVQ51V4DVrqlioxhu7X6yEAlHZA9A8JVOHtEsSKy8pi5mVblDOLrzcmnsqEAB8PmCu5waFaBAx+uYkYEKUwjgOSjkJWm1xaBo6n/2ot3F1U1ZxzEein3Ejc= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4076.eurprd05.prod.outlook.com (52.134.66.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1516.14; Wed, 16 Jan 2019 23:06:56 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:56 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 11/13] switchdev: Add extack argument to call_switchdev_notifiers() Thread-Topic: [PATCH net-next 11/13] switchdev: Add extack argument to call_switchdev_notifiers() Thread-Index: AQHUrfAtowucj5fYZkiW5uk1ueCNGg== Date: Wed, 16 Jan 2019 23:06:56 +0000 Message-ID: <4fb9e53bc4a61bc60e4bcae29b0d109905bf26f6.1547679599.git.petrm@mellanox.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6P192CA0057.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::34) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4076; 6:w6o5jcYOT9Q7czCMXeoRhrz1xh6GCB0q+/0JE14jP/5/SzrRhXyDmyCOuBftldnsZ/SzjI9utrdGLMjy+tnlN1oQSDeBXkwDtig9BwFF3ksQBN3JogT608PgXOYFxh0O+cW8m2tbQVpW4yqiIeqevczCTBcOS9+c69p8+KuBUOJVK1ijkOQ/lalsiFQAa7qWbNJpo3ws0gD0ZuPjXZ/lAHm689V+QmU/X6jnNv6BDgdFRVkh6jdR1mPG1PPJEnoZdWTmlLvKIFXfg+efjDPyXyb40J9oRAD520qdmDlVGZ2+IpQvxlFWGlg+gvlXwVSxlYSXYD/4ZtgAj3PgDyDtyo/LH2HyPVMlElRWlySXUZ0e4f/mMbvgvAAyy/ZyaLnFJqSV6VYRe5xl8MXE7o/oxMTDlVZpFJuOf4M79mYIlFHU4KpCidnHKC5tVMLQiUrZyBG3HXtC3A7n+HfQ2Q8WNg==; 5:3svC2L6V/qYQ64O8h/D/iRByckkl/2+luoiEBMbwxdjiL7H3tZ0WR3fFsZwfaoh23VullRfEBev8DJWCc8FEdUX7SXi2L/thhRlB/bpmDhwbLCwc2s+v/vFvxO5oiCtm0K7C2yMJOAO58JvgjQ8UNMQx5TZSHnSSli0Z5W/5ZTYiZAghFzoFFhBj+LVXEQbv2Gn26MDODiC6W84OZdZX6Q==; 7:LXCnGCfKCkgIEnt5yk9hhkTKi2sP6n2oXHYB2tfuYQ7gqcgkwU/AlMYMwbSi7lKP5VE85RIQdeCU8bQ+gDqOaHB/mjkSF6pN6xn/nIJgufYCfTzLlhFZQtplOZgqcxxHhcTe31a6TmANvE2h1Pvnxg== x-ms-office365-filtering-correlation-id: 986fb1de-e6d9-4a9a-3aa7-08d67c074fc5 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4076; x-ms-traffictypediagnostic: DB3PR0502MB4076: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(396003)(376002)(136003)(366004)(199004)(189003)(76176011)(26005)(5660300001)(66066001)(6506007)(386003)(2906002)(316002)(102836004)(305945005)(53936002)(7736002)(6916009)(52116002)(186003)(4326008)(105586002)(2351001)(106356001)(2501003)(14454004)(99286004)(6512007)(256004)(86362001)(25786009)(14444005)(54906003)(3846002)(68736007)(66574012)(118296001)(6116002)(478600001)(6436002)(71200400001)(97736004)(5640700003)(8676002)(36756003)(476003)(11346002)(446003)(2616005)(81156014)(1730700003)(486006)(8936002)(81166006)(71190400001)(6486002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4076; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: CV/n0ytRmuyHaShc5CcFJeBE7Bwo08UkS3q3mdNKo3LyyyDw+5EHgGyQObwlQ6X0MXaSV0C+ANnlxoLvz5KUcdmVEgWpAsNj1v+Q1wSygIikg7aW5y284Rh7xiCW0aKSZfy0LF3BKLlMMaJl6F2EL8j4FYg8xE7RboB3xy5YssRAYpA3vK7Db7H8cSkulQs7MzuTM0tM6MYTr7EGMoucDI1uUK4xzza8y0gN9IKXdzH+q7mScZk+t5EtggcPepUKKyeV6ytooKqRJAuWpPsxsifF3UtGd1kP75Hq+QAJQIc4xLNRUfjlUdWmblak4/E3XD7Kd7GhVgaVVa18hcUP1buNAOkbUTqNA0fvwb9BFJ+Jyzq/MebYfmJ9Ry4KY5Mc7t659Pm8NNR22TYswYBB0Hymf/U6nx17Wus3nvrdN78= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 986fb1de-e6d9-4a9a-3aa7-08d67c074fc5 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:56.0812 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4076 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org A follow-up patch will enable vetoing of FDB entries. Make it possible to communicate details of why an FDB entry is not acceptable back to the user. Signed-off-by: Petr Machata --- Documentation/networking/switchdev.txt | 2 +- drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 6 ++++-- drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | 12 ++++++------ drivers/net/ethernet/rocker/rocker_main.c | 2 +- drivers/net/ethernet/rocker/rocker_ofdpa.c | 4 ++-- drivers/net/vxlan.c | 2 +- include/net/switchdev.h | 6 ++++-- net/bridge/br_switchdev.c | 2 +- net/dsa/slave.c | 2 +- net/switchdev/switchdev.c | 5 +++-- 10 files changed, 24 insertions(+), 19 deletions(-) diff --git a/Documentation/networking/switchdev.txt b/Documentation/networking/switchdev.txt index 82236a17b5e6..f3244d87512a 100644 --- a/Documentation/networking/switchdev.txt +++ b/Documentation/networking/switchdev.txt @@ -196,7 +196,7 @@ The switch device will learn/forget source MAC address/VLAN on ingress packets and notify the switch driver of the mac/vlan/port tuples. The switch driver, in turn, will notify the bridge driver using the switchdev notifier call: - err = call_switchdev_notifiers(val, dev, info); + err = call_switchdev_notifiers(val, dev, info, extack); Where val is SWITCHDEV_FDB_ADD when learning and SWITCHDEV_FDB_DEL when forgetting, and info points to a struct switchdev_notifier_fdb_info. On diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index 98e5ffd71b91..042341c7f6b9 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c @@ -7294,7 +7294,8 @@ static void mlxsw_sp_rif_vlan_fdb_del(struct mlxsw_sp_rif *rif, const char *mac) info.addr = mac; info.vid = vid; - call_switchdev_notifiers(SWITCHDEV_FDB_DEL_TO_BRIDGE, dev, &info.info); + call_switchdev_notifiers(SWITCHDEV_FDB_DEL_TO_BRIDGE, dev, &info.info, + NULL); } static const struct mlxsw_sp_rif_ops mlxsw_sp_rif_vlan_ops = { @@ -7381,7 +7382,8 @@ static void mlxsw_sp_rif_fid_fdb_del(struct mlxsw_sp_rif *rif, const char *mac) info.addr = mac; info.vid = 0; - call_switchdev_notifiers(SWITCHDEV_FDB_DEL_TO_BRIDGE, dev, &info.info); + call_switchdev_notifiers(SWITCHDEV_FDB_DEL_TO_BRIDGE, dev, &info.info, + NULL); } static const struct mlxsw_sp_rif_ops mlxsw_sp_rif_fid_ops = { diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c index 0abbaa0fbf14..71aad9d4e160 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c @@ -2443,7 +2443,7 @@ static void mlxsw_sp_fdb_vxlan_call_notifiers(struct net_device *dev, ether_addr_copy(info.eth_addr, mac); info.vni = vni; info.offloaded = adding; - call_switchdev_notifiers(type, dev, &info.info); + call_switchdev_notifiers(type, dev, &info.info, NULL); } static void mlxsw_sp_fdb_nve_call_notifiers(struct net_device *dev, @@ -2468,7 +2468,7 @@ mlxsw_sp_fdb_call_notifiers(enum switchdev_notifier_type type, info.addr = mac; info.vid = vid; info.offloaded = offloaded; - call_switchdev_notifiers(type, dev, &info.info); + call_switchdev_notifiers(type, dev, &info.info, NULL); } static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp, @@ -2819,7 +2819,7 @@ mlxsw_sp_switchdev_bridge_vxlan_fdb_event(struct mlxsw_sp *mlxsw_sp, return; vxlan_fdb_info.offloaded = true; call_switchdev_notifiers(SWITCHDEV_VXLAN_FDB_OFFLOADED, dev, - &vxlan_fdb_info.info); + &vxlan_fdb_info.info, NULL); mlxsw_sp_fdb_call_notifiers(SWITCHDEV_FDB_OFFLOADED, vxlan_fdb_info.eth_addr, fdb_info->vid, dev, true); @@ -2832,7 +2832,7 @@ mlxsw_sp_switchdev_bridge_vxlan_fdb_event(struct mlxsw_sp *mlxsw_sp, false); vxlan_fdb_info.offloaded = false; call_switchdev_notifiers(SWITCHDEV_VXLAN_FDB_OFFLOADED, dev, - &vxlan_fdb_info.info); + &vxlan_fdb_info.info, NULL); break; } } @@ -2977,7 +2977,7 @@ mlxsw_sp_switchdev_vxlan_fdb_add(struct mlxsw_sp *mlxsw_sp, } vxlan_fdb_info->offloaded = true; call_switchdev_notifiers(SWITCHDEV_VXLAN_FDB_OFFLOADED, dev, - &vxlan_fdb_info->info); + &vxlan_fdb_info->info, NULL); mlxsw_sp_fid_put(fid); return; } @@ -2998,7 +2998,7 @@ mlxsw_sp_switchdev_vxlan_fdb_add(struct mlxsw_sp *mlxsw_sp, goto err_fdb_tunnel_uc_op; vxlan_fdb_info->offloaded = true; call_switchdev_notifiers(SWITCHDEV_VXLAN_FDB_OFFLOADED, dev, - &vxlan_fdb_info->info); + &vxlan_fdb_info->info, NULL); mlxsw_sp_fdb_call_notifiers(SWITCHDEV_FDB_OFFLOADED, vxlan_fdb_info->eth_addr, vid, dev, true); diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c index 6213827e3956..62a205eba9f7 100644 --- a/drivers/net/ethernet/rocker/rocker_main.c +++ b/drivers/net/ethernet/rocker/rocker_main.c @@ -2725,7 +2725,7 @@ rocker_fdb_offload_notify(struct rocker_port *rocker_port, info.vid = recv_info->vid; info.offloaded = true; call_switchdev_notifiers(SWITCHDEV_FDB_OFFLOADED, - rocker_port->dev, &info.info); + rocker_port->dev, &info.info, NULL); } static void rocker_switchdev_event_work(struct work_struct *work) diff --git a/drivers/net/ethernet/rocker/rocker_ofdpa.c b/drivers/net/ethernet/rocker/rocker_ofdpa.c index 6473cc68c2d5..bea7895930f6 100644 --- a/drivers/net/ethernet/rocker/rocker_ofdpa.c +++ b/drivers/net/ethernet/rocker/rocker_ofdpa.c @@ -1833,10 +1833,10 @@ static void ofdpa_port_fdb_learn_work(struct work_struct *work) rtnl_lock(); if (learned && removing) call_switchdev_notifiers(SWITCHDEV_FDB_DEL_TO_BRIDGE, - lw->ofdpa_port->dev, &info.info); + lw->ofdpa_port->dev, &info.info, NULL); else if (learned && !removing) call_switchdev_notifiers(SWITCHDEV_FDB_ADD_TO_BRIDGE, - lw->ofdpa_port->dev, &info.info); + lw->ofdpa_port->dev, &info.info, NULL); rtnl_unlock(); kfree(work); diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index a9e90159bb61..ef45c3c925be 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -393,7 +393,7 @@ static int vxlan_fdb_switchdev_call_notifiers(struct vxlan_dev *vxlan, : SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE; vxlan_fdb_switchdev_notifier_info(vxlan, fdb, rd, NULL, &info); ret = call_switchdev_notifiers(notifier_type, vxlan->dev, - &info.info); + &info.info, extack); return notifier_to_errno(ret); } diff --git a/include/net/switchdev.h b/include/net/switchdev.h index a7fdab5ee6c3..63843ae5dc81 100644 --- a/include/net/switchdev.h +++ b/include/net/switchdev.h @@ -195,7 +195,8 @@ int switchdev_port_obj_del(struct net_device *dev, int register_switchdev_notifier(struct notifier_block *nb); int unregister_switchdev_notifier(struct notifier_block *nb); int call_switchdev_notifiers(unsigned long val, struct net_device *dev, - struct switchdev_notifier_info *info); + struct switchdev_notifier_info *info, + struct netlink_ext_ack *extack); int register_switchdev_blocking_notifier(struct notifier_block *nb); int unregister_switchdev_blocking_notifier(struct notifier_block *nb); @@ -267,7 +268,8 @@ static inline int unregister_switchdev_notifier(struct notifier_block *nb) static inline int call_switchdev_notifiers(unsigned long val, struct net_device *dev, - struct switchdev_notifier_info *info) + struct switchdev_notifier_info *info, + struct netlink_ext_ack *extack) { return NOTIFY_DONE; } diff --git a/net/bridge/br_switchdev.c b/net/bridge/br_switchdev.c index 035ff59d9cbd..4d2b9eb7604a 100644 --- a/net/bridge/br_switchdev.c +++ b/net/bridge/br_switchdev.c @@ -113,7 +113,7 @@ br_switchdev_fdb_call_notifiers(bool adding, const unsigned char *mac, info.added_by_user = added_by_user; info.offloaded = offloaded; notifier_type = adding ? SWITCHDEV_FDB_ADD_TO_DEVICE : SWITCHDEV_FDB_DEL_TO_DEVICE; - call_switchdev_notifiers(notifier_type, dev, &info.info); + call_switchdev_notifiers(notifier_type, dev, &info.info, NULL); } void diff --git a/net/dsa/slave.c b/net/dsa/slave.c index d5680a98a7f0..91de3a663226 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -1451,7 +1451,7 @@ static void dsa_slave_switchdev_event_work(struct work_struct *work) } fdb_info->offloaded = true; call_switchdev_notifiers(SWITCHDEV_FDB_OFFLOADED, dev, - &fdb_info->info); + &fdb_info->info, NULL); break; case SWITCHDEV_FDB_DEL_TO_DEVICE: diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c index 5df9d1138ac9..cd78253de31d 100644 --- a/net/switchdev/switchdev.c +++ b/net/switchdev/switchdev.c @@ -556,10 +556,11 @@ EXPORT_SYMBOL_GPL(unregister_switchdev_notifier); * Call all network notifier blocks. */ int call_switchdev_notifiers(unsigned long val, struct net_device *dev, - struct switchdev_notifier_info *info) + struct switchdev_notifier_info *info, + struct netlink_ext_ack *extack) { info->dev = dev; - info->extack = NULL; + info->extack = extack; return atomic_notifier_call_chain(&switchdev_notif_chain, val, info); } EXPORT_SYMBOL_GPL(call_switchdev_notifiers); From patchwork Wed Jan 16 23:06:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026271 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="A42IUBeQ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2sX4Ybgz9sBQ for ; Thu, 17 Jan 2019 10:07:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388203AbfAPXHL (ORCPT ); Wed, 16 Jan 2019 18:07:11 -0500 Received: from mail-eopbgr10075.outbound.protection.outlook.com ([40.107.1.75]:14144 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388191AbfAPXHK (ORCPT ); Wed, 16 Jan 2019 18:07:10 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IAVLy3Rp2nP1OHAA5JwBHTW4H4d13LKVWakWh1zfanE=; b=A42IUBeQAHXs7vWk6DuStdgwNtu2yFH6gQlYDJD78Y6zmB1howpXGAZOTXhhej6Dm1tKwFFlAvwCtJoKcB7XYrjm2a3IX6gpkb6FUgvCIioOqXhq1KNFmum86cW1ssDkR4zTTNS4L37/B/uhDV/1nxqLNfGt+alscHF5de+jJS0= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4076.eurprd05.prod.outlook.com (52.134.66.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1516.14; Wed, 16 Jan 2019 23:06:58 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:06:58 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 12/13] mlxsw: spectrum: Add extack messages to VXLAN FDB rejection Thread-Topic: [PATCH net-next 12/13] mlxsw: spectrum: Add extack messages to VXLAN FDB rejection Thread-Index: AQHUrfAudaEg1CDGs06qz9Kz5pVhiw== Date: Wed, 16 Jan 2019 23:06:58 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:206:14::35) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4076; 6:YyMooyLjQdCF/CXy3hvukEsHzfe/Pf5dFVN9ONh0hL0pH5DibSakm0Eo1WXnWNWKFgDFg6QxxQvLv/An6jgOXqdnBcX1AgTh5bWeE0ysl2cHNJKlyF9OI2kWlKNWbx7BiXoDM9q3N9HEB7XsBVQ8IiBMum9Y66e8n5jTmxAdfAWOfw7JtzL4qgvS3I5YyEqlKSNcCRwo8/g4qDizY82tH9P5JDExngbMQXlVo+PLUn0X0hR8fDd9hD//JovG/brnpIsnaAF69/HcqQdawYncbSjNs4d7CMzNHucczedIgi2bpuOTkib+kvC3Lc/Q1qCqOLjLKc9DS/j1ButJUE9M3UT+JUoqJaIRjaeuHiHgP3X5m0H15Z1e+93vwBs0BaA0EG9IPkh287/mPSQ5KABDIMAictd44p4U/HlXBWg46o9eWgikGPD0Ug1dWJNA0f8jNFgPlt0VLC3GVT+2Om5hyA==; 5:jeFJJuF7JBr2bkGYaT9pS+zY7LYgZrKdCPHvqOynVFEf12cuHbFOHa2U+9S/dlW7WkwwvbONXy/0O4ipGj2HSfgZA6Kj1XqJFTZ3iLBoFAwLpI8RpWe2TkTcCbkYZQcAoiHlznFYNkJiq3H8e0FwJ0gceHMYccxhFQEUixNesdIoGRNHFwFYRp4U9X6F5TGlC/SLifUypbG5P/SKg52nkg==; 7:ADNKzz4i59HqWDoZ5f2BEGgqBJ6Ulyfu+ONCEPy8U7Y8ZUtIEDgAuPC2BJFDjgONG6rFPHcw8wsAWyWGZXBpH3vZzfTL+o6hpiifpw+Bt8NaDzatE5yMZ5YDfdYr7KsxiVQTFPVuS/IlNBIDjdfE2w== x-ms-office365-filtering-correlation-id: a8d850a3-51fc-4374-97c7-08d67c0750db x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4076; x-ms-traffictypediagnostic: DB3PR0502MB4076: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(396003)(376002)(136003)(366004)(199004)(189003)(76176011)(26005)(5660300001)(66066001)(6506007)(386003)(2906002)(316002)(102836004)(305945005)(53936002)(7736002)(6916009)(52116002)(186003)(4326008)(217873002)(105586002)(2351001)(106356001)(2501003)(14454004)(99286004)(6512007)(256004)(86362001)(25786009)(54906003)(3846002)(68736007)(118296001)(6116002)(15650500001)(478600001)(6436002)(71200400001)(97736004)(5640700003)(8676002)(36756003)(476003)(11346002)(446003)(2616005)(81156014)(1730700003)(486006)(8936002)(81166006)(71190400001)(6486002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4076; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: GtQ0P4e9k0V/U2mk0dobR53QZSNaZd1BprDvDE/VPawtMjzvsre8OBFIBTVqMCebhfm7CwS70W1F+eTietw9ejPm4jC8Wb38bCOCDSFHTPln2x7eug/mS9Fd6m8hfuSPER9MrdCKjS2gErwEKTZ0BMsvgLLod0RUWALRnBU6NrRmACXjMIbr0iUVKgmHzoZZJL9uuodAqwq5zMpBAc1ntb5zjaCx3WeLKU2CVa5NZ5c6HRf9P3kfNgtX/iJ6ESs/dgJa6gHxcwvOTw1Zgto00PbmXIJVZApEYZSzBW5u5dvk6/UT6fpZZKoxLjzIb8TB9tXBr/tFfAGn4IRLjGvqCJG/kYq+aGx7EJOdpnE2TWAf9YkO9Awv9aloQlVAuT9T9Tuq+clzWdgp0HeEq6205pQD51Ir27TDa5ZX6bx0X58= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8d850a3-51fc-4374-97c7-08d67c0750db X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:57.9245 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4076 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Annotate the rejections in mlxsw_sp_switchdev_vxlan_work_prepare() with textual reasons. Because this code ends up being invoked for FDB replay as well, drop the default message from there, so that the more accurate error message is not overwritten. Signed-off-by: Petr Machata --- drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c | 4 +--- .../ethernet/mellanox/mlxsw/spectrum_switchdev.c | 25 ++++++++++++++++------ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c index 94e07767f18e..1df164a4b06d 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c @@ -842,10 +842,8 @@ int mlxsw_sp_nve_fid_enable(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_fid *fid, nve->config = config; err = ops->fdb_replay(params->dev, params->vni, extack); - if (err) { - NL_SET_ERR_MSG_MOD(extack, "Failed to offload the FDB"); + if (err) goto err_fdb_replay; - } return 0; diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c index 71aad9d4e160..8ab796e0c0d7 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c @@ -3099,23 +3099,34 @@ mlxsw_sp_switchdev_vxlan_work_prepare(struct mlxsw_sp_switchdev_event_work * struct vxlan_dev *vxlan = netdev_priv(switchdev_work->dev); struct switchdev_notifier_vxlan_fdb_info *vxlan_fdb_info; struct vxlan_config *cfg = &vxlan->cfg; + struct netlink_ext_ack *extack; + extack = switchdev_notifier_info_to_extack(info); vxlan_fdb_info = container_of(info, struct switchdev_notifier_vxlan_fdb_info, info); - if (vxlan_fdb_info->remote_port != cfg->dst_port) - return -EOPNOTSUPP; - if (vxlan_fdb_info->remote_vni != cfg->vni) + if (vxlan_fdb_info->remote_port != cfg->dst_port) { + NL_SET_ERR_MSG_MOD(extack, "VxLAN: FDB: Non-default remote port is not supported"); return -EOPNOTSUPP; - if (vxlan_fdb_info->vni != cfg->vni) + } + if (vxlan_fdb_info->remote_vni != cfg->vni || + vxlan_fdb_info->vni != cfg->vni) { + NL_SET_ERR_MSG_MOD(extack, "VxLAN: FDB: Non-default VNI is not supported"); return -EOPNOTSUPP; - if (vxlan_fdb_info->remote_ifindex) + } + if (vxlan_fdb_info->remote_ifindex) { + NL_SET_ERR_MSG_MOD(extack, "VxLAN: FDB: Local interface is not supported"); return -EOPNOTSUPP; - if (is_multicast_ether_addr(vxlan_fdb_info->eth_addr)) + } + if (is_multicast_ether_addr(vxlan_fdb_info->eth_addr)) { + NL_SET_ERR_MSG_MOD(extack, "VxLAN: FDB: Multicast MAC addresses not supported"); return -EOPNOTSUPP; - if (vxlan_addr_multicast(&vxlan_fdb_info->remote_ip)) + } + if (vxlan_addr_multicast(&vxlan_fdb_info->remote_ip)) { + NL_SET_ERR_MSG_MOD(extack, "VxLAN: FDB: Multicast destination IP is not supported"); return -EOPNOTSUPP; + } switchdev_work->vxlan_fdb_info = *vxlan_fdb_info; From patchwork Wed Jan 16 23:07:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Machata X-Patchwork-Id: 1026272 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="ZYJNss4m"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2sd509cz9sBQ for ; Thu, 17 Jan 2019 10:07:17 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388207AbfAPXHQ (ORCPT ); Wed, 16 Jan 2019 18:07:16 -0500 Received: from mail-eopbgr10075.outbound.protection.outlook.com ([40.107.1.75]:14144 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388193AbfAPXHO (ORCPT ); Wed, 16 Jan 2019 18:07:14 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9+ltIISxDfPRqexR92OM6oYpf13Xtqg0C1EhigKCHNg=; b=ZYJNss4mtTxXSaocAwViehTqtewb9QydBHkXW00eHQrgW6K7cSPpnn/FqaL+I/ENMh6N5Tja1+ojI9vNBjreT/xs3otoJT+Bstl9tfBIsdXppPtehRIFYEhAV5X6t2HX0F+EkOJUkDkSF0gx9ylEeb/+gG7C6TJCeGVkIKI9C3c= Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com (52.134.71.23) by DB3PR0502MB4076.eurprd05.prod.outlook.com (52.134.66.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1516.14; Wed, 16 Jan 2019 23:07:00 +0000 Received: from DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981]) by DB3PR0502MB3946.eurprd05.prod.outlook.com ([fe80::14e8:d98f:3ec2:3981%2]) with mapi id 15.20.1516.019; Wed, 16 Jan 2019 23:07:00 +0000 From: Petr Machata To: "netdev@vger.kernel.org" CC: "ivecera@redhat.com" , Jiri Pirko , Ido Schimmel , "davem@davemloft.net" Subject: [PATCH net-next 13/13] selftests: mlxsw: Test veto of unsupported VXLAN FDBs Thread-Topic: [PATCH net-next 13/13] selftests: mlxsw: Test veto of unsupported VXLAN FDBs Thread-Index: AQHUrfAvAII0BQqSbES/tI3H/H53lA== Date: Wed, 16 Jan 2019 23:07:00 +0000 Message-ID: <1c8bb9882f34cd1ad7bcdd9445bb00b738eedfd0.1547679599.git.petrm@mellanox.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P190CA0029.EURP190.PROD.OUTLOOK.COM (2603:10a6:206:14::42) To DB3PR0502MB3946.eurprd05.prod.outlook.com (2603:10a6:8:e::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=petrm@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [78.45.160.211] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4076; 6:t9tHMiV72IrFQKwYhlGpLN5bleX0sofJ4/VQ286BN5LQSaJlUfXQeg6UDCFwixEWLGGk1vY3JKi0WGDxDp7cP8oDr+7NVLeFbJlgL/sGK7Jw62ugFJLsyWnjY1LwKbf7Gv9DeFVleGUmd1xNVfldWMxHRYYEeLnkIWxkjoD2eTYdnwy9ibvtiBKlRUrv8Bgb613cun5afdg/Czvz+4UQPtRl0EAoRvB3Rv+MmB/Q6tYK6VoTwXQ8DxZYUi865FJTBWh0cqVYaOZAEISjZppeSJ5Nu7Hf2/QiOWum9pEa/rKSp5WiDGp+KYh0OWy2nSWBWvJH8JqxvKpaY+Jndwj5k8Eksg6po3zV/9eZsMJWjcS4nly5lOBFQLHHN3VwBWw9xZbi9xczr+hZOlnrMMoU4+/iNMIk6ftOHnTElgGJIsbhKTYaNsdwRdD8gv9brouDkDs2acvUcFrYp+8rJVlRXA==; 5:x91G3XGfm0qjIxfKaP8n83I1wig8KjxViWSfG360WM/VErLYDZ4cP7joF5OHFrI9CYmuaJd/4SPePUilcUZsMMvdM5KgoZshx9iCeUKjwZWUrp3ZrdP/gPPugMXY+JKn1k+qHig39BDeLil6gD5USikdUBy2uiGoPxrwrGWh7feZWdR4lZ1dm+J+cIhgnZnfxzZ/0hkFmoiokldE57153A==; 7:7yeYY3/nv7S1PM5aUjEaAAyHLx81G+uq/QpP+YysbVrcnnH5v9rIcg4MUmnh5erdzQXe8grj/RDjXQWhpVKzQrzbUMco6eeTSTbU8E6QafeBgVJq8AVrq75Fo/+6bkO2MXbNXcabzTqJgAOQur2Kqw== x-ms-office365-filtering-correlation-id: 8cc27000-049b-41cc-c550-08d67c075214 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4076; x-ms-traffictypediagnostic: DB3PR0502MB4076: x-microsoft-antispam-prvs: x-forefront-prvs: 091949432C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(396003)(376002)(136003)(366004)(199004)(189003)(76176011)(26005)(5660300001)(66066001)(6506007)(386003)(2906002)(316002)(102836004)(305945005)(53936002)(7736002)(6916009)(52116002)(186003)(4326008)(105586002)(2351001)(106356001)(2501003)(14454004)(99286004)(6512007)(256004)(86362001)(25786009)(54906003)(3846002)(68736007)(118296001)(6116002)(478600001)(6436002)(71200400001)(97736004)(5640700003)(8676002)(36756003)(476003)(11346002)(446003)(2616005)(81156014)(1730700003)(486006)(8936002)(81166006)(71190400001)(6486002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4076; H:DB3PR0502MB3946.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: RN5PjU9Cp6/o4QEtnvitPbCBh58cN+t4C1hCHrzyEzZdJ5KJ4rMzndeM1HcxM5Xh9bnZo0k/9rvqR6rjycrVxfkuDtwF//MdiKiox085LsQjLBjoNNmoPeA41x0QromRtPCbmwjtesY5mQKCwtP/yHTwSixqix/tD0xlUoCZTzknoFO99J7hh+BYIFbJCISV4v5YiJWTK6nWNzBIljHoB1pal/0n7yCvZjx1x784AGdh3MddJYL4WB8qTdkw4nUa+2W+2YBgcf4NFg9V4lx6ZMAdl/vILetHppMowO4zdJrPBwI5Gyeio3jQzLP8h+kin5jbmIPEBa5EiBGYG4Kw4R3j1wz4K50uojVvtd9G4norhfbb/990zDrmsy6TICy41L8trZj/0M8O8J2kyidapP71/8wpEtajOScWblKQzd0= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8cc27000-049b-41cc-c550-08d67c075214 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jan 2019 23:06:59.9779 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4076 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org mlxsw doesn't implement offloading of all types of FDB entries that the VXLAN driver supports. Test that such FDB entries are rejected. That makes sure that the decision made by the existing validation code in mlxsw propagates up the stack. It also exercises rollback functionality in VXLAN, and tests that extack is returned. Signed-off-by: Petr Machata --- .../selftests/drivers/net/mlxsw/vxlan_fdb_veto.sh | 126 +++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100755 tools/testing/selftests/drivers/net/mlxsw/vxlan_fdb_veto.sh diff --git a/tools/testing/selftests/drivers/net/mlxsw/vxlan_fdb_veto.sh b/tools/testing/selftests/drivers/net/mlxsw/vxlan_fdb_veto.sh new file mode 100755 index 000000000000..749ba3cfda1d --- /dev/null +++ b/tools/testing/selftests/drivers/net/mlxsw/vxlan_fdb_veto.sh @@ -0,0 +1,126 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# +# Test vetoing of FDB entries that mlxsw can not offload. This exercises several +# different veto vectors to test various rollback scenarios in the vxlan driver. + +lib_dir=$(dirname $0)/../../../net/forwarding + +ALL_TESTS=" + fdb_create_veto_test + fdb_replace_veto_test + fdb_append_veto_test + fdb_changelink_veto_test +" +NUM_NETIFS=2 +source $lib_dir/lib.sh + +setup_prepare() +{ + swp1=${NETIFS[p1]} + swp2=${NETIFS[p2]} + + ip link add dev br0 type bridge mcast_snooping 0 + + ip link set dev $swp1 up + ip link set dev $swp1 master br0 + ip link set dev $swp2 up + + ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \ + ttl 20 tos inherit local 198.51.100.1 dstport 4789 + ip link set dev vxlan0 master br0 +} + +cleanup() +{ + pre_cleanup + + ip link set dev vxlan0 nomaster + ip link del dev vxlan0 + + ip link set dev $swp2 down + ip link set dev $swp1 nomaster + ip link set dev $swp1 down + + ip link del dev br0 +} + +fdb_create_veto_test() +{ + RET=0 + + bridge fdb add 01:02:03:04:05:06 dev vxlan0 self static \ + dst 198.51.100.2 2>/dev/null + check_fail $? "multicast MAC not rejected" + + bridge fdb add 01:02:03:04:05:06 dev vxlan0 self static \ + dst 198.51.100.2 2>&1 >/dev/null | grep -q mlxsw_spectrum + check_err $? "multicast MAC rejected without extack" + + log_test "vxlan FDB veto - create" +} + +fdb_replace_veto_test() +{ + RET=0 + + bridge fdb add 00:01:02:03:04:05 dev vxlan0 self static \ + dst 198.51.100.2 + check_err $? "valid FDB rejected" + + bridge fdb replace 00:01:02:03:04:05 dev vxlan0 self static \ + dst 198.51.100.2 port 1234 2>/dev/null + check_fail $? "FDB with an explicit port not rejected" + + bridge fdb replace 00:01:02:03:04:05 dev vxlan0 self static \ + dst 198.51.100.2 port 1234 2>&1 >/dev/null \ + | grep -q mlxsw_spectrum + check_err $? "FDB with an explicit port rejected without extack" + + log_test "vxlan FDB veto - replace" +} + +fdb_append_veto_test() +{ + RET=0 + + bridge fdb add 00:00:00:00:00:00 dev vxlan0 self static \ + dst 198.51.100.2 + check_err $? "valid FDB rejected" + + bridge fdb append 00:00:00:00:00:00 dev vxlan0 self static \ + dst 198.51.100.3 port 1234 2>/dev/null + check_fail $? "FDB with an explicit port not rejected" + + bridge fdb append 00:00:00:00:00:00 dev vxlan0 self static \ + dst 198.51.100.3 port 1234 2>&1 >/dev/null \ + | grep -q mlxsw_spectrum + check_err $? "FDB with an explicit port rejected without extack" + + log_test "vxlan FDB veto - append" +} + +fdb_changelink_veto_test() +{ + RET=0 + + ip link set dev vxlan0 type vxlan \ + group 224.0.0.1 dev lo 2>/dev/null + check_fail $? "FDB with a multicast IP not rejected" + + ip link set dev vxlan0 type vxlan \ + group 224.0.0.1 dev lo 2>&1 >/dev/null \ + | grep -q mlxsw_spectrum + check_err $? "FDB with a multicast IP rejected without extack" + + log_test "vxlan FDB veto - changelink" +} + +trap cleanup EXIT + +setup_prepare +setup_wait + +tests_run + +exit $EXIT_STATUS