diff mbox series

[ovs-dev,v3,1/3] netdev-offload-dpdk: Support offload of set IPv4 DSCP action

Message ID 20221007103923.228716-2-simon.horman@corigine.com
State Rejected
Headers show
Series add functions about rte_flow to ovs-dpdk | expand

Checks

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

Commit Message

Simon Horman Oct. 7, 2022, 10:39 a.m. UTC
From: Chaoyong He <chaoyong.he@corigine.com>

Both the 'mod_nw_tos' and 'mod_nw_enc' command of ovs will cause
the 'RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP' be sent to PMD, and they
share one mask 'ipv4_tos' of size 1 byte.

According the original logic, both of them won't pass the mask
check because the check is based on size of byte. And the same
situation of shared mask will also won't pass this check in the
furture.

Add the support of offload of set IPv4 DSCP action.

Signed-off-by: Chaoyong He <chaoyong.he@corigine.com>
Reviewed-by: Louis Peens <louis.peens@corigine.com>
Signed-off-by: Simon Horman <simon.horman@corigine.com>
---
 lib/netdev-offload-dpdk.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

0-day Robot Oct. 7, 2022, 10:58 a.m. UTC | #1
References:  <20221007103923.228716-2-simon.horman@corigine.com>
 

Bleep bloop.  Greetings Simon Horman, I am a robot and I have tried out your patch.
Thanks for your contribution.

I encountered some error that I wasn't expecting.  See the details below.


checkpatch:
WARNING: Unexpected sign-offs from developers who are not authors or co-authors or committers: Simon Horman <simon.horman@corigine.com>
Lines checked: 85, Warnings: 1, Errors: 0


Please check this out.  If you feel there has been an error, please email aconole@redhat.com

Thanks,
0-day Robot
diff mbox series

Patch

diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index 80a64a6cc06a..9cbd472fa81d 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -771,6 +771,14 @@  dump_flow_action(struct ds *s, struct ds *s_extra,
                           IP_ARGS(set_ipv4->ipv4_addr));
         }
         ds_put_cstr(s, "/ ");
+    } else if (actions->type == RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP) {
+        const struct rte_flow_action_set_dscp *set_dscp = actions->conf;
+
+        ds_put_cstr(s, "set_dscp ");
+        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_SET_TTL) {
         const struct rte_flow_action_set_ttl *set_ttl = actions->conf;
 
@@ -1826,11 +1834,21 @@  add_set_flow_action__(struct flow_actions *actions,
             return 0;
         }
         if (!is_all_ones(mask, size)) {
+            switch (attr) {
+            case RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP:
+                if (*(uint8_t *) mask == RTE_IPV4_HDR_DSCP_MASK ||
+                    *(uint8_t *) mask == RTE_IPV4_HDR_ECN_MASK)
+                    goto out;
+                break;
+            default:
+                break;
+            }
             VLOG_DBG_RL(&rl, "Partial mask is not supported");
             return -1;
         }
     }
 
+out:
     spec = xzalloc(size);
     memcpy(spec, value, size);
     add_flow_action(actions, attr, spec);
@@ -1850,6 +1868,8 @@  BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ipv4) ==
                   MEMBER_SIZEOF(struct ovs_key_ipv4, ipv4_src));
 BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ipv4) ==
                   MEMBER_SIZEOF(struct ovs_key_ipv4, ipv4_dst));
+BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_dscp) ==
+                  MEMBER_SIZEOF(struct ovs_key_ipv4, ipv4_tos));
 BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ttl) ==
                   MEMBER_SIZEOF(struct ovs_key_ipv4, ipv4_ttl));
 BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ipv6) ==
@@ -1901,6 +1921,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_tos, RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP);
             add_set_flow_action(ipv4_ttl, RTE_FLOW_ACTION_TYPE_SET_TTL);
 
             if (mask && !is_all_zeros(mask, sizeof *mask)) {