Skip to content

Commit 4280516

Browse files
Michal Swiatkowskianguy11
authored andcommitted
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: 0d08a44 ("ice: ndo_setup_tc implementation for PF") Reviewed-by: Jedrzej Jagielski <[email protected]> Reviewed-by: Sridhar Samudrala <[email protected]> Signed-off-by: Michal Swiatkowski <[email protected]> Reviewed-by: Simon Horman <[email protected]> Tested-by: Sujai Buvaneswaran <[email protected]> Signed-off-by: Tony Nguyen <[email protected]>
1 parent e226ead commit 4280516

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

drivers/net/ethernet/intel/ice/ice_tc_lib.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ ice_tc_count_lkups(u32 flags, struct ice_tc_flower_lyr_2_4_hdrs *headers,
2828
* - ICE_TC_FLWR_FIELD_VLAN_TPID (present if specified)
2929
* - Tunnel flag (present if tunnel)
3030
*/
31+
if (fltr->direction == ICE_ESWITCH_FLTR_EGRESS)
32+
lkups_cnt++;
3133

3234
if (flags & ICE_TC_FLWR_FIELD_TENANT_ID)
3335
lkups_cnt++;
@@ -363,6 +365,11 @@ ice_tc_fill_rules(struct ice_hw *hw, u32 flags,
363365
/* Always add direction metadata */
364366
ice_rule_add_direction_metadata(&list[ICE_TC_METADATA_LKUP_IDX]);
365367

368+
if (tc_fltr->direction == ICE_ESWITCH_FLTR_EGRESS) {
369+
ice_rule_add_src_vsi_metadata(&list[i]);
370+
i++;
371+
}
372+
366373
rule_info->tun_type = ice_sw_type_from_tunnel(tc_fltr->tunnel_type);
367374
if (tc_fltr->tunnel_type != TNL_LAST) {
368375
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)
820827

821828
/* specify the cookie as filter_rule_id */
822829
rule_info.fltr_rule_id = fltr->cookie;
830+
rule_info.src_vsi = vsi->idx;
823831

824832
ret = ice_add_adv_rule(hw, list, lkups_cnt, &rule_info, &rule_added);
825833
if (ret == -EEXIST) {

0 commit comments

Comments
 (0)