]> git.baikalelectronics.ru Git - kernel.git/commitdiff
ice: Match on all profiles in slow-path
authorWojciech Drewek <wojciech.drewek@intel.com>
Fri, 17 Dec 2021 11:36:25 +0000 (12:36 +0100)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Fri, 18 Feb 2022 21:22:06 +0000 (13:22 -0800)
In switchdev mode, slow-path rules need to match all protocols, in order
to correctly redirect unfiltered or missed packets to the uplink. To set
this up for the virtual function to uplink flow, the rule that redirects
packets to the control VSI must have the tunnel type set to
ICE_SW_TUN_AND_NON_TUN. As a result of that new tunnel type being set,
ice_get_compat_fv_bitmap will select ICE_PROF_ALL. At that point all
profiles would be selected for this rule, resulting in the desired
behavior. Without this change slow-path would not work with
tunnel protocols.

Fixes: d8d7095ca94a ("ice: low level support for tunnels")
Signed-off-by: Wojciech Drewek <wojciech.drewek@intel.com>
Tested-by: Sandeep Penigalapati <sandeep.penigalapati@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_eswitch.c
drivers/net/ethernet/intel/ice/ice_protocol_type.h
drivers/net/ethernet/intel/ice/ice_switch.c

index 864692b157b6f8901f8d6b6808499bd51331e842..73edc24d81d54613c5793b1d0747783ac6b09943 100644 (file)
@@ -44,6 +44,7 @@ ice_eswitch_add_vf_mac_rule(struct ice_pf *pf, struct ice_vf *vf, const u8 *mac)
                                       ctrl_vsi->rxq_map[vf->vf_id];
        rule_info.flags_info.act |= ICE_SINGLE_ACT_LB_ENABLE;
        rule_info.flags_info.act_valid = true;
+       rule_info.tun_type = ICE_SW_TUN_AND_NON_TUN;
 
        err = ice_add_adv_rule(hw, list, lkups_cnt, &rule_info,
                               vf->repr->mac_rule);
index dc1b0e9e6df5fd4e20dad7f5a63e4503259b27f0..695b6dd61dc27e091cd5cd55bce6fa8fb58579fc 100644 (file)
@@ -47,6 +47,7 @@ enum ice_protocol_type {
 
 enum ice_sw_tunnel_type {
        ICE_NON_TUN = 0,
+       ICE_SW_TUN_AND_NON_TUN,
        ICE_SW_TUN_VXLAN,
        ICE_SW_TUN_GENEVE,
        ICE_SW_TUN_NVGRE,
index 11ae0bee3590fe35cbd8a0ad028b74effaaedb67..475ec2afa210b1e799baa760d9de4bf54bcf96be 100644 (file)
@@ -4537,6 +4537,7 @@ ice_get_compat_fv_bitmap(struct ice_hw *hw, struct ice_adv_rule_info *rinfo,
        case ICE_SW_TUN_NVGRE:
                prof_type = ICE_PROF_TUN_GRE;
                break;
+       case ICE_SW_TUN_AND_NON_TUN:
        default:
                prof_type = ICE_PROF_ALL;
                break;
@@ -5305,7 +5306,8 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
        if (status)
                goto err_ice_add_adv_rule;
 
-       if (rinfo->tun_type != ICE_NON_TUN) {
+       if (rinfo->tun_type != ICE_NON_TUN &&
+           rinfo->tun_type != ICE_SW_TUN_AND_NON_TUN) {
                status = ice_fill_adv_packet_tun(hw, rinfo->tun_type,
                                                 s_rule->pdata.lkup_tx_rx.hdr,
                                                 pkt_offsets);