diff options
author | Yashaswini Raghuram Prathivadi Bhayankaram <yashaswini.raghuram.prathivadi.bhayankaram@intel.com> | 2018-10-26 14:44:41 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2018-11-20 14:39:04 -0500 |
commit | 6a7e69936992104e7abbf12c7f619a39bf139a48 (patch) | |
tree | a3bac427c72877c1f2b3337cee67ee75e6351a46 /drivers/net/ethernet/intel/ice/ice_switch.c | |
parent | 5fb597d7c83310716be185f36a8b153e2457ea7f (diff) |
ice: Do not set LAN_EN for MAC-VLAN filters
In the action fields for a MAC-VLAN filter, do not set the LAN_EN flag
if the MAC in the MAC-VLAN is unicast MAC. The unicast packets that
match should not be forwarded to the wire.
Signed-off-by: Yashaswini Raghuram Prathivadi Bhayankaram <yashaswini.raghuram.prathivadi.bhayankaram@intel.com>
Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_switch.c')
-rw-r--r-- | drivers/net/ethernet/intel/ice/ice_switch.c | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_switch.c b/drivers/net/ethernet/intel/ice/ice_switch.c index 40c9c6558956..107ca08899b6 100644 --- a/drivers/net/ethernet/intel/ice/ice_switch.c +++ b/drivers/net/ethernet/intel/ice/ice_switch.c | |||
@@ -629,25 +629,36 @@ enum ice_status ice_get_initial_sw_cfg(struct ice_hw *hw) | |||
629 | /** | 629 | /** |
630 | * ice_fill_sw_info - Helper function to populate lb_en and lan_en | 630 | * ice_fill_sw_info - Helper function to populate lb_en and lan_en |
631 | * @hw: pointer to the hardware structure | 631 | * @hw: pointer to the hardware structure |
632 | * @f_info: filter info structure to fill/update | 632 | * @fi: filter info structure to fill/update |
633 | * | 633 | * |
634 | * This helper function populates the lb_en and lan_en elements of the provided | 634 | * This helper function populates the lb_en and lan_en elements of the provided |
635 | * ice_fltr_info struct using the switch's type and characteristics of the | 635 | * ice_fltr_info struct using the switch's type and characteristics of the |
636 | * switch rule being configured. | 636 | * switch rule being configured. |
637 | */ | 637 | */ |
638 | static void ice_fill_sw_info(struct ice_hw *hw, struct ice_fltr_info *f_info) | 638 | static void ice_fill_sw_info(struct ice_hw *hw, struct ice_fltr_info *fi) |
639 | { | 639 | { |
640 | f_info->lb_en = false; | 640 | fi->lb_en = false; |
641 | f_info->lan_en = false; | 641 | fi->lan_en = false; |
642 | if ((f_info->flag & ICE_FLTR_TX) && | 642 | if ((fi->flag & ICE_FLTR_TX) && |
643 | (f_info->fltr_act == ICE_FWD_TO_VSI || | 643 | (fi->fltr_act == ICE_FWD_TO_VSI || |
644 | f_info->fltr_act == ICE_FWD_TO_VSI_LIST || | 644 | fi->fltr_act == ICE_FWD_TO_VSI_LIST || |
645 | f_info->fltr_act == ICE_FWD_TO_Q || | 645 | fi->fltr_act == ICE_FWD_TO_Q || |
646 | f_info->fltr_act == ICE_FWD_TO_QGRP)) { | 646 | fi->fltr_act == ICE_FWD_TO_QGRP)) { |
647 | f_info->lb_en = true; | 647 | fi->lb_en = true; |
648 | if (!(hw->evb_veb && f_info->lkup_type == ICE_SW_LKUP_MAC && | 648 | /* Do not set lan_en to TRUE if |
649 | is_unicast_ether_addr(f_info->l_data.mac.mac_addr))) | 649 | * 1. The switch is a VEB AND |
650 | f_info->lan_en = true; | 650 | * 2 |
651 | * 2.1 The lookup is MAC with unicast addr for MAC, OR | ||
652 | * 2.2 The lookup is MAC_VLAN with unicast addr for MAC | ||
653 | * | ||
654 | * In all other cases, the LAN enable has to be set to true. | ||
655 | */ | ||
656 | if (!(hw->evb_veb && | ||
657 | ((fi->lkup_type == ICE_SW_LKUP_MAC && | ||
658 | is_unicast_ether_addr(fi->l_data.mac.mac_addr)) || | ||
659 | (fi->lkup_type == ICE_SW_LKUP_MAC_VLAN && | ||
660 | is_unicast_ether_addr(fi->l_data.mac_vlan.mac_addr))))) | ||
661 | fi->lan_en = true; | ||
651 | } | 662 | } |
652 | } | 663 | } |
653 | 664 | ||