Commit b70bc066 authored by Wojciech Drewek's avatar Wojciech Drewek Committed by Tony Nguyen

ice: Match on all profiles in slow-path

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: 8b032a55 ("ice: low level support for tunnels")
Signed-off-by: default avatarWojciech Drewek <wojciech.drewek@intel.com>
Tested-by: default avatarSandeep Penigalapati <sandeep.penigalapati@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent b352c346
...@@ -44,6 +44,7 @@ ice_eswitch_add_vf_mac_rule(struct ice_pf *pf, struct ice_vf *vf, const u8 *mac) ...@@ -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]; ctrl_vsi->rxq_map[vf->vf_id];
rule_info.flags_info.act |= ICE_SINGLE_ACT_LB_ENABLE; rule_info.flags_info.act |= ICE_SINGLE_ACT_LB_ENABLE;
rule_info.flags_info.act_valid = true; 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, err = ice_add_adv_rule(hw, list, lkups_cnt, &rule_info,
vf->repr->mac_rule); vf->repr->mac_rule);
......
...@@ -47,6 +47,7 @@ enum ice_protocol_type { ...@@ -47,6 +47,7 @@ enum ice_protocol_type {
enum ice_sw_tunnel_type { enum ice_sw_tunnel_type {
ICE_NON_TUN = 0, ICE_NON_TUN = 0,
ICE_SW_TUN_AND_NON_TUN,
ICE_SW_TUN_VXLAN, ICE_SW_TUN_VXLAN,
ICE_SW_TUN_GENEVE, ICE_SW_TUN_GENEVE,
ICE_SW_TUN_NVGRE, ICE_SW_TUN_NVGRE,
......
...@@ -4537,6 +4537,7 @@ ice_get_compat_fv_bitmap(struct ice_hw *hw, struct ice_adv_rule_info *rinfo, ...@@ -4537,6 +4537,7 @@ ice_get_compat_fv_bitmap(struct ice_hw *hw, struct ice_adv_rule_info *rinfo,
case ICE_SW_TUN_NVGRE: case ICE_SW_TUN_NVGRE:
prof_type = ICE_PROF_TUN_GRE; prof_type = ICE_PROF_TUN_GRE;
break; break;
case ICE_SW_TUN_AND_NON_TUN:
default: default:
prof_type = ICE_PROF_ALL; prof_type = ICE_PROF_ALL;
break; break;
...@@ -5305,7 +5306,8 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups, ...@@ -5305,7 +5306,8 @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
if (status) if (status)
goto err_ice_add_adv_rule; 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, status = ice_fill_adv_packet_tun(hw, rinfo->tun_type,
s_rule->pdata.lkup_tx_rx.hdr, s_rule->pdata.lkup_tx_rx.hdr,
pkt_offsets); pkt_offsets);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment