Message ID | 20240315110821.511321-2-michal.swiatkowski@linux.intel.com |
---|---|
State | Accepted |
Delegated to: | Anthony Nguyen |
Headers | show |
Series | ice: two fixes for tc code | expand |
On Fri, Mar 15, 2024 at 12:08:20PM +0100, Michal Swiatkowski wrote: > In case of traffic going from the VF (so ingress for port representor) > source VSI should be consider during packet classification. It is > needed for hardware to not match packets from different ports with > filters added on other port. > > It is only for "from VF" traffic, because other traffic direction > doesn't have source VSI. > > Set correct ::src_vsi in rule_info to pass it to the hardware filter. > > For example this rule should drop only ipv4 packets from eth10, not from > the others VF PRs. It is needed to check source VSI in this case. > $tc filter add dev eth10 ingress protocol ip flower skip_sw action drop > > Fixes: 0d08a441fb1a ("ice: ndo_setup_tc implementation for PF") > Reviewed-by: Jedrzej Jagielski <jedrzej.jagielski@intel.com> > Reviewed-by: Sridhar Samudrala <sridhar.samudrala@intel.com> > Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> Reviewed-by: Simon Horman <horms@kernel.org>
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of > Michal Swiatkowski > Sent: Friday, March 15, 2024 4:38 PM > To: intel-wired-lan@lists.osuosl.org > Cc: Samudrala, Sridhar <sridhar.samudrala@intel.com>; > netdev@vger.kernel.org; Jagielski, Jedrzej <jedrzej.jagielski@intel.com>; > Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Subject: [Intel-wired-lan] [iwl-net v1 1/2] ice: tc: check src_vsi in case of traffic > from VF > > In case of traffic going from the VF (so ingress for port representor) source > VSI should be consider during packet classification. It is needed for hardware > to not match packets from different ports with filters added on other port. > > It is only for "from VF" traffic, because other traffic direction doesn't have > source VSI. > > Set correct ::src_vsi in rule_info to pass it to the hardware filter. > > For example this rule should drop only ipv4 packets from eth10, not from the > others VF PRs. It is needed to check source VSI in this case. > $tc filter add dev eth10 ingress protocol ip flower skip_sw action drop > > Fixes: 0d08a441fb1a ("ice: ndo_setup_tc implementation for PF") > Reviewed-by: Jedrzej Jagielski <jedrzej.jagielski@intel.com> > Reviewed-by: Sridhar Samudrala <sridhar.samudrala@intel.com> > Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > --- > drivers/net/ethernet/intel/ice/ice_tc_lib.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
diff --git a/drivers/net/ethernet/intel/ice/ice_tc_lib.c b/drivers/net/ethernet/intel/ice/ice_tc_lib.c index 47f28cd576c6..a8c686ecd1a0 100644 --- a/drivers/net/ethernet/intel/ice/ice_tc_lib.c +++ b/drivers/net/ethernet/intel/ice/ice_tc_lib.c @@ -28,6 +28,8 @@ ice_tc_count_lkups(u32 flags, struct ice_tc_flower_lyr_2_4_hdrs *headers, * - ICE_TC_FLWR_FIELD_VLAN_TPID (present if specified) * - Tunnel flag (present if tunnel) */ + if (fltr->direction == ICE_ESWITCH_FLTR_EGRESS) + lkups_cnt++; if (flags & ICE_TC_FLWR_FIELD_TENANT_ID) lkups_cnt++; @@ -363,6 +365,11 @@ ice_tc_fill_rules(struct ice_hw *hw, u32 flags, /* Always add direction metadata */ ice_rule_add_direction_metadata(&list[ICE_TC_METADATA_LKUP_IDX]); + if (tc_fltr->direction == ICE_ESWITCH_FLTR_EGRESS) { + ice_rule_add_src_vsi_metadata(&list[i]); + i++; + } + rule_info->tun_type = ice_sw_type_from_tunnel(tc_fltr->tunnel_type); if (tc_fltr->tunnel_type != TNL_LAST) { i = ice_tc_fill_tunnel_outer(flags, tc_fltr, list, i); @@ -820,6 +827,7 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr) /* specify the cookie as filter_rule_id */ rule_info.fltr_rule_id = fltr->cookie; + rule_info.src_vsi = vsi->idx; ret = ice_add_adv_rule(hw, list, lkups_cnt, &rule_info, &rule_added); if (ret == -EEXIST) {