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.x...@intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 44 +++++++++++++++++++++++++++---------------
 1 file changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 9626c6a..b197c53 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -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)
-- 
2.5.5

Reply via email to