From patchwork Mon Dec 4 10:31:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 844173 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="jtRHR7BT"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yr1QV6GyGz9sRV for ; Mon, 4 Dec 2017 21:32:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752747AbdLDKcA (ORCPT ); Mon, 4 Dec 2017 05:32:00 -0500 Received: from mail-wr0-f193.google.com ([209.85.128.193]:39080 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750786AbdLDKb7 (ORCPT ); Mon, 4 Dec 2017 05:31:59 -0500 Received: by mail-wr0-f193.google.com with SMTP id a41so14790736wra.6 for ; Mon, 04 Dec 2017 02:31:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=+hxtxN8TxBd624CT7jkbrypa1wHLE59ox31XMpmiK2s=; b=jtRHR7BTVGu8fGg+2mmOq9MRj++3pWvx9Lx/88ZK36o5V7eEWCrzXHJRKPfApp7Tq6 h8EtQVooIy4NBBtUjatgUigcyPaRueNgzMS+L/X0OtgdPgttQU9I0SgYghIYYTXDzMzC cE1JF60x3mvrSskfuz0rCLeLnJdtiiTogt4FrWYBSA2R+zBI3A7Qx4v4MlrIfYEEFuPk boau9LiUvlA//W8ZwNgwt8kqtGZoj4r9Opr03KoNhXop7VhRtIzTBo8RkZZZu23mXAS0 vE4HPovkpW3Abga+yYUnMxxjkAeuzqknRf0pnQUM049vy1nvpdMxRMDjIV+/d7rNMxV7 1SAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=+hxtxN8TxBd624CT7jkbrypa1wHLE59ox31XMpmiK2s=; b=jWnjoKiqB54ESOQTYw0jbbxae8yCW+s4YrB7hEBTBakj9X5j6qg30bpbvEieUizm3o AgHjk+0k2HTNJucroHxcl+KpeeMzGPteqyAOOrI6w8KR6+pE4gVQhGFAKYuupTSZuGjO sXrZlRnfST/fcDSj9uFIcp2V6cjU42ZL56M7Dzi9Ef7iIBSd/ZmCMQ9w7LmkKHthj5vk iTOsI7VoaeK7hlF4z4OSGZt9tOzNvZl/kVDiKXm6bliy5syK5zu5Ed1nmlro6NPj/wnd EnewgBXKUaiTQIPaxmDsew5o1oYWvaRX97Z7dJPjryarVbUA5gjBITuoUTwqLtPPU9WY mITg== X-Gm-Message-State: AJaThX5xvlfKKuUYDJgqKlCNsLjB/lbfckvv6UOJYv7i/m8zOKX/U6ll xGmrHLlUe5hW3aa5386+piYBYA== X-Google-Smtp-Source: AGs4zMaNmjMtC8TQq6wKXKSm9p7Ce/nDiYFOVCaT7/WnLShVeUwwuHPOpkKBRlZ8UvTitxJ7zF9Kxw== X-Received: by 10.223.161.14 with SMTP id o14mr13097064wro.111.1512383518268; Mon, 04 Dec 2017 02:31:58 -0800 (PST) Received: from penelope.horms.nl ([217.111.208.18]) by smtp.gmail.com with ESMTPSA id h76sm3837591wmd.2.2017.12.04.02.31.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Dec 2017 02:31:57 -0800 (PST) From: Simon Horman To: David Miller , Jiri Pirko Cc: Jamal Hadi Salim , Cong Wang , netdev@vger.kernel.org, oss-drivers@netronome.com, Tom Herbert , Willem de Bruijn , Simon Horman Subject: [PATCH net-next] flow_dissector: dissect tunnel info outside __skb_flow_dissect() Date: Mon, 4 Dec 2017 11:31:48 +0100 Message-Id: <20171204103148.4287-1-simon.horman@netronome.com> X-Mailer: git-send-email 2.11.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Move dissection of tunnel info to outside of the main flow dissection function, __skb_flow_dissect(). The sole user of this feature, the flower classifier, is updated to call tunnel info dissection directly, using skb_flow_dissect_tunnel_info(). This results in a slightly less complex implementation of __skb_flow_dissect(), in particular removing logic from that call path which is not used by the majority of users. The expense of this is borne by the flower classifier which now has to make an extra call for tunnel info dissection. This patch should not result in any behavioural change. Signed-off-by: Simon Horman Reviewed-by: Jakub Kicinski --- include/linux/skbuff.h | 5 +++++ net/core/flow_dissector.c | 12 +++++------- net/sched/cls_flower.c | 1 + 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index bc486ef23f20..7d053bbaa5d1 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -1211,6 +1211,11 @@ static inline bool skb_flow_dissect_flow_keys_buf(struct flow_keys *flow, data, proto, nhoff, hlen, flags); } +void +skb_flow_dissect_tunnel_info(const struct sk_buff *skb, + struct flow_dissector *flow_dissector, + void *target_container); + static inline __u32 skb_get_hash(struct sk_buff *skb) { if (!skb->l4_hash && !skb->sw_hash) diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 15ce30063765..cc75488d3653 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -133,10 +133,10 @@ skb_flow_dissect_set_enc_addr_type(enum flow_dissector_key_id type, ctrl->addr_type = type; } -static void -__skb_flow_dissect_tunnel_info(const struct sk_buff *skb, - struct flow_dissector *flow_dissector, - void *target_container) +void +skb_flow_dissect_tunnel_info(const struct sk_buff *skb, + struct flow_dissector *flow_dissector, + void *target_container) { struct ip_tunnel_info *info; struct ip_tunnel_key *key; @@ -212,6 +212,7 @@ __skb_flow_dissect_tunnel_info(const struct sk_buff *skb, tp->dst = key->tp_dst; } } +EXPORT_SYMBOL(skb_flow_dissect_tunnel_info); static enum flow_dissect_ret __skb_flow_dissect_mpls(const struct sk_buff *skb, @@ -576,9 +577,6 @@ bool __skb_flow_dissect(const struct sk_buff *skb, FLOW_DISSECTOR_KEY_BASIC, target_container); - __skb_flow_dissect_tunnel_info(skb, flow_dissector, - target_container); - if (dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_ETH_ADDRS)) { struct ethhdr *eth = eth_hdr(skb); diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 543a3e875d05..6132a7317efa 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -166,6 +166,7 @@ static int fl_classify(struct sk_buff *skb, const struct tcf_proto *tp, * so do it rather here. */ skb_key.basic.n_proto = skb->protocol; + skb_flow_dissect_tunnel_info(skb, &head->dissector, &skb_key); skb_flow_dissect(skb, &head->dissector, &skb_key, 0); fl_set_masked_key(&skb_mkey, &skb_key, &head->mask);