diff mbox series

[ovs-dev,v2] netdev-offload-dpdk: Support offload of set dscp action.

Message ID 20240529011403.34104-1-sunyang.wu@jaguarmicro.com
State Superseded
Delegated to: Simon Horman
Headers show
Series [ovs-dev,v2] netdev-offload-dpdk: Support offload of set dscp action. | expand

Checks

Context Check Description
ovsrobot/intel-ovs-compilation success test: success
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test fail github build: failed

Commit Message

Sunyang Wu May 29, 2024, 1:14 a.m. UTC
Signed-off-by: Sunyang Wu <sunyang.wu@jaguarmicro.com>
---
 lib/netdev-offload-dpdk.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

Comments

Simon Horman June 6, 2024, 10:20 a.m. UTC | #1
On Wed, May 29, 2024 at 09:14:03AM +0800, Sunyang Wu via dev wrote:

Hi Sunyang,

It would be nice to include a patch description here.

> Signed-off-by: Sunyang Wu <sunyang.wu@jaguarmicro.com>
diff mbox series

Patch

diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index 623005b1c..524942457 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;
@@ -1835,7 +1846,10 @@  add_set_flow_action__(struct flow_actions *actions,
         if (is_all_zeros(mask, size)) {
             return 0;
         }
-        if (!is_all_ones(mask, size)) {
+        if (!is_all_ones(mask, size) &&
+            /* set dscp need patial mask */
+            attr != RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP &&
+            attr != RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP) {
             VLOG_DBG_RL(&rl, "Partial mask is not supported");
             return -1;
         }
@@ -1912,6 +1926,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 +1939,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");