From patchwork Tue Jan 16 00:30:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861145 X-Patchwork-Delegate: bpf@iogearbox.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="VSMKzlG2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB402gj0z9sNc for ; Tue, 16 Jan 2018 11:31:44 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750825AbeAPAbj (ORCPT ); Mon, 15 Jan 2018 19:31:39 -0500 Received: from mail-pl0-f68.google.com ([209.85.160.68]:37472 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750807AbeAPAbh (ORCPT ); Mon, 15 Jan 2018 19:31:37 -0500 Received: by mail-pl0-f68.google.com with SMTP id s3so4837413plp.4 for ; Mon, 15 Jan 2018 16:31:36 -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:in-reply-to:references; bh=4CGMJmdCoKzaaTT9Do13E2miJuFMbljZBmcLPtznu0M=; b=VSMKzlG2Gvn+9bvkmiEVEjes62ykV4PWpBVZ4EgoUQyKZ3+PZ/sUQZoGHLkcxro2hl hclAH3WL2hKWVXQ11Dgfrfo2Fu5b/q552rMaQOy/PJyjWuOwbkuTAmeMYnZUclk1DxsY xui4XAC00QKZA4/tasR9UzTCxnifV3nlasc5vhIE89no1KiyK6RWJMh7kBQbQ12LUeWM xU/qxyleUxGGxvHeCLEYgozQXKf+NDSazVx89duQVdI97pPm2mKKDSEEwWfF1JIDuPyR /5O+3qRLEQDJemS5nz80nDg4ox+DZE2Nb4MbDQBsnJY43vRhhcq65U9/CvLz83Y7zrtc kDJg== 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:in-reply-to :references; bh=4CGMJmdCoKzaaTT9Do13E2miJuFMbljZBmcLPtznu0M=; b=KXS5ZOLmghdTBoAeU/2EaBw/QqQT8M2gSx5QRnsqcXfZzUjG6G2fTQRro5iweoglYa pm6W2iXttN1xlbTIYXkUdAluaQUu+N5lVyXD5Dx37BoTIKgsfJ40SF0Ifhq4UOL4nLUw Bq1fApl0dTJX80feEPXchvc0iURItZWpFuCuhV/3e7qMryCMwJ7lPV4WjoM/lVdrkgEd Vg/5DNojWts1t1T7AbaBg5dCdhjjLzvFVZu6+qT5aIiIOxFJ0hXI6Ir2Lm0LnchqWNo7 s1Xco+i1Xz183FghOF7L0+AACZQZkxLLd9zRy9kizUrLcQK5Z1DjVvQTuYPOmIEtQ2nf O7YQ== X-Gm-Message-State: AKwxytfGKNDiHmX3E9NAnTk8n/r7mS2aimMoJXnnIfwznsUglgeWWz+M owdvcgo2WUuzoIALp9X5d4OhJA== X-Google-Smtp-Source: ACJfBosbp/TA/wV8tBZ5mVg9Zl3Y9e0zCoigdbFk73s0bvYEg4Lk9MmCgygNK/f+yzU8ydmFrpNgPw== X-Received: by 10.84.164.199 with SMTP id l7mr2912694plg.268.1516062696404; Mon, 15 Jan 2018 16:31:36 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:35 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 01/11] net: sched: add extack support to change() classifier operation Date: Mon, 15 Jan 2018 16:30:17 -0800 Message-Id: <20180116003027.9405-2-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Add an extra argument to `->change()` operation for passing a pointer to a struct netlink_ext_ack. Update the operation for all classifiers accordingly. Extack is not used at this point. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- include/net/sch_generic.h | 3 ++- net/sched/cls_api.c | 3 ++- net/sched/cls_basic.c | 3 ++- net/sched/cls_bpf.c | 2 +- net/sched/cls_cgroup.c | 3 ++- net/sched/cls_flow.c | 2 +- net/sched/cls_flower.c | 2 +- net/sched/cls_fw.c | 2 +- net/sched/cls_matchall.c | 2 +- net/sched/cls_route.c | 3 ++- net/sched/cls_rsvp.h | 2 +- net/sched/cls_tcindex.c | 3 ++- net/sched/cls_u32.c | 3 ++- 13 files changed, 20 insertions(+), 13 deletions(-) diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index ac029d5d88e4..5e77f2639c67 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -232,7 +232,8 @@ struct tcf_proto_ops { int (*change)(struct net *net, struct sk_buff *, struct tcf_proto*, unsigned long, u32 handle, struct nlattr **, - void **, bool); + void **, bool, + struct netlink_ext_ack *); int (*delete)(struct tcf_proto*, void *, bool*); void (*walk)(struct tcf_proto*, struct tcf_walker *arg); void (*bind_class)(void *, u32, unsigned long); diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 6708b6953bfa..0460cc22d48c 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -912,7 +912,8 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, } err = tp->ops->change(net, skb, tp, cl, t->tcm_handle, tca, &fh, - n->nlmsg_flags & NLM_F_CREATE ? TCA_ACT_NOREPLACE : TCA_ACT_REPLACE); + n->nlmsg_flags & NLM_F_CREATE ? TCA_ACT_NOREPLACE : TCA_ACT_REPLACE, + extack); if (err == 0) { if (tp_created) tcf_chain_tp_insert(chain, &chain_info, tp); diff --git a/net/sched/cls_basic.c b/net/sched/cls_basic.c index 5f169ded347e..2cc38cd71938 100644 --- a/net/sched/cls_basic.c +++ b/net/sched/cls_basic.c @@ -175,7 +175,8 @@ static int basic_set_parms(struct net *net, struct tcf_proto *tp, static int basic_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, - struct nlattr **tca, void **arg, bool ovr) + struct nlattr **tca, void **arg, bool ovr, + struct netlink_ext_ack *extack) { int err; struct basic_head *head = rtnl_dereference(tp->root); diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c index 8d78e7f4ecc3..fcb831b3917e 100644 --- a/net/sched/cls_bpf.c +++ b/net/sched/cls_bpf.c @@ -449,7 +449,7 @@ static int cls_bpf_set_parms(struct net *net, struct tcf_proto *tp, static int cls_bpf_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, struct nlattr **tca, - void **arg, bool ovr) + void **arg, bool ovr, struct netlink_ext_ack *extack) { struct cls_bpf_head *head = rtnl_dereference(tp->root); struct cls_bpf_prog *oldprog = *arg; diff --git a/net/sched/cls_cgroup.c b/net/sched/cls_cgroup.c index 309d5899265f..b74af0b55820 100644 --- a/net/sched/cls_cgroup.c +++ b/net/sched/cls_cgroup.c @@ -91,7 +91,8 @@ static void cls_cgroup_destroy_rcu(struct rcu_head *root) static int cls_cgroup_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, struct nlattr **tca, - void **arg, bool ovr) + void **arg, bool ovr, + struct netlink_ext_ack *extack) { struct nlattr *tb[TCA_CGROUP_MAX + 1]; struct cls_cgroup_head *head = rtnl_dereference(tp->root); diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c index 25c2a888e1f0..e944f01d5394 100644 --- a/net/sched/cls_flow.c +++ b/net/sched/cls_flow.c @@ -401,7 +401,7 @@ static void flow_destroy_filter(struct rcu_head *head) static int flow_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, struct nlattr **tca, - void **arg, bool ovr) + void **arg, bool ovr, struct netlink_ext_ack *extack) { struct flow_head *head = rtnl_dereference(tp->root); struct flow_filter *fold, *fnew; diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 6132a7317efa..998ee4faf934 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -852,7 +852,7 @@ static int fl_set_parms(struct net *net, struct tcf_proto *tp, static int fl_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, struct nlattr **tca, - void **arg, bool ovr) + void **arg, bool ovr, struct netlink_ext_ack *extack) { struct cls_fl_head *head = rtnl_dereference(tp->root); struct cls_fl_filter *fold = *arg; diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c index 20f0de1a960a..72784491ce20 100644 --- a/net/sched/cls_fw.c +++ b/net/sched/cls_fw.c @@ -257,7 +257,7 @@ static int fw_set_parms(struct net *net, struct tcf_proto *tp, static int fw_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, struct nlattr **tca, void **arg, - bool ovr) + bool ovr, struct netlink_ext_ack *extack) { struct fw_head *head = rtnl_dereference(tp->root); struct fw_filter *f = *arg; diff --git a/net/sched/cls_matchall.c b/net/sched/cls_matchall.c index 66d4e0099158..dc3c57116bbd 100644 --- a/net/sched/cls_matchall.c +++ b/net/sched/cls_matchall.c @@ -159,7 +159,7 @@ static int mall_set_parms(struct net *net, struct tcf_proto *tp, static int mall_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, struct nlattr **tca, - void **arg, bool ovr) + void **arg, bool ovr, struct netlink_ext_ack *extack) { struct cls_mall_head *head = rtnl_dereference(tp->root); struct nlattr *tb[TCA_MATCHALL_MAX + 1]; diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c index ac9a5b8825b9..bf305db65de0 100644 --- a/net/sched/cls_route.c +++ b/net/sched/cls_route.c @@ -471,7 +471,8 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp, static int route4_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, - struct nlattr **tca, void **arg, bool ovr) + struct nlattr **tca, void **arg, bool ovr, + struct netlink_ext_ack *extack) { struct route4_head *head = rtnl_dereference(tp->root); struct route4_filter __rcu **fp; diff --git a/net/sched/cls_rsvp.h b/net/sched/cls_rsvp.h index cf325625c99d..d1f67529c01d 100644 --- a/net/sched/cls_rsvp.h +++ b/net/sched/cls_rsvp.h @@ -486,7 +486,7 @@ static int rsvp_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, struct nlattr **tca, - void **arg, bool ovr) + void **arg, bool ovr, struct netlink_ext_ack *extack) { struct rsvp_head *data = rtnl_dereference(tp->root); struct rsvp_filter *f, *nfp; diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c index 67467ae24c97..0ec84cf2d6b7 100644 --- a/net/sched/cls_tcindex.c +++ b/net/sched/cls_tcindex.c @@ -520,7 +520,8 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, static int tcindex_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, - struct nlattr **tca, void **arg, bool ovr) + struct nlattr **tca, void **arg, bool ovr, + struct netlink_ext_ack *extack) { struct nlattr *opt = tca[TCA_OPTIONS]; struct nlattr *tb[TCA_TCINDEX_MAX + 1]; diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 507859cdd1cb..3ef5c32741c1 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -892,7 +892,8 @@ static struct tc_u_knode *u32_init_knode(struct tcf_proto *tp, static int u32_change(struct net *net, struct sk_buff *in_skb, struct tcf_proto *tp, unsigned long base, u32 handle, - struct nlattr **tca, void **arg, bool ovr) + struct nlattr **tca, void **arg, bool ovr, + struct netlink_ext_ack *extack) { struct tc_u_common *tp_c = tp->data; struct tc_u_hnode *ht; From patchwork Tue Jan 16 00:30:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861154 X-Patchwork-Delegate: bpf@iogearbox.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="aAkQI14D"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB4q12mpz9sCZ for ; Tue, 16 Jan 2018 11:32:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751175AbeAPAc0 (ORCPT ); Mon, 15 Jan 2018 19:32:26 -0500 Received: from mail-pl0-f68.google.com ([209.85.160.68]:45205 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750716AbeAPAbi (ORCPT ); Mon, 15 Jan 2018 19:31:38 -0500 Received: by mail-pl0-f68.google.com with SMTP id p5so4838272plo.12 for ; Mon, 15 Jan 2018 16:31:37 -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:in-reply-to:references; bh=OfKyYLKTHgLf3ctR5gtGf8/3BaJVMeytO3bTJxdyglE=; b=aAkQI14Dq77nj7PDkZRWBwCTle+Ykzzk0IFRq7dJzQMNC6WSirNuIOch/UVYBv+N+2 mS1ucMSoHI6kJzl5cXaCx2MILT5eF8k2Zpngs5yZcdAQdNFWhAEQrB0Pae0hCoe1CptB ep25K7vKDGDNQxUKS2TUjLYyPuts3Il8ZuEvYgufjPBSPKrsAFvmDj5cDR1VcclN0UOo i5GAvBktAw3N5r94X0e7s09S7Lm/nE/LhKNVCNbPkdpPJFPWjtH/QFkOmZp6gAPv2hhH TaHM+jQojjbPsdZS/uc1Ceb02GHBu7Lzp+xOxSLdNxDOiUXIZ3skqOy4h7k2jCcH6eXf 0EdA== 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:in-reply-to :references; bh=OfKyYLKTHgLf3ctR5gtGf8/3BaJVMeytO3bTJxdyglE=; b=ECVbEXuqvvbhIYrpLg0cHzH92SN7KBdASd8iiiIKGQkK9oyz2d7POlH7CvW9Xe3g8l QtG13KjCxshXDhn2XiDF2WfhCSmtQYggJxN7juUa0jxThTqcENdaWEyLl+dQi4rKKDWM nyaLuUKV5S6fJv2aOdqW40r2aE7tK+A2T2IwiYWoLpORNweISJg49a31oKeOSc2KMrvE YJ0Lp5JvJn56vGUfo3tbqbUkoi7LL3MW+fdfY/CkJtxhiKubGFs6fUZIo3o87wRXoVZW rX4EuusHsn04vbvyVXwnDsVNSA2182pQaJkSzQzqDXWxpJREn9M5Aa5pjfeE3MyMhCGf 7S+w== X-Gm-Message-State: AKGB3mKLv7JGuiR1K0GxrpnkNnDE+llHMtuqM9dOqTtn1mrqtkCm8LlX 6LFCCrU1a7Tiy3CdSeJQc7Op4A== X-Google-Smtp-Source: ACJfBosRjPI8Q5nHb3QktWhigIEBT4MAvdk3y+RTMAlwV5XAesy67gd04mcbzb5B6tOtk0T6VDHPRw== X-Received: by 10.159.244.3 with SMTP id x3mr37368770plr.192.1516062697483; Mon, 15 Jan 2018 16:31:37 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:36 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 02/11] net: sched: prepare extack support for offload via tc_cls_common_offload Date: Mon, 15 Jan 2018 16:30:18 -0800 Message-Id: <20180116003027.9405-3-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Prepare for extack support for hardware offload of classifiers. In order to achieve this, a pointer to a struct netlink_ext_ack is added to the struct tc_cls_common_offload that is passed to the callback for setting up the classifier. Function tc_cls_common_offload_init() is updated to support initialization of this new attribute. Extack plumbing is not complete yet. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- include/net/pkt_cls.h | 5 ++++- net/sched/cls_bpf.c | 4 ++-- net/sched/cls_flower.c | 6 +++--- net/sched/cls_matchall.c | 4 ++-- net/sched/cls_u32.c | 8 ++++---- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index 0d1343cba84c..c88c61234cb3 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -590,15 +590,18 @@ struct tc_cls_common_offload { u32 chain_index; __be16 protocol; u32 prio; + struct netlink_ext_ack *extack; }; static inline void tc_cls_common_offload_init(struct tc_cls_common_offload *cls_common, - const struct tcf_proto *tp) + const struct tcf_proto *tp, + struct netlink_ext_ack *extack) { cls_common->chain_index = tp->chain->index; cls_common->protocol = tp->protocol; cls_common->prio = tp->prio; + cls_common->extack = extack; } struct tc_cls_u32_knode { diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c index fcb831b3917e..b8729124d209 100644 --- a/net/sched/cls_bpf.c +++ b/net/sched/cls_bpf.c @@ -158,7 +158,7 @@ static int cls_bpf_offload_cmd(struct tcf_proto *tp, struct cls_bpf_prog *prog, skip_sw = prog && tc_skip_sw(prog->gen_flags); obj = prog ?: oldprog; - tc_cls_common_offload_init(&cls_bpf.common, tp); + tc_cls_common_offload_init(&cls_bpf.common, tp, NULL); cls_bpf.command = TC_CLSBPF_OFFLOAD; cls_bpf.exts = &obj->exts; cls_bpf.prog = prog ? prog->filter : NULL; @@ -215,7 +215,7 @@ static void cls_bpf_offload_update_stats(struct tcf_proto *tp, struct tcf_block *block = tp->chain->block; struct tc_cls_bpf_offload cls_bpf = {}; - tc_cls_common_offload_init(&cls_bpf.common, tp); + tc_cls_common_offload_init(&cls_bpf.common, tp, NULL); cls_bpf.command = TC_CLSBPF_STATS; cls_bpf.exts = &prog->exts; cls_bpf.prog = prog->filter; diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 998ee4faf934..f1640a98a3d2 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -223,7 +223,7 @@ static void fl_hw_destroy_filter(struct tcf_proto *tp, struct cls_fl_filter *f) struct tc_cls_flower_offload cls_flower = {}; struct tcf_block *block = tp->chain->block; - tc_cls_common_offload_init(&cls_flower.common, tp); + tc_cls_common_offload_init(&cls_flower.common, tp, NULL); cls_flower.command = TC_CLSFLOWER_DESTROY; cls_flower.cookie = (unsigned long) f; @@ -241,7 +241,7 @@ static int fl_hw_replace_filter(struct tcf_proto *tp, bool skip_sw = tc_skip_sw(f->flags); int err; - tc_cls_common_offload_init(&cls_flower.common, tp); + tc_cls_common_offload_init(&cls_flower.common, tp, NULL); cls_flower.command = TC_CLSFLOWER_REPLACE; cls_flower.cookie = (unsigned long) f; cls_flower.dissector = dissector; @@ -270,7 +270,7 @@ static void fl_hw_update_stats(struct tcf_proto *tp, struct cls_fl_filter *f) struct tc_cls_flower_offload cls_flower = {}; struct tcf_block *block = tp->chain->block; - tc_cls_common_offload_init(&cls_flower.common, tp); + tc_cls_common_offload_init(&cls_flower.common, tp, NULL); cls_flower.command = TC_CLSFLOWER_STATS; cls_flower.cookie = (unsigned long) f; cls_flower.exts = &f->exts; diff --git a/net/sched/cls_matchall.c b/net/sched/cls_matchall.c index dc3c57116bbd..24bec37e9747 100644 --- a/net/sched/cls_matchall.c +++ b/net/sched/cls_matchall.c @@ -76,7 +76,7 @@ static void mall_destroy_hw_filter(struct tcf_proto *tp, struct tc_cls_matchall_offload cls_mall = {}; struct tcf_block *block = tp->chain->block; - tc_cls_common_offload_init(&cls_mall.common, tp); + tc_cls_common_offload_init(&cls_mall.common, tp, NULL); cls_mall.command = TC_CLSMATCHALL_DESTROY; cls_mall.cookie = cookie; @@ -92,7 +92,7 @@ static int mall_replace_hw_filter(struct tcf_proto *tp, bool skip_sw = tc_skip_sw(head->flags); int err; - tc_cls_common_offload_init(&cls_mall.common, tp); + tc_cls_common_offload_init(&cls_mall.common, tp, NULL); cls_mall.command = TC_CLSMATCHALL_REPLACE; cls_mall.exts = &head->exts; cls_mall.cookie = cookie; diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 3ef5c32741c1..8127b15d8d50 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -491,7 +491,7 @@ static void u32_clear_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h) struct tcf_block *block = tp->chain->block; struct tc_cls_u32_offload cls_u32 = {}; - tc_cls_common_offload_init(&cls_u32.common, tp); + tc_cls_common_offload_init(&cls_u32.common, tp, NULL); cls_u32.command = TC_CLSU32_DELETE_HNODE; cls_u32.hnode.divisor = h->divisor; cls_u32.hnode.handle = h->handle; @@ -509,7 +509,7 @@ static int u32_replace_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h, bool offloaded = false; int err; - tc_cls_common_offload_init(&cls_u32.common, tp); + tc_cls_common_offload_init(&cls_u32.common, tp, NULL); cls_u32.command = TC_CLSU32_NEW_HNODE; cls_u32.hnode.divisor = h->divisor; cls_u32.hnode.handle = h->handle; @@ -534,7 +534,7 @@ static void u32_remove_hw_knode(struct tcf_proto *tp, u32 handle) struct tcf_block *block = tp->chain->block; struct tc_cls_u32_offload cls_u32 = {}; - tc_cls_common_offload_init(&cls_u32.common, tp); + tc_cls_common_offload_init(&cls_u32.common, tp, NULL); cls_u32.command = TC_CLSU32_DELETE_KNODE; cls_u32.knode.handle = handle; @@ -549,7 +549,7 @@ static int u32_replace_hw_knode(struct tcf_proto *tp, struct tc_u_knode *n, bool skip_sw = tc_skip_sw(flags); int err; - tc_cls_common_offload_init(&cls_u32.common, tp); + tc_cls_common_offload_init(&cls_u32.common, tp, NULL); cls_u32.command = TC_CLSU32_REPLACE_KNODE; cls_u32.knode.handle = n->handle; cls_u32.knode.fshift = n->fshift; From patchwork Tue Jan 16 00:30:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861155 X-Patchwork-Delegate: bpf@iogearbox.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="yIPFnbHv"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB4v6ZSSz9sCZ for ; Tue, 16 Jan 2018 11:32:31 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751139AbeAPAcY (ORCPT ); Mon, 15 Jan 2018 19:32:24 -0500 Received: from mail-pl0-f65.google.com ([209.85.160.65]:37475 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750811AbeAPAbi (ORCPT ); Mon, 15 Jan 2018 19:31:38 -0500 Received: by mail-pl0-f65.google.com with SMTP id s3so4837469plp.4 for ; Mon, 15 Jan 2018 16:31:38 -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:in-reply-to:references; bh=q7kQZOuzPHqUOVuyY7nN20wVa4I8EZQd97Js3rKc6zE=; b=yIPFnbHvTPgOY/DVy+1V1IVIFFMuM8najXjEvv83JnXPcnO/kir6bN02xsFfCVcL9b WrlMPDUBh16mivi6JN9hBvyWjTPlxvcABfDNxuX9aJwy/Eu8AgMCMkQo+rkLlmoQWpRq eSyg5gFNL5/DU+V6nnIw7w/zfoY1GKPLdILJaUbe9M/B6v8uxzbWdc3WO1lMZKa1l3RL E/ajnECz0U6qEk2xkfQgjxUuzDYxxOtV9YKFWlScwZiD7FZGUrWQcnKthVuOWcm01lh7 kafeaABKD1Q4GYPNM5HMODjZ1dQ/qiIAV/VeVY7rGGs/Zb4O+JC9Qsl229jJZavNg8/V 4SKg== 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:in-reply-to :references; bh=q7kQZOuzPHqUOVuyY7nN20wVa4I8EZQd97Js3rKc6zE=; b=MmskZKOlErCS3VzAbZJt7Oi0Ng+CO+hlK63Z8rGEbzWFTA25N0N3hwYcNVWELWiVzV UnK1ztHQ7wcma4cNste0lqOofYq0669rTsQvoQ+KOM0PqSj1AJlyVbOOXqR8Th8nzoWV m9gaeKY8YSdyYS7EuRXvYUXacW2O/ceT/pYyNkN+eFHaU6XQAv+bw9qbNJjMnOJSOhP4 t+2x1hzn5cQt6bVlGZs5XexVFtHEof6GxaUum4JOGz0XLbh+eSblx6sNuXF+1S3ihdGX fVzt+fYAz3kwQkT8CUoZYcdmFtLNoKcVWBN82x0tqjEDcvD5I/SrXfdqr52i+uJTyrz1 Iblg== X-Gm-Message-State: AKwxytdLYzZUKTnq0wtKNqOg2z9nRnyhsdADpdkZ3aHTad7cHQSW+f6K RAhl+Bj64Vu9vFboUT/we511+g== X-Google-Smtp-Source: ACJfBouU6qqYGiBC7RxtGpdtonuBbYqHk4rLwlu6+xrObsGo63TQqEKZxyG7GT+F0wBJyLAIgBQAGQ== X-Received: by 10.159.196.140 with SMTP id c12mr9485902plo.329.1516062698504; Mon, 15 Jan 2018 16:31:38 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:38 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 03/11] net: sched: cls_flower: propagate extack support for filter offload Date: Mon, 15 Jan 2018 16:30:19 -0800 Message-Id: <20180116003027.9405-4-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Propagate the extack pointer from the `->change()` classifier operation to the function used for filter replacement in cls_flower, and feed it to tc_cls_common_offload_init(). This makes it possible to use netlink extack messages in the future at replacement time for this filter, although it is not used at this point. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- net/sched/cls_flower.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index f1640a98a3d2..fe7d96d12435 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -234,14 +234,15 @@ static void fl_hw_destroy_filter(struct tcf_proto *tp, struct cls_fl_filter *f) static int fl_hw_replace_filter(struct tcf_proto *tp, struct flow_dissector *dissector, struct fl_flow_key *mask, - struct cls_fl_filter *f) + struct cls_fl_filter *f, + struct netlink_ext_ack *extack) { struct tc_cls_flower_offload cls_flower = {}; struct tcf_block *block = tp->chain->block; bool skip_sw = tc_skip_sw(f->flags); int err; - tc_cls_common_offload_init(&cls_flower.common, tp, NULL); + tc_cls_common_offload_init(&cls_flower.common, tp, extack); cls_flower.command = TC_CLSFLOWER_REPLACE; cls_flower.cookie = (unsigned long) f; cls_flower.dissector = dissector; @@ -939,7 +940,8 @@ static int fl_change(struct net *net, struct sk_buff *in_skb, err = fl_hw_replace_filter(tp, &head->dissector, &mask.key, - fnew); + fnew, + extack); if (err) goto errout_idr; } From patchwork Tue Jan 16 00:30:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861151 X-Patchwork-Delegate: bpf@iogearbox.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="e5YZqniq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB4V5q4Nz9sCZ for ; Tue, 16 Jan 2018 11:32:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750861AbeAPAbn (ORCPT ); Mon, 15 Jan 2018 19:31:43 -0500 Received: from mail-pl0-f66.google.com ([209.85.160.66]:34133 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750826AbeAPAbk (ORCPT ); Mon, 15 Jan 2018 19:31:40 -0500 Received: by mail-pl0-f66.google.com with SMTP id d21so4828873pll.1 for ; Mon, 15 Jan 2018 16:31:39 -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:in-reply-to:references; bh=c+9e7hDr2GwVafaUIVVO4kkNbxdML5jUemZ2OYPLteo=; b=e5YZqniq7Xx420P1IjGoAlywEr8icugX6YWEwTpcWC+P5vhpM+X2bRq+G4zKTXi73X Z4PkJr/tlnd9gr3F2pCXNIWCJ33IbwHyoJp4YslhnwYthQgzNNKuYQmaGankgBFirE63 P8PeXk5l4GMRliUFA4wWrUbnba5DTNZ0y7iBEXp4gftHCW6CzMSMk/gpK0fQ5UirTYc9 9qToYyLGIGwlliyo4SL8YzXHIWBuGh1pVTppmgshNAgk5eG1g77drPc/zdsTBqdR3rQ7 zr1KJnN8Eh25JNMu3dnAcZ+6siZxWDOwitDb/9Yk4c8l0IxlVpKvmCtkVlSC3t8WnUXq h4MQ== 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:in-reply-to :references; bh=c+9e7hDr2GwVafaUIVVO4kkNbxdML5jUemZ2OYPLteo=; b=B1TyJqjIwbAbDrJztJ9tjr8RyQw5LdZkkJlbmCvb7LbJABSvgu/WcgcuecIuHRnUlu UhW25GGIA1426mzsOQPWhHRe3tsNeWtMG2/1ToPCCA4mLmvqgTqOmhbxp31UQ6Dzy1EA qAX6cfhiy2XVgHNse78V4lKFkjJgD0X/4tAujxJsCOdqbA5bU+74Y2mGmrYGDVNe2NF8 AjM/EKoZ9lATrbSRudiwYbvNi23UyOTu/FC6gQ1F2ZlcZvXDlEOvgO9uOBRnUwuLBe8q bVhYoQaWNuSh+rxCDo5noaEfmgm/HKn4+vHAbqPhdDfC4mn2ar0BQuxA2mTd66csQA5R 0crQ== X-Gm-Message-State: AKGB3mLCEfVLVUVU1nYbRFVu/RmPXNKbSAhDswqeFp5XsQelVDlYiRC5 mx92Ax1BlH4TPhIjQznF5iC9Sw== X-Google-Smtp-Source: ACJfBotkqCHHJakgPsA2p44r9/fsSR+D4W6BuxsdwwcjgTKmbrFoPgstTw4i6lkGxe263ybTx+szpQ== X-Received: by 10.84.246.21 with SMTP id k21mr37308579pll.174.1516062699553; Mon, 15 Jan 2018 16:31:39 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:39 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 04/11] net: sched: cls_matchall: propagate extack support for filter offload Date: Mon, 15 Jan 2018 16:30:20 -0800 Message-Id: <20180116003027.9405-5-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Propagate the extack pointer from the `->change()` classifier operation to the function used for filter replacement in cls_matchall, and feed it to tc_cls_common_offload_init(). This makes it possible to use netlink extack messages in the future at replacement time for this filter, although it is not used at this point. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- net/sched/cls_matchall.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/net/sched/cls_matchall.c b/net/sched/cls_matchall.c index 24bec37e9747..fe6b673db5c6 100644 --- a/net/sched/cls_matchall.c +++ b/net/sched/cls_matchall.c @@ -85,14 +85,15 @@ static void mall_destroy_hw_filter(struct tcf_proto *tp, static int mall_replace_hw_filter(struct tcf_proto *tp, struct cls_mall_head *head, - unsigned long cookie) + unsigned long cookie, + struct netlink_ext_ack *extack) { struct tc_cls_matchall_offload cls_mall = {}; struct tcf_block *block = tp->chain->block; bool skip_sw = tc_skip_sw(head->flags); int err; - tc_cls_common_offload_init(&cls_mall.common, tp, NULL); + tc_cls_common_offload_init(&cls_mall.common, tp, extack); cls_mall.command = TC_CLSMATCHALL_REPLACE; cls_mall.exts = &head->exts; cls_mall.cookie = cookie; @@ -202,7 +203,8 @@ static int mall_change(struct net *net, struct sk_buff *in_skb, goto err_set_parms; if (!tc_skip_hw(new->flags)) { - err = mall_replace_hw_filter(tp, new, (unsigned long) new); + err = mall_replace_hw_filter(tp, new, (unsigned long)new, + extack); if (err) goto err_replace_hw_filter; } From patchwork Tue Jan 16 00:30:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861149 X-Patchwork-Delegate: bpf@iogearbox.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="RRX5divB"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB4L41ZXz9sCZ for ; Tue, 16 Jan 2018 11:32:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750903AbeAPAbp (ORCPT ); Mon, 15 Jan 2018 19:31:45 -0500 Received: from mail-pl0-f68.google.com ([209.85.160.68]:38282 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750827AbeAPAbl (ORCPT ); Mon, 15 Jan 2018 19:31:41 -0500 Received: by mail-pl0-f68.google.com with SMTP id 13so4825683plb.5 for ; Mon, 15 Jan 2018 16:31:40 -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:in-reply-to:references; bh=zceKFhbdDRORUL5R6pG4i4LeBJxbznKyT1GHEKFRXzw=; b=RRX5divB0l/pM3isoTUgfGunYesckM550i6p2n6vEwxOWP/OVGz52Yne5hFtpWZyNH kGSPXJ1/vsth/6d5jXC14fTCiqvRnjNlEGy2rIH6GcTn0tVHVDEg3QC7v7LIMcwpgBYB k/FwZWp+zlDoiJ7QejV6tvUlOavuHM80ZAdgiuSOHGudF+E7VKFU2cHRR6IhjAKR9pTZ 8AbP2SmOc3VAP5KyKkfUEaOkRwuWNN90DL19PaoIkSPEHQHPtIoas5qGIiyHWGmjzTiY hUbUaEROErPVgDF/gk9iw3rraixx6NCXJrA8bUMWopPl/rugnI+X3shRya3Vwr6LBGNH R59g== 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:in-reply-to :references; bh=zceKFhbdDRORUL5R6pG4i4LeBJxbznKyT1GHEKFRXzw=; b=FG97Hnp2A8ZVX2H6VJ2J8Uu2vy80SWtO5hpMOCYZQjGz/Snnr1e+jqERbx1nY43Dbb rUIwvBEWFlgSaWDMpo6h1HHv/Q64F3U/I92LYY+JwrgryAtP+4Uyc4sxIn7MQGvpuRrm umE4Jr0bGUXor18zdiMcMpgyj3OESpkMAkHvrA68VJGOtjZwmLzNZ/+AlnrxyumxpLga pPzPWIMj4Lw2sL806dQY93AC1TluT/jPkbk+qGdabgBIqbQ+JacLrvG4BZ/V1pU7swCY UjmuhLd2++UXx7f54IKPiqK/DRBq5ofIlunRwoaY5MdJK9rSj1+lhm9/2AQ9snH4Z/te rtiw== X-Gm-Message-State: AKwxytfF19Mqazv8jsSz9fRkGOOWoYB5mTtVh7DMh65KV99WRbHOhAlz zgslYxSnLUANPx3Q9odYJt3Wpw== X-Google-Smtp-Source: ACJfBovz9owXtUjM4hfHZCuFEkOJvEhj3VX1Mxe8+hNBa3VY0x0YzEQdV2yL6n34j6yOOCz5ohhqSQ== X-Received: by 10.84.248.131 with SMTP id q3mr17302223pll.5.1516062700548; Mon, 15 Jan 2018 16:31:40 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:40 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 05/11] net: sched: cls_u32: propagate extack support for filter offload Date: Mon, 15 Jan 2018 16:30:21 -0800 Message-Id: <20180116003027.9405-6-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Propagate the extack pointer from the `->change()` classifier operation to the function used for filter replacement in cls_u32, and feed it to tc_cls_common_offload_init(). This makes it possible to use netlink extack messages in the future at replacement time for this filter, although it is not used at this point. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- net/sched/cls_u32.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 8127b15d8d50..ef1b746de80b 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -501,7 +501,7 @@ static void u32_clear_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h) } static int u32_replace_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h, - u32 flags) + u32 flags, struct netlink_ext_ack *extack) { struct tcf_block *block = tp->chain->block; struct tc_cls_u32_offload cls_u32 = {}; @@ -509,7 +509,7 @@ static int u32_replace_hw_hnode(struct tcf_proto *tp, struct tc_u_hnode *h, bool offloaded = false; int err; - tc_cls_common_offload_init(&cls_u32.common, tp, NULL); + tc_cls_common_offload_init(&cls_u32.common, tp, extack); cls_u32.command = TC_CLSU32_NEW_HNODE; cls_u32.hnode.divisor = h->divisor; cls_u32.hnode.handle = h->handle; @@ -542,14 +542,14 @@ static void u32_remove_hw_knode(struct tcf_proto *tp, u32 handle) } static int u32_replace_hw_knode(struct tcf_proto *tp, struct tc_u_knode *n, - u32 flags) + u32 flags, struct netlink_ext_ack *extack) { struct tcf_block *block = tp->chain->block; struct tc_cls_u32_offload cls_u32 = {}; bool skip_sw = tc_skip_sw(flags); int err; - tc_cls_common_offload_init(&cls_u32.common, tp, NULL); + tc_cls_common_offload_init(&cls_u32.common, tp, extack); cls_u32.command = TC_CLSU32_REPLACE_KNODE; cls_u32.knode.handle = n->handle; cls_u32.knode.fshift = n->fshift; @@ -943,7 +943,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, return err; } - err = u32_replace_hw_knode(tp, new, flags); + err = u32_replace_hw_knode(tp, new, flags, extack); if (err) { u32_destroy_key(tp, new, false); return err; @@ -990,7 +990,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, ht->prio = tp->prio; idr_init(&ht->handle_idr); - err = u32_replace_hw_hnode(tp, ht, flags); + err = u32_replace_hw_hnode(tp, ht, flags, extack); if (err) { idr_remove_ext(&tp_c->handle_idr, handle); kfree(ht); @@ -1088,7 +1088,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, struct tc_u_knode __rcu **ins; struct tc_u_knode *pins; - err = u32_replace_hw_knode(tp, n, flags); + err = u32_replace_hw_knode(tp, n, flags, extack); if (err) goto errhw; From patchwork Tue Jan 16 00:30:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861153 X-Patchwork-Delegate: bpf@iogearbox.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="K9RZFMFJ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB4g4qlPz9sCZ for ; Tue, 16 Jan 2018 11:32:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751128AbeAPAcS (ORCPT ); Mon, 15 Jan 2018 19:32:18 -0500 Received: from mail-pl0-f66.google.com ([209.85.160.66]:33685 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750830AbeAPAbm (ORCPT ); Mon, 15 Jan 2018 19:31:42 -0500 Received: by mail-pl0-f66.google.com with SMTP id t4so2041835plo.0 for ; Mon, 15 Jan 2018 16:31:41 -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:in-reply-to:references; bh=6UjiP6rgkEoZ6g/YtN3ENE4VC3l5o0VRD42qHbzHXjI=; b=K9RZFMFJw/Z4ihyePTKVXCxX0U9evIq/Y7Gh4iRI3dBeBMRbUP+z29xTxC1UvqarJo 8ZxLBkkgoDm9iVMhjNmCf+uczNcyRG+R1YtRpbA7RH0Z/HLMyKPYTVYIxdhRD859SUgq TJ7YjI/F+r8FzWhPgZfokrKrce7yez9jnNY4iwCBeNvmxakiZgp6CPu5eSeTRkA4VZ76 IvILv5zohz1DsYfpm6eAGVp/6hxk2AaTVfY6dC7coeMITuwmFJnNz3UspZk6Fuc3fPCB Hba43yGxgiGg2o3IdeCBacE2Iba9EgAprhKIsLYaJYmXHhS5QvR3Pac2/QnD7+opDRTz LOCg== 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:in-reply-to :references; bh=6UjiP6rgkEoZ6g/YtN3ENE4VC3l5o0VRD42qHbzHXjI=; b=IRcJDLOBMY1VXmGoA/L+Vb5x8L2dMqVNXJ3ZJOPGNzM8GayLDxIIz+2qsBTZniXeyd h0PpUal8f9cgX+bRvNIUrIddfGhIgfcdzBnUgChs7Q1cKP0h9TCXzmwvsJMIvXbtomlO JxTi4bqQoAHduzlY463u8P+knN0OLWB1sj00T0hHj3+tjaNZuiElu8x2x5t3PN8Fqu+n xB59xcb/dSauZTT5ILaa7ama9ylwtO9xr7EWV4j06IAaTmHBYa27B4Z8c21ZQEJo7LCX NqMPbVQYTWS6eZ8so6UDX3CFRoUgWK58vPCdAac38c/bUdM987Tnmiy6VqJchYIEEyes 5TMA== X-Gm-Message-State: AKwxyteTfHXDtSVFDELZJg2QefSVkm7xmOGSycWk56+L0cVdDWEtZYl1 KdP0ZizufNZPokBzZltrgI86yg== X-Google-Smtp-Source: ACJfBov8jY9G8F3MrAvEknMw1tyMYbpUDDRkblfAeQRUEb00EubmhNPRASF88BPitwlbGdz1lekEgA== X-Received: by 10.84.140.129 with SMTP id 1mr4922747plt.281.1516062701621; Mon, 15 Jan 2018 16:31:41 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:41 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 06/11] net: sched: cls_bpf: plumb extack support in filter for hardware offload Date: Mon, 15 Jan 2018 16:30:22 -0800 Message-Id: <20180116003027.9405-7-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Pass the extack pointer obtained in the `->change()` filter operation to cls_bpf_offload() and then to cls_bpf_offload_cmd(), where it can be used to initialize the new field of tc_cls_common_offload passed to the callback for offload. This makes it possible to use this extack pointer in drivers offloading BPF programs in a future patch. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- net/sched/cls_bpf.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c index b8729124d209..d15ef9ab7243 100644 --- a/net/sched/cls_bpf.c +++ b/net/sched/cls_bpf.c @@ -147,7 +147,8 @@ static bool cls_bpf_is_ebpf(const struct cls_bpf_prog *prog) } static int cls_bpf_offload_cmd(struct tcf_proto *tp, struct cls_bpf_prog *prog, - struct cls_bpf_prog *oldprog) + struct cls_bpf_prog *oldprog, + struct netlink_ext_ack *extack) { struct tcf_block *block = tp->chain->block; struct tc_cls_bpf_offload cls_bpf = {}; @@ -158,7 +159,7 @@ static int cls_bpf_offload_cmd(struct tcf_proto *tp, struct cls_bpf_prog *prog, skip_sw = prog && tc_skip_sw(prog->gen_flags); obj = prog ?: oldprog; - tc_cls_common_offload_init(&cls_bpf.common, tp, NULL); + tc_cls_common_offload_init(&cls_bpf.common, tp, extack); cls_bpf.command = TC_CLSBPF_OFFLOAD; cls_bpf.exts = &obj->exts; cls_bpf.prog = prog ? prog->filter : NULL; @@ -170,7 +171,7 @@ static int cls_bpf_offload_cmd(struct tcf_proto *tp, struct cls_bpf_prog *prog, err = tc_setup_cb_call(block, NULL, TC_SETUP_CLSBPF, &cls_bpf, skip_sw); if (prog) { if (err < 0) { - cls_bpf_offload_cmd(tp, oldprog, prog); + cls_bpf_offload_cmd(tp, oldprog, prog, extack); return err; } else if (err > 0) { prog->gen_flags |= TCA_CLS_FLAGS_IN_HW; @@ -184,7 +185,8 @@ static int cls_bpf_offload_cmd(struct tcf_proto *tp, struct cls_bpf_prog *prog, } static int cls_bpf_offload(struct tcf_proto *tp, struct cls_bpf_prog *prog, - struct cls_bpf_prog *oldprog) + struct cls_bpf_prog *oldprog, + struct netlink_ext_ack *extack) { if (prog && oldprog && prog->gen_flags != oldprog->gen_flags) return -EINVAL; @@ -196,7 +198,7 @@ static int cls_bpf_offload(struct tcf_proto *tp, struct cls_bpf_prog *prog, if (!prog && !oldprog) return 0; - return cls_bpf_offload_cmd(tp, prog, oldprog); + return cls_bpf_offload_cmd(tp, prog, oldprog, extack); } static void cls_bpf_stop_offload(struct tcf_proto *tp, @@ -204,7 +206,7 @@ static void cls_bpf_stop_offload(struct tcf_proto *tp, { int err; - err = cls_bpf_offload_cmd(tp, NULL, prog); + err = cls_bpf_offload_cmd(tp, NULL, prog, NULL); if (err) pr_err("Stopping hardware offload failed: %d\n", err); } @@ -501,7 +503,7 @@ static int cls_bpf_change(struct net *net, struct sk_buff *in_skb, if (ret < 0) goto errout_idr; - ret = cls_bpf_offload(tp, prog, oldprog); + ret = cls_bpf_offload(tp, prog, oldprog, extack); if (ret) goto errout_parms; From patchwork Tue Jan 16 00:30:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861152 X-Patchwork-Delegate: bpf@iogearbox.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="yAJniwHt"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB4W5KP2z9sNV for ; Tue, 16 Jan 2018 11:32:11 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751112AbeAPAcJ (ORCPT ); Mon, 15 Jan 2018 19:32:09 -0500 Received: from mail-pl0-f68.google.com ([209.85.160.68]:44634 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750844AbeAPAbn (ORCPT ); Mon, 15 Jan 2018 19:31:43 -0500 Received: by mail-pl0-f68.google.com with SMTP id f8so2815687plk.11 for ; Mon, 15 Jan 2018 16:31:42 -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:in-reply-to:references; bh=r4e9kNGFIGbZhPWwFw18V0BgJdTQMgpjTncxQ584HAQ=; b=yAJniwHtWp7N57B133Oy+1Dhhj5D4zC6QXAb/ZUU7GwYE4Ai+LgcnmKLmtkFKAtKfK fEAmO9hai2iX3VW7SplzqYliHSPukWASqiSjDAECI/OxAHddrCYKdxTP9uJvOOUE7VIB 6wJANMfsyxJzoHRisVMgxlo6Jl++wOlhodOTMg0SmIjQD1pWbvanu5Ft7PJr8w4jM7UZ 6+pM4BrqCKwURRj/QLJpIX3/YtjPV0Efob3KNiPB5LMzKgaBOs4BZSpFesuqcWh+tdrf QCRJIaN86HS3wOa/pOpTKq2WaohdczSXFQwBvMPgbUJlniI/yz4B8CFWZY68+g+va0Mk lk4g== 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:in-reply-to :references; bh=r4e9kNGFIGbZhPWwFw18V0BgJdTQMgpjTncxQ584HAQ=; b=TmwBKv1sJdFKyXLDhbU49MRrHK0v0QsZF/WwaW+bvhXo3pE0gpWM64UBpjnnEvRETk 7FZE5NYwzprnAhq145OaL8/QG96YhgSPkUKgdBWcZtHCzOlm0PhhyoJiKnlXGyRzuJHQ WLkt1hjCsT/SBhI7UgE+hOwE42kRCwiIoppwYvWinNwkYnMo8OoG7NZsDxrHfZQ0Q1I7 ZXWkGbny2RXmkMYOqJVrn5m6urrPjtXsOXyhnOCPWt8cNFjyLo+nO2tU2ckL9dhv0cGV iJ+/7XJPNpJc70qjLfUSDjSvP0VoSohpdI7SdXiu5+prJBooHpxTHLS7wnoBIWcxEQQ/ NkKw== X-Gm-Message-State: AKwxyteg+GKGYdxkA5+SefGJZhcVs6LufJI71893AQiSFF0lHP+44vU4 UbzAoT9p0l9d8flBVLPDKtGAGg== X-Google-Smtp-Source: ACJfBotLYExQSX5LdXWmocvEi2tqoHcUh4a/fdEijy02uKNOWWhEdV6U7ZUREChSEFCk7jUwDC6ZSg== X-Received: by 10.84.179.129 with SMTP id b1mr2002321plc.20.1516062702638; Mon, 15 Jan 2018 16:31:42 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:42 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 07/11] net: sched: create tc_can_offload_extack() wrapper Date: Mon, 15 Jan 2018 16:30:23 -0800 Message-Id: <20180116003027.9405-8-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Create a wrapper around tc_can_offload() that takes an additional extack pointer argument in order to output an error message if TC offload is disabled on the device. In this way, the error message is handled by the core and can be the same for all drivers. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- include/net/pkt_cls.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index c88c61234cb3..a3ad6a5a2d12 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -644,6 +644,17 @@ static inline bool tc_can_offload(const struct net_device *dev) return dev->features & NETIF_F_HW_TC; } +static inline bool tc_can_offload_extack(const struct net_device *dev, + struct netlink_ext_ack *extack) +{ + bool can = tc_can_offload(dev); + + if (!can) + NL_SET_ERR_MSG(extack, "TC offload is disabled on net device"); + + return can; +} + static inline bool tc_skip_hw(u32 flags) { return (flags & TCA_CLS_FLAGS_SKIP_HW) ? true : false; From patchwork Tue Jan 16 00:30:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861146 X-Patchwork-Delegate: bpf@iogearbox.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="z2qLGIRw"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB463vsNz9sCZ for ; Tue, 16 Jan 2018 11:31:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750916AbeAPAbq (ORCPT ); Mon, 15 Jan 2018 19:31:46 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:39491 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750868AbeAPAbo (ORCPT ); Mon, 15 Jan 2018 19:31:44 -0500 Received: by mail-pg0-f65.google.com with SMTP id w17so2833498pgv.6 for ; Mon, 15 Jan 2018 16:31:43 -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:in-reply-to:references; bh=K4ugekPxs1YO0c9UOY2SBXRUdZGa3bL8vlRSsXO4yE4=; b=z2qLGIRw9dhZTDEouCS3CZmZkMFr9+DVW3JuX6pbIfMr5T8LNNRDeIOyRpdKjEv1Nv ZlCjfVqbz2h15EQ3uzy+ovolX+SuzcH52r9SWtXtBM8AhC10WIOZXnHG6enrGxoefAhO ERiwqtqu2KZToozNTDcRDe6B5jbmEQtAhqANHBp7ZvrcSV1RCJhXiAYkBnvrduwISrMZ Ga4Lmc60/CzsDVOg0yEQhW628iTJMyBxwF2uo/FiAriOu1fETwaNadJ9c+3pL4GbU5vo ipZj4E6XXuUKyOkxW/hcstPjiWaA44Ue/xeMp2e/kKHNRN615ry4byIW1YGcaDTqBEmJ kOUw== 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:in-reply-to :references; bh=K4ugekPxs1YO0c9UOY2SBXRUdZGa3bL8vlRSsXO4yE4=; b=TJE1aqrY4TZicDmFkh9KTdKxSLyT1ZDroDPorbHr4BDTDKYyLYNRHTkuTgb/xfCqZL OFqlNVYcCyCHMQsysRwblECyH3/Y1KVs4ZQDESn4R6g+SEMG5y3EdwqGFg1Qf4oerNf7 8E8zIOR72g9qamBUoauttJ1TQaPjaQHw+CfTyK7u04TEukBOjB6P6w/egzyXxk1Xpt4j bAqutinuOcqLm7eWsTISoNatfMN0LVsxlSmQndvRQlNEYz+M6tRcz5NjTIJNWVjKAEyw hICQ1pSMooz1PrqppZgALQI44nG2PxAU6nE4yQsunkGPSxpV7oV+xD309FT5ZIFZwfm1 KDug== X-Gm-Message-State: AKwxytetI5WYG5LJbuPi8pPnlIplEkUNdFDXxNc0QD52Oh0o6Mrkm4xi rPRHDMCljN+WoO//JZ++lTwMJQ== X-Google-Smtp-Source: ACJfBosQDJ3zrxgV/8ytzRpqinuvbRbF5jdNBlaYqsXTRkH8RyESXIl4Ybvpy7OgVPt4EAqx9Ggkkw== X-Received: by 10.98.137.197 with SMTP id n66mr3956284pfk.70.1516062703658; Mon, 15 Jan 2018 16:31:43 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:43 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 08/11] nfp: bpf: plumb extack into functions related to XDP offload Date: Mon, 15 Jan 2018 16:30:24 -0800 Message-Id: <20180116003027.9405-9-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Pass a pointer to an extack object to nfp_app_xdp_offload() in order to prepare for extack usage in the nfp driver. Next step will be to forward this extack pointer to nfp_net_bpf_offload(), once this function is able to use it for printing error messages. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/bpf/main.c | 4 ++-- drivers/net/ethernet/netronome/nfp/nfp_app.h | 9 ++++++--- drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.c b/drivers/net/ethernet/netronome/nfp/bpf/main.c index 8823c8360047..e8816ab8fb63 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/main.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/main.c @@ -54,7 +54,7 @@ static bool nfp_net_ebpf_capable(struct nfp_net *nn) static int nfp_bpf_xdp_offload(struct nfp_app *app, struct nfp_net *nn, - struct bpf_prog *prog) + struct bpf_prog *prog, struct netlink_ext_ack *extack) { bool running, xdp_running; int ret; @@ -73,7 +73,7 @@ nfp_bpf_xdp_offload(struct nfp_app *app, struct nfp_net *nn, ret = nfp_net_bpf_offload(nn, prog, running); /* Stop offload if replace not possible */ if (ret && prog) - nfp_bpf_xdp_offload(app, nn, NULL); + nfp_bpf_xdp_offload(app, nn, NULL, extack); nn->dp.bpf_offload_xdp = prog && !ret; return ret; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_app.h b/drivers/net/ethernet/netronome/nfp/nfp_app.h index 6a6eb02b516e..1229a34f8da5 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_app.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_app.h @@ -43,6 +43,7 @@ struct bpf_prog; struct net_device; struct netdev_bpf; +struct netlink_ext_ack; struct pci_dev; struct sk_buff; struct sk_buff; @@ -134,7 +135,8 @@ struct nfp_app_type { int (*bpf)(struct nfp_app *app, struct nfp_net *nn, struct netdev_bpf *xdp); int (*xdp_offload)(struct nfp_app *app, struct nfp_net *nn, - struct bpf_prog *prog); + struct bpf_prog *prog, + struct netlink_ext_ack *extack); int (*sriov_enable)(struct nfp_app *app, int num_vfs); void (*sriov_disable)(struct nfp_app *app); @@ -320,11 +322,12 @@ static inline int nfp_app_bpf(struct nfp_app *app, struct nfp_net *nn, } static inline int nfp_app_xdp_offload(struct nfp_app *app, struct nfp_net *nn, - struct bpf_prog *prog) + struct bpf_prog *prog, + struct netlink_ext_ack *extack) { if (!app || !app->type->xdp_offload) return -EOPNOTSUPP; - return app->type->xdp_offload(app, nn, prog); + return app->type->xdp_offload(app, nn, prog, extack); } static inline bool __nfp_app_ctrl_tx(struct nfp_app *app, struct sk_buff *skb) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c index 2b5cad3069a7..14f23e8d27fa 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c @@ -3395,7 +3395,7 @@ nfp_net_xdp_setup(struct nfp_net *nn, struct bpf_prog *prog, u32 flags, if (err) return err; - err = nfp_app_xdp_offload(nn->app, nn, offload_prog); + err = nfp_app_xdp_offload(nn->app, nn, offload_prog, extack); if (err && flags & XDP_FLAGS_HW_MODE) return err; From patchwork Tue Jan 16 00:30:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861150 X-Patchwork-Delegate: bpf@iogearbox.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="NIl15Ejb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB4N3ss4z9sCZ for ; Tue, 16 Jan 2018 11:32:04 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751066AbeAPAcB (ORCPT ); Mon, 15 Jan 2018 19:32:01 -0500 Received: from mail-pl0-f53.google.com ([209.85.160.53]:33883 "EHLO mail-pl0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750892AbeAPAbp (ORCPT ); Mon, 15 Jan 2018 19:31:45 -0500 Received: by mail-pl0-f53.google.com with SMTP id d21so4829018pll.1 for ; Mon, 15 Jan 2018 16:31:45 -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:in-reply-to:references; bh=FqZ6XWzzMtRbRzUvkt7F4zkCg8i6C7hctbtTULAa7zM=; b=NIl15EjbIV+8X8Z4cAgV+OzX28nlXtpgD9ck7A9C7qVQ9IM3zxzadXMbV5LeYcztrf NG5duNnZeCGc6Ld4/nDrVxZoz9QaWZ1o9yBotm8TlsMTR+a5Qhh2i+QT3tMCLJaya5BP 8NSINYNQ+7/rVaWackiqzoe0zYDS0AKQPTkxBVlSOBp65l6EcILLt+8xhcGmuLDUK6E7 +FlkjHTun7mgUMFtrdIRfinU5RGR2mgxI0IlISQ5PW7JQSuvpKYBqQPViWeEI41H+KAO 9fVsLgVQNmMOINOL5zCT0SKS3LKm5UB5FAhsiub35E+aZLQMT+5ix+Cd3W7vjPQO3FrD V1pg== 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:in-reply-to :references; bh=FqZ6XWzzMtRbRzUvkt7F4zkCg8i6C7hctbtTULAa7zM=; b=NW4tDucCavv8ZLEviIpKWo5brLgOtpHd4u8Kr0HKnlErwC96KEjRSt4SL+D0/EnROW eAQnGi99PkhRFvqmjF9DLbeY6bcbe80aPAQrCtWsLV0V9ZhyZQe69gSh/hndSleI+00e PLCJKNCqEOaDRSBJB+1f/Ds5FrjKxnkuO7T1Xz9tSNX1Jz5aioViP656w+x9nmL3KHF0 aPPOecwh0uIAj0haok88+vfgLFz4S4pNzfb3vnRq/ogRRzLFWV/pzLn39Nhkxqjy4/XN gpUyEsQzUpUE2kreeWXhaM5vIbPw+LGtcDuMfrLWztq4Glye+THvebUrHXHdbCmtfThG cKOw== X-Gm-Message-State: AKwxyteMsDepi21+GfccEVHLnAJ0qO1j1AlHxYzfjPlmbdPrQoJT/cC1 Ih0wNQb9lKqW9DXT1cpg1q7Vbw== X-Google-Smtp-Source: ACJfBosXiHI59sj56Gd52c6ZgefMjTI1l6/cgEwApfFjqP7GQtW1VhnIN+R2Y5bZiQLECOiijhab3w== X-Received: by 10.84.234.22 with SMTP id m22mr6965716plk.142.1516062704740; Mon, 15 Jan 2018 16:31:44 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:44 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 09/11] nfp: bpf: use extack support to improve debugging Date: Mon, 15 Jan 2018 16:30:25 -0800 Message-Id: <20180116003027.9405-10-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Use the recently added extack support for eBPF offload in the driver. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/bpf/main.c | 31 ++++++++++++++++++------ drivers/net/ethernet/netronome/nfp/bpf/main.h | 2 +- drivers/net/ethernet/netronome/nfp/bpf/offload.c | 24 +++++++++++------- 3 files changed, 39 insertions(+), 18 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.c b/drivers/net/ethernet/netronome/nfp/bpf/main.c index e8816ab8fb63..a638c3ab6b61 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/main.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/main.c @@ -70,7 +70,7 @@ nfp_bpf_xdp_offload(struct nfp_app *app, struct nfp_net *nn, if (prog && running && !xdp_running) return -EBUSY; - ret = nfp_net_bpf_offload(nn, prog, running); + ret = nfp_net_bpf_offload(nn, prog, running, extack); /* Stop offload if replace not possible */ if (ret && prog) nfp_bpf_xdp_offload(app, nn, NULL, extack); @@ -125,17 +125,31 @@ static int nfp_bpf_setup_tc_block_cb(enum tc_setup_type type, struct nfp_bpf_vnic *bv; int err; - if (type != TC_SETUP_CLSBPF || - !tc_can_offload(nn->dp.netdev) || - !nfp_net_ebpf_capable(nn) || - cls_bpf->common.protocol != htons(ETH_P_ALL) || - cls_bpf->common.chain_index) + if (type != TC_SETUP_CLSBPF) { + NL_SET_ERR_MSG_MOD(cls_bpf->common.extack, + "only offload of BPF classifiers supported"); + return -EOPNOTSUPP; + } + if (!tc_can_offload_extack(nn->dp.netdev, cls_bpf->common.extack)) + return -EOPNOTSUPP; + if (!nfp_net_ebpf_capable(nn)) { + NL_SET_ERR_MSG_MOD(cls_bpf->common.extack, + "NFP firmware does not support eBPF offload"); + return -EOPNOTSUPP; + } + if (cls_bpf->common.protocol != htons(ETH_P_ALL)) { + NL_SET_ERR_MSG_MOD(cls_bpf->common.extack, + "only ETH_P_ALL supported as filter protocol"); + return -EOPNOTSUPP; + } + if (cls_bpf->common.chain_index) return -EOPNOTSUPP; /* Only support TC direct action */ if (!cls_bpf->exts_integrated || tcf_exts_has_actions(cls_bpf->exts)) { - nn_err(nn, "only direct action with no legacy actions supported\n"); + NL_SET_ERR_MSG_MOD(cls_bpf->common.extack, + "only direct action with no legacy actions supported"); return -EOPNOTSUPP; } @@ -152,7 +166,8 @@ static int nfp_bpf_setup_tc_block_cb(enum tc_setup_type type, return 0; } - err = nfp_net_bpf_offload(nn, cls_bpf->prog, oldprog); + err = nfp_net_bpf_offload(nn, cls_bpf->prog, oldprog, + cls_bpf->common.extack); if (err) return err; diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.h b/drivers/net/ethernet/netronome/nfp/bpf/main.h index b80e75a8ecda..80855d43b25e 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/main.h +++ b/drivers/net/ethernet/netronome/nfp/bpf/main.h @@ -334,7 +334,7 @@ struct nfp_net; int nfp_ndo_bpf(struct nfp_app *app, struct nfp_net *nn, struct netdev_bpf *bpf); int nfp_net_bpf_offload(struct nfp_net *nn, struct bpf_prog *prog, - bool old_prog); + bool old_prog, struct netlink_ext_ack *extack); struct nfp_insn_meta * nfp_bpf_goto_meta(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, diff --git a/drivers/net/ethernet/netronome/nfp/bpf/offload.c b/drivers/net/ethernet/netronome/nfp/bpf/offload.c index e2859b2e9c6a..9c78a09cda24 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/offload.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/offload.c @@ -271,7 +271,9 @@ int nfp_ndo_bpf(struct nfp_app *app, struct nfp_net *nn, struct netdev_bpf *bpf) } } -static int nfp_net_bpf_load(struct nfp_net *nn, struct bpf_prog *prog) +static int +nfp_net_bpf_load(struct nfp_net *nn, struct bpf_prog *prog, + struct netlink_ext_ack *extack) { struct nfp_prog *nfp_prog = prog->aux->offload->dev_priv; unsigned int max_mtu; @@ -281,7 +283,7 @@ static int nfp_net_bpf_load(struct nfp_net *nn, struct bpf_prog *prog) max_mtu = nn_readb(nn, NFP_NET_CFG_BPF_INL_MTU) * 64 - 32; if (max_mtu < nn->dp.netdev->mtu) { - nn_info(nn, "BPF offload not supported with MTU larger than HW packet split boundary\n"); + NL_SET_ERR_MSG_MOD(extack, "BPF offload not supported with MTU larger than HW packet split boundary"); return -EOPNOTSUPP; } @@ -303,7 +305,8 @@ static int nfp_net_bpf_load(struct nfp_net *nn, struct bpf_prog *prog) /* Load up the JITed code */ err = nfp_net_reconfig(nn, NFP_NET_CFG_UPDATE_BPF); if (err) - nn_err(nn, "FW command error while loading BPF: %d\n", err); + NL_SET_ERR_MSG_MOD(extack, + "FW command error while loading BPF"); dma_unmap_single(nn->dp.dev, dma_addr, nfp_prog->prog_len * sizeof(u64), DMA_TO_DEVICE); @@ -312,7 +315,8 @@ static int nfp_net_bpf_load(struct nfp_net *nn, struct bpf_prog *prog) return err; } -static void nfp_net_bpf_start(struct nfp_net *nn) +static void +nfp_net_bpf_start(struct nfp_net *nn, struct netlink_ext_ack *extack) { int err; @@ -321,7 +325,8 @@ static void nfp_net_bpf_start(struct nfp_net *nn) nn_writel(nn, NFP_NET_CFG_CTRL, nn->dp.ctrl); err = nfp_net_reconfig(nn, NFP_NET_CFG_UPDATE_GEN); if (err) - nn_err(nn, "FW command error while enabling BPF: %d\n", err); + NL_SET_ERR_MSG_MOD(extack, + "FW command error while enabling BPF"); } static int nfp_net_bpf_stop(struct nfp_net *nn) @@ -336,7 +341,7 @@ static int nfp_net_bpf_stop(struct nfp_net *nn) } int nfp_net_bpf_offload(struct nfp_net *nn, struct bpf_prog *prog, - bool old_prog) + bool old_prog, struct netlink_ext_ack *extack) { int err; @@ -354,7 +359,8 @@ int nfp_net_bpf_offload(struct nfp_net *nn, struct bpf_prog *prog, cap = nn_readb(nn, NFP_NET_CFG_BPF_CAP); if (!(cap & NFP_NET_BPF_CAP_RELO)) { - nn_err(nn, "FW does not support live reload\n"); + NL_SET_ERR_MSG_MOD(extack, + "FW does not support live reload"); return -EBUSY; } } @@ -366,12 +372,12 @@ int nfp_net_bpf_offload(struct nfp_net *nn, struct bpf_prog *prog, if (old_prog && !prog) return nfp_net_bpf_stop(nn); - err = nfp_net_bpf_load(nn, prog); + err = nfp_net_bpf_load(nn, prog, extack); if (err) return err; if (!old_prog) - nfp_net_bpf_start(nn); + nfp_net_bpf_start(nn, extack); return 0; } From patchwork Tue Jan 16 00:30:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861147 X-Patchwork-Delegate: bpf@iogearbox.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="pK7VAXdR"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB4856T5z9sCZ for ; Tue, 16 Jan 2018 11:31:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750990AbeAPAbt (ORCPT ); Mon, 15 Jan 2018 19:31:49 -0500 Received: from mail-pg0-f66.google.com ([74.125.83.66]:40438 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750918AbeAPAbq (ORCPT ); Mon, 15 Jan 2018 19:31:46 -0500 Received: by mail-pg0-f66.google.com with SMTP id g16so2044159pgn.7 for ; Mon, 15 Jan 2018 16:31:46 -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:in-reply-to:references; bh=1ZmQbtCCqzPGq3RtNio7cO/WvVxQlPXK+KyhhP6b7UI=; b=pK7VAXdRVEaluzp8zViqrllkilnTDANA2+ipH7TBylX967EDQLSRY3mhpLbLS5iHc9 piMNhkbwtF0gmd9oEUtre3H1T2iAxaXJog4hJZDXCaFoQqHD5TNBbRBJXFm5mBIHUBIx TOn12LV9hsKnCkPTeCJxBnvXQ2ZZPpj7h9HkawXGGnnPnJATZHO/CGPl5CrSShUdxenB dba0e0WBMO99zTveiM+ukdsTsf566eadJ2kCJsLWEVvIU4mNouRasw/ff3BlQYSKZy1d mB8Ee9TOyFRRu3aIXTlZOld0IqHhJ1amIk+mRDyfE0IwLHpfJkiRsG7rIh0JDA1tVEEH VJJg== 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:in-reply-to :references; bh=1ZmQbtCCqzPGq3RtNio7cO/WvVxQlPXK+KyhhP6b7UI=; b=XMr8Ok1DmfYFnZSgtlEk3THp9tJMTtUn6f3OcCe2+jln2dnw/+dpt5+U9gKjBFHOGa BxhCbOlPH3i7CAZfzTP8NCpBgdA8EP6sj3TDnUvxH/amPbM0qb0C9Frrzs0qyk2tE4ws mUtmBGXMHmD6ElJqeBtOdjvKbLxFl7XY8kqH5dhmAJ9b5HeGPYdqoEeG5eLkQBoB1rDr KvTgIlicr4sM1ENmEgRvoRS9XrYPt1RsSn/IxtKRejIXofVG+nPFgAJ01p954euZ6IAY qttj4D1eKxFR2tvkfkVAJrWrsXhGnZhgDu8NSrQbx9Vhta9sgkOWN/pO3iOm7zfUMxwu 2b8g== X-Gm-Message-State: AKGB3mKtXMmWw9eA18KI03L3B1s35jzlcgZ78+jTpknMkIoEKe/q/+GR rOMtXqwb1tVZ9hQfbMwL0Dwj2g== X-Google-Smtp-Source: ACJfBosYLjVWfYA0qHlJw0jvXXt36mDSNr0aFtfjZUwnAmMbGAodmgv3uSMWYYEOI6sCt7yRSrE6lA== X-Received: by 10.98.59.149 with SMTP id w21mr25433799pfj.7.1516062705832; Mon, 15 Jan 2018 16:31:45 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:45 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 10/11] netdevsim: add extack support for TC eBPF offload Date: Mon, 15 Jan 2018 16:30:26 -0800 Message-Id: <20180116003027.9405-11-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Use the recently added extack support for TC eBPF filters in netdevsim. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- drivers/net/netdevsim/bpf.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/drivers/net/netdevsim/bpf.c b/drivers/net/netdevsim/bpf.c index 5134d5c1306c..0de8ba91b262 100644 --- a/drivers/net/netdevsim/bpf.c +++ b/drivers/net/netdevsim/bpf.c @@ -109,17 +109,35 @@ int nsim_bpf_setup_tc_block_cb(enum tc_setup_type type, struct netdevsim *ns = cb_priv; struct bpf_prog *oldprog; - if (type != TC_SETUP_CLSBPF || - !tc_can_offload(ns->netdev) || - cls_bpf->common.protocol != htons(ETH_P_ALL) || - cls_bpf->common.chain_index) + if (type != TC_SETUP_CLSBPF) { + NSIM_EA(cls_bpf->common.extack, + "only offload of BPF classifiers supported"); + return -EOPNOTSUPP; + } + + if (!tc_can_offload_extack(ns->netdev, cls_bpf->common.extack)) + return -EOPNOTSUPP; + + if (cls_bpf->common.protocol != htons(ETH_P_ALL)) { + NSIM_EA(cls_bpf->common.extack, + "only ETH_P_ALL supported as filter protocol"); + return -EOPNOTSUPP; + } + + if (cls_bpf->common.chain_index) return -EOPNOTSUPP; - if (!ns->bpf_tc_accept) + if (!ns->bpf_tc_accept) { + NSIM_EA(cls_bpf->common.extack, + "netdevsim configured to reject BPF TC offload"); return -EOPNOTSUPP; + } /* Note: progs without skip_sw will probably not be dev bound */ - if (prog && !prog->aux->offload && !ns->bpf_tc_non_bound_accept) + if (prog && !prog->aux->offload && !ns->bpf_tc_non_bound_accept) { + NSIM_EA(cls_bpf->common.extack, + "netdevsim configured to reject unbound programs"); return -EOPNOTSUPP; + } if (cls_bpf->command != TC_CLSBPF_OFFLOAD) return -EOPNOTSUPP; @@ -131,8 +149,11 @@ int nsim_bpf_setup_tc_block_cb(enum tc_setup_type type, oldprog = NULL; if (!cls_bpf->prog) return 0; - if (ns->bpf_offloaded) + if (ns->bpf_offloaded) { + NSIM_EA(cls_bpf->common.extack, + "driver and netdev offload states mismatch"); return -EBUSY; + } } return nsim_bpf_offload(ns, cls_bpf->prog, oldprog); From patchwork Tue Jan 16 00:30:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861148 X-Patchwork-Delegate: bpf@iogearbox.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="BExDWBj2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLB4F3tydz9sCZ for ; Tue, 16 Jan 2018 11:31:57 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751004AbeAPAbz (ORCPT ); Mon, 15 Jan 2018 19:31:55 -0500 Received: from mail-pf0-f176.google.com ([209.85.192.176]:38692 "EHLO mail-pf0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750933AbeAPAbr (ORCPT ); Mon, 15 Jan 2018 19:31:47 -0500 Received: by mail-pf0-f176.google.com with SMTP id k19so8811028pfj.5 for ; Mon, 15 Jan 2018 16:31:47 -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:in-reply-to:references; bh=zUc8yWZAAfsLNSmuMhTQ9UG2krjtPMAIW2cDWBePxjU=; b=BExDWBj2oDfFv5xS72jWsTK11b05SKiQ5P3XTPeE3xwhGsaM8RjY6EDoRK36PkHtgb /8qedJFrH4whAgVtQMiYd2cdQvE+cJrMiSsk+JCfq6OL+tTd01/LWiT4nThYWTbQ2QoY dHQznGuWtco07mQnJc/2V+MJLBfjqGwCPieet2ruc03Ld4C9I5s1lfyqnAEgzFj0SqlE MWISFYXsajXLpbzQ51sfbbGsMLLNAJLdzWtkBe3tmfcHSKRDZPpZs9Tm5LvAlynIm6C3 17Ck2F5ZIdmmsgann5pBo+m+qJCURwlbirk8ozdE4OzDSoia0yX/iafr6aHQtlioh0sb CMXg== 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:in-reply-to :references; bh=zUc8yWZAAfsLNSmuMhTQ9UG2krjtPMAIW2cDWBePxjU=; b=gLdB4IazR07wJKSNRZgoQEumiuswAlksh07xfWKxhD4/9Y8XS7WnBj4CvuWeLrCluh 6zpWskRZJ4iM+Yt7qQ4o8PJ17ZRed4HFDco8mHjJgCuC60XmEy8gIEhd97vpzHAioQMS 6bcCeF9UJZwuawHlZkWrF1b2URO0rUR1gLc4WDp7dREPtt8B2GCOYuvLJCtBupl73MrU NI05a8ek8/m62xOVtaVNBDPkUnvA5E4Iu8hWPAeZZQ4sgb07a/fprF5Pp3tuRMl4qLWb oSPoRA1CaEOVP7UJ+incLHbfJaZsEJox8FnuGlyCdX3GdiMAW0/I/1/jNVigr5s5ApqI 5uXw== X-Gm-Message-State: AKwxytcrzGjOj48FJ2pxCxgg6AyMJpRKoG/Da2cxc6W9Kx75d8IAoa7C iw0Lf8pzCkHkdx8inopM3i+gZw== X-Google-Smtp-Source: ACJfBotRj+KsVmCenVkQYi2155rNe64TQPf8bCVo7APBEbEv7kEFjxDqiAyX5MXsbWX9TeFBpVAbAg== X-Received: by 10.98.31.131 with SMTP id l3mr9402862pfj.116.1516062706946; Mon, 15 Jan 2018 16:31:46 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o64sm752839pga.1.2018.01.15.16.31.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 16:31:46 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, daniel@iogearbox.net, alexei.starovoitov@gmail.com, netdev@vger.kernel.org Cc: dsahern@gmail.com, oss-drivers@netronome.com, jiri@resnulli.us, john.fastabend@gmail.com, jhs@mojatatu.com, gerlitz.or@gmail.com, aring@mojatatu.com, xiyou.wangcong@gmail.com, Quentin Monnet Subject: [PATCH bpf-next 11/11] selftests/bpf: add checks on extack messages for eBPF hw offload tests Date: Mon, 15 Jan 2018 16:30:27 -0800 Message-Id: <20180116003027.9405-12-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116003027.9405-1-jakub.kicinski@netronome.com> References: <20180116003027.9405-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Quentin Monnet Add checks to test that netlink extack messages are correctly displayed in some expected error cases for eBPF offload to netdevsim with TC and XDP. A new flag ("--skip-extack") is added to the Python script so as to allow to skip these checks. This is because extack messages cannot be displayed by tc and ip if tools from iproute2 package were compiled without libmnl, but we do not want this to prevent users to run the other checks. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski --- tools/testing/selftests/bpf/test_offload.py | 97 +++++++++++++++++++++-------- 1 file changed, 71 insertions(+), 26 deletions(-) diff --git a/tools/testing/selftests/bpf/test_offload.py b/tools/testing/selftests/bpf/test_offload.py index e3c750f17cb8..94ced38f650b 100755 --- a/tools/testing/selftests/bpf/test_offload.py +++ b/tools/testing/selftests/bpf/test_offload.py @@ -131,7 +131,7 @@ netns = [] # net namespaces to be removed if f in files: files.remove(f) -def tool(name, args, flags, JSON=True, ns="", fail=True): +def tool(name, args, flags, JSON=True, ns="", fail=True, include_stderr=False): params = "" if JSON: params += "%s " % (flags["json"]) @@ -139,9 +139,20 @@ netns = [] # net namespaces to be removed if ns != "": ns = "ip netns exec %s " % (ns) - ret, out = cmd(ns + name + " " + params + args, fail=fail) - if JSON and len(out.strip()) != 0: - return ret, json.loads(out) + if include_stderr: + ret, stdout, stderr = cmd(ns + name + " " + params + args, + fail=fail, include_stderr=True) + else: + ret, stdout = cmd(ns + name + " " + params + args, + fail=fail, include_stderr=False) + + if JSON and len(stdout.strip()) != 0: + out = json.loads(stdout) + else: + out = stdout + + if include_stderr: + return ret, out, stderr else: return ret, out @@ -164,13 +175,15 @@ netns = [] # net namespaces to be removed time.sleep(0.05) raise Exception("Time out waiting for program counts to stabilize want %d, have %d" % (expected, nprogs)) -def ip(args, force=False, JSON=True, ns="", fail=True): +def ip(args, force=False, JSON=True, ns="", fail=True, include_stderr=False): if force: args = "-force " + args - return tool("ip", args, {"json":"-j"}, JSON=JSON, ns=ns, fail=fail) + return tool("ip", args, {"json":"-j"}, JSON=JSON, ns=ns, fail=fail, + include_stderr=include_stderr) -def tc(args, JSON=True, ns="", fail=True): - return tool("tc", args, {"json":"-p"}, JSON=JSON, ns=ns, fail=fail) +def tc(args, JSON=True, ns="", fail=True, include_stderr=False): + return tool("tc", args, {"json":"-p"}, JSON=JSON, ns=ns, fail=fail, + include_stderr=include_stderr) def ethtool(dev, opt, args, fail=True): return cmd("ethtool %s %s %s" % (opt, dev["ifname"], args), fail=fail) @@ -311,13 +324,13 @@ netns = [] # net namespaces to be removed return ip("link set dev %s mtu %d" % (self.dev["ifname"], mtu), fail=fail) - def set_xdp(self, bpf, mode, force=False, fail=True): + def set_xdp(self, bpf, mode, force=False, fail=True, include_stderr=False): return ip("link set dev %s xdp%s %s" % (self.dev["ifname"], mode, bpf), - force=force, fail=fail) + force=force, fail=fail, include_stderr=include_stderr) - def unset_xdp(self, mode, force=False, fail=True): + def unset_xdp(self, mode, force=False, fail=True, include_stderr=False): return ip("link set dev %s xdp%s off" % (self.dev["ifname"], mode), - force=force, fail=fail) + force=force, fail=fail, include_stderr=include_stderr) def ip_link_show(self, xdp): _, link = ip("link show dev %s" % (self['ifname'])) @@ -373,7 +386,7 @@ netns = [] # net namespaces to be removed return filters def cls_bpf_add_filter(self, bpf, da=False, skip_sw=False, skip_hw=False, - fail=True): + fail=True, include_stderr=False): params = "" if da: params += " da" @@ -382,7 +395,8 @@ netns = [] # net namespaces to be removed if skip_hw: params += " skip_hw" return tc("filter add dev %s ingress bpf %s %s" % - (self['ifname'], bpf, params), fail=fail) + (self['ifname'], bpf, params), fail=fail, + include_stderr=include_stderr) def set_ethtool_tc_offloads(self, enable, fail=True): args = "hw-tc-offload %s" % ("on" if enable else "off") @@ -434,9 +448,18 @@ netns = [] # net namespaces to be removed fail(dev["ns_dev"] != 0, "Device perameters not zero on removed") fail(dev["ns_inode"] != 0, "Device perameters not zero on removed") +def check_extack(output, reference, args): + if args.skip_extack: + return + lines = output.split("\n") + comp = len(lines) >= 2 and lines[1] == reference + fail(not comp, "Missing or incorrect netlink extack message") + # Parse command line parser = argparse.ArgumentParser() parser.add_argument("--log", help="output verbose log to given file") +parser.add_argument("--skip-extack", action="store_true", + help="skip checks on TC netlink extack messages") args = parser.parse_args() if args.log: logfile = open(args.log, 'w+') @@ -501,8 +524,10 @@ netns = [] sim.tc_flush_filters() start_test("Test TC offloads are off by default...") - ret, _ = sim.cls_bpf_add_filter(obj, skip_sw=True, fail=False) + ret, _, err = sim.cls_bpf_add_filter(obj, skip_sw=True, fail=False, + include_stderr=True) fail(ret == 0, "TC filter loaded without enabling TC offloads") + check_extack(err, "Error: TC offload is disabled on net device.", args) sim.wait_for_flush() sim.set_ethtool_tc_offloads(True) @@ -530,8 +555,10 @@ netns = [] sim.dfs["bpf_tc_non_bound_accept"] = "N" start_test("Test TC cBPF unbound bytecode doesn't offload...") - ret, _ = sim.cls_bpf_add_filter(bytecode, skip_sw=True, fail=False) + ret, _, err = sim.cls_bpf_add_filter(bytecode, skip_sw=True, fail=False, + include_stderr=True) fail(ret == 0, "TC bytecode loaded for offload") + check_extack(err, "Error: netdevsim: netdevsim configured to reject unbound programs.", args) sim.wait_for_flush() start_test("Test TC offloads work...") @@ -612,16 +639,24 @@ netns = [] "Device parameters reported for non-offloaded program") start_test("Test XDP prog replace with bad flags...") - ret, _ = sim.set_xdp(obj, "offload", force=True, fail=False) + ret, _, err = sim.set_xdp(obj, "offload", force=True, fail=False, + include_stderr=True) fail(ret == 0, "Replaced XDP program with a program in different mode") - ret, _ = sim.set_xdp(obj, "", force=True, fail=False) + check_extack(err, "Error: netdevsim: program loaded with different flags.", args) + ret, _, err = sim.set_xdp(obj, "", force=True, fail=False, + include_stderr=True) fail(ret == 0, "Replaced XDP program with a program in different mode") + check_extack(err, "Error: netdevsim: program loaded with different flags.", args) start_test("Test XDP prog remove with bad flags...") - ret, _ = sim.unset_xdp("offload", force=True, fail=False) + ret, _, err = sim.unset_xdp("offload", force=True, fail=False, + include_stderr=True) fail(ret == 0, "Removed program with a bad mode mode") - ret, _ = sim.unset_xdp("", force=True, fail=False) + check_extack(err, "Error: netdevsim: program loaded with different flags.", args) + ret, _, err = sim.unset_xdp("", force=True, fail=False, + include_stderr=True) fail(ret == 0, "Removed program with a bad mode mode") + check_extack(err, "Error: netdevsim: program loaded with different flags.", args) start_test("Test MTU restrictions...") ret, _ = sim.set_mtu(9000, fail=False) @@ -630,8 +665,9 @@ netns = [] sim.unset_xdp("drv") bpftool_prog_list_wait(expected=0) sim.set_mtu(9000) - ret, _ = sim.set_xdp(obj, "drv", fail=False) + ret, _, err = sim.set_xdp(obj, "drv", fail=False, include_stderr=True) fail(ret == 0, "Driver should refuse to load program with MTU of 9000...") + check_extack(err, "Error: netdevsim: MTU too large w/ XDP enabled.", args) sim.set_mtu(1500) sim.wait_for_flush() @@ -667,25 +703,32 @@ netns = [] sim2.set_xdp(obj, "offload") pin_file, pinned = pin_prog("/sys/fs/bpf/tmp") - ret, _ = sim.set_xdp(pinned, "offload", fail=False) + ret, _, err = sim.set_xdp(pinned, "offload", fail=False, + include_stderr=True) fail(ret == 0, "Pinned program loaded for a different device accepted") + check_extack(err, "Error: netdevsim: program bound to different dev.", args) sim2.remove() - ret, _ = sim.set_xdp(pinned, "offload", fail=False) + ret, _, err = sim.set_xdp(pinned, "offload", fail=False, + include_stderr=True) fail(ret == 0, "Pinned program loaded for a removed device accepted") + check_extack(err, "Error: netdevsim: xdpoffload of non-bound program.", args) rm(pin_file) bpftool_prog_list_wait(expected=0) start_test("Test mixing of TC and XDP...") sim.tc_add_ingress() sim.set_xdp(obj, "offload") - ret, _ = sim.cls_bpf_add_filter(obj, skip_sw=True, fail=False) + ret, _, err = sim.cls_bpf_add_filter(obj, skip_sw=True, fail=False, + include_stderr=True) fail(ret == 0, "Loading TC when XDP active should fail") + check_extack(err, "Error: netdevsim: driver and netdev offload states mismatch.", args) sim.unset_xdp("offload") sim.wait_for_flush() sim.cls_bpf_add_filter(obj, skip_sw=True) - ret, _ = sim.set_xdp(obj, "offload", fail=False) + ret, _, err = sim.set_xdp(obj, "offload", fail=False, include_stderr=True) fail(ret == 0, "Loading XDP when TC active should fail") + check_extack(err, "Error: netdevsim: TC program is already loaded.", args) start_test("Test binding TC from pinned...") pin_file, pinned = pin_prog("/sys/fs/bpf/tmp") @@ -708,8 +751,10 @@ netns = [] start_test("Test asking for TC offload of two filters...") sim.cls_bpf_add_filter(obj, da=True, skip_sw=True) - ret, _ = sim.cls_bpf_add_filter(obj, da=True, skip_sw=True, fail=False) + ret, _, err = sim.cls_bpf_add_filter(obj, da=True, skip_sw=True, + fail=False, include_stderr=True) fail(ret == 0, "Managed to offload two TC filters at the same time") + check_extack(err, "Error: netdevsim: driver and netdev offload states mismatch.", args) sim.tc_flush_filters(bound=2, total=2)