Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1407826/?format=api
{ "id": 1407826, "url": "http://patchwork.ozlabs.org/api/patches/1407826/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20201129125407.1391557-9-idosch@idosch.org/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20201129125407.1391557-9-idosch@idosch.org>", "list_archive_url": null, "date": "2020-11-29T12:54:06", "name": "[net-next,8/9] mlxsw: Add QinQ configuration vetoes", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "754d35009c55dd3ca5ffed40457a1b4b43ea7209", "submitter": { "id": 69679, "url": "http://patchwork.ozlabs.org/api/people/69679/?format=api", "name": "Ido Schimmel", "email": "idosch@idosch.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/20201129125407.1391557-9-idosch@idosch.org/mbox/", "series": [ { "id": 217375, "url": "http://patchwork.ozlabs.org/api/series/217375/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=217375", "date": "2020-11-29T12:54:00", "name": "mlxsw: Add support for 802.1ad bridging", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/217375/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1407826/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1407826/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming-netdev@ozlabs.org", "Delivered-To": "patchwork-incoming-netdev@ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=23.128.96.18; helo=vger.kernel.org;\n envelope-from=netdev-owner@vger.kernel.org; receiver=<UNKNOWN>)", "ozlabs.org;\n dmarc=none (p=none dis=none) header.from=idosch.org", "ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=messagingengine.com header.i=@messagingengine.com\n header.a=rsa-sha256 header.s=fm1 header.b=lHZSU6WU;\n\tdkim-atps=neutral" ], "Received": [ "from vger.kernel.org (vger.kernel.org [23.128.96.18])\n\tby ozlabs.org (Postfix) with ESMTP id 4CkSzV1Yz4z9sRR\n\tfor <patchwork-incoming-netdev@ozlabs.org>;\n Sun, 29 Nov 2020 23:56:22 +1100 (AEDT)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n id S2387456AbgK2M4V (ORCPT\n <rfc822;patchwork-incoming-netdev@ozlabs.org>);\n Sun, 29 Nov 2020 07:56:21 -0500", "from new1-smtp.messagingengine.com ([66.111.4.221]:44567 \"EHLO\n new1-smtp.messagingengine.com\" rhost-flags-OK-OK-OK-OK)\n by vger.kernel.org with ESMTP id S2387444AbgK2M4U (ORCPT\n <rfc822;netdev@vger.kernel.org>); Sun, 29 Nov 2020 07:56:20 -0500", "from compute3.internal (compute3.nyi.internal [10.202.2.43])\n by mailnew.nyi.internal (Postfix) with ESMTP id C3F475806E8;\n Sun, 29 Nov 2020 07:54:57 -0500 (EST)", "from mailfrontend2 ([10.202.2.163])\n by compute3.internal (MEProxy); Sun, 29 Nov 2020 07:54:57 -0500", "from shredder.lan (igld-84-229-154-147.inter.net.il\n [84.229.154.147])\n by mail.messagingengine.com (Postfix) with ESMTPA id A36203064AAA;\n Sun, 29 Nov 2020 07:54:55 -0500 (EST)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=\n messagingengine.com; h=cc:content-transfer-encoding:date:from\n :in-reply-to:message-id:mime-version:references:subject:to\n :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=\n fm1; bh=ESOaBNnNxJNHPiBFMVKbv2S1rT/H+17nOXR1Q+mGQf4=; b=lHZSU6WU\n lJvURKFPuD1rtzoN3qsSgFNb9yqHeWllAbDDw87hmYHO5CLSaPZ2wEy+VIz+SxC7\n SMXuLfVL65/fkcNBAZYlzoMscYo6B8/izcC8I9hE6lYAMNhOAoUgb/mnm5tw0PIp\n bPiPyna9a/f7uEOwsOBeECpCRmQ9HCpsFeidqfv2zU7qYJLlIhOUD+gjroRlyqyh\n RLUIJZ7RPKQmv017Q2YlN4Smuo3GrCgQLXR+VEarAGKq1SFX/dDvL/6/nkepaelg\n y1urEcd+MLwdagxXh+HwwTCG0BPIFW8sEdpqJWRs3L0hpT84t/KVJuOtsb5vYfZ9\n joBF1Vw8n3+SGA==", "X-ME-Sender": "<xms:IZrDX1OihMZl5AW8yrh-frcPLnVS440Ha4eH-uxy3B-N94BBnaWcvA>\n <xme:IZrDX3_LyZb1QwRCIN6eTKFHKK3NwaCkFWgZs4GUylLgBFC3t6sfXT9jLopJCw4lZ\n k5CPMVp0ORYmrE>", "X-ME-Proxy-Cause": "\n gggruggvucftvghtrhhoucdtuddrgedujedrudehkedggeeiucetufdoteggodetrfdotf\n fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen\n uceurghilhhouhhtmecufedttdenucenucfjughrpefhvffufffkofgjfhgggfestdekre\n dtredttdenucfhrhhomhepkfguohcuufgthhhimhhmvghluceoihguohhstghhsehiugho\n shgthhdrohhrgheqnecuggftrfgrthhtvghrnhepudetieevffffveelkeeljeffkefhke\n ehgfdtffethfelvdejgffghefgveejkefhnecukfhppeekgedrvddvledrudehgedrudeg\n jeenucevlhhushhtvghrufhiiigvpeeinecurfgrrhgrmhepmhgrihhlfhhrohhmpehiug\n hoshgthhesihguohhstghhrdhorhhg", "X-ME-Proxy": "<xmx:IZrDX0QXNDMcUUZETOLPnnYJX9J44wk6zvcSszrTtWqz509fSzY8Lg>\n <xmx:IZrDXxtsqEnFQvXBlSfOGal3crd2R_PuZ8JZ7Ogajly1va5_XLYUKQ>\n <xmx:IZrDX9cN_vz5BWgjbyMtsRlCjzNi-KU0MMnyjUTOXNsMOSWIzJgfmQ>\n <xmx:IZrDX57J7D0myF6ocLitnSEYgaQ5omwbaZDYH-Pd-uB2Hm1F-r6X3A>", "From": "Ido Schimmel <idosch@idosch.org>", "To": "netdev@vger.kernel.org, bridge@lists.linux-foundation.org", "Cc": "davem@davemloft.net, kuba@kernel.org, jiri@nvidia.com,\n ivecera@redhat.com, roopa@nvidia.com, nikolay@nvidia.com,\n amcohen@nvidia.com, danieller@nvidia.com, petrm@nvidia.com,\n mlxsw@nvidia.com, Ido Schimmel <idosch@nvidia.com>", "Subject": "[PATCH net-next 8/9] mlxsw: Add QinQ configuration vetoes", "Date": "Sun, 29 Nov 2020 14:54:06 +0200", "Message-Id": "<20201129125407.1391557-9-idosch@idosch.org>", "X-Mailer": "git-send-email 2.28.0", "In-Reply-To": "<20201129125407.1391557-1-idosch@idosch.org>", "References": "<20201129125407.1391557-1-idosch@idosch.org>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "From: Danielle Ratson <danieller@nvidia.com>\n\nAfter adding support for QinQ, a.k.a 802.1ad protocol, there are a few\nscenarios that should be vetoed.\n\nThe vetoes are motivated by various ASIC limitations.\nFor example, a port that is member in a 802.1ad bridge cannot have 802.1q\nuppers as the port needs to be configured to treat 802.1q packets as\nuntagged packets.\n\nVeto all those unsupported scenarios and return suitable messages.\n\nSigned-off-by: Danielle Ratson <danieller@nvidia.com>\nReviewed-by: Petr Machata <petrm@nvidia.com>\nSigned-off-by: Ido Schimmel <idosch@nvidia.com>\n---\n .../net/ethernet/mellanox/mlxsw/spectrum.c | 44 +++++++++++++++++++\n .../ethernet/mellanox/mlxsw/spectrum_router.c | 9 ++++\n .../mellanox/mlxsw/spectrum_switchdev.c | 24 ++++++++++\n 3 files changed, 77 insertions(+)", "diff": "diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c\nindex fe954e87c5a7..385eb3c3b362 100644\n--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c\n+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c\n@@ -3893,6 +3893,7 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev,\n \tstruct net_device *upper_dev;\n \tstruct mlxsw_sp *mlxsw_sp;\n \tint err = 0;\n+\tu16 proto;\n \n \tmlxsw_sp_port = netdev_priv(dev);\n \tmlxsw_sp = mlxsw_sp_port->mlxsw_sp;\n@@ -3950,6 +3951,36 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev,\n \t\t\tNL_SET_ERR_MSG_MOD(extack, \"Can not put a VLAN on an OVS port\");\n \t\t\treturn -EINVAL;\n \t\t}\n+\t\tif (netif_is_bridge_master(upper_dev)) {\n+\t\t\tbr_vlan_get_proto(upper_dev, &proto);\n+\t\t\tif (br_vlan_enabled(upper_dev) &&\n+\t\t\t proto != ETH_P_8021Q && proto != ETH_P_8021AD) {\n+\t\t\t\tNL_SET_ERR_MSG_MOD(extack, \"Enslaving a port to a bridge with unknown VLAN protocol is not supported\");\n+\t\t\t\treturn -EOPNOTSUPP;\n+\t\t\t}\n+\t\t\tif (vlan_uses_dev(lower_dev) &&\n+\t\t\t br_vlan_enabled(upper_dev) &&\n+\t\t\t proto == ETH_P_8021AD) {\n+\t\t\t\tNL_SET_ERR_MSG_MOD(extack, \"Enslaving a port that already has a VLAN upper to an 802.1ad bridge is not supported\");\n+\t\t\t\treturn -EOPNOTSUPP;\n+\t\t\t}\n+\t\t}\n+\t\tif (netif_is_bridge_port(lower_dev) && is_vlan_dev(upper_dev)) {\n+\t\t\tstruct net_device *br_dev = netdev_master_upper_dev_get(lower_dev);\n+\n+\t\t\tif (br_vlan_enabled(br_dev)) {\n+\t\t\t\tbr_vlan_get_proto(br_dev, &proto);\n+\t\t\t\tif (proto == ETH_P_8021AD) {\n+\t\t\t\t\tNL_SET_ERR_MSG_MOD(extack, \"VLAN uppers are not supported on a port enslaved to an 802.1ad bridge\");\n+\t\t\t\t\treturn -EOPNOTSUPP;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\tif (is_vlan_dev(upper_dev) &&\n+\t\t ntohs(vlan_dev_vlan_proto(upper_dev)) != ETH_P_8021Q) {\n+\t\t\tNL_SET_ERR_MSG_MOD(extack, \"VLAN uppers are only supported with 802.1q VLAN protocol\");\n+\t\t\treturn -EOPNOTSUPP;\n+\t\t}\n \t\tbreak;\n \tcase NETDEV_CHANGEUPPER:\n \t\tupper_dev = info->upper_dev;\n@@ -4215,6 +4246,7 @@ static int mlxsw_sp_netdevice_bridge_event(struct net_device *br_dev,\n \tstruct netdev_notifier_changeupper_info *info = ptr;\n \tstruct netlink_ext_ack *extack;\n \tstruct net_device *upper_dev;\n+\tu16 proto;\n \n \tif (!mlxsw_sp)\n \t\treturn 0;\n@@ -4230,6 +4262,18 @@ static int mlxsw_sp_netdevice_bridge_event(struct net_device *br_dev,\n \t\t}\n \t\tif (!info->linking)\n \t\t\tbreak;\n+\t\tif (br_vlan_enabled(br_dev)) {\n+\t\t\tbr_vlan_get_proto(br_dev, &proto);\n+\t\t\tif (proto == ETH_P_8021AD) {\n+\t\t\t\tNL_SET_ERR_MSG_MOD(extack, \"Uppers are not supported on top of an 802.1ad bridge\");\n+\t\t\t\treturn -EOPNOTSUPP;\n+\t\t\t}\n+\t\t}\n+\t\tif (is_vlan_dev(upper_dev) &&\n+\t\t ntohs(vlan_dev_vlan_proto(upper_dev)) != ETH_P_8021Q) {\n+\t\t\tNL_SET_ERR_MSG_MOD(extack, \"VLAN uppers are only supported with 802.1q VLAN protocol\");\n+\t\t\treturn -EOPNOTSUPP;\n+\t\t}\n \t\tif (netif_is_macvlan(upper_dev) &&\n \t\t !mlxsw_sp_rif_exists(mlxsw_sp, br_dev)) {\n \t\t\tNL_SET_ERR_MSG_MOD(extack, \"macvlan is only supported on top of router interfaces\");\ndiff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c\nindex 12b5d7fbe1e2..85223647fdb6 100644\n--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c\n+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c\n@@ -7857,6 +7857,15 @@ static int mlxsw_sp_inetaddr_bridge_event(struct mlxsw_sp *mlxsw_sp,\n \n \tswitch (event) {\n \tcase NETDEV_UP:\n+\t\tif (netif_is_bridge_master(l3_dev) && br_vlan_enabled(l3_dev)) {\n+\t\t\tu16 proto;\n+\n+\t\t\tbr_vlan_get_proto(l3_dev, &proto);\n+\t\t\tif (proto == ETH_P_8021AD) {\n+\t\t\t\tNL_SET_ERR_MSG_MOD(extack, \"Adding an IP address to 802.1ad bridge is not supported\");\n+\t\t\t\treturn -EOPNOTSUPP;\n+\t\t\t}\n+\t\t}\n \t\trif = mlxsw_sp_rif_create(mlxsw_sp, ¶ms, extack);\n \t\tif (IS_ERR(rif))\n \t\t\treturn PTR_ERR(rif);\ndiff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c\nindex d8ee8801331c..9c4e17607e6a 100644\n--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c\n+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c\n@@ -764,6 +764,25 @@ static int mlxsw_sp_port_attr_br_vlan_set(struct mlxsw_sp_port *mlxsw_sp_port,\n \treturn -EINVAL;\n }\n \n+static int mlxsw_sp_port_attr_br_vlan_proto_set(struct mlxsw_sp_port *mlxsw_sp_port,\n+\t\t\t\t\t\tstruct switchdev_trans *trans,\n+\t\t\t\t\t\tstruct net_device *orig_dev,\n+\t\t\t\t\t\tu16 vlan_proto)\n+{\n+\tstruct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;\n+\tstruct mlxsw_sp_bridge_device *bridge_device;\n+\n+\tif (!switchdev_trans_ph_prepare(trans))\n+\t\treturn 0;\n+\n+\tbridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, orig_dev);\n+\tif (WARN_ON(!bridge_device))\n+\t\treturn -EINVAL;\n+\n+\tnetdev_err(bridge_device->dev, \"VLAN protocol can't be changed on existing bridge\\n\");\n+\treturn -EINVAL;\n+}\n+\n static int mlxsw_sp_port_attr_mrouter_set(struct mlxsw_sp_port *mlxsw_sp_port,\n \t\t\t\t\t struct switchdev_trans *trans,\n \t\t\t\t\t struct net_device *orig_dev,\n@@ -933,6 +952,11 @@ static int mlxsw_sp_port_attr_set(struct net_device *dev,\n \t\t\t\t\t\t attr->orig_dev,\n \t\t\t\t\t\t attr->u.vlan_filtering);\n \t\tbreak;\n+\tcase SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL:\n+\t\terr = mlxsw_sp_port_attr_br_vlan_proto_set(mlxsw_sp_port, trans,\n+\t\t\t\t\t\t\t attr->orig_dev,\n+\t\t\t\t\t\t\t attr->u.vlan_protocol);\n+\t\tbreak;\n \tcase SWITCHDEV_ATTR_ID_PORT_MROUTER:\n \t\terr = mlxsw_sp_port_attr_mrouter_set(mlxsw_sp_port, trans,\n \t\t\t\t\t\t attr->orig_dev,\n", "prefixes": [ "net-next", "8/9" ] }