DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH v4] netdev-offload-dpdk: Support offload of set dscp action
@ 2024-07-09 12:14 Sunyang Wu
  2024-07-09 12:36 ` Ferruh Yigit
  0 siblings, 1 reply; 2+ messages in thread
From: Sunyang Wu @ 2024-07-09 12:14 UTC (permalink / raw)
  To: dev; +Cc: i.maximets, horms

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


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH v4] netdev-offload-dpdk: Support offload of set dscp action
  2024-07-09 12:14 [PATCH v4] netdev-offload-dpdk: Support offload of set dscp action Sunyang Wu
@ 2024-07-09 12:36 ` Ferruh Yigit
  0 siblings, 0 replies; 2+ messages in thread
From: Ferruh Yigit @ 2024-07-09 12:36 UTC (permalink / raw)
  To: Sunyang Wu, dev; +Cc: i.maximets, horms

On 7/9/2024 1:14 PM, Sunyang Wu wrote:
> 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>
>

Hi Sunyang,

This patch is for ovs, did you send it to dpdk mail list by mistake?

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-07-09 12:36 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-07-09 12:14 [PATCH v4] netdev-offload-dpdk: Support offload of set dscp action Sunyang Wu
2024-07-09 12:36 ` Ferruh Yigit

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).