get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/1407826/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "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, &params, 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"
    ]
}