From patchwork Tue Jan 16 02:08: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: 861172 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="stlQGbhY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDDm0RK2z9sQm for ; Tue, 16 Jan 2018 13:09:28 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751145AbeAPCJR (ORCPT ); Mon, 15 Jan 2018 21:09:17 -0500 Received: from mail-pl0-f66.google.com ([209.85.160.66]:38669 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750811AbeAPCJN (ORCPT ); Mon, 15 Jan 2018 21:09:13 -0500 Received: by mail-pl0-f66.google.com with SMTP id 13so4978200plb.5 for ; Mon, 15 Jan 2018 18:09:13 -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=stlQGbhYM4Pue2yfb8P7G/fUnZf3bGrisyC57eqh/WhLCx+apRnRIQwp6rHPP67eTB 84qT5iKXGGn1mYV7DMr2+O/v7YFVvqwcbAXc0qTkAuXaGXeRD/sS9ASCNLVrN/duINsO 5EQJT9K0hAgtu68I11gDCQ5Vj911f84c8NfiNqZmlDD53QA3Y/qAY33nNJ271XFbrCjn WsSfmLaW9Hu2txLdfzEmiXzsJ6JgJ4LELFKNsMu5Mj2fSMH+CtBikjJEydv++jZg9EwJ o6IZyvBi0Qys6UoZCfZHHGd0hE1XJOeIHjx/u3Bq0lRDVCmS4zi+2cmuXhiWJwMf3ame h/SA== 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=icWUPbVbohZ9eVk8QQ58dL71ipKdoZoOl/TQ8ek1GGTA4geGrI03lmBraZwcyP+EYq 1GUxcnhDuu5rkXSbpJpq51hjDsz6IBWH3V3fXR/lhzpjxEKZx9bbgva4ng1pa7i6z00D NYZ3U0a2Qn8Dd06Z7t9KukReazxNhgJ6AxSWv5Vh9UActfQxXJIGIuAi9TPP0LsiRNsH J7tq+k9hYquB02z7x5w/rcndmwe/vMNTK2tf0Rj8xmEBuZW+JWIqgHYv/j9xWnvW8/9O U87Kadqo6BMv3ITXPR5Um2IX9Vgz8vEwKSOh3a2FgNW8VdsEZziKvsHrbQZxjAT+7pqA VH5w== X-Gm-Message-State: AKwxytcMvcNFIoVZlaLmkFs6cei3zeZOv4BApds3o7GidkC2vbwpkXaC 7MHJpRTWn61S2pID+2i29M9+UA== X-Google-Smtp-Source: ACJfBov730CQkFpkyPtxhKihkZAB/uZ7CLwMWq4bne+4R0JjDEDctSvzGmvePPYNJbMkr4cqjP1Viw== X-Received: by 10.84.175.67 with SMTP id s61mr8526108plb.3.1516068553123; Mon, 15 Jan 2018 18:09:13 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:12 -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 v2 01/11] net: sched: add extack support to change() classifier operation Date: Mon, 15 Jan 2018 18:08:35 -0800 Message-Id: <20180116020845.3496-2-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 02:08: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: 861173 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="oVZWOK4y"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDDm6s9Nz9sPk for ; Tue, 16 Jan 2018 13:09:28 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751236AbeAPCJS (ORCPT ); Mon, 15 Jan 2018 21:09:18 -0500 Received: from mail-pl0-f67.google.com ([209.85.160.67]:35598 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750776AbeAPCJO (ORCPT ); Mon, 15 Jan 2018 21:09:14 -0500 Received: by mail-pl0-f67.google.com with SMTP id b96so4983388pli.2 for ; Mon, 15 Jan 2018 18:09:14 -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=oVZWOK4yqbKMS3Em5yHYzlsCTCehGJLpPIznHRa4zQPOqZTtSRqAfIQruKZW8490yZ L+Idcfg4j4IGqoNF3N0OUBWop7Lkxr2C1jm4Yxk/BcJuYduKcizXTFikga7Dg6IjPsBx YB1VI8pnSoABwQa7ei3ZNrFUOePAoHx7xjXBQcnYR1pFTlQGkQsvQeuqyNB0VhVpvoTg laVyDAY9qPUk1X34qdl2ike9fsKzVwQOYoSQb35NBkzdeBZ3bUA5PLVlrPa3ww0Suom6 2h718l9gCoYtb4jBisaoGbBd0Qgip1pBBpHraR2PJJvBwC23otJH4dSFSgTLKjqoen/j 0iOQ== 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=Er0cnhm+UzVi0xOGJfNnbuu8pWoj9bE+AIwidzBmPgB9ts95kTPuC5h3yoOWQb5/kL 3rPpGEBrOzs4aAs60x9WJkXIhG8jUhCNaZxPnyKNnb6ziPCwWokg2IeFMJC426pkaETp Bg74vgg24bXnxP/gJcGTiXvkOzrZYzKVPUmnksra1hRiKF37tY6y0l5Va8fo+mahrLFv 5A857CU1egjsi6YPlCLqqu0+r+QpLlAs4+cBoWZXYrrHuGDMrrkxdqp4yLbSK7VWM2Og s/aJ339jzB3Q1P4XBTSFjE5lpXRpJHaHJgJ9emfWBunY2LwpmaZbpAiruM51hmDuthMq l52A== X-Gm-Message-State: AKwxytdOS7Db+M/w0abtVqzLJZFn8+vj7OgkUdbpTROVMq3hZO20SzrB Ye7I1hqzLtsTwjbQk09CLJQnHQ== X-Google-Smtp-Source: ACJfBovsZs6y3HnvRz/oYLaxdBRLiOMC7mgtAKY8RbUjyV+pq4pATzyPAAIgduFMmWxlG7bbuZiQxQ== X-Received: by 10.84.217.206 with SMTP id d14mr25107621plj.36.1516068554382; Mon, 15 Jan 2018 18:09:14 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:13 -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 v2 02/11] net: sched: prepare extack support for offload via tc_cls_common_offload Date: Mon, 15 Jan 2018 18:08:36 -0800 Message-Id: <20180116020845.3496-3-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 02:08: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: 861182 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="UEHqD8lC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDFp68Byz9sPk for ; Tue, 16 Jan 2018 13:10:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751416AbeAPCKU (ORCPT ); Mon, 15 Jan 2018 21:10:20 -0500 Received: from mail-pg0-f66.google.com ([74.125.83.66]:41403 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751002AbeAPCJP (ORCPT ); Mon, 15 Jan 2018 21:09:15 -0500 Received: by mail-pg0-f66.google.com with SMTP id 136so8201608pgd.8 for ; Mon, 15 Jan 2018 18:09:15 -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=UEHqD8lCI6HukNF6sfeEHcqu13+EuWuT4qq+q/UE9t3s5wrpBB2s53T2aQcbMaJ2Ti LIJB9f+nTttnFSzzZ/tur5Iez62O8v9xR6r/SDYaPsrftlgJ9ShKAbEUSa9X5P3rB/3a dbmQzFTVpiVKPR3W72MgZR4pp1cne/d6l7/YMC0JmNVc/aq3sO6NrvEpyvPB3MOc8rre zq65EOPUmuLVVO8fhlzb1xDOJL2l5WqRhJtQUf0BxqD55zzAGSpAgxMG4KBCTVU/FfNr 9Mo/0/zvMGCts8wJASMBMiSxBZabYzYQvK9SD0sIeL3ZjhA0PH1M+RXCEk21SIekA88H 6rUg== 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=Dc10yYZcNBETj27WtkzelFt9uQi38jsHyPMMLl2Pg+WeLdZPvN1KLrNMoYyJOrQApY UF/0Cd9Z5ua0HxTJW5WGENwmlxMM48N1nSgSvNcMY/cZavf6RtWuS3mzSD26u43eNuPI JtrItzJx5B/Ny5KhPPLYWX5Q+j9ULMswSRs79BuUtf88iSbg+5fWTakHsCONAYgr2d13 PJLVuDdsSgAPFspgoiio5Taped4j967Lkz9nyayR1cjGJoSyIFoOsrS34JDp+vxAl+t3 lunbPA3nS3xWHD/+Xle7B7G/TQlFsDIHYeDzia3/M5N8LSWilOnxv4HSC8w4oGssJfgT AIBg== X-Gm-Message-State: AKGB3mJ7wbkNMJp0FCEeSls97cYnOhc8h30JNLGyLzLZFs0x3hzNOjL6 UL66WcHzhDxwpbmONmQve2OZYw== X-Google-Smtp-Source: ACJfBovSDB8J8IbReVhiY4T/KC87W3ylxL8Q3KBzIxRC7pSClAKxymMU/ikFE+4XJkJUuP04I4nF1g== X-Received: by 10.99.138.75 with SMTP id y72mr19770323pgd.90.1516068555431; Mon, 15 Jan 2018 18:09:15 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:14 -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 v2 03/11] net: sched: cls_flower: propagate extack support for filter offload Date: Mon, 15 Jan 2018 18:08:37 -0800 Message-Id: <20180116020845.3496-4-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 02:08: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: 861181 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="0T+fDdjG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDFm1SNCz9sQm for ; Tue, 16 Jan 2018 13:10:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751406AbeAPCKP (ORCPT ); Mon, 15 Jan 2018 21:10:15 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:40995 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751050AbeAPCJQ (ORCPT ); Mon, 15 Jan 2018 21:09:16 -0500 Received: by mail-pf0-f196.google.com with SMTP id j3so8902849pfh.8 for ; Mon, 15 Jan 2018 18:09:16 -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=0T+fDdjGe6X0d5gyFegDdZ6AMUNb8U/x9m029bZhxT6+nRVIcnmh3knyffNkZskgLy c6dVvqgFiHProuBc+VioHlHis6bsTZIa7MILc7Qyj3VjJ324ExKo4VRm8uYO6q37ze5C p0OmcSDWoEDCp8kV8aTzbKrrIKuGkIu1R8olcSe4+d7NUF9KRt2hHIe2/v9FYZiuCYz6 rZSc/CifPVS4mM6hHmtyCzc7ivV8/rJBbxuuUYaqHCgX53lDSJL0emw2wM8A2eVEcFKl G0+hon3iuBSLz0wzMVyhyUV3Mg4LNmrfTkG0Agrzrl90idAlzvozlcYsLU/oGwM9MfbX YWZQ== 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=j1t/cA3eu9dLTGJJKOzZ1btcBht/xc8y5LWroFklpBQjmDSLQGjMNEz647NbPNdU4+ OQvdbWwDLkzV/xmhs1fEi3nwTox+1/osfiHiHl0v6/LIwJihXpO/bnqMntEWKqrCOR/t mFPM/czixcpD9WA5e6od9FRll5unmmk6AKAp6lfa9e+4+oXdC5cSIS8oD3aL6P6+YjJZ lFgn1wopVO5LS5BSqMpdBpmElo6eE7kxDI0nsURDLAOV2wXnuPVhHANqo4S1B5o8s9GA YYQpLIEVYh0CT7C3GFiGngZBIOulbuM3Aw3XMsg8HfORbTsrzob5boyzZYFm9v8LfTvH 0rjg== X-Gm-Message-State: AKGB3mJLEq8fPiBE6HK0x3TRLUl5Kc5SXykHH8mDni3NcN/Y7wm8loG5 YujAYqwXSiJptoDLyMbwYMaeQw== X-Google-Smtp-Source: ACJfBot/jv0KCCvoyZ0H70zi4A7wJOdgRF1+uzjqpLzNvKgC9MreayBx6A8lJkWiTjeTnFN2GvPTVg== X-Received: by 10.98.186.25 with SMTP id k25mr32805339pff.28.1516068556516; Mon, 15 Jan 2018 18:09:16 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:16 -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 v2 04/11] net: sched: cls_matchall: propagate extack support for filter offload Date: Mon, 15 Jan 2018 18:08:38 -0800 Message-Id: <20180116020845.3496-5-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 02:08: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: 861180 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="gW74IWhe"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDFl3cSQz9sPk for ; Tue, 16 Jan 2018 13:10:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751401AbeAPCKH (ORCPT ); Mon, 15 Jan 2018 21:10:07 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:46325 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750811AbeAPCJS (ORCPT ); Mon, 15 Jan 2018 21:09:18 -0500 Received: by mail-pf0-f196.google.com with SMTP id y5so8908127pff.13 for ; Mon, 15 Jan 2018 18:09:17 -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=gW74IWhezXciefsvfQ2xfm7zq6W6aGhvvu55XoLSzbKI/rSVuMmQWolvdytqGq/X+p 6dQX2fjxWMtTNrCVB+gUcT98L0N12XNaYQjObIcOTNbc6xqxcMJ+u+gi6hlVRq5tF93c XKTFgGsPhPa0TYfyfga1YRyRcpAhVtvaSZr+aYTUPBuzvMm/V7AKwJGF9b4y/1J4kaqx yCU4uukUHzbGX7xKYR6ZJ2bwuVcBhyVNaThcfPL4YwhHEPFve/AxU024EpCKPJHtGmBD tfhd0x9vhDjFO9icXmVXb+XMo1bgoMBjgpMSWvQwbuBToLitPWAwDS8fX62edfhKxAJa qsiw== 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=o6E8NietAvvaHvEn5iAINjk/DeKtVlt+zE2wVU1TQyqtdUCCMB9pv/Gj0xX6GggoCF 3HwhTKeuYadBNeNBgJ0oUIbKiX6drCwqvRSLhhsenVZLF5uWHpmO3h27q+5E5swhSrS8 tdqMcctTpkIOPJvhHWBuocrl5Xw1o87jDWMOYdxX+lygKMIv0cpDpDgyHEwFVWJJIQiI R+PjfVvWV2GP3szWGwYkGOwNwnRan3wnpdjgJQNyxlrSzmIyJYFfkobWk1hJrBNK8hBE EFWjKqIhUlspplmk48oRRBulWhCaTYKN4YfB55x+rm2uUGk5s6mqSkMcmmxuSsGdSXFd YvBw== X-Gm-Message-State: AKwxyteHp9rlHSHOZYXv4xkd6p6jIELJ+50wIklc1WMayfqImDTUxU78 y+GRJrz8m0BA83OcagCeD1Z+MA== X-Google-Smtp-Source: ACJfBotuW/MVD+ph0BY1AwwX2wEYS1pbSkVPUTwJQO5HVB+FYi3dGWJMrnZI+C8GFm23Ud3Y8zxUTw== X-Received: by 10.98.195.2 with SMTP id v2mr6096176pfg.141.1516068557558; Mon, 15 Jan 2018 18:09:17 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:17 -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 v2 05/11] net: sched: cls_u32: propagate extack support for filter offload Date: Mon, 15 Jan 2018 18:08:39 -0800 Message-Id: <20180116020845.3496-6-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 02:08:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861174 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="dIJwZyv6"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDDn4Yl2z9sQm for ; Tue, 16 Jan 2018 13:09:29 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751278AbeAPCJV (ORCPT ); Mon, 15 Jan 2018 21:09:21 -0500 Received: from mail-pf0-f195.google.com ([209.85.192.195]:44469 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750776AbeAPCJT (ORCPT ); Mon, 15 Jan 2018 21:09:19 -0500 Received: by mail-pf0-f195.google.com with SMTP id m26so8906895pfj.11 for ; Mon, 15 Jan 2018 18:09:18 -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=dIJwZyv6eXwwXVJXiN22+IoFWuICirmJxj1EjEWvHuki6HfK6r98/a93hgyHr+XoZa TR6GuTfKXgCjP5bdSIJ+YARn1QC/YfA3aXzrqbGK4O3h+Shzq5nbUVwcLzSOrIuFOEU+ TuiufmFgvrHgbdgeUv6X7UeHFvtYaSQB2tpHSdHvTiwLChou1x+v0wt1dL4DDT+gC2be oKmvsov5fiuRpCaFFOQ5r3uckAyhp0PirKXxU3jr79IV5h00GK28YHM/VYFdcQFgmMsZ q6Cvcg/KKMzpL7V+Zj3DjCaLpWYqYH6yrGSZKfyma1uHABaHs7jCda5JGFvLf2nYjiu0 U1Pg== 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=Q+qF7aZW2rTpNAELZ4ilGFfEWg1c1zl7zb79tePdfe6GecyZCkLTyLEJ1//WTyFKRf SgMqvTKZBXWwzrOVyhpMuXNE5T0/ZSvejiFUkSZ7+LOYqryoMVtfMRhObc9nRuf7Dr/h DdtXw6rE3COhF/1Z7qjTTEp1GnbuF6D4Ibzn2iMPXnyr/HiQkxjvS0y5PiT7aem7r3wi LPm49xbecYJUQbfLFoL3b2wH8bLOBE+lNnHQKXhEnzNwI72vxYcBQpOv5xxmOYJ71bsH AZgR2savArRswrvUbLLOLB2RJwqyP5x94u3PqBsEc3+9DHdnnpY3gptiilL5nh0y3PvE b1Ng== X-Gm-Message-State: AKwxytcbn2D1CZywuynv6BnTJl26W5F2mTNE75f9qSfZavXObtjiX16z grll1om5RPtM1l2od2ll17/Owg== X-Google-Smtp-Source: ACJfBouyEEQLa2YBs/nyrzx3azAI7tlHF6xc1Q5OkETKUBSK7OafAnRA5/J/d6c5G35RrodkBhbW1A== X-Received: by 10.101.78.207 with SMTP id w15mr5909875pgq.349.1516068558628; Mon, 15 Jan 2018 18:09:18 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:18 -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 v2 06/11] net: sched: cls_bpf: plumb extack support in filter for hardware offload Date: Mon, 15 Jan 2018 18:08:40 -0800 Message-Id: <20180116020845.3496-7-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 02:08:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861179 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="w8co2SKZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDF90XvTz9sPk for ; Tue, 16 Jan 2018 13:09:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751366AbeAPCJr (ORCPT ); Mon, 15 Jan 2018 21:09:47 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:46326 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751238AbeAPCJU (ORCPT ); Mon, 15 Jan 2018 21:09:20 -0500 Received: by mail-pf0-f194.google.com with SMTP id y5so8908158pff.13 for ; Mon, 15 Jan 2018 18:09:20 -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=w8co2SKZNfSMCWBP1X3X944ZYCRC/ckzm/rXEy1PgpncAvz8jRowKL3zS8ggIt1aIt U408zrymQmVLPTd9BjGZq5J6sDT24yrMzYbNP4F4kJh8UKWLMBrliCrDsVsgc7XKOyDP 40Ti/xa9x4GE+LvVr2l9dwieXqTAcPsBIBLs5hAQ3yWgxner2kWa9DCv91p9yKwN27uD XiNR73ddsa4B1o45PzF3bZhxA2wv5Yo8qdhL5fUJvruiNfPWCNZFImLoP3FhB7A9Kczp rDai0PzgSQHFRB48EDiF7fnqpSFYagEVgWXlvOsyB7YRRyG5QjlILzxjjos0n/SAyA0D C4Fw== 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=T+3UNCKRJ0XcAuqZyOCdNSHWhyGqzhVIbxrlehQsazowoLA0YHSF7T/tCpMVDFw7Uv yFL4Zy3odU/enuB04AJsuspa40f2cH+aBuh0WlWzxE6ufEckyrHze/GN0GiWK1ejjiMS r0mH+a2Qj4Mm1L+IlkOBbLoCLVTOvXJuugF8fCbYP3QH/3VG8VLgPCzJlwhhTlvUwTJV E7gHjkenadfl3oEaI77qi9/SBox8T1IkovTGzgkBlOLnIKel55UXjrAIqKaQuU51jT7J NOu60If3hEdbvmdvLJA3hqBRo+H6e6QT0iXjkUEbnKGanPCIykOIhQk2dCuE3zC+obTg yviQ== X-Gm-Message-State: AKGB3mKOE5l7CSQrIn5Ldmc1v8Z3/INzjwd6Xdp7iLUI1520FPjy2N0W 1ynXsELoY/ZAqbmf/e06ONBNHw== X-Google-Smtp-Source: ACJfBotsMK+ShGqc8E8zzJto5PTGg6STZofWI3+L1OxwJ4iM6RqcVlW+THA2AlrrwKncUeTMPfO9UQ== X-Received: by 10.99.116.88 with SMTP id e24mr20603022pgn.279.1516068559775; Mon, 15 Jan 2018 18:09:19 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:19 -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 v2 07/11] net: sched: create tc_can_offload_extack() wrapper Date: Mon, 15 Jan 2018 18:08:41 -0800 Message-Id: <20180116020845.3496-8-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 02:08:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861175 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="RvusxNLs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDDp31Rvz9sR8 for ; Tue, 16 Jan 2018 13:09:30 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751325AbeAPCJ0 (ORCPT ); Mon, 15 Jan 2018 21:09:26 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:35266 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751243AbeAPCJV (ORCPT ); Mon, 15 Jan 2018 21:09:21 -0500 Received: by mail-pf0-f196.google.com with SMTP id t12so8904777pfg.2 for ; Mon, 15 Jan 2018 18:09:21 -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=RvusxNLs5XGurviqGpJmoCVFDU4VwD2zUDl0ApogpY9BKi2Pj7eCu7JVjKM3Ix/bmp ae8u3Ux43Vx1NFVWRRz6TEYlkSVx25NwDsbWGAqa56aps9KnGLA3LnFOyE8X14r7zyzJ tSYZi4pxJLfhnfblgiygh6LCf9WvOC2xa5atSlui8qYokzjwCWaRxZLCXa7ilGWjCN8p OoubPluJzSpEIYVB8bIrxG2ozuOG4ex8Vrd2e9Wc9YSqdqdslsh2WGj8FRIeBkfDvj+X JwcfhrDe1KNlePcFu7mXZpbvW8ppNtH4aDYcdYqIbqYuKHXI6KH8j29FK2nMvHUgMP24 KHeA== 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=ftadt9XtEmDETQGUiRejcZhO9GB5sLTSXXeKzj3f4L0Fcyef6NcSWUGC3mvbk7azpX fDF+imEKTfAi7azVZvi22OsjmNHIBW+tJnXfTDEUdFHOUxSWwny3aprj8w/gF5Eiphnh 7cL7rPofI86dKmL99a0BB1HCV07JRJCZehgxUygF+9seU9v7zNXWNJ+kSXkoeK4RDRpF N2NhcIB38UhAJ4ohRb28ajvqlx3Y3VJM05eT/ngbq/bjoWvaZ0djvsNKWE2YHFTaDAOf 50+Pv2uUuMbtPIl1SmsG+DfEcoXXIoohTPtsfkG5x0TOP6ThqvEkoVjo52YmrKCNFKZp gMog== X-Gm-Message-State: AKGB3mKB5Bq6/815eSP7HEjMDtPuIaM77w0RJokYPpLOluRJSunBVPrs sMgFJ6keGzNEb7u7oDIAjLzqgA== X-Google-Smtp-Source: ACJfBotBOdRpatcAAVKHm6aXrjjCSWLkLi7mqkfRMiVOnzCH838q2s83XXci+FiNto/ILPFidOJuMw== X-Received: by 10.99.114.27 with SMTP id n27mr23466972pgc.424.1516068560838; Mon, 15 Jan 2018 18:09:20 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:20 -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 v2 08/11] nfp: bpf: plumb extack into functions related to XDP offload Date: Mon, 15 Jan 2018 18:08:42 -0800 Message-Id: <20180116020845.3496-9-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 02:08:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861176 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="aNQal/1z"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDDv3Yhdz9sPk for ; Tue, 16 Jan 2018 13:09:35 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751303AbeAPCJY (ORCPT ); Mon, 15 Jan 2018 21:09:24 -0500 Received: from mail-pl0-f47.google.com ([209.85.160.47]:44427 "EHLO mail-pl0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750776AbeAPCJW (ORCPT ); Mon, 15 Jan 2018 21:09:22 -0500 Received: by mail-pl0-f47.google.com with SMTP id f8so2968658plk.11 for ; Mon, 15 Jan 2018 18:09:22 -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=aNQal/1zvECPNV/ft8GrExyMPK6T2PtnPcwafHizgU2y1Rq111QisG5Tmg7BTqsN7c WolP9ccSvOHHIXiu1Ik1XzRJ64uPXR0Ht41EwW8EXQso5SaSmqMXcSWwFZrmmfO53+Xe vPPPkxSOHkh8ivuk9IIRTgCwuQxwg646eaTW95IvH5ZQqtt08+IFRXTA+/LrtKpR5rKZ jgvzVCActmDncWqqnY8dz5pu55U0hhdLf7cm6iRzaM0JFkr6NvMpiyUoTU1HSBdfo3tc j9d2wKBcveHT6sXXYNq7GHrmN4AcYyN/sktMdxBga37hJpFCwpR/Fg6NetjBzTcrDwME 8QKw== 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=MgW4verJ+XGJjIxFneYC/Hxou9TglnTdOHCdqwn3FWnEowkbz+zLufzYx1wK7DhgmP lxLoZhXBchlL8jbPXOxW/7qjMYvNhKXhw2gtRsVLxKPOD4lUW+YfnBwZ70rHQUV38Zxp 2vweHsg95/WQek6EQkRIq8asyYUdSRTXOyTP1+iFsYnTyosuW9rJlxyj408qswXVoTpK 0C0Av9AuvE2QB6JlGiIYhqmR3eiL+sy7mNwVs5D7lhaehMpmlHiVF7yBRH3l5zFWoSWd lUYgoOZyIzujccTATTqu2oOuoACeGA1ivRejGh/qPBsRTn1DX15wkejVdhXLGUddTNkF KkrQ== X-Gm-Message-State: AKGB3mIrya88c4nWSjxpax1vaYT4k2/SFCgmcJWZWPlvJ1wmhaPRonXS MKsCLTtXMXlk0F2sw8NIJ1GESw== X-Google-Smtp-Source: ACJfBostInK0wAZWiLLrugk2jv0GivcPPceWSV9knl7KoTo1r3QpUb3UCvuE2woQjtu/0sFPBpzDOA== X-Received: by 10.84.240.204 with SMTP id l12mr31915545plt.265.1516068562114; Mon, 15 Jan 2018 18:09:22 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:21 -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 v2 09/11] nfp: bpf: use extack support to improve debugging Date: Mon, 15 Jan 2018 18:08:43 -0800 Message-Id: <20180116020845.3496-10-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 02:08:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861178 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="n0vB7kwq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDDx1xc6z9sPk for ; Tue, 16 Jan 2018 13:09:37 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751349AbeAPCJc (ORCPT ); Mon, 15 Jan 2018 21:09:32 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:39032 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751279AbeAPCJY (ORCPT ); Mon, 15 Jan 2018 21:09:24 -0500 Received: by mail-pf0-f196.google.com with SMTP id e11so8896396pff.6 for ; Mon, 15 Jan 2018 18:09:23 -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=n0vB7kwqyIzFYCqrG3DGCxUck7NQ7OtF1fqaTz3j98YorVFluvZkuoPdOAxF8R5sOE PY4PUw01k5vvvEzYJMA13RFAM2KaHp61w9esX+rraAj+zt7z4FOEn8WsbeR41U2Pqbyv FC7+q9xdS5/UnQ+kceiA0f7pnla5wWkGoekcgD2jAsOeOlGsGmT7z3Lugfe/0cWBL4Lk sP0+2Ct2wq8/5T9/ZdMvjXhAcWolDfgt+dyPCTtFbIRP4ncRdQ+kfxnlU+uuUTp4M9oB PkM5MTqTPFJ5xiKr3fbflGjvUTFCLWxOh0PJ0fpSEokfguObsTxO1Xo79kkUnGuNRtGO ISvA== 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=JKQIoiyY/gFeQTWcx9SB6uonWHYjxEEu9zC4CFxQl2EbjBxxMQX7SbVtSaRD7tl9lQ 814DL6e0rkvjXHW1egW5aIFQfr0rlBFI94Q5U4EaIaqpmMF65lJeWtaHyHEYKTTlW81O 8jXJM3KqFR9Du8+qGnBmY2Ft6ikJ1HuxjXgT62cCHq8WaAGCNzmKeLQeDT9GPmbDs5T3 MjcWnMTeUEvGDCWh+BTCLM8Y5JvBjadruDncs23TvZhaucRDOBmFEPCy0w8S8APlLP0u zUbHgtR8dN+cU7aM/OwFxa8/vGMjd8Aa+ptjZxfjFk/yxpI2qWBzv5xtOxje49UWXxe8 FyTg== X-Gm-Message-State: AKwxytdJcVG9m7u8smxAj7iP85Wyw0GBrDrbfNsI8ot2PiYpjVtMOb2N JvCjQuSwz9BKwFgSzZEaSffCIw== X-Google-Smtp-Source: ACJfBovMywjSFUgU/HTLc/wEPxCzNQl4f300ClntUfaHUsImL2nFyuMkRjXOVHYdDS7K9Uvrn8LBrw== X-Received: by 10.99.123.27 with SMTP id w27mr18346505pgc.49.1516068563216; Mon, 15 Jan 2018 18:09:23 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:22 -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 v2 10/11] netdevsim: add extack support for TC eBPF offload Date: Mon, 15 Jan 2018 18:08:44 -0800 Message-Id: <20180116020845.3496-11-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 02:08:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 861177 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="luipEYmD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zLDDw2lctz9sQm for ; Tue, 16 Jan 2018 13:09:36 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751336AbeAPCJb (ORCPT ); Mon, 15 Jan 2018 21:09:31 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:45521 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751306AbeAPCJZ (ORCPT ); Mon, 15 Jan 2018 21:09:25 -0500 Received: by mail-pf0-f196.google.com with SMTP id a88so7400317pfe.12 for ; Mon, 15 Jan 2018 18:09:24 -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=yvN9KkXaTT7ObQ17VEJJ+EbIxRuyVZfL9T6hVE6693U=; b=luipEYmD1OoreU+L2g6jpimagaUF7yBBiG9Xda/s+EN36IWdHaOoJldfynMeqPpK10 RR+ltdcOzDCwPqrdAwxYh0USzBt73URFuoAvvPL0Go8yWa8wNfurdqVSOfGuqsK9vzh3 PAjgAOcTiTRsuulCkl1DpTQBAWkMVjHdEmNvxC/E09wWgk2uW3uVkZzOFdolXYreM1qP /qMz70U0ldE7Vtzbc7pwA1GpO9PDpErxP7E2RNdGys8zchFRQ2eXUR63ud+FSbqcZrYY ePPX2OzHjq6nnz/LBI4nElZ3+M5CArNlWs5RfQO78UDP1pftXfQzehQTHVJe5oYXWX77 fpZA== 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=yvN9KkXaTT7ObQ17VEJJ+EbIxRuyVZfL9T6hVE6693U=; b=FdW1eDJQJY5R2YnJjzyjjHK6ME7P5rlQ9fvGsCur2hwygkRiXG/7NndFUM0ZL7EJZz qz3CVIXzrPI7h0ef05ETNNxkdIWIgAftHmIZvxI9ZO5D/YXwZdbPR4pnw8iYxUOKYLRo yNY8XKRfhp2f6QEDoJUPKXE7XdAk+1QysDyEA1Wl5Wqno5QmU2tuR8giJHPWdJBXCPo7 40/Bj+MTnWa7a4cR5Uwbi+y/OyH6x3L6q1F66m2fOEeuQSp2yOkRtWKQ/3PfdUR/FklJ F/ndY089iayjTXRwc4FxT8Xn5VmdZKMs+MQ1iOf3HzZrv4zy1s29EcCx+uxhEmFcDeE0 A+dw== X-Gm-Message-State: AKwxytcwS2bZtp86Q21brdS9gKBpqCf+ziuu6KAkPp3fE3HB2J+JgNfJ UQjnGG/EZsD1UeQ/s8XP10MYxA== X-Google-Smtp-Source: ACJfBovl6eL/YhsGh/mqS/h5TGLV/5WyrmG77acakcoUZrfRZnY6LrIheU5uqN1pBxtKIpy5i/wOLg== X-Received: by 10.99.0.17 with SMTP id 17mr3455070pga.94.1516068564351; Mon, 15 Jan 2018 18:09:24 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id r84sm1034104pfk.92.2018.01.15.18.09.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 18:09:23 -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 v2 11/11] selftests/bpf: add checks on extack messages for eBPF hw offload tests Date: Mon, 15 Jan 2018 18:08:45 -0800 Message-Id: <20180116020845.3496-12-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180116020845.3496-1-jakub.kicinski@netronome.com> References: <20180116020845.3496-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 --- v2: - auto-skip the extack message validation (David A). 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)