From: Chaoyong He <[email protected]>

Add the support of offload of set IPv6 DSCP action.

Signed-off-by: Chaoyong He <[email protected]>
Reviewed-by: Louis Peens <[email protected]>
Signed-off-by: Simon Horman <[email protected]>
---
 lib/netdev-offload-dpdk.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index 9cbd472fa81d..2819ebd1aa69 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -771,7 +771,8 @@ 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) {
+    } 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;
 
         ds_put_cstr(s, "set_dscp ");
@@ -1840,6 +1841,13 @@ add_set_flow_action__(struct flow_actions *actions,
                     *(uint8_t *) mask == RTE_IPV4_HDR_ECN_MASK)
                     goto out;
                 break;
+            case RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP:
+                if (*(uint8_t *) mask == RTE_IPV6_HDR_DSCP_MASK >>
+                        RTE_IPV6_HDR_TC_SHIFT ||
+                    *(uint8_t *) mask == RTE_IPV6_HDR_ECN_MASK >>
+                        RTE_IPV6_HDR_TC_SHIFT)
+                    goto out;
+                break;
             default:
                 break;
             }
@@ -1876,6 +1884,8 @@ BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ipv6) 
==
                   MEMBER_SIZEOF(struct ovs_key_ipv6, ipv6_src));
 BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ipv6) ==
                   MEMBER_SIZEOF(struct ovs_key_ipv6, ipv6_dst));
+BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_dscp) ==
+                  MEMBER_SIZEOF(struct ovs_key_ipv6, ipv6_tclass));
 BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_ttl) ==
                   MEMBER_SIZEOF(struct ovs_key_ipv6, ipv6_hlimit));
 BUILD_ASSERT_DECL(sizeof(struct rte_flow_action_set_tp) ==
@@ -1934,6 +1944,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_tclass,
+                                RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP);
             add_set_flow_action(ipv6_hlimit, RTE_FLOW_ACTION_TYPE_SET_TTL);
 
             if (mask && !is_all_zeros(mask, sizeof *mask)) {
-- 
2.30.2

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to