net/ice/base: fix ptype mapping pollution from GTP flow
authorQi Zhang <qi.z.zhang@intel.com>
Wed, 30 Oct 2019 01:14:32 +0000 (09:14 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 8 Nov 2019 22:15:04 +0000 (23:15 +0100)
A new gtp flow's profile will capture other profile's non-gtp ptypes
which is unexpected. For example, a RSS flow for inner IP / UDP on
regular tunnel packet's behaviour will be changed by a following GTP RSS
rule where inner IP is the only inputset, since all tunnel ptypes have
been shifted from the first profile to the second one.

The patch fixes the issue by correcting the ptype mapping that prevents
the ptype shift.

Fixes: d1c2f76b440a ("net/ice/base: support GTP and PPPoE protocols")

Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Tested-by: Simei Su <simei.su@intel.com>
Acked-by: Xiaolong Ye <xiaolong.ye@intel.com>
drivers/net/ice/base/ice_flow.c

index d2dbb11..6264e77 100644 (file)
@@ -579,29 +579,21 @@ ice_flow_proc_seg_hdrs(struct ice_flow_prof_params *params)
                                               src, ICE_FLOW_PTYPE_MAX);
                        }
                } else if (hdrs & ICE_FLOW_SEG_HDR_GTPC) {
-                       if (!i) {
-                               src = (const ice_bitmap_t *)ice_ptypes_gtpc;
-                               ice_and_bitmap(params->ptypes, params->ptypes,
-                                              src, ICE_FLOW_PTYPE_MAX);
-                       }
+                       src = (const ice_bitmap_t *)ice_ptypes_gtpc;
+                       ice_and_bitmap(params->ptypes, params->ptypes,
+                                      src, ICE_FLOW_PTYPE_MAX);
                } else if (hdrs & ICE_FLOW_SEG_HDR_GTPC_TEID) {
-                       if (!i) {
-                               src = (const ice_bitmap_t *)ice_ptypes_gtpc_tid;
-                               ice_and_bitmap(params->ptypes, params->ptypes,
-                                              src, ICE_FLOW_PTYPE_MAX);
-                       }
+                       src = (const ice_bitmap_t *)ice_ptypes_gtpc_tid;
+                       ice_and_bitmap(params->ptypes, params->ptypes,
+                                      src, ICE_FLOW_PTYPE_MAX);
                } else if (hdrs & ICE_FLOW_SEG_HDR_GTPU) {
-                       if (!i) {
-                               src = (const ice_bitmap_t *)ice_ptypes_gtpu;
-                               ice_and_bitmap(params->ptypes, params->ptypes,
-                                              src, ICE_FLOW_PTYPE_MAX);
-                       }
+                       src = (const ice_bitmap_t *)ice_ptypes_gtpu;
+                       ice_and_bitmap(params->ptypes, params->ptypes,
+                                      src, ICE_FLOW_PTYPE_MAX);
                } else if (hdrs & ICE_FLOW_SEG_HDR_GTPU_EH) {
-                       if (!i) {
-                               src = (const ice_bitmap_t *)ice_ptypes_gtpu;
-                               ice_and_bitmap(params->ptypes, params->ptypes,
-                                              src, ICE_FLOW_PTYPE_MAX);
-                       }
+                       src = (const ice_bitmap_t *)ice_ptypes_gtpu;
+                       ice_and_bitmap(params->ptypes, params->ptypes,
+                                      src, ICE_FLOW_PTYPE_MAX);
 
                        /* Attributes for GTP packet with Extension Header */
                        params->attr = ice_attr_gtpu_eh;