net/i40e: add parser for IPv4/v6 frag
authorBeilei Xing <beilei.xing@intel.com>
Fri, 19 Jan 2018 07:50:05 +0000 (15:50 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Sun, 21 Jan 2018 14:51:52 +0000 (15:51 +0100)
There're new metadata IPV4FRAG and IPV6FRAG in PPP
profile, this patch improves ptype parser to support
IPV4FRAG and IPV6FRAG.

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
drivers/net/i40e/i40e_ethdev.c

index ba9f8a9..9dad227 100644 (file)
@@ -11329,40 +11329,52 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
                                if (!strncmp(name, "PPPOE", 5))
                                        ptype_mapping[i].sw_ptype |=
                                                RTE_PTYPE_L2_ETHER_PPPOE;
-                               else if (!strncmp(name, "OIPV4", 5)) {
+                               else if (!strncmp(name, "IPV4FRAG", 8) &&
+                                        !in_tunnel) {
                                        ptype_mapping[i].sw_ptype |=
                                                RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
-                                       in_tunnel = true;
-                               } else if (!strncmp(name, "IPV4", 4) &&
-                                          !in_tunnel)
                                        ptype_mapping[i].sw_ptype |=
-                                               RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
-                               else if (!strncmp(name, "IPV4FRAG", 8) &&
-                                        in_tunnel) {
+                                               RTE_PTYPE_L4_FRAG;
+                               else if (!strncmp(name, "IPV4FRAG", 8) &&
+                                          in_tunnel) {
                                        ptype_mapping[i].sw_ptype |=
                                            RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
                                        ptype_mapping[i].sw_ptype |=
                                                RTE_PTYPE_INNER_L4_FRAG;
+                               } else if (!strncmp(name, "OIPV4", 5)) {
+                                       ptype_mapping[i].sw_ptype |=
+                                               RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
+                                       in_tunnel = true;
                                } else if (!strncmp(name, "IPV4", 4) &&
-                                          in_tunnel)
+                                          !in_tunnel)
+                                       ptype_mapping[i].sw_ptype |=
+                                               RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
+                               else if (!strncmp(name, "IPV4", 4) &&
+                                        in_tunnel)
                                        ptype_mapping[i].sw_ptype |=
                                            RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
-                               else if (!strncmp(name, "OIPV6", 5)) {
+                               else if (!strncmp(name, "IPV6FRAG", 8) &&
+                                        !in_tunnel) {
                                        ptype_mapping[i].sw_ptype |=
                                                RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
-                                       in_tunnel = true;
-                               } else if (!strncmp(name, "IPV6", 4) &&
-                                          !in_tunnel)
                                        ptype_mapping[i].sw_ptype |=
-                                               RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
-                               else if (!strncmp(name, "IPV6FRAG", 8) &&
-                                        in_tunnel) {
+                                               RTE_PTYPE_L4_FRAG;
+                               else if (!strncmp(name, "IPV6FRAG", 8) &&
+                                          in_tunnel) {
                                        ptype_mapping[i].sw_ptype |=
                                            RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
                                        ptype_mapping[i].sw_ptype |=
                                                RTE_PTYPE_INNER_L4_FRAG;
+                               } else if (!strncmp(name, "OIPV6", 5)) {
+                                       ptype_mapping[i].sw_ptype |=
+                                               RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
+                                       in_tunnel = true;
                                } else if (!strncmp(name, "IPV6", 4) &&
-                                          in_tunnel)
+                                          !in_tunnel)
+                                       ptype_mapping[i].sw_ptype |=
+                                               RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
+                               else if (!strncmp(name, "IPV6", 4) &&
+                                        in_tunnel)
                                        ptype_mapping[i].sw_ptype |=
                                            RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
                                else if (!strncmp(name, "UDP", 3) && !in_tunnel)