From patchwork Tue Jan 16 21:38:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861895 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="RsOW+MD2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkBJ4LpHz9s82 for ; Wed, 17 Jan 2018 08:39:04 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751396AbeAPVjB (ORCPT ); Tue, 16 Jan 2018 16:39:01 -0500 Received: from mail-pl0-f65.google.com ([209.85.160.65]:33526 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750990AbeAPVi7 (ORCPT ); Tue, 16 Jan 2018 16:38:59 -0500 Received: by mail-pl0-f65.google.com with SMTP id t4so4373885plo.0 for ; Tue, 16 Jan 2018 13:38:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4CGMJmdCoKzaaTT9Do13E2miJuFMbljZBmcLPtznu0M=; b=RsOW+MD2TzSoP+2RKt7wwwg5OTXIT+GT20CKf2u97flelDY5W1VL65mV/BE2Xfx57p DemOjlDQ/RqWJWFX8S9ratoa09Rvoj+YBQoHUuSyTGVbhULeFvCZv494BR4BSixMOdXW mWVqK8BEvjCL/Y4sJg5D2h+wvtc13jphw4ZcSVc0d04iemNZU9xdOelVlJtwDj0wBO/1 orj9u2VbOy+fwcefyPJZMrNRS1lajFDxuoJtPAbxhi+6/kD2r/nVG8hRFxIj+ARm73/z i43LW0kRH/HCdZJoIXtSQdcaiP1RIAYXpG4P1O5mbksmlh2XyvelLp1VDTgn1amGsGfp +glQ== 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=PMqSGNYgLDuiBvnkwg8EHlkQvdZhW5Zxc87QyXq9bLA6GDr6JNsQlPUi9/7TXwdgnX TahGcaGR3k22bF5f+jiUkXLqc4wUM0FBJ8iHsmR5BkSS5lqdtkegPdXfeSxaFazipbAS CDw5MfxBPSLyGF+rfzD7sCpp3Z//uMyicWiYNVu6GDy2D7ygIBwbkfnenRAcIrtveMIR pKBEpIoGnZxwNlnsQXPfT9j+XUqsPa4TCMtJWRBPqZB6DL4HGt3VKHvauL5c+HtOmfkh /zz3Kv/lF6dGZAV3YEy3u5WDGhf0z/6xf81K0C4acSXFf+afAsB+3g87rWaLYKqra0cw +RZA== X-Gm-Message-State: AKGB3mJrRXWZXSnoj5xYXHo7JzeMKIYoy2tbwtIfC0q+0URnGCXb4+RU bYHVqoOvMY7Ov0K3x5UMaL8MMw== X-Google-Smtp-Source: ACJfBotnQuOTJNAoTMVYNdRx8VeH4fWSk3kvApz7VjkH9T6orCLlsTL/LwgWQ/cK1txE7H9As2Vf6Q== X-Received: by 10.84.130.100 with SMTP id 91mr39493153plc.185.1516138738589; Tue, 16 Jan 2018 13:38:58 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.38.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:38:58 -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 v3 01/11] net: sched: add extack support to change() classifier operation Date: Tue, 16 Jan 2018 13:38:29 -0800 Message-Id: <20180116213839.24537-2-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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 21:38:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861905 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="1yaIaFK0"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkCX3lcVz9s83 for ; Wed, 17 Jan 2018 08:40:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751804AbeAPVkH (ORCPT ); Tue, 16 Jan 2018 16:40:07 -0500 Received: from mail-pl0-f68.google.com ([209.85.160.68]:42295 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751142AbeAPVjA (ORCPT ); Tue, 16 Jan 2018 16:39:00 -0500 Received: by mail-pl0-f68.google.com with SMTP id bd8so7163299plb.9 for ; Tue, 16 Jan 2018 13:39:00 -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=htTG4kmYqsFVH+dcDx/8/eJgo1YnxeMSE18qQH8DPP4=; b=1yaIaFK0r8fDqc9nz60ZES5Cno0huC0mEIzPkNLf9GJiotQtR+ARzCUMCsLfpEXlML j88kZ6mXxS9RBH8qEDnOXgOVuyjF2ACDMYHyawwbOg3cwCFkBk+9zrZ4lJcCX4K/+dZX 0GN8uY3bFsbzpbasDAwGPh3s91DNQSKPu3vEgzwWoFyIPShO9WDPuUaiDQgwnmNlpErE 45EP/R7s5NRzSzQFD0FEhUWAdDbCPtUta9hmYTualsP1kwpLv3C7PeEKKt9LMxtpPwjS RkzfhF5fM4YzfiDTwdE+jCPcB0Q0iauwUYmp6kjDmr+CB2ralqzretZnSM26ZZb7Y26v jVgw== 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=htTG4kmYqsFVH+dcDx/8/eJgo1YnxeMSE18qQH8DPP4=; b=O9oIJ+gtC5HKPINa/7iGRBYuf0DwQbO1UCBog5EcyG7wWP/8zBQjBuXyOHqJ37N/OG cjAxsEgrqwZd/9iTL+S2F6UKnWZEU6GfII5sLpdV3a0oFXe+bad9ejLDx36fQVX+rIHR 9mWY0o9yf5ZNsxNeTNLnMZR2i4wYTqvKJg0Gtxl9XXq4hFtL71475cyH2jVl99e26lzm ZVueCkbotiDAnwH1znbzq3WwYtWz8G5Z+wjlqMRBTuKcdcfqNj9bfS2UYDB35/1zFswJ n+UZnf2YQJeoaw6YHnjyzuKO3LyCjZ78EJLbkSBXVkR89puImOiQf/OWRFdRQwXM5biq lOiA== X-Gm-Message-State: AKGB3mLnxanfbxuSOYkvfDABBqUvmWBaatsExu7teGiXhlbW1WnN/AxP TUftXHzHNNc00af3gj3VXfGTpg== X-Google-Smtp-Source: ACJfBotDF10lnn+dJBk+bp+zPXMHXk3Tr44XR/kSXHYOEisyOOInXBYgIMS6blOX+cZDBnt83KT9qQ== X-Received: by 10.159.253.143 with SMTP id q15mr40856236pls.32.1516138739661; Tue, 16 Jan 2018 13:38:59 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.38.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:38:59 -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 v3 02/11] net: sched: cls_flower: propagate extack support for filter offload Date: Tue, 16 Jan 2018 13:38:30 -0800 Message-Id: <20180116213839.24537-3-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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. 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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 998ee4faf934..ebbaba4a214b 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -234,7 +234,8 @@ 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; @@ -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 21:38:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861896 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="v+pFtT9H"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkBL1WFhz9s82 for ; Wed, 17 Jan 2018 08:39:06 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751428AbeAPVjD (ORCPT ); Tue, 16 Jan 2018 16:39:03 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:43324 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751291AbeAPVjB (ORCPT ); Tue, 16 Jan 2018 16:39:01 -0500 Received: by mail-pf0-f196.google.com with SMTP id y26so2808007pfi.10 for ; Tue, 16 Jan 2018 13:39:00 -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=bvYCQVlb3SBF2QAlaMqhq8VLFo4BQDhJA4LLYTSyzeE=; b=v+pFtT9HNS/ddNs0To/oT+5IBIVDi95AfdggYakNtnO4BByM8UdrrMUhLijZ+4pMsm Qh2XeNutHS5dSE2QpAYEhtJOkgUrp8B1FEDxdGbJigEL+9GkxpdZU6YTnqZt8udV7JpE 2KRVuz9G3yGQkboJHLcR2IhfXcXc5eQYQYF5OrhADlQQUnjI94JmDYfWXbBd4wTd/nFd NVmPbaSXEzBrje7FcLBFINjsipx05bgxYvAJfMEq2ClQVZNeW6tdRZ/9HUU92sOR9R7I IeXaVM11uwkXM8e7CCxZetg62cazPmNwLECKqEn0tDqR8DOizo8WuX5eGrRB03IYJj9k IR+g== 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=bvYCQVlb3SBF2QAlaMqhq8VLFo4BQDhJA4LLYTSyzeE=; b=GwjR5ziCr7494O3yM0DROLM82McPJop59vkUR7dbNXAq5ZFmJI563nYHQxTxX4Ac09 NeLcdK1uJ+nplHlE1js6tgITBwE+heloNY+XuGgyP5c5xd4ALWHVBtdfhD/nZM4D2i7Y 2g0jbOHIJsO/BSMLq4I01wFuunmOa4MH/G1O3hCG4k5wMOV7N7/f24Frqc3xhb88JbSB MGhEeVT66ULF98RUO6aTaNjQQ6Gcp35AP8a2c5DKVn+Kr4jO70A+EWwofsl3bCEvAAw5 SuiCsjDryiGJ/GvchF5xLPsEUzb8NZfzjqZ7jCAfDCeVayw3dQcDxJOCaYFO4rg/iwD2 VgpA== X-Gm-Message-State: AKGB3mISX67ouRztxFhuQ9kPJzuRL3+79hy31FSa6SshthUcwleD5mBi PkHVh/MTzskmXtrFGv5OP3P9kw== X-Google-Smtp-Source: ACJfBot1H1jpldZVnHSZyRkIlOnJiy5m/t7H5j9qE2syoBmbnkcqszXZZh/3luCO74yHIel1RVF2wA== X-Received: by 10.99.43.137 with SMTP id r131mr31474274pgr.205.1516138740667; Tue, 16 Jan 2018 13:39:00 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.38.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:39:00 -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 v3 03/11] net: sched: cls_matchall: propagate extack support for filter offload Date: Tue, 16 Jan 2018 13:38:31 -0800 Message-Id: <20180116213839.24537-4-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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. 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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/net/sched/cls_matchall.c b/net/sched/cls_matchall.c index dc3c57116bbd..16752abcb76b 100644 --- a/net/sched/cls_matchall.c +++ b/net/sched/cls_matchall.c @@ -85,7 +85,8 @@ 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; @@ -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 21:38:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861903 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="19UHpCOt"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkC04kV6z9s83 for ; Wed, 17 Jan 2018 08:39:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751662AbeAPVji (ORCPT ); Tue, 16 Jan 2018 16:39:38 -0500 Received: from mail-pg0-f66.google.com ([74.125.83.66]:37929 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751117AbeAPVjC (ORCPT ); Tue, 16 Jan 2018 16:39:02 -0500 Received: by mail-pg0-f66.google.com with SMTP id y27so4162319pgc.5 for ; Tue, 16 Jan 2018 13:39:02 -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=DpHpkYaBqxbeS0oy1CkJVV6eYWLp4LPcrkcWDUIC9x4=; b=19UHpCOtFUQqoYPSnjHdQXrILyw5/MApffJTxOqVKfVOJH8PJSiXX60eN9UIyULOTu 0r8MJFL3R3lApv1PhWRRTFWNF9BqUyFhFzH+UVnrGIt105D/o6o3fRgmGP2hq48BYBXi 6Ro9/Rh4KVVOWopW0HGwjJOCmuV1//ttY9Jg+gJtmbcyveHUJ8pQ0v3nCBVR6YVxIHuP ahOzzHHdJ/fCjpId2E27yMQVKB1Jd78XQq7orBIMj9Ch0bntJ2n05Bc7xBKaFghs9wK6 gQJJukLIcgoY0hjeRw/k1AxaLds7X3Bw4KOEMJFqjP07p40QwBQOeTbaJXMhu1Jq3VqW hLfA== 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=DpHpkYaBqxbeS0oy1CkJVV6eYWLp4LPcrkcWDUIC9x4=; b=et1R0TR3xhW6X/gEIeVcKNUwlRK8463Cwa/beMz2bIcmFr/reIRRRzKjL9NHzcm6wO 3q049mJz5SZaMF4qZiMnwk4rz6EFYvWxmg7aZ+z0irR+PrP84ULniVuDCLyljCzVnoln w31zc1f2I2N7UZ6zYS9pb4inKB5itubzmw2YY0t015mOnYj2K4o9iV4EhQclneT0rUbj dcEizynwVDEI0cpz1siXs9CXNsE+dmbQK+jb5nthzdkmt+3Ih4hsmPYo5yu8V56WNCxR trswUVReVWRj2AoXp6JzGC4ztHxXouEjmCCDr2MF3QIMX5U1jml8ALAsXIOuBXP10Wph jREg== X-Gm-Message-State: AKGB3mJ1eGwLSnwV30KsFDByNk47bxqZbddi5ZQMefL5pTHgNVB57qDl 8Inhqfb+AQOBIEtQKOJG6cdMWQ== X-Google-Smtp-Source: ACJfBotJVAM0luMCe8iUVv7Yo9CnOqs0CQJgk87RXRKonkCwLzUaPZ1IFofIhm5vITyUKQIQ+hyixQ== X-Received: by 10.99.127.85 with SMTP id p21mr29662856pgn.137.1516138741782; Tue, 16 Jan 2018 13:39:01 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.39.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:39:01 -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 v3 04/11] net: sched: cls_u32: propagate extack support for filter offload Date: Tue, 16 Jan 2018 13:38:32 -0800 Message-Id: <20180116213839.24537-5-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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. 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 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 3ef5c32741c1..671eb952f6af 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 = {}; @@ -542,7 +542,7 @@ 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 = {}; @@ -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 21:38:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861898 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="o/tNOrxr"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkBR1d6hz9s83 for ; Wed, 17 Jan 2018 08:39:11 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751477AbeAPVjJ (ORCPT ); Tue, 16 Jan 2018 16:39:09 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:43325 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751291AbeAPVjD (ORCPT ); Tue, 16 Jan 2018 16:39:03 -0500 Received: by mail-pf0-f193.google.com with SMTP id y26so2808053pfi.10 for ; Tue, 16 Jan 2018 13:39:03 -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=CkIZ49ErU8iQ+9RV7qcHjKhJZYDevbCiA+PNczTbkJs=; b=o/tNOrxrfG3SwG5Gb281W/baf41EKz7Txqdsv8v1YAhQXrpHB6prfjYLO+0j6vO+ZI o7cA/R922gY0pB6eDx2ywI4xd6ENVlw6Af/kWGCS6xHS3GKlCbE+Yc4nAUddVBeKdfar 26mITq65L8BYnOHmhJXqkl8zRTSUoDlu8gBlI8PBaa+/XHl/Uuhg31xLd0G0ICFwEDSw Lsc2tT7acutjOJOWfowud256lC3/ap33VbexKe5mnohxMpOguJ73MAwqy2aUGoHMpEME MJjpqKxi7Mm/Lndi/iNOJLWPh9IyJCcePiLA3DRk2OWcSAdahVT63aiJbeEVg1w4a1kB q/Gg== 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=CkIZ49ErU8iQ+9RV7qcHjKhJZYDevbCiA+PNczTbkJs=; b=OE/AhIli+sCU2EXFFEw4RTVDd0Algx+J2YCD7vcg4h3RmsZs7sR3Kiaaxq5ZkX7uz0 05Hycrc/BxTplYpWKaNCVgFqZ8iLOqn0tZkyHzWu7CCKyg2cVrpQMCv2pUBDanJuaJMm /ahurCiYKspiwbADhI54Vb/SU6Wmg8JKzyRhCZmAtU/u1vEAFYrz752I8P/Nx3Vjs5d9 ecvFvVRQd+nHsYqeGg0I+t6X1gJFeZfTINjfEFH8wr84odkAFxowVPkufB2YobiZgw1M 0423TGGkNDlvUm61PabUl9Q2/EHW2KI+IKL5/SEl6T5M/yi9QeBOoEXsQdGKteHCOGuK C6xA== X-Gm-Message-State: AKGB3mLIDRrGwC4Op5U6omMNC/aTfvL9fs1cXmt6H9Z1bOrjefrJKYMj aO+4qxfCl1gApDzsC8G3qod9OA== X-Google-Smtp-Source: ACJfBovyZETcAazkOEtatDXBm5lDd7SyRirJSJMlHZ9i98SNfvpb2678q7Nbf4DQzd86cj+peo0r2g== X-Received: by 10.99.122.15 with SMTP id v15mr23445994pgc.175.1516138742777; Tue, 16 Jan 2018 13:39:02 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.39.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:39:02 -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 v3 05/11] net: sched: cls_bpf: plumb extack support in filter for hardware offload Date: Tue, 16 Jan 2018 13:38:33 -0800 Message-Id: <20180116213839.24537-6-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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(). 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 | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c index fcb831b3917e..70397862da4a 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 = {}; @@ -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 21:38:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861897 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="y1f1xutb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkBQ23r3z9s82 for ; Wed, 17 Jan 2018 08:39:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751441AbeAPVjI (ORCPT ); Tue, 16 Jan 2018 16:39:08 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:45204 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751434AbeAPVjE (ORCPT ); Tue, 16 Jan 2018 16:39:04 -0500 Received: by mail-pg0-f65.google.com with SMTP id c194so10146547pga.12 for ; Tue, 16 Jan 2018 13:39:04 -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=LkTqfog01xlalev3B9eL99ejHY8SCedrSPH1IG7F+HY=; b=y1f1xutbKWnoY3yoLQghv+ED50KZMDjq6QOX+gwEvb0qEJzwuY6URtj2XAoGTNHcq4 9PyF+pfACM/6a8jvfkZfHyL+jbOnwazloQnFiqLuWCQFK/+bcf7h4zhETlNN7HCt2C8t weA+mQd8A9yULcn/SxnSq4BmG6RtJ6QjWhBpj6ndCwp2pK+7IkCYt+Znsddxe/m9J2Fc OJNAswEmNOvF5fj6K973zzNfj18IT8KCx9YuQAQnku5oTv8uyXvFpT785+L2pe5ie32E 9FIWdfSEsjfevmtNge3DNQp3xO3JFmiJWrx+aNIMDnb/Qp/y4yU4LtUtCtBcSJWheesm bGaQ== 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=LkTqfog01xlalev3B9eL99ejHY8SCedrSPH1IG7F+HY=; b=Pua4jhcOJG8r2yVAFcAWjLqeojQ/s/BYA3ByzRjvnBEIJTNdviggnR5ahd7bOg3T14 PJrEqmBatJdvgC7ibkwEYtUkscqNeGbTnlc2p6UAFHx3izQT1x21vqrB5RWze7zNQ1+v +tA5ntZDgStyufu3a8PjzMM2BX6VjFTJSbBuD0ET9No2vLbkyC0B6yXvcKu31DvSPj1A dyNXLxV+IbFJs3/nuQFYMzVBUyXNQOIA0rmDg/BuzbRYGVDBN9RdtosSJ4E4k+QPqLiP N1rOdqAE4W6K09s2ndzJgfg/7imI8MuYpdouLKTU0xparYGOu5YJSD3AKuS8YFPMk7iN uqXg== X-Gm-Message-State: AKGB3mIpWGw2FPj+FZkljtsNSJx1XNJcd+jLdHjuQd7tTJ2RUV4Eeu4l EJeYdx2Yy+mTXWTueUl2lkj4NQ== X-Google-Smtp-Source: ACJfBouS3EtfUWwZ6EBjvRnFz+UlALVGBF/HRfqIyaE0CHL1LJ3Gr2N2aDylewLuzNIlWLRfjqUNIQ== X-Received: by 10.101.88.7 with SMTP id g7mr23053939pgr.249.1516138743939; Tue, 16 Jan 2018 13:39:03 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.39.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:39:03 -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 v3 06/11] net: sched: add extack support for offload via tc_cls_common_offload Date: Tue, 16 Jan 2018 13:38:34 -0800 Message-Id: <20180116213839.24537-7-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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 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. 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 70397862da4a..d15ef9ab7243 100644 --- a/net/sched/cls_bpf.c +++ b/net/sched/cls_bpf.c @@ -159,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); + 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; @@ -217,7 +217,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 ebbaba4a214b..fe7d96d12435 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; @@ -242,7 +242,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, extack); cls_flower.command = TC_CLSFLOWER_REPLACE; cls_flower.cookie = (unsigned long) f; cls_flower.dissector = dissector; @@ -271,7 +271,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 16752abcb76b..fe6b673db5c6 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; @@ -93,7 +93,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, extack); 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 671eb952f6af..ef1b746de80b 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, extack); 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, extack); cls_u32.command = TC_CLSU32_REPLACE_KNODE; cls_u32.knode.handle = n->handle; cls_u32.knode.fshift = n->fshift; From patchwork Tue Jan 16 21:38:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861902 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="nUn/h1CF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkBz6CTvz9s82 for ; Wed, 17 Jan 2018 08:39:39 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751631AbeAPVjh (ORCPT ); Tue, 16 Jan 2018 16:39:37 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:39148 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750885AbeAPVjF (ORCPT ); Tue, 16 Jan 2018 16:39:05 -0500 Received: by mail-pf0-f196.google.com with SMTP id e11so10378540pff.6 for ; Tue, 16 Jan 2018 13:39:05 -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=nUn/h1CFdGFuNKaQfJQAY8zZP7Q4H37v0uIwwssk0IwnxnV/ob6CnUQy2AkI3eZQ2a nhxQNU0AtaDjm8BnRjrocNb0sMpMghJ/KoCdV/UV8tGPUiRECU9rWZosGXc1b1W8PnAS 0Ad+yRMKhPnQEeCeW2fnQPqYcRCwE0PjCDxf2at6NIzjtIQzp+eTm7ecd88p4FOgtWOO LG5yeq+6qt0vA22uusNrt0tE3xYS7tef5ry/LjhZIRqTlbm/PAemzHmod+VndFA8DEAd E5wjxlXgJwUlKFq/q3zrQhJi29jLloDjRYcM/143TUd+7V4XfjUZRDoXJaGcAktFHmzE PupQ== 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=Rx/iwDueFBciYhch2GJDxIiUh58pd+vUMRcPDz3GHaVsda76CocPBdAP1XKWey7gUm uWlbeiE17xIIJC9ajhHoht/3zp8AGS2bcb5O0uhY+hPHoeGuJKVBs3/mEhsooI2PKdpD 39vExSnNAffnwmNnajLyh+NZrRSd05isd8P4ktBW+dx1vIo1WbnRbMCShb4fR+KgmS50 SgDtqyMnUpPpR4j+0qfdUofiEBqpOaTQHqUJSvTzwd+SY9oXp7XE6Okk4XSSzE1K2kXt S3d98kAXJwrayPEvIPcUs/PxEUWRZ1EQY+UnwY984LrGjW2z9PETL0WEoUwRWmaAq+bZ uG5A== X-Gm-Message-State: AKwxytcJYEGAkkocXRW88JjXPXy7G9EQZjfX9xJ27QoUnm2vyBjMCRBK uNtWk98cUd4sjEYomi2Pww5x/w== X-Google-Smtp-Source: ACJfBovvbrEmpIRfMAe5A1sp/LU3SWeLfneqYIbGmeW2Jehpm552Po95Cer59HpHnWXXy7+wckz4mg== X-Received: by 10.99.111.136 with SMTP id k130mr2490470pgc.314.1516138745340; Tue, 16 Jan 2018 13:39:05 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.39.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:39:04 -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 v3 07/11] net: sched: create tc_can_offload_extack() wrapper Date: Tue, 16 Jan 2018 13:38:35 -0800 Message-Id: <20180116213839.24537-8-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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 21:38:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861904 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="P3DjpQUr"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkC70bSDz9s82 for ; Wed, 17 Jan 2018 08:39:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751621AbeAPVjg (ORCPT ); Tue, 16 Jan 2018 16:39:36 -0500 Received: from mail-pl0-f65.google.com ([209.85.160.65]:36322 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750908AbeAPVjG (ORCPT ); Tue, 16 Jan 2018 16:39:06 -0500 Received: by mail-pl0-f65.google.com with SMTP id q2so7153126pll.3 for ; Tue, 16 Jan 2018 13:39:06 -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=P3DjpQUrUyqM5cml01xnp0KjsT76ADlTCcxn9mXmBmtr4YVcKVoSYjIV1H8S17wI4e 24fxjfeYkEL9OIrBQ1umpwk2emFeZJCjLarQ4S2+TxYF/LlIxvBt5fePq5BEoONvEjgR m5v9wlpJ6Qrxmwm33cCkEh6PjllOwXmyTFTj5Cam7dg2iAkm4ygoYdcXvTBPD2CIzAe9 UwPVCgKD2NnP0xDnBKLkx0Y13shsmF8brH5kAEA8ukhLSbqLbSK6KHs8IGF52TcTgP8F pwH0jcmB/yC2SZJ0wfFWeCYazNB/01ICDq6GoxnJPAfieTBSiB8wypWAAq74I8xtvMXB IT8w== 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=cx328uIjHL2yt77Xo3TCJ7gRCCHDoWOgL2uWW8UW59Duog0jH3OD52l7m9lAlu/chk hAlb35tQ4suYlEfIjenTKNKm4qQ5PY6lflmvAnjyBI49RLhoui27vdqYS6ySV2CM/4OE P+8z6mvMyiXb57dztsiEueRRw4Xgv7kw3XUCifrhaOJXHuv50B/tMtJ3tS/ZVL3ZEaPH NkvGD5oKrG6Ikv4FrM/ZaAx7To1PJHUfbBo2BhLqlEuUDkjvBafORgZgVN9WLQERkDJN QllYaWGW9W+ZT0A72aSfi4yWJFaC5U9tbFD1f1toV4KrlKLouO2fwjFNA4RW79inqygJ R7tA== X-Gm-Message-State: AKwxyteKfwqwLvRX1KS17qCI21gwQyzSjjJd5Zpx4gp5zHoWCWuzzkWT 85roeNgYrc+wYsY/3K5ac8hGiA== X-Google-Smtp-Source: ACJfBottHg671rR+czrJ6dAANpwgOSyhTfgXPEjqtuwuPlu71IEv9EMZCEO7+xllsmZVxmqnbbC8Jw== X-Received: by 10.84.235.11 with SMTP id o11mr15116369plk.109.1516138746377; Tue, 16 Jan 2018 13:39:06 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.39.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:39:05 -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 v3 08/11] nfp: bpf: plumb extack into functions related to XDP offload Date: Tue, 16 Jan 2018 13:38:36 -0800 Message-Id: <20180116213839.24537-9-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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 21:38:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861901 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="LK3/WYYx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkBl5Z7Gz9s82 for ; Wed, 17 Jan 2018 08:39:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751559AbeAPVjZ (ORCPT ); Tue, 16 Jan 2018 16:39:25 -0500 Received: from mail-pl0-f51.google.com ([209.85.160.51]:42316 "EHLO mail-pl0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751430AbeAPVjI (ORCPT ); Tue, 16 Jan 2018 16:39:08 -0500 Received: by mail-pl0-f51.google.com with SMTP id bd8so7163529plb.9 for ; Tue, 16 Jan 2018 13:39:07 -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=LK3/WYYx3cTVle23Kb28DIXSm5FPWSxOgHVM+0Cgpp0/5VbD2MObqkoM2JshMQJuIg xsvwDtR204DLMGIEF5ij1r0wTpLif+B2kCZp1H38SsV3TJyIpb+aJ9CE8Qpu5Ngo51/v 0Cxf7BoI4tmiHXLFd4Y3kbpJ1wMT+xpLiOj6MZgVOfilzPrhgnFtaO98Au3Jrx6WrHA5 wxQsNFRbtcZsOGhvz71XJTf2RXmroMhGO0jMde2bE5e5nzY8Sc2dUhuFBRvxYPlBmj8h pBklq3VwaclupKbj04DPVNtNO8AoBLg3I/JuGSr5vSGb9Bds4D+dNngfvIzJc6IzozNa W95Q== 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=QVIt5eIzq7+hx/kfnmNzSIbukRrm4z78vO989SNgIGeDXX0lVnpcniHANCIzhJaPqr Hn4q9SFPue9zZNCsPj0rWsqmXO4EktmXlN9z+QLXPF2gXJecl6dV2omey+aOjnvxuoTS mbSg1JSBX/tGzQQIhN8HlXcpo05M26Yzv0rLz3K3FuFJL3pnPGryTWfCEGfhAmTniDRt XIfDQBPYvSj+cGEhJUOP2bXtZVOEks7aF90ZnDpeOoXHGaIGLd00A1tg5ice3PBUJyUT /m9JhiVAU9gwgT044WoieJXSFC4dDB5PuTuc8EvqUoL9s0hI1u5yYgIlAfyp6CWtbBFK HVug== X-Gm-Message-State: AKGB3mKiXogVYqPT/+/iQdkJPJ1mIHQe2TsNoUgHQS9hF18q2Hdjk8Nb y4uqIdQcZwfSDzXEj7Byq0w8YQ== X-Google-Smtp-Source: ACJfBotQqGN8pQkI4WEDEh6NyH46pkKhdnY6gVslXUO8Yd9G5PnWCp4nc6XLfsFZxYaGvPgXafFXhA== X-Received: by 10.84.252.150 with SMTP id y22mr29678709pll.89.1516138747593; Tue, 16 Jan 2018 13:39:07 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.39.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:39:06 -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 v3 09/11] nfp: bpf: use extack support to improve debugging Date: Tue, 16 Jan 2018 13:38:37 -0800 Message-Id: <20180116213839.24537-10-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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 21:38:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861899 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="ocyjBX4r"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkBX1l3Rz9s82 for ; Wed, 17 Jan 2018 08:39:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751534AbeAPVjO (ORCPT ); Tue, 16 Jan 2018 16:39:14 -0500 Received: from mail-pl0-f66.google.com ([209.85.160.66]:45519 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751434AbeAPVjJ (ORCPT ); Tue, 16 Jan 2018 16:39:09 -0500 Received: by mail-pl0-f66.google.com with SMTP id p5so7171305plo.12 for ; Tue, 16 Jan 2018 13:39:08 -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=ocyjBX4rHT0CiggP+dUni4WvpO7tTA2ySl55sQA96iIit3FmyohKV/CG0cOTCmObZc GQJg8FxNi/3Ca+B/N15RUgNeq+SoOUmM4zGXO8or8YlHDcQL3RLhMBlWBO9dH0nhpq0D rEfx+sl25tFXfk6qTRAGGXoTT+24uJ6oY9K7RyVDVhgqOeUmS265Gv/NGUeEPVT8+WUo s/ZsW3dbO62988pt2ZutX2YyOq5JbDPF5rtYS9aydrMVVVMUtkC4sHflZI7kZxVIr7/F 9u5sMY+jU2bE5borwzRuNbP+gmnHKLLlkbCtd1v1KwSdh8ni7SXAZ6QRLFlBpej6BKA9 AGig== 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=t6xmKsNbTvOx7KkAR64GADcGCqVcuIYtQsOM7zNpxXIR4b/yeYtTHZ68tUp8A/ZzdL Ygcd4skYA1sIA3G19Iw2Nf0fA3kTU40SlvJPGc6wpxNA2gErP5mg4H+WoJLDTSEbFwW8 yjIEjZAMf8mBbPWnjwnd18PRrEnOQqd8klT8ro4U+/y9GaNZ/shL5Uqv9eViOdOmAKV4 C+O3rA9xqRYSkDra9yJr0mIAIiKjcdbGdb4P9LY4WbOPRjxLssGVknOBm0AkIy1BOdY+ ygTYJZihh38Hek3FKiVuQk6gXPcStHREr/F7DyKmUgJQcPhMNfn/jzbD4tknZIYvY4oz DJ3Q== X-Gm-Message-State: AKwxyteK+B8i9XJGYLaWeidl9CW5Uu+/6V28X3x+nqDJ5g7cwFFL4eRc /cqfOuEbWDls9LqWcXuNZLluHQ== X-Google-Smtp-Source: ACJfBou0FH6W4ICxdbptVP2AClxojs49KbwpyZYpLVUDAkbj7+ceqITjUy+wvZUKdsJDt8D5O/9abg== X-Received: by 10.159.207.134 with SMTP id z6mr3765025plo.352.1516138748581; Tue, 16 Jan 2018 13:39:08 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.39.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:39:08 -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 v3 10/11] netdevsim: add extack support for TC eBPF offload Date: Tue, 16 Jan 2018 13:38:38 -0800 Message-Id: <20180116213839.24537-11-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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 21:38:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861900 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="xQywxXkX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLkBb5bYYz9s83 for ; Wed, 17 Jan 2018 08:39:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751110AbeAPVjN (ORCPT ); Tue, 16 Jan 2018 16:39:13 -0500 Received: from mail-pl0-f48.google.com ([209.85.160.48]:36264 "EHLO mail-pl0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751291AbeAPVjK (ORCPT ); Tue, 16 Jan 2018 16:39:10 -0500 Received: by mail-pl0-f48.google.com with SMTP id q2so7153222pll.3 for ; Tue, 16 Jan 2018 13:39:10 -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=kRtIBrTuiEg8NlOctIB6zLMgiSJUl5gPm2ADJFBK+r8=; b=xQywxXkXCyq/ggqboLMrPppsWFP6qDh8JOg5qWJtMKWuS2fWFOfm9etHpaT1ripqQ0 cRuBfo8JDDsO3X/Eu/ECL6p7D5QWnfUPffFi4/I305n2nzpOJ8XC3tF6JyOE2MmVQ4TS sTZ6j7FPw58A60Er/qWOlUKUXZ/ZKfLaqWPBYwZZlCxbsaSUR8I2eZMuL7It3yrrBgwq L3n6MNzrWLXGX/aluRRT3Di3hr9PzulKNhOLiu5Q8toOqYOrbaqASHmflvIhP7pS7baM WT7GfDeG+S8IF8xFK8T3RrB4WzZdB9o9MutzgxAS4zoHICBMncRwNxloI9am+hyg2xMN 9JaQ== 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=kRtIBrTuiEg8NlOctIB6zLMgiSJUl5gPm2ADJFBK+r8=; b=QfGi/bPnTT4Ug1N4UUa86cYEqcw7kM5KAnWjAw6qS9kVg2THqOX3abBUkEJmf+g5Ow e/zaZPzgdktC3h1DD9+KXVtHceydS405W+NcKlgSNTc9oPs9RVP+jHmXjPTma/bVrwCC 8UgCftmk3SMIoJuP4vlDkkzKQFnuRCjx5sMTs5BKslMXg7G9xfw7ta2GIOA0vjfLKHZK 14QW2aj5U/N/Xuy2KzMQs+fPHnbe5oOeOpyMC/mjRzXkEpqpoti0ZSEEtixaFodIouy1 cb4EjHSHagEIYtCpMIM9AhsLZQMfLB27vwhLjtQQJFYInt6SRZJvglHB9bPd8IU6vlx0 OCgA== X-Gm-Message-State: AKwxytchrpqz/NndGXiZUPeXQjNGPNIfMK/ry8lldjVx5DBuH/xTeFjC E46fjox2wDmdGpA1PI2kpwjvww== X-Google-Smtp-Source: ACJfBosIRTQhoWar9M1Lxdmd5oxg8fWWHgL8J1/LPwdrEOIlRncP3vdJDkFzoP6O7EnM6Bcb8SSi0w== X-Received: by 10.84.142.129 with SMTP id 1mr22264473plx.235.1516138749787; Tue, 16 Jan 2018 13:39:09 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id y7sm5073736pfy.96.2018.01.16.13.39.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 13:39:09 -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 , Jakub Kicinski Subject: [PATCH bpf-next v3 11/11] selftests/bpf: add checks on extack messages for eBPF hw offload tests Date: Tue, 16 Jan 2018 13:38:39 -0800 Message-Id: <20180116213839.24537-12-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116213839.24537-1-jakub.kicinski@netronome.com> References: <20180116213839.24537-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. iproute2 may be built without libmnl support, in which case the extack messages will not be reported. Try to detect this condition, and when enountered print a mild warning to the user and skip the extack validation. Signed-off-by: Quentin Monnet Reviewed-by: Jakub Kicinski Signed-off-by: Jakub Kicinski --- tools/testing/selftests/bpf/test_offload.py | 104 +++++++++++++++++++++------- 1 file changed, 78 insertions(+), 26 deletions(-) diff --git a/tools/testing/selftests/bpf/test_offload.py b/tools/testing/selftests/bpf/test_offload.py index e3c750f17cb8..28ddb30884fd 100755 --- a/tools/testing/selftests/bpf/test_offload.py +++ b/tools/testing/selftests/bpf/test_offload.py @@ -25,6 +25,7 @@ import time logfile = None log_level = 1 +skip_extack = False bpf_test_dir = os.path.dirname(os.path.realpath(__file__)) pp = pprint.PrettyPrinter() devs = [] # devices we created for clean up @@ -131,7 +132,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 +140,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 +176,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 +325,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 +387,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 +396,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,6 +449,13 @@ 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 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") @@ -470,6 +492,14 @@ samples = ["sample_ret0.o"] skip(ret != 0, "sample %s/%s not found, please compile it" % (bpf_test_dir, s)) +# Check if iproute2 is built with libmnl (needed by extack support) +_, _, err = cmd("tc qdisc delete dev lo handle 0", + fail=False, include_stderr=True) +if err.find("Error: Failed to find qdisc with specified handle.") == -1: + print("Warning: no extack message in iproute2 output, libmnl missing?") + log("Warning: no extack message in iproute2 output, libmnl missing?", "") + skip_extack = True + # Check if net namespaces seem to work ns = mknetns() skip(ns is None, "Could not create a net namespace") @@ -501,8 +531,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 +562,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 +646,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 +672,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 +710,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 +758,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)