get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 818165,
    "url": "http://patchwork.ozlabs.org/api/patches/818165/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1506335021-32024-3-git-send-email-simon.horman@netronome.com/",
    "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": "<1506335021-32024-3-git-send-email-simon.horman@netronome.com>",
    "list_archive_url": null,
    "date": "2017-09-25T10:23:36",
    "name": "[net-next,2/7] nfp: compile flower vxlan tunnel metadata match fields",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "38f181182a3d6d0f37f3002f36030a1edb6f6a95",
    "submitter": {
        "id": 64714,
        "url": "http://patchwork.ozlabs.org/api/people/64714/?format=api",
        "name": "Simon Horman",
        "email": "simon.horman@netronome.com"
    },
    "delegate": {
        "id": 34,
        "url": "http://patchwork.ozlabs.org/api/users/34/?format=api",
        "username": "davem",
        "first_name": "David",
        "last_name": "Miller",
        "email": "davem@davemloft.net"
    },
    "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/1506335021-32024-3-git-send-email-simon.horman@netronome.com/mbox/",
    "series": [
        {
            "id": 4932,
            "url": "http://patchwork.ozlabs.org/api/series/4932/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=4932",
            "date": "2017-09-25T10:23:34",
            "name": "nfp: flower vxlan tunnel offload",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/4932/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/818165/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/818165/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netdev-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming@ozlabs.org",
        "Delivered-To": "patchwork-incoming@ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=netronome-com.20150623.gappssmtp.com\n\theader.i=@netronome-com.20150623.gappssmtp.com\n\theader.b=\"PGzfx7hZ\"; dkim-atps=neutral"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3y10ZN39pdz9tX3\n\tfor <patchwork-incoming@ozlabs.org>;\n\tMon, 25 Sep 2017 20:24:44 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S934577AbdIYKYl (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tMon, 25 Sep 2017 06:24:41 -0400",
            "from mail-wm0-f42.google.com ([74.125.82.42]:48854 \"EHLO\n\tmail-wm0-f42.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S934145AbdIYKYC (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Mon, 25 Sep 2017 06:24:02 -0400",
            "by mail-wm0-f42.google.com with SMTP id m127so17964226wmm.3\n\tfor <netdev@vger.kernel.org>; Mon, 25 Sep 2017 03:24:02 -0700 (PDT)",
            "from penelope.horms.nl ([217.111.208.18])\n\tby smtp.gmail.com with ESMTPSA id\n\t10sm6816818wrt.59.2017.09.25.03.24.00\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tMon, 25 Sep 2017 03:24:00 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=netronome-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=1KtcmLV9LuJr2kWDhl/wD1CMRj8AlQRuGIsgX6YUQpQ=;\n\tb=PGzfx7hZzAVZMBhlr7aOwEf/30PQo9RFHx03QtrCwkHUw+uXGji9UmqWZrbk1NqS/W\n\thwPxBUKtlZ20dcverbuq54MN+UEiIW39M4XYoBMW8l4YYH4DjTTm76QXCpzS8+iH4dW8\n\tDUn8uKJ6KRkmCDFFghtyTZSGpP3D5/pmjHWraf0TEFXApb1VTaCvBvySeWY7Ve5HCL9y\n\tOuhMCDFl/RcwNdUkDz80pCXc2wq9KnT/IQNOu6fXqkQnXnHvJ8T6XLydi9acQg89W/0l\n\tJ4v4G40hyV7b8jgyJAjToo90/LVbi0Ro0tc0qZSJdOvH6aCAWiGS3CGsT/2XJ7QeNMQE\n\tr2IA==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=1KtcmLV9LuJr2kWDhl/wD1CMRj8AlQRuGIsgX6YUQpQ=;\n\tb=NS493xuyQGCSm3jeE7WAwDx198Li74C3AQi9rpbE6n3yhf5fJzedqm7GxcpXb+uRlj\n\tMO37lN1STiXvDWi/GnNJ0t8Vt+ZkIPNkK/4bnw7RF9+LuAojvV+kgAIYXAqpJiHOiM6U\n\tkaWvBOGHIgr6CQhCAEB8cstvLCtWju/rQqc4RqdcXSG0erHRA7uWV1TIsZoMOruW+9f2\n\tViY4PkwnowkjznQtiQ5SV+2sGm1yvOWhgILMlDPDgZZxk6S+BAIyjL2t1jD2OUgA6J8q\n\t62/ZZtG0M78grjBvuAkOfmRNslsa9VYirXVT0KPVAdwxzlHexqsKxzxjylPvGYy2JsYI\n\tfvEQ==",
        "X-Gm-Message-State": "AHPjjUhXP9Y+8fRSsSjujcaqZ7/DPJdobihyQpeOdWQhN9A5vIMJ3ega\n\tqFMTXMvPOOVFhRHH2UWjS3/bbA==",
        "X-Google-Smtp-Source": "AOwi7QDFA0S8DkcPycLC3IGbu8Xc6EaNVJyn1346yZhHzKbdvWnvEVBS/+qZrZ0PLeBg+M94kMGoLA==",
        "X-Received": "by 10.28.189.7 with SMTP id n7mr11616wmf.49.1506335041347;\n\tMon, 25 Sep 2017 03:24:01 -0700 (PDT)",
        "From": "Simon Horman <simon.horman@netronome.com>",
        "To": "David Miller <davem@davemloft.net>,\n\tJakub Kicinski <jakub.kicinski@netronome.com>",
        "Cc": "netdev@vger.kernel.org, oss-drivers@netronome.com,\n\tJohn Hurley <john.hurley@netronome.com>,\n\tSimon Horman <simon.horman@netronome.com>",
        "Subject": "[PATCH net-next 2/7] nfp: compile flower vxlan tunnel metadata\n\tmatch fields",
        "Date": "Mon, 25 Sep 2017 12:23:36 +0200",
        "Message-Id": "<1506335021-32024-3-git-send-email-simon.horman@netronome.com>",
        "X-Mailer": "git-send-email 2.1.4",
        "In-Reply-To": "<1506335021-32024-1-git-send-email-simon.horman@netronome.com>",
        "References": "<1506335021-32024-1-git-send-email-simon.horman@netronome.com>",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "From: John Hurley <john.hurley@netronome.com>\n\nCompile ovs-tc flower vxlan metadata match fields for offloading. Only\nsupport offload of tunnel data when the VXLAN port specifically matches\nwell known port 4789.\n\nSigned-off-by: John Hurley <john.hurley@netronome.com>\nSigned-off-by: Simon Horman <simon.horman@netronome.com>\n---\n drivers/net/ethernet/netronome/nfp/flower/cmsg.h   | 38 ++++++++++++\n drivers/net/ethernet/netronome/nfp/flower/main.h   |  2 +\n drivers/net/ethernet/netronome/nfp/flower/match.c  | 60 +++++++++++++++++--\n .../net/ethernet/netronome/nfp/flower/offload.c    | 70 +++++++++++++++++++---\n 4 files changed, 158 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/netronome/nfp/flower/cmsg.h b/drivers/net/ethernet/netronome/nfp/flower/cmsg.h\nindex 7a5ccf0cc7c2..af9165b3b652 100644\n--- a/drivers/net/ethernet/netronome/nfp/flower/cmsg.h\n+++ b/drivers/net/ethernet/netronome/nfp/flower/cmsg.h\n@@ -83,6 +83,14 @@\n #define NFP_FL_PUSH_VLAN_CFI\t\tBIT(12)\n #define NFP_FL_PUSH_VLAN_VID\t\tGENMASK(11, 0)\n \n+/* Tunnel ports */\n+#define NFP_FL_PORT_TYPE_TUN\t\t0x50000000\n+\n+enum nfp_flower_tun_type {\n+\tNFP_FL_TUNNEL_NONE =\t0,\n+\tNFP_FL_TUNNEL_VXLAN =\t2,\n+};\n+\n struct nfp_fl_output {\n \t__be16 a_op;\n \t__be16 flags;\n@@ -230,6 +238,36 @@ struct nfp_flower_ipv6 {\n \tstruct in6_addr ipv6_dst;\n };\n \n+/* Flow Frame VXLAN --> Tunnel details (4W/16B)\n+ * -----------------------------------------------------------------\n+ *    3                   2                   1\n+ *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0\n+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n+ * |                         ipv4_addr_src                         |\n+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n+ * |                         ipv4_addr_dst                         |\n+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n+ * |           tun_flags           |       tos     |       ttl     |\n+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n+ * |   gpe_flags   |            Reserved           | Next Protocol |\n+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n+ * |                     VNI                       |   Reserved    |\n+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n+ */\n+struct nfp_flower_vxlan {\n+\t__be32 ip_src;\n+\t__be32 ip_dst;\n+\t__be16 tun_flags;\n+\tu8 tos;\n+\tu8 ttl;\n+\tu8 gpe_flags;\n+\tu8 reserved[2];\n+\tu8 nxt_proto;\n+\t__be32 tun_id;\n+};\n+\n+#define NFP_FL_TUN_VNI_OFFSET 8\n+\n /* The base header for a control message packet.\n  * Defines an 8-bit version, and an 8-bit type, padded\n  * to a 32-bit word. Rest of the packet is type-specific.\ndiff --git a/drivers/net/ethernet/netronome/nfp/flower/main.h b/drivers/net/ethernet/netronome/nfp/flower/main.h\nindex c20dd00a1cae..cd695eabce02 100644\n--- a/drivers/net/ethernet/netronome/nfp/flower/main.h\n+++ b/drivers/net/ethernet/netronome/nfp/flower/main.h\n@@ -58,6 +58,8 @@ struct nfp_app;\n #define NFP_FL_MASK_REUSE_TIME_NS\t40000\n #define NFP_FL_MASK_ID_LOCATION\t\t1\n \n+#define NFP_FL_VXLAN_PORT\t\t4789\n+\n struct nfp_fl_mask_id {\n \tstruct circ_buf mask_id_free_list;\n \tstruct timespec64 *last_used;\ndiff --git a/drivers/net/ethernet/netronome/nfp/flower/match.c b/drivers/net/ethernet/netronome/nfp/flower/match.c\nindex d25b5038c3a2..1fd1bab0611f 100644\n--- a/drivers/net/ethernet/netronome/nfp/flower/match.c\n+++ b/drivers/net/ethernet/netronome/nfp/flower/match.c\n@@ -77,14 +77,17 @@ nfp_flower_compile_meta(struct nfp_flower_meta_one *frame, u8 key_type)\n \n static int\n nfp_flower_compile_port(struct nfp_flower_in_port *frame, u32 cmsg_port,\n-\t\t\tbool mask_version)\n+\t\t\tbool mask_version, enum nfp_flower_tun_type tun_type)\n {\n \tif (mask_version) {\n \t\tframe->in_port = cpu_to_be32(~0);\n \t\treturn 0;\n \t}\n \n-\tframe->in_port = cpu_to_be32(cmsg_port);\n+\tif (tun_type)\n+\t\tframe->in_port = cpu_to_be32(NFP_FL_PORT_TYPE_TUN | tun_type);\n+\telse\n+\t\tframe->in_port = cpu_to_be32(cmsg_port);\n \n \treturn 0;\n }\n@@ -189,15 +192,53 @@ nfp_flower_compile_ipv6(struct nfp_flower_ipv6 *frame,\n \t}\n }\n \n+static void\n+nfp_flower_compile_vxlan(struct nfp_flower_vxlan *frame,\n+\t\t\t struct tc_cls_flower_offload *flow,\n+\t\t\t bool mask_version)\n+{\n+\tstruct fl_flow_key *target = mask_version ? flow->mask : flow->key;\n+\tstruct flow_dissector_key_ipv4_addrs *vxlan_ips;\n+\tstruct flow_dissector_key_keyid *vni;\n+\n+\t/* Wildcard TOS/TTL/GPE_FLAGS/NXT_PROTO for now. */\n+\tmemset(frame, 0, sizeof(struct nfp_flower_vxlan));\n+\n+\tif (dissector_uses_key(flow->dissector,\n+\t\t\t       FLOW_DISSECTOR_KEY_ENC_KEYID)) {\n+\t\tu32 temp_vni;\n+\n+\t\tvni = skb_flow_dissector_target(flow->dissector,\n+\t\t\t\t\t\tFLOW_DISSECTOR_KEY_ENC_KEYID,\n+\t\t\t\t\t\ttarget);\n+\t\ttemp_vni = be32_to_cpu(vni->keyid) << NFP_FL_TUN_VNI_OFFSET;\n+\t\tframe->tun_id = cpu_to_be32(temp_vni);\n+\t}\n+\n+\tif (dissector_uses_key(flow->dissector,\n+\t\t\t       FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS)) {\n+\t\tvxlan_ips =\n+\t\t   skb_flow_dissector_target(flow->dissector,\n+\t\t\t\t\t     FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS,\n+\t\t\t\t\t     target);\n+\t\tframe->ip_src = vxlan_ips->src;\n+\t\tframe->ip_dst = vxlan_ips->dst;\n+\t}\n+}\n+\n int nfp_flower_compile_flow_match(struct tc_cls_flower_offload *flow,\n \t\t\t\t  struct nfp_fl_key_ls *key_ls,\n \t\t\t\t  struct net_device *netdev,\n \t\t\t\t  struct nfp_fl_payload *nfp_flow)\n {\n+\tenum nfp_flower_tun_type tun_type = NFP_FL_TUNNEL_NONE;\n \tint err;\n \tu8 *ext;\n \tu8 *msk;\n \n+\tif (key_ls->key_layer & NFP_FLOWER_LAYER_VXLAN)\n+\t\ttun_type = NFP_FL_TUNNEL_VXLAN;\n+\n \tmemset(nfp_flow->unmasked_data, 0, key_ls->key_size);\n \tmemset(nfp_flow->mask_data, 0, key_ls->key_size);\n \n@@ -216,14 +257,14 @@ int nfp_flower_compile_flow_match(struct tc_cls_flower_offload *flow,\n \t\t/* Populate Exact Port data. */\n \t\terr = nfp_flower_compile_port((struct nfp_flower_in_port *)ext,\n \t\t\t\t\t      nfp_repr_get_port_id(netdev),\n-\t\t\t\t\t      false);\n+\t\t\t\t\t      false, tun_type);\n \t\tif (err)\n \t\t\treturn err;\n \n \t\t/* Populate Mask Port Data. */\n \t\terr = nfp_flower_compile_port((struct nfp_flower_in_port *)msk,\n \t\t\t\t\t      nfp_repr_get_port_id(netdev),\n-\t\t\t\t\t      true);\n+\t\t\t\t\t      true, tun_type);\n \t\tif (err)\n \t\t\treturn err;\n \n@@ -291,5 +332,16 @@ int nfp_flower_compile_flow_match(struct tc_cls_flower_offload *flow,\n \t\tmsk += sizeof(struct nfp_flower_ipv6);\n \t}\n \n+\tif (key_ls->key_layer & NFP_FLOWER_LAYER_VXLAN) {\n+\t\t/* Populate Exact VXLAN Data. */\n+\t\tnfp_flower_compile_vxlan((struct nfp_flower_vxlan *)ext,\n+\t\t\t\t\t flow, false);\n+\t\t/* Populate Mask VXLAN Data. */\n+\t\tnfp_flower_compile_vxlan((struct nfp_flower_vxlan *)msk,\n+\t\t\t\t\t flow, true);\n+\t\text += sizeof(struct nfp_flower_vxlan);\n+\t\tmsk += sizeof(struct nfp_flower_vxlan);\n+\t}\n+\n \treturn 0;\n }\ndiff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c\nindex a18b4d2b1d3e..637372ba8f55 100644\n--- a/drivers/net/ethernet/netronome/nfp/flower/offload.c\n+++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c\n@@ -52,8 +52,25 @@\n \t BIT(FLOW_DISSECTOR_KEY_PORTS) | \\\n \t BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) | \\\n \t BIT(FLOW_DISSECTOR_KEY_VLAN) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_PORTS) | \\\n \t BIT(FLOW_DISSECTOR_KEY_IP))\n \n+#define NFP_FLOWER_WHITELIST_TUN_DISSECTOR \\\n+\t(BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_PORTS))\n+\n+#define NFP_FLOWER_WHITELIST_TUN_DISSECTOR_R \\\n+\t(BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) | \\\n+\t BIT(FLOW_DISSECTOR_KEY_ENC_PORTS))\n+\n static int\n nfp_flower_xmit_flow(struct net_device *netdev,\n \t\t     struct nfp_fl_payload *nfp_flow, u8 mtype)\n@@ -125,15 +142,58 @@ nfp_flower_calculate_key_layers(struct nfp_fl_key_ls *ret_key_ls,\n \tif (flow->dissector->used_keys & ~NFP_FLOWER_WHITELIST_DISSECTOR)\n \t\treturn -EOPNOTSUPP;\n \n+\t/* If any tun dissector is used then the required set must be used. */\n+\tif (flow->dissector->used_keys & NFP_FLOWER_WHITELIST_TUN_DISSECTOR &&\n+\t    (flow->dissector->used_keys & NFP_FLOWER_WHITELIST_TUN_DISSECTOR_R)\n+\t    != NFP_FLOWER_WHITELIST_TUN_DISSECTOR_R)\n+\t\treturn -EOPNOTSUPP;\n+\n+\tkey_layer_two = 0;\n+\tkey_layer = NFP_FLOWER_LAYER_PORT | NFP_FLOWER_LAYER_MAC;\n+\tkey_size = sizeof(struct nfp_flower_meta_one) +\n+\t\t   sizeof(struct nfp_flower_in_port) +\n+\t\t   sizeof(struct nfp_flower_mac_mpls);\n+\n \tif (dissector_uses_key(flow->dissector,\n \t\t\t       FLOW_DISSECTOR_KEY_ENC_CONTROL)) {\n+\t\tstruct flow_dissector_key_ipv4_addrs *mask_ipv4 = NULL;\n+\t\tstruct flow_dissector_key_ports *mask_enc_ports = NULL;\n+\t\tstruct flow_dissector_key_ports *enc_ports = NULL;\n \t\tstruct flow_dissector_key_control *mask_enc_ctl =\n \t\t\tskb_flow_dissector_target(flow->dissector,\n \t\t\t\t\t\t  FLOW_DISSECTOR_KEY_ENC_CONTROL,\n \t\t\t\t\t\t  flow->mask);\n-\t\t/* We are expecting a tunnel. For now we ignore offloading. */\n-\t\tif (mask_enc_ctl->addr_type)\n+\t\tstruct flow_dissector_key_control *enc_ctl =\n+\t\t\tskb_flow_dissector_target(flow->dissector,\n+\t\t\t\t\t\t  FLOW_DISSECTOR_KEY_ENC_CONTROL,\n+\t\t\t\t\t\t  flow->key);\n+\t\tif (mask_enc_ctl->addr_type != 0xffff ||\n+\t\t    enc_ctl->addr_type != FLOW_DISSECTOR_KEY_IPV4_ADDRS)\n \t\t\treturn -EOPNOTSUPP;\n+\n+\t\t/* These fields are already verified as used. */\n+\t\tmask_ipv4 =\n+\t\t\tskb_flow_dissector_target(flow->dissector,\n+\t\t\t\t\t\t  FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS,\n+\t\t\t\t\t\t  flow->mask);\n+\t\tif (mask_ipv4->dst != cpu_to_be32(~0))\n+\t\t\treturn -EOPNOTSUPP;\n+\n+\t\tmask_enc_ports =\n+\t\t\tskb_flow_dissector_target(flow->dissector,\n+\t\t\t\t\t\t  FLOW_DISSECTOR_KEY_ENC_PORTS,\n+\t\t\t\t\t\t  flow->mask);\n+\t\tenc_ports =\n+\t\t\tskb_flow_dissector_target(flow->dissector,\n+\t\t\t\t\t\t  FLOW_DISSECTOR_KEY_ENC_PORTS,\n+\t\t\t\t\t\t  flow->key);\n+\n+\t\tif (mask_enc_ports->dst != cpu_to_be16(~0) ||\n+\t\t    enc_ports->dst != htons(NFP_FL_VXLAN_PORT))\n+\t\t\treturn -EOPNOTSUPP;\n+\n+\t\tkey_layer |= NFP_FLOWER_LAYER_VXLAN;\n+\t\tkey_size += sizeof(struct nfp_flower_vxlan);\n \t}\n \n \tif (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_BASIC)) {\n@@ -151,12 +211,6 @@ nfp_flower_calculate_key_layers(struct nfp_fl_key_ls *ret_key_ls,\n \t\t\t\t\t\t    FLOW_DISSECTOR_KEY_IP,\n \t\t\t\t\t\t    flow->mask);\n \n-\tkey_layer_two = 0;\n-\tkey_layer = NFP_FLOWER_LAYER_PORT | NFP_FLOWER_LAYER_MAC;\n-\tkey_size = sizeof(struct nfp_flower_meta_one) +\n-\t\t   sizeof(struct nfp_flower_in_port) +\n-\t\t   sizeof(struct nfp_flower_mac_mpls);\n-\n \tif (mask_basic && mask_basic->n_proto) {\n \t\t/* Ethernet type is present in the key. */\n \t\tswitch (key_basic->n_proto) {\n",
    "prefixes": [
        "net-next",
        "2/7"
    ]
}