{"id":818165,"url":"http://patchwork.ozlabs.org/api/patches/818165/?format=json","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=json","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=json","name":"Simon Horman","email":"simon.horman@netronome.com"},"delegate":{"id":34,"url":"http://patchwork.ozlabs.org/api/users/34/?format=json","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=json","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"]}