From: Sunyang Wu <sunyang.wu@jaguarmicro.com>
To: dev@dpdk.org
Cc: i.maximets@ovn.org, horms@ovn.org
Subject: [PATCH v4] netdev-offload-dpdk: Support offload of set dscp action
Date: Tue, 9 Jul 2024 20:14:18 +0800 [thread overview]
Message-ID: <20240709121418.9732-1-sunyang.wu@jaguarmicro.com> (raw)
Add the "set dscp action" parsing function,
so that the "set dscp action" can be offloaded.
Signed-off-by: Sunyang Wu <sunyang.wu@jaguarmicro.com>
---
Documentation/howto/dpdk.rst | 5 +++--
lib/netdev-offload-dpdk.c | 27 ++++++++++++++++++++++++++-
2 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst
index 04609b20b..f0e46c95b 100644
--- a/Documentation/howto/dpdk.rst
+++ b/Documentation/howto/dpdk.rst
@@ -395,10 +395,11 @@ Supported actions for hardware offload are:
- Output.
- Drop.
- Modification of Ethernet (mod_dl_src/mod_dl_dst).
-- Modification of IPv4 (mod_nw_src/mod_nw_dst/mod_nw_ttl).
+- Modification of IPv4 (mod_nw_src/mod_nw_dst/mod_nw_ttl/mod_nw_tos).
- Modification of TCP/UDP (mod_tp_src/mod_tp_dst).
- VLAN Push/Pop (push_vlan/pop_vlan).
-- Modification of IPv6 (set_field:<ADDR>->ipv6_src/ipv6_dst/mod_nw_ttl).
+- Modification of IPv6 (set_field:<ADDR>->ipv6_src/ipv6_dst/
+mod_nw_ttl/mod_nw_tos).
- Clone/output (tnl_push and output) for encapsulating over a tunnel.
- Tunnel pop, for packets received on physical ports.
diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index 623005b1c..5a48da963 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -791,6 +791,17 @@ dump_flow_action(struct ds *s, struct ds *s_extra,
ds_put_format(s, "port %"PRIu16" ", ntohs(set_tp->port));
}
ds_put_cstr(s, "/ ");
+ } else if (actions->type == RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP ||
+ actions->type == RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP) {
+ const struct rte_flow_action_set_dscp *set_dscp = actions->conf;
+ char *dirstr = actions->type == RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP
+ ? "set_ipv4_dscp " : "set_ipv6_dscp ";
+
+ ds_put_cstr(s, dirstr);
+ if (set_dscp) {
+ ds_put_format(s, "dscp_value %d ", set_dscp->dscp);
+ }
+ ds_put_cstr(s, "/ ");
} else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN) {
const struct rte_flow_action_of_push_vlan *of_push_vlan =
actions->conf;
@@ -1836,11 +1847,22 @@ add_set_flow_action__(struct flow_actions *actions,
return 0;
}
if (!is_all_ones(mask, size)) {
- VLOG_DBG_RL(&rl, "Partial mask is not supported");
+ if (attr != RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP ||
+ attr != RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP) {
+ if (mask & IP_ECN_MASK) {
+ VLOG_DBG_RL(&rl, "ECN hw offload is not supported!");
+ } else {
+ goto add_action;
+ }
+ } else {
+ VLOG_DBG_RL(&rl, "Partial mask is not supported");
+ }
+
return -1;
}
}
+add_action:
spec = xzalloc(size);
memcpy(spec, value, size);
add_flow_action(actions, attr, spec);
@@ -1912,6 +1934,7 @@ parse_set_actions(struct flow_actions *actions,
add_set_flow_action(ipv4_src, RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC);
add_set_flow_action(ipv4_dst, RTE_FLOW_ACTION_TYPE_SET_IPV4_DST);
add_set_flow_action(ipv4_ttl, RTE_FLOW_ACTION_TYPE_SET_TTL);
+ add_set_flow_action(ipv4_tos, RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP);
if (mask && !is_all_zeros(mask, sizeof *mask)) {
VLOG_DBG_RL(&rl, "Unsupported IPv4 set action");
@@ -1924,6 +1947,8 @@ parse_set_actions(struct flow_actions *actions,
add_set_flow_action(ipv6_src, RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC);
add_set_flow_action(ipv6_dst, RTE_FLOW_ACTION_TYPE_SET_IPV6_DST);
add_set_flow_action(ipv6_hlimit, RTE_FLOW_ACTION_TYPE_SET_TTL);
+ add_set_flow_action(ipv6_tclass,
+ RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP);
if (mask && !is_all_zeros(mask, sizeof *mask)) {
VLOG_DBG_RL(&rl, "Unsupported IPv6 set action");
--
2.19.0.rc0.windows.1
next reply other threads:[~2024-07-09 12:14 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-09 12:14 Sunyang Wu [this message]
2024-07-09 12:36 ` Ferruh Yigit
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=20240709121418.9732-1-sunyang.wu@jaguarmicro.com \
--to=sunyang.wu@jaguarmicro.com \
--cc=dev@dpdk.org \
--cc=horms@ovn.org \
--cc=i.maximets@ovn.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
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;
as well as URLs for NNTP newsgroup(s).