net/iavf: fix GTP-U extension flow
authorWenxuan Wu <wenxuanx.wu@intel.com>
Wed, 6 Jul 2022 02:56:26 +0000 (10:56 +0800)
committerQi Zhang <qi.z.zhang@intel.com>
Thu, 7 Jul 2022 07:11:03 +0000 (09:11 +0200)
Due to the change of struct rte_gtp_psc_generic_hdr, kernel driver can
not handle gtp_psc properly, we introduce a new structure to fix this
gap between kernel driver and struct rte_gtp_psc_generic_hdr.

Fixes: d5eb3e600d9e ("net/iavf: support flow director basic rule")
Cc: stable@dpdk.org
Signed-off-by: Wenxuan Wu <wenxuanx.wu@intel.com>
Tested-by: Zhimin Huang <zhiminx.huang@intel.com>
Acked-by: Qiming Yang <qiming.yang@intel.com>
drivers/net/iavf/iavf_fdir.c

index f236260..4789d46 100644 (file)
@@ -1300,8 +1300,22 @@ iavf_fdir_parse_pattern(__rte_unused struct iavf_adapter *ad,
                                                                                 GTPU_DWN, QFI);
                                }
 
-                               rte_memcpy(hdr->buffer, gtp_psc_spec,
-                                       sizeof(*gtp_psc_spec));
+                               /*
+                                * New structure to fix gap between kernel driver and
+                                * rte_gtp_psc_generic_hdr.
+                                */
+                               struct iavf_gtp_psc_spec_hdr {
+                                       uint8_t len;
+                                       uint8_t qfi:6;
+                                       uint8_t type:4;
+                                       uint8_t next;
+                               } psc;
+                               psc.len = gtp_psc_spec->hdr.ext_hdr_len;
+                               psc.qfi = gtp_psc_spec->hdr.qfi;
+                               psc.type = gtp_psc_spec->hdr.type;
+                               psc.next = 0;
+                               rte_memcpy(hdr->buffer, &psc,
+                                       sizeof(struct iavf_gtp_psc_spec_hdr));
                        }
 
                        hdrs->count = ++layer;