From patchwork Fri Sep 16 09:37:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 670762 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3sb9Fg5B5Qz9sD6 for ; Fri, 16 Sep 2016 19:38:31 +1000 (AEST) 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=Tl2rGDL5; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758744AbcIPJi1 (ORCPT ); Fri, 16 Sep 2016 05:38:27 -0400 Received: from mail-wm0-f50.google.com ([74.125.82.50]:36026 "EHLO mail-wm0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758204AbcIPJhv (ORCPT ); Fri, 16 Sep 2016 05:37:51 -0400 Received: by mail-wm0-f50.google.com with SMTP id b187so27026118wme.1 for ; Fri, 16 Sep 2016 02:37:51 -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=DUjZ+GGvoTsBoaT0TFt+M08E5ho47TmBzA7rZM8dssw=; b=Tl2rGDL5qD9MLczR3xFC255eXrUmvlSWQ5m7IBp6Sg7qiL32EtKY63Y/UhiyfFKPPg eoHHMOqzL3sNvRCKzfnQVGHaJb1tcOHwKygbauee7uaHXMFg7lLvEJpKHKIoPOW7fSez PaN+UkA0X86lNVdusSnmPJipOYFBEp446LgzAffz9c2MQ4d0WwhuXsEj2A7DLC3aDfRL 0IPuLLucdUkzRYlYEqXbaXgOLZ5gnymxlpJIS8bI6AGR66emy4OylCXLKXonQzqW76Rd 8glch0zbufiyzXZ6lnjDYg9lYfKgWNMsrOZKeJmpbKRtdBnFsHHHcPIH2d6GKSBQb56h PILg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=DUjZ+GGvoTsBoaT0TFt+M08E5ho47TmBzA7rZM8dssw=; b=iqSKNkCqSY4tkAF6KPXceShgyz0nSXPUQtozFBLPz2q6MD951MUr+wofWvsuKrDytJ TNyeneSDb7N3Fpa2TMBs/9RP608mgEUDo9uwZuO+3oHVVzpAOsx58fxMNrvLDYDwBHNq BbZuGkYkffrEA+3pCHs0yY4iOTKTf9U7QN0d7ZdfQl5K0P+DAJpdJJ6K2jMWvQj7WCSc rnBds7n+BOTjG0yQV+37YhsuDH3q4zkuLJzBFVrfSpGD3ja+4mLGA5L9JlAQcMLVo94R /BmZ5eWVfISEVbBvhqtQOLs32m4gdpmCpcl6gwM0+hcZoN7doI2VOmtsGQD0MA+1+suF K/Pw== X-Gm-Message-State: AE9vXwP0REj0U5DJMC00fbgRhnGq0zpLn2Rum0EyPHJhIYaeq+MykHTqPZ4ZdDo8AqkmTssN X-Received: by 10.28.30.20 with SMTP id e20mr6887878wme.77.1474018670173; Fri, 16 Sep 2016 02:37:50 -0700 (PDT) Received: from jkicinski-Precision-T1700.netronome.com (host-79-78-33-110.static.as9105.net. [79.78.33.110]) by smtp.gmail.com with ESMTPSA id v189sm6485966wmv.12.2016.09.16.02.37.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 16 Sep 2016 02:37:49 -0700 (PDT) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, Jakub Kicinski Subject: [PATCHv5 net-next 14/15] nfp: bpf: add support for legacy redirect action Date: Fri, 16 Sep 2016 10:37:01 +0100 Message-Id: <1474018622-10653-15-git-send-email-jakub.kicinski@netronome.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1474018622-10653-1-git-send-email-jakub.kicinski@netronome.com> References: <1474018622-10653-1-git-send-email-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Data path has redirect support so expressing redirect to the port frame came from is a trivial matter of setting the right result code. Signed-off-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/nfp_bpf.h | 1 + drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c | 2 ++ drivers/net/ethernet/netronome/nfp/nfp_net_offload.c | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_bpf.h b/drivers/net/ethernet/netronome/nfp/nfp_bpf.h index d550fbc4768a..378d3c35cad5 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_bpf.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_bpf.h @@ -60,6 +60,7 @@ enum static_regs { enum nfp_bpf_action_type { NN_ACT_TC_DROP, + NN_ACT_TC_REDIR, }; /* Software register representation, hardware encoding in asm.h */ diff --git a/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c b/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c index 42a8afb67fc8..60a99e0bf459 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_bpf_jit.c @@ -1440,6 +1440,7 @@ static void nfp_outro_tc_legacy(struct nfp_prog *nfp_prog) { const u8 act2code[] = { [NN_ACT_TC_DROP] = 0x22, + [NN_ACT_TC_REDIR] = 0x24 }; /* Target for aborts */ nfp_prog->tgt_abort = nfp_prog_current_offset(nfp_prog); @@ -1468,6 +1469,7 @@ static void nfp_outro(struct nfp_prog *nfp_prog) { switch (nfp_prog->act) { case NN_ACT_TC_DROP: + case NN_ACT_TC_REDIR: nfp_outro_tc_legacy(nfp_prog); break; } diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_offload.c b/drivers/net/ethernet/netronome/nfp/nfp_net_offload.c index 0537a53e2174..1ec8e5b74651 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_offload.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_offload.c @@ -123,6 +123,10 @@ nfp_net_bpf_get_act(struct nfp_net *nn, struct tc_cls_bpf_offload *cls_bpf) list_for_each_entry(a, &actions, list) { if (is_tcf_gact_shot(a)) return NN_ACT_TC_DROP; + + if (is_tcf_mirred_redirect(a) && + tcf_mirred_ifindex(a) == nn->netdev->ifindex) + return NN_ACT_TC_REDIR; } return -ENOTSUPP;