From patchwork Fri Nov 3 20:56:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 834102 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="mC4SCFYY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yTDmq4jsjz9s7p for ; Sat, 4 Nov 2017 07:57:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755995AbdKCU5k (ORCPT ); Fri, 3 Nov 2017 16:57:40 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:43896 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752554AbdKCU4u (ORCPT ); Fri, 3 Nov 2017 16:56:50 -0400 Received: by mail-pg0-f65.google.com with SMTP id s75so3462539pgs.0 for ; Fri, 03 Nov 2017 13:56:50 -0700 (PDT) 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=BsnK+R3oWPh/RJZMgK0j4PniZh7CtzlxlbPDVfXSWEg=; b=mC4SCFYYl0Cpjh06bDCRYYNL6TBT9A0/9cJoR6OvVsBl97EXjINgzVxet5DLrrFSxW NB0Gqr0Ub+W/aKFR//qnAS9FoAeyjYTJw6IF/onr3irTVpcFHkXWqbsYJqiobXS35cVn 7lVR9aAt4bUF4Y5Sf4wgifYIVL6/IQgDycrgfqSiHhleMBX8rKNanyEcSAg8Sw6XLiyp 7C+j85KusFcmk3kJRrfHOe7vsaZ5soUgFLNhspuk/pz4qCL9CDygkFYWnpu7wsfHg81O GddJBiLYqs7IdeZ7lhTAHmpcxW6i5N4BVoPKbBpS6YjSyXRBNEy1JfclThKSGnIbFo0a aqhw== 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=BsnK+R3oWPh/RJZMgK0j4PniZh7CtzlxlbPDVfXSWEg=; b=cnrXZC67+tED5UH7uY8CxLEH0WpKXXthGYZ8mUIEmywEhYs9RBt9QMzsGnL073f7Z0 hkMM9b60Fv4EE9HA5OL4dD8OVjBy59+YM9PoK5HBZQajRK/rjM7UnXJ4zilA5KV14fQK ihHeYR7R6Do8nG0y5QiiOzf9tESvh++TbJcyEaMWHqrSgynJrXQ36ZsmYM3wAUefTrdd m9KiPc+woaXxMAkN5j7MVVrVurJtJpXl+lyh0KwiDFgKyFnFvKrHKO6oRhD5hVK4R9jJ DdRBNnlsTTsZLvgBjKzQ9PUoKSQeQ4QQ9CS1yKqohXnUQtiP42KWDcKyQ8JWpY3jtrBL a+Xw== X-Gm-Message-State: AMCzsaVK8jJK0ZLl4zBdSbfQa/RpjZUdOoO/vPzpD2cSYg4TWDLKNLDm IgC5i/emLvKl4I7BSrYiWl0Fr9ey X-Google-Smtp-Source: ABhQp+QBNT0ib6JhrmrOoD2CskxdO5VxP+OWuzHoRGRSrROUwfUl5OZ1ohX33z/9lxLfocJilaN8aA== X-Received: by 10.99.115.7 with SMTP id o7mr8601792pgc.410.1509742610113; Fri, 03 Nov 2017 13:56:50 -0700 (PDT) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id o10sm9989029pgq.69.2017.11.03.13.56.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 03 Nov 2017 13:56:49 -0700 (PDT) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: oss-drivers@netronome.com, alexei.starovoitov@gmail.com, daniel@iogearbox.net, Jakub Kicinski Subject: [PATCH net-next v2 06/15] cls_bpf: allow attaching programs loaded for specific device Date: Fri, 3 Nov 2017 13:56:21 -0700 Message-Id: <20171103205630.1083-7-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171103205630.1083-1-jakub.kicinski@netronome.com> References: <20171103205630.1083-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If TC program is loaded with skip_sw flag, we should allow the device-specific programs to be accepted. Signed-off-by: Jakub Kicinski Reviewed-by: Simon Horman Reviewed-by: Quentin Monnet --- kernel/bpf/syscall.c | 1 + net/sched/cls_bpf.c | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 68f9123acd39..416d70cdfc76 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -1115,6 +1115,7 @@ struct bpf_prog *bpf_prog_get_type_dev(u32 ufd, enum bpf_prog_type type, trace_bpf_prog_get_type(prog); return prog; } +EXPORT_SYMBOL_GPL(bpf_prog_get_type_dev); /* last field in 'union bpf_attr' used by this command */ #define BPF_PROG_LOAD_LAST_FIELD prog_target_ifindex diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c index bc3edde1b9d7..dc9bd9a0070b 100644 --- a/net/sched/cls_bpf.c +++ b/net/sched/cls_bpf.c @@ -374,7 +374,7 @@ static int cls_bpf_prog_from_ops(struct nlattr **tb, struct cls_bpf_prog *prog) } static int cls_bpf_prog_from_efd(struct nlattr **tb, struct cls_bpf_prog *prog, - const struct tcf_proto *tp) + u32 gen_flags, const struct tcf_proto *tp) { struct bpf_prog *fp; char *name = NULL; @@ -382,7 +382,11 @@ static int cls_bpf_prog_from_efd(struct nlattr **tb, struct cls_bpf_prog *prog, bpf_fd = nla_get_u32(tb[TCA_BPF_FD]); - fp = bpf_prog_get_type(bpf_fd, BPF_PROG_TYPE_SCHED_CLS); + if (gen_flags & TCA_CLS_FLAGS_SKIP_SW) + fp = bpf_prog_get_type_dev(bpf_fd, BPF_PROG_TYPE_SCHED_CLS, + qdisc_dev(tp->q)); + else + fp = bpf_prog_get_type(bpf_fd, BPF_PROG_TYPE_SCHED_CLS); if (IS_ERR(fp)) return PTR_ERR(fp); @@ -440,7 +444,7 @@ static int cls_bpf_set_parms(struct net *net, struct tcf_proto *tp, prog->gen_flags = gen_flags; ret = is_bpf ? cls_bpf_prog_from_ops(tb, prog) : - cls_bpf_prog_from_efd(tb, prog, tp); + cls_bpf_prog_from_efd(tb, prog, gen_flags, tp); if (ret < 0) return ret;