net/ice/base: add ethertype check for dummy packet
authorQi Zhang <qi.z.zhang@intel.com>
Mon, 30 Mar 2020 11:45:26 +0000 (19:45 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 21 Apr 2020 11:57:05 +0000 (13:57 +0200)
In order to support switch rule for ethertype filter
with ipv6 ethertype id, it has to check ethertype
then find a proper dummy packet.

Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Qiming Yang <qiming.yang@intel.com>
drivers/net/ice/base/ice_switch.c

index 3d83ded..9c4fc0f 100644 (file)
@@ -12,6 +12,7 @@
 #define ICE_MAX_VLAN_ID                        0xFFF
 #define ICE_IPV4_NVGRE_PROTO_ID                0x002F
 #define ICE_PPP_IPV6_PROTO_ID          0x0057
+#define ICE_IPV6_ETHER_ID              0x86DD
 
 /* Dummy ethernet header needed in the ice_aqc_sw_rules_elem
  * struct to configure any switch filter rules.
@@ -5962,6 +5963,12 @@ ice_find_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt,
                         lkups[i].m_u.pppoe_hdr.ppp_prot_id ==
                                0xFFFF)
                        ipv6 = true;
+               else if (lkups[i].type == ICE_ETYPE_OL &&
+                        lkups[i].h_u.ethertype.ethtype_id ==
+                               CPU_TO_BE16(ICE_IPV6_ETHER_ID) &&
+                        lkups[i].m_u.ethertype.ethtype_id ==
+                                       0xFFFF)
+                       ipv6 = true;
        }
 
        if (tun_type == ICE_SW_TUN_GTP) {