From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.6 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_PASS,USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18140C282CB for ; Tue, 5 Feb 2019 17:36:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E353320821 for ; Tue, 5 Feb 2019 17:36:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wTn7yb1V" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727067AbfBERgd (ORCPT ); Tue, 5 Feb 2019 12:36:33 -0500 Received: from mail-it1-f202.google.com ([209.85.166.202]:35357 "EHLO mail-it1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726550AbfBERgd (ORCPT ); Tue, 5 Feb 2019 12:36:33 -0500 Received: by mail-it1-f202.google.com with SMTP id v188so6932329ita.0 for ; Tue, 05 Feb 2019 09:36:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=wgPnngCV7GNBF2jc4rCeaC8Km0khjx0cqgpwvGz9D+I=; b=wTn7yb1Vl01LoAfI/BbxLxXtGyb1/v74DPZ+OZd8BqWkPt+2/wR+zeQzzvrDwEI2nO EXfHOVkvEv6zUyXETdHrYsyLvG7eMpcJJEyye3OJSwpZbfEO0sbWOKSxaQdAO7YlURXT XgaqUbm+sZdt/Kbikp/MRxYst8MSSHSSovxYMXxxBdY+LELXzfJBRoDVV06gmwuVZ1sN 8LBRqfuvnqkY0a8M5Akmm7f/VnVPbrpDYVwlhoXwLJ4WIqwfkZbkpN5Ywz5qv8L8DNIG bpvvKiPOpVQC0RfVbg6zpfMSFGx+yCfA4V/1vp5zDON2t6WFe97XR/7bCS0kbFyStdL+ TyxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=wgPnngCV7GNBF2jc4rCeaC8Km0khjx0cqgpwvGz9D+I=; b=EJyL4o/rTrgCkn8dazPuz254gL/Z6OfTu1yRSrygDZG/y5ptJXbKNbS5wrtwuZnzKM bsWSexlebZ5wrw32xD6geKvn3YCDQN0pQo+xwD91gN0GS6QK9P0kA2p0v50DoAG4/i+E w3bGlKHpOl7rUqS9d4A7aa9F9jgcCJsNj+M8KtZM14HsGDk3TBVxHrOIoLKGkAu/wYex rztFPlxAhqFRO9Nax5/VD/CiSfXwlOcbNeHZZcR84/mkXtxSZcDyW2qxclWTQJDrN7Ou WKs5CCUqBtDuj0uFnS6FAHlgkJBklD8BUXbM3h9FJH52aRUVX/Jk5E6T7vmOGwXQmXE3 sHcQ== X-Gm-Message-State: AHQUAubSQvsEX8cfraIp6XmKNfi3XPq9v2tX2wzYpm3d5BbIsiAY/adD S9lByEZs7vQRhTkh49WTdhFGMMNKsuQyazC6qe79CvU0mAnWXRN7kt3w7+83cGAdzh9x8ymumt6 daESr63ROxyKotqMOUKH2PANVurR4t7jJGR2YLDeVajXbUXoqOXIErg== X-Google-Smtp-Source: AHgI3IYK3amtzC3Ncgmixf6dMGtWzozBMK3kIti4KE8XNLBc6RnjMneeMPep8NzMaIgzEjKKpVmvc9s= X-Received: by 2002:a24:93:: with SMTP id 141mr3696493ita.17.1549388192508; Tue, 05 Feb 2019 09:36:32 -0800 (PST) Date: Tue, 5 Feb 2019 09:36:22 -0800 Message-Id: <20190205173629.160717-1-sdf@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.20.1.611.gfbb209baf1-goog Subject: [RFC bpf-next 0/7] net: flow_dissector: trigger BPF hook when called from eth_get_headlen From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, simon.horman@netronome.com, willemb@google.com, Stanislav Fomichev Content-Type: text/plain; charset="UTF-8" Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Currently, when eth_get_headlen calls flow dissector, it doesn't pass any skb. Because we use passed skb to lookup associated networking namespace to find whether we have a BPF program attached or not, we always use C-based flow dissector in this case. The goal of this patch series is to add new networking namespace argument to the eth_get_headlen and make BPF flow dissector programs be able to work in the skb-less case. The series goes like this: 1. introduce __init_skb and __init_skb_shinfo; those will be used to initialize temporary skb 2. introduce skb_net which can be used to get networking namespace associated with an skb 3. add new optional network namespace argument to __skb_flow_dissect and plumb through the callers 4. add new __flow_bpf_dissect which constructs temporary on-stack skb (using __init_skb) and calls BPF flow dissector program 5. convert flow dissector BPF_PROG_TEST_RUN to skb-less mode to show that it works 6. add selftest that makes sure going over the packet bounds in bpf_skb_load_bytes with on-stack skb doesn't cause any problems 7. add new net namespace argument go eth_get_headlen and convert the callers Stanislav Fomichev (7): net: introduce __init_skb and __init_skb_shinfo helpers net: introduce skb_net helper net: plumb network namespace into __skb_flow_dissect net: flow_dissector: handle no-skb use case bpf: when doing BPF_PROG_TEST_RUN for flow dissector use no-skb mode selftests/bpf: add flow dissector bpf_skb_load_bytes helper test net: flow_dissector: pass net argument to the eth_get_headlen drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_enet.c | 3 +- .../net/ethernet/hisilicon/hns3/hns3_enet.c | 3 +- drivers/net/ethernet/intel/fm10k/fm10k_main.c | 2 +- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 3 +- drivers/net/ethernet/intel/iavf/iavf_txrx.c | 2 +- drivers/net/ethernet/intel/ice/ice_txrx.c | 2 +- drivers/net/ethernet/intel/igb/igb_main.c | 2 +- drivers/net/ethernet/intel/igc/igc_main.c | 2 +- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 +- .../net/ethernet/intel/ixgbevf/ixgbevf_main.c | 3 +- .../net/ethernet/mellanox/mlx5/core/en_tx.c | 3 +- drivers/net/tun.c | 3 +- include/linux/etherdevice.h | 2 +- include/linux/skbuff.h | 23 +++- net/bpf/test_run.c | 52 +++------ net/core/flow_dissector.c | 105 +++++++++++++----- net/core/skbuff.c | 78 +++++++------ net/ethernet/eth.c | 8 +- tools/testing/selftests/bpf/test_progs.c | 49 ++++++++ 20 files changed, 227 insertions(+), 122 deletions(-) -- 2.20.1.611.gfbb209baf1-goog