From patchwork Wed Sep 21 10:44:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 672798 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 3sfGV54HmMz9snm for ; Wed, 21 Sep 2016 20:45:01 +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=0mBErW1a; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756810AbcIUKo5 (ORCPT ); Wed, 21 Sep 2016 06:44:57 -0400 Received: from mail-wm0-f46.google.com ([74.125.82.46]:37767 "EHLO mail-wm0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755960AbcIUKoz (ORCPT ); Wed, 21 Sep 2016 06:44:55 -0400 Received: by mail-wm0-f46.google.com with SMTP id b130so84113705wmc.0 for ; Wed, 21 Sep 2016 03:44:48 -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=vNic5yLwMjBd+gutenmuDXOwlHER7bN/PqHlqcxU3S8=; b=0mBErW1aiGkTL2clxAkmF7xvST4W1MMCJHlmYhgiLLwskylcYLRVJXarRO6mUiXA3F zAuNUvcEe4RMKrDLxe0YTGK+zHBQWbLmtjRhPwyuiX+DeaNUmIFI0LT4bD499JbS7H9D FvBVqIM/1S2LZauZYH9OQUi0d1ZG5V4SY6K9hEcGJSEAsJon225WNlxRuJdxinoRzF6x xjRhn0GyY9wFkJzlYYYeOdMCE6/1z0blnbhD7qoRkYEQvkCKp/nbp4beqS9U2M/KK8Sf dhCcwyXyZhxGTz7pNDQlRgI+Xj3tOqO8W9R7pgSd5nHIzz2cZwqVE0KLi62oB0jKwaVj LSKA== 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=vNic5yLwMjBd+gutenmuDXOwlHER7bN/PqHlqcxU3S8=; b=CEqYHy+0HKlWlECH5QLSayhsvpKLHQpfsdDKsz2oX3DfyatYwZt7QwxtblJiSyABPX SM+pYIKbHHqMrrU+sNLaldd36innQLOSQgDrtvm/AaeOyE9r8Y+Y+iPWUNvYkbYlKKcB id8/X/fmTV/QnqEoqtc6kcY43OybjILyUYuTA7Qg61IALQRXDNLWUmxSDajvWfJlfIs3 W4/6+3524MfOi7K6Rxa2RVvczzUN5dThAiuk0Ed4F8ztyjxVCCO2atVEgjeH3Z78BjtZ aqx2+WMgpXz1MaLCi11AG/g44Nq901VCLoQ7QZk3pPrkQa7ZazxAYLMJXf3gFR0s3A3K jSUQ== X-Gm-Message-State: AE9vXwOMCZS3zCASHBoCfO+K935NmJrWQ1dhbZG/1k4kP14rY47gKcsfxmmkZOq+3RfGNhsK X-Received: by 10.194.28.104 with SMTP id a8mr37989285wjh.160.1474454687178; Wed, 21 Sep 2016 03:44:47 -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 m75sm27407068wmi.0.2016.09.21.03.44.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 21 Sep 2016 03:44:46 -0700 (PDT) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, Jakub Kicinski Subject: [PATCHv7 net-next 14/15] nfp: bpf: add support for legacy redirect action Date: Wed, 21 Sep 2016 11:44:06 +0100 Message-Id: <1474454647-20137-15-git-send-email-jakub.kicinski@netronome.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1474454647-20137-1-git-send-email-jakub.kicinski@netronome.com> References: <1474454647-20137-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 2adb1d80c7b7..adbe0235d98e 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 368381f0357f..434bef975c58 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;