net/ice: add flow IPv6 TC support
authorYing A Wang <ying.a.wang@intel.com>
Thu, 18 Jul 2019 01:38:43 +0000 (09:38 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 23 Jul 2019 12:31:35 +0000 (14:31 +0200)
When set flow ipv6 tc rule, ice_get_flow_field will set error.
This patch fixes this issue.

Fixes: d76116a4678f ("net/ice: add generic flow API")

Signed-off-by: Ying A Wang <ying.a.wang@intel.com>
Acked-by: Qiming Yang <qiming.yang@intel.com>
drivers/net/ice/ice_generic_flow.c

index 2c57276..5725bff 100644 (file)
@@ -282,8 +282,7 @@ static uint64_t ice_get_flow_field(const struct rte_flow_item pattern[],
                        if (!(ipv6_spec && ipv6_mask))
                                break;
 
-                       if (ipv6_mask->hdr.payload_len ||
-                           ipv6_mask->hdr.vtc_flow) {
+                       if (ipv6_mask->hdr.payload_len) {
                                rte_flow_error_set(error, EINVAL,
                                           RTE_FLOW_ERROR_TYPE_ITEM,
                                           item,
@@ -317,6 +316,11 @@ static uint64_t ice_get_flow_field(const struct rte_flow_item pattern[],
                                        input_set |= ICE_INSET_IPV6_PROTO;
                                if (ipv6_mask->hdr.hop_limits == UINT8_MAX)
                                        input_set |= ICE_INSET_IPV6_HOP_LIMIT;
+                               if ((ipv6_mask->hdr.vtc_flow &
+                                       rte_cpu_to_be_32(RTE_IPV6_HDR_TC_MASK))
+                                               == rte_cpu_to_be_32
+                                               (RTE_IPV6_HDR_TC_MASK))
+                                       input_set |= ICE_INSET_IPV6_TOS;
                        }
 
                        break;
@@ -486,7 +490,7 @@ static uint64_t ice_get_flow_field(const struct rte_flow_item pattern[],
                        rte_flow_error_set(error, EINVAL,
                                           RTE_FLOW_ERROR_TYPE_ITEM,
                                           item,
-                                          "Invalid mask no exist");
+                                          "Invalid pattern");
                        break;
                }
        }