net/ixgbe: remove tpid check for flow director
authorWei Zhao <wei.zhao1@intel.com>
Fri, 14 Apr 2017 03:34:10 +0000 (11:34 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 19 Apr 2017 13:37:37 +0000 (15:37 +0200)
DPDK community has several emails discussion on this topic,
these mails link is bellow:
http://dpdk.org/ml/archives/dev/2017-March/060379.html,
http://dpdk.org/ml/archives/dev/2017-March/060295.html,

items like VLAN can already have several valid "types"
(0x88a8, 0x8100, 0x9100), and who knows what will come up
in the future.

And ixgbe_flow just ignores the types when do filter configuration.
So it may be reasonable to delete the related tpid check process.

Also add some more comment log on stack explanation.

Fixes: 11777435c72 ("net/ixgbe: parse flow director filter")
Cc: stable@dpdk.org
Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
drivers/net/ixgbe/ixgbe_flow.c

index af76009..f96e24a 100644 (file)
@@ -1315,7 +1315,6 @@ ixgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
                {0xAC, 0x7B, 0xA1,      {0xFF, 0xFF, 0xFF,
                0x2C, 0x6D, 0x36}       0xFF, 0xFF, 0xFF}
  * MAC VLAN    tci     0x2016          0xEFFF
- *             tpid    0x8100          0xFFFF
  * END
  * Other members in mask and spec should set to 0x00.
  * Item->last should be NULL.
@@ -1513,23 +1512,8 @@ ixgbe_parse_fdir_filter_normal(const struct rte_flow_attr *attr,
                vlan_spec = (const struct rte_flow_item_vlan *)item->spec;
                vlan_mask = (const struct rte_flow_item_vlan *)item->mask;
 
-               if (vlan_spec->tpid != rte_cpu_to_be_16(ETHER_TYPE_VLAN)) {
-                       memset(rule, 0, sizeof(struct ixgbe_fdir_rule));
-                       rte_flow_error_set(error, EINVAL,
-                               RTE_FLOW_ERROR_TYPE_ITEM,
-                               item, "Not supported by fdir filter");
-                       return -rte_errno;
-               }
-
                rule->ixgbe_fdir.formatted.vlan_id = vlan_spec->tci;
 
-               if (vlan_mask->tpid != (uint16_t)~0U) {
-                       memset(rule, 0, sizeof(struct ixgbe_fdir_rule));
-                       rte_flow_error_set(error, EINVAL,
-                               RTE_FLOW_ERROR_TYPE_ITEM,
-                               item, "Not supported by fdir filter");
-                       return -rte_errno;
-               }
                rule->mask.vlan_tci_mask = vlan_mask->tci;
                rule->mask.vlan_tci_mask &= rte_cpu_to_be_16(0xEFFF);
                /* More than one tags are not supported. */
@@ -1824,6 +1808,7 @@ ixgbe_parse_fdir_filter_normal(const struct rte_flow_attr *attr,
  * IPV4/IPV6   NULL                    NULL
  * UDP         NULL                    NULL
  * VxLAN       vni{0x00, 0x32, 0x54}   {0xFF, 0xFF, 0xFF}
+ * MAC VLAN    tci     0x2016          0xEFFF
  * END
  * NEGRV pattern example:
  * ITEM                Spec                    Mask
@@ -1831,6 +1816,7 @@ ixgbe_parse_fdir_filter_normal(const struct rte_flow_attr *attr,
  * IPV4/IPV6   NULL                    NULL
  * NVGRE       protocol        0x6558  0xFFFF
  *             tni{0x00, 0x32, 0x54}   {0xFF, 0xFF, 0xFF}
+ * MAC VLAN    tci     0x2016          0xEFFF
  * END
  * other members in mask and spec should set to 0x00.
  * item->last should be NULL.
@@ -2258,23 +2244,8 @@ ixgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
                vlan_spec = (const struct rte_flow_item_vlan *)item->spec;
                vlan_mask = (const struct rte_flow_item_vlan *)item->mask;
 
-               if (vlan_spec->tpid != rte_cpu_to_be_16(ETHER_TYPE_VLAN)) {
-                       memset(rule, 0, sizeof(struct ixgbe_fdir_rule));
-                       rte_flow_error_set(error, EINVAL,
-                               RTE_FLOW_ERROR_TYPE_ITEM,
-                               item, "Not supported by fdir filter");
-                       return -rte_errno;
-               }
-
                rule->ixgbe_fdir.formatted.vlan_id = vlan_spec->tci;
 
-               if (vlan_mask->tpid != (uint16_t)~0U) {
-                       memset(rule, 0, sizeof(struct ixgbe_fdir_rule));
-                       rte_flow_error_set(error, EINVAL,
-                               RTE_FLOW_ERROR_TYPE_ITEM,
-                               item, "Not supported by fdir filter");
-                       return -rte_errno;
-               }
                rule->mask.vlan_tci_mask = vlan_mask->tci;
                rule->mask.vlan_tci_mask &= rte_cpu_to_be_16(0xEFFF);
                /* More than one tags are not supported. */