ixgbe: fix supported flow types
authorJingjing Wu <jingjing.wu@intel.com>
Fri, 6 Mar 2015 09:36:13 +0000 (17:36 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Tue, 10 Mar 2015 15:44:54 +0000 (16:44 +0100)
Ixgbe doesn't support the ipv4-frag and ipv6-frag flow types, remove them.
Ixgbe doesn't support configure flex mask on each kind of flow type, this
patch uses RTE_ETH_FLOW_UNKNOWN to specify global flex mask setting.
This patch also changes the string "raw" to "none" to indicate flex mask
setting unrelated with flow type in testpmd for ixgbe.

Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
app/test-pmd/cmdline.c
lib/librte_pmd_ixgbe/ixgbe_fdir.c

index a15cbf2..604c3ec 100644 (file)
@@ -661,8 +661,7 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "    Set flow director mask.\n\n"
 
                        "flow_director_flex_mask (port_id)"
-                       " flow (raw|ip4|ip4-frag|tcp4|udp4|sctp4|ip6|ip6-frag|tcp6|udp6|sctp6|all)"
-                       " flow (raw|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|"
+                       " flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|"
                        "ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|all)"
                        " (mask)\n"
                        "    Configure mask of flex payload.\n\n"
@@ -8228,6 +8227,19 @@ cmd_flow_director_flex_mask_parsed(void *parsed_result,
                return;
        }
 
+       if (!strcmp(res->flow_type, "none")) {
+               /* means don't specify the flow type */
+               flex_mask.flow_type = RTE_ETH_FLOW_UNKNOWN;
+               for (i = 0; i < RTE_ETH_FLOW_MAX; i++)
+                       memset(&port->dev_conf.fdir_conf.flex_conf.flex_mask[i],
+                              0, sizeof(struct rte_eth_fdir_flex_mask));
+               port->dev_conf.fdir_conf.flex_conf.nb_flexmasks = 1;
+               (void)rte_memcpy(&port->dev_conf.fdir_conf.flex_conf.flex_mask[0],
+                                &flex_mask,
+                                sizeof(struct rte_eth_fdir_flex_mask));
+               cmd_reconfig_device_queue(res->port_id, 1, 1);
+               return;
+       }
        flow_type_mask = fdir_info.flow_types_mask[0];
        if (!strcmp(res->flow_type, "all")) {
                if (!flow_type_mask) {
@@ -8265,7 +8277,7 @@ cmdline_parse_token_string_t cmd_flow_director_flexmask_flow =
                                 flow, "flow");
 cmdline_parse_token_string_t cmd_flow_director_flexmask_flow_type =
        TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flex_mask_result,
-               flow_type, "raw#ipv4-other#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#"
+               flow_type, "none#ipv4-other#ipv4-frag#ipv4-tcp#ipv4-udp#ipv4-sctp#"
                "ipv6-other#ipv6-frag#ipv6-tcp#ipv6-udp#ipv6-sctp#all");
 cmdline_parse_token_string_t cmd_flow_director_flexmask_mask =
        TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flex_mask_result,
index bab1bc9..afc53cb 100644 (file)
 #define IXGBE_FDIRCMD_CMD_INTERVAL_US   10
 
 #define IXGBE_FDIR_FLOW_TYPES ( \
-       (1 << RTE_ETH_FLOW_FRAG_IPV4) | \
        (1 << RTE_ETH_FLOW_NONFRAG_IPV4_UDP) | \
        (1 << RTE_ETH_FLOW_NONFRAG_IPV4_TCP) | \
        (1 << RTE_ETH_FLOW_NONFRAG_IPV4_SCTP) | \
        (1 << RTE_ETH_FLOW_NONFRAG_IPV4_OTHER) | \
-       (1 << RTE_ETH_FLOW_FRAG_IPV4) | \
        (1 << RTE_ETH_FLOW_NONFRAG_IPV6_UDP) | \
        (1 << RTE_ETH_FLOW_NONFRAG_IPV6_TCP) | \
        (1 << RTE_ETH_FLOW_NONFRAG_IPV6_SCTP) | \
@@ -410,8 +408,8 @@ ixgbe_set_fdir_flex_conf(struct rte_eth_dev *dev,
 
        for (i = 0; i < conf->nb_flexmasks; i++) {
                flex_mask = &conf->flex_mask[i];
-               if (flex_mask->flow_type != RTE_ETH_FLOW_RAW) {
-                       PMD_DRV_LOG(ERR, "unsupported flow type.");
+               if (flex_mask->flow_type != RTE_ETH_FLOW_UNKNOWN) {
+                       PMD_DRV_LOG(ERR, "flexmask should be set globally.");
                        return -EINVAL;
                }
                flexbytes = (uint16_t)(((flex_mask->mask[0] << 8) & 0xFF00) |
@@ -1030,7 +1028,7 @@ ixgbe_fdir_info_get(struct rte_eth_dev *dev, struct rte_eth_fdir_info *fdir_info
        fdir_info->flex_conf.flex_set[0].src_offset[0] = offset;
        fdir_info->flex_conf.flex_set[0].src_offset[1] = offset + 1;
        fdir_info->flex_conf.nb_flexmasks = 1;
-       fdir_info->flex_conf.flex_mask[0].flow_type = RTE_ETH_FLOW_RAW;
+       fdir_info->flex_conf.flex_mask[0].flow_type = RTE_ETH_FLOW_UNKNOWN;
        fdir_info->flex_conf.flex_mask[0].mask[0] =
                        (uint8_t)(info->mask.flex_bytes_mask & 0x00FF);
        fdir_info->flex_conf.flex_mask[0].mask[1] =