net/ice/base: add ethertype IPv6 check for dummy packet
authorQi Zhang <qi.z.zhang@intel.com>
Tue, 10 Aug 2021 02:51:15 +0000 (10:51 +0800)
committerQi Zhang <qi.z.zhang@intel.com>
Wed, 11 Aug 2021 02:23:23 +0000 (04:23 +0200)
In order to support switch rule for ethertype filter
with ipv6 ethertype id, it has to check ethertype and
then find a proper dummy packet. There was a silent
assumption that packet is ipv4, unless src or dst ipv6
address is specified in a flow.

Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Junfeng Guo <junfeng.guo@intel.com>
drivers/net/ice/base/ice_switch.c

index 5926635..4a82985 100644 (file)
@@ -10,9 +10,9 @@
 #define ICE_ETH_ETHTYPE_OFFSET         12
 #define ICE_ETH_VLAN_TCI_OFFSET                14
 #define ICE_MAX_VLAN_ID                        0xFFF
+#define ICE_IPV6_ETHER_ID              0x86DD
 #define ICE_IPV4_NVGRE_PROTO_ID                0x002F
 #define ICE_PPP_IPV6_PROTO_ID          0x0057
-#define ICE_IPV6_ETHER_ID              0x86DD
 #define ICE_TCP_PROTO_ID               0x06
 #define ICE_GTPU_PROFILE               24
 #define ICE_ETH_P_8021Q                        0x8100
@@ -7889,6 +7889,12 @@ ice_find_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt,
                        ipv6 = true;
                else if (lkups[i].type == ICE_VLAN_OFOS)
                        vlan = 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 ==
+                               CPU_TO_BE16(0xFFFF))
+                       ipv6 = true;
                else if (lkups[i].type == ICE_IPV4_OFOS &&
                         lkups[i].h_u.ipv4_hdr.protocol ==
                                ICE_IPV4_NVGRE_PROTO_ID &&
@@ -7901,12 +7907,6 @@ 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;
                else if (lkups[i].type == ICE_IPV4_IL &&
                         lkups[i].h_u.ipv4_hdr.protocol ==
                                ICE_TCP_PROTO_ID &&