public inbox for netdev@vger.kernel.org 
 help / color / mirror / Atom feed
From: Roi Dayan <roid@nvidia•com>
To: <netdev@vger•kernel.org>
Cc: Roi Dayan <roid@nvidia•com>, Maor Dickman <maord@nvidia•com>,
	"Jakub Kicinski" <kuba@kernel•org>,
	"David S. Miller" <davem@davemloft•net>,
	"Jamal Hadi Salim" <jhs@mojatatu•com>,
	Jiri Pirko <jiri@nvidia•com>
Subject: [PATCH net-next 1/3] net/sched: add vlan push_eth and pop_eth action to the hardware IR
Date: Wed, 9 Mar 2022 15:02:54 +0200	[thread overview]
Message-ID: <20220309130256.1402040-2-roid@nvidia.com> (raw)
In-Reply-To: <20220309130256.1402040-1-roid@nvidia.com>

From: Maor Dickman <maord@nvidia•com>

Add vlan push_eth and pop_eth action to the hardware intermediate
representation model which would subsequently allow it to be used
by drivers for offload.

Signed-off-by: Maor Dickman <maord@nvidia•com>
Reviewed-by: Roi Dayan <roid@nvidia•com>
---
 include/net/flow_offload.h   |  4 ++++
 include/net/tc_act/tc_vlan.h | 14 ++++++++++++++
 net/sched/act_vlan.c         | 14 ++++++++++++++
 3 files changed, 32 insertions(+)

diff --git a/include/net/flow_offload.h b/include/net/flow_offload.h
index 92267d23083e..2bfa666842c5 100644
--- a/include/net/flow_offload.h
+++ b/include/net/flow_offload.h
@@ -150,6 +150,8 @@ enum flow_action_id {
 	FLOW_ACTION_PPPOE_PUSH,
 	FLOW_ACTION_JUMP,
 	FLOW_ACTION_PIPE,
+	FLOW_ACTION_VLAN_PUSH_ETH,
+	FLOW_ACTION_VLAN_POP_ETH,
 	NUM_FLOW_ACTIONS,
 };
 
@@ -211,6 +213,8 @@ struct flow_action_entry {
 			__be16		proto;
 			u8		prio;
 		} vlan;
+		unsigned char vlan_push_eth_dst[ETH_ALEN];
+		unsigned char vlan_push_eth_src[ETH_ALEN];
 		struct {				/* FLOW_ACTION_MANGLE */
 							/* FLOW_ACTION_ADD */
 			enum flow_action_mangle_base htype;
diff --git a/include/net/tc_act/tc_vlan.h b/include/net/tc_act/tc_vlan.h
index f94b8bc26f9e..8a3422c70f9f 100644
--- a/include/net/tc_act/tc_vlan.h
+++ b/include/net/tc_act/tc_vlan.h
@@ -78,4 +78,18 @@ static inline u8 tcf_vlan_push_prio(const struct tc_action *a)
 
 	return tcfv_push_prio;
 }
+
+static inline void tcf_vlan_push_dst(unsigned char *dest, const struct tc_action *a)
+{
+	rcu_read_lock();
+	memcpy(dest, rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_dst, ETH_ALEN);
+	rcu_read_unlock();
+}
+
+static inline void tcf_vlan_push_src(unsigned char *dest, const struct tc_action *a)
+{
+	rcu_read_lock();
+	memcpy(dest, rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_src, ETH_ALEN);
+	rcu_read_unlock();
+}
 #endif /* __NET_TC_VLAN_H */
diff --git a/net/sched/act_vlan.c b/net/sched/act_vlan.c
index 756e2dcde1cd..d27604204f17 100644
--- a/net/sched/act_vlan.c
+++ b/net/sched/act_vlan.c
@@ -390,6 +390,14 @@ static int tcf_vlan_offload_act_setup(struct tc_action *act, void *entry_data,
 			entry->vlan.proto = tcf_vlan_push_proto(act);
 			entry->vlan.prio = tcf_vlan_push_prio(act);
 			break;
+		case TCA_VLAN_ACT_POP_ETH:
+			entry->id = FLOW_ACTION_VLAN_POP_ETH;
+			break;
+		case TCA_VLAN_ACT_PUSH_ETH:
+			entry->id = FLOW_ACTION_VLAN_PUSH_ETH;
+			tcf_vlan_push_dst(entry->vlan_push_eth_dst, act);
+			tcf_vlan_push_src(entry->vlan_push_eth_src, act);
+			break;
 		default:
 			return -EOPNOTSUPP;
 		}
@@ -407,6 +415,12 @@ static int tcf_vlan_offload_act_setup(struct tc_action *act, void *entry_data,
 		case TCA_VLAN_ACT_MODIFY:
 			fl_action->id = FLOW_ACTION_VLAN_MANGLE;
 			break;
+		case TCA_VLAN_ACT_POP_ETH:
+			fl_action->id = FLOW_ACTION_VLAN_POP_ETH;
+			break;
+		case TCA_VLAN_ACT_PUSH_ETH:
+			fl_action->id = FLOW_ACTION_VLAN_PUSH_ETH;
+			break;
 		default:
 			return -EOPNOTSUPP;
 		}
-- 
2.34.1


  reply	other threads:[~2022-03-09 13:03 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-09 13:02 [PATCH net-next 0/3] flow_offload: add tc vlan push_eth and pop_eth actions Roi Dayan
2022-03-09 13:02 ` Roi Dayan [this message]
2022-03-15  5:02   ` [PATCH net-next 1/3] net/sched: add vlan push_eth and pop_eth action to the hardware IR Jakub Kicinski
2022-03-15  9:53     ` Roi Dayan
2022-03-09 13:02 ` [PATCH net-next 2/3] net/mlx5e: MPLSoUDP decap, use vlan push_eth instead of pedit Roi Dayan
2022-03-15  5:02   ` Jakub Kicinski
2022-03-15  9:50     ` Roi Dayan
2022-03-15 15:52       ` Jakub Kicinski
2022-03-09 13:02 ` [PATCH net-next 3/3] net/mlx5e: MPLSoUDP encap, support action vlan pop_eth explicitly Roi Dayan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220309130256.1402040-2-roid@nvidia.com \
    --to=roid@nvidia$(echo .)com \
    --cc=davem@davemloft$(echo .)net \
    --cc=jhs@mojatatu$(echo .)com \
    --cc=jiri@nvidia$(echo .)com \
    --cc=kuba@kernel$(echo .)org \
    --cc=maord@nvidia$(echo .)com \
    --cc=netdev@vger$(echo .)kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox