net/ice/base: consolidate VF promiscuous mode
Consolidate the Promiscuous rule for SMBM on the chosen logical port. Signed-off-by: Shibin Koikkara Reeny <shibin.koikkara.reeny@intel.com> Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> Acked-by: Qiming Yang <qiming.yang@intel.com>
This commit is contained in:
parent
0bfcca26c8
commit
60ff6f5ce2
@ -4354,17 +4354,17 @@ static u8 ice_determine_promisc_mask(struct ice_fltr_info *fi)
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_get_vsi_promisc - get promiscuous mode of given VSI
|
||||
* _ice_get_vsi_promisc - get promiscuous mode of given VSI
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_handle: VSI handle to retrieve info from
|
||||
* @promisc_mask: pointer to mask to be filled in
|
||||
* @vid: VLAN ID of promisc VLAN VSI
|
||||
* @sw: pointer to switch info struct for which function add rule
|
||||
*/
|
||||
enum ice_status
|
||||
ice_get_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 *promisc_mask,
|
||||
u16 *vid)
|
||||
static enum ice_status
|
||||
_ice_get_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 *promisc_mask,
|
||||
u16 *vid, struct ice_switch_info *sw)
|
||||
{
|
||||
struct ice_switch_info *sw = hw->switch_info;
|
||||
struct ice_fltr_mgmt_list_entry *itr;
|
||||
struct LIST_HEAD_TYPE *rule_head;
|
||||
struct ice_lock *rule_lock; /* Lock to protect filter rule list */
|
||||
@ -4394,17 +4394,32 @@ ice_get_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 *promisc_mask,
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_get_vsi_vlan_promisc - get VLAN promiscuous mode of given VSI
|
||||
* ice_get_vsi_promisc - get promiscuous mode of given VSI
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_handle: VSI handle to retrieve info from
|
||||
* @promisc_mask: pointer to mask to be filled in
|
||||
* @vid: VLAN ID of promisc VLAN VSI
|
||||
*/
|
||||
enum ice_status
|
||||
ice_get_vsi_vlan_promisc(struct ice_hw *hw, u16 vsi_handle, u8 *promisc_mask,
|
||||
u16 *vid)
|
||||
ice_get_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 *promisc_mask,
|
||||
u16 *vid)
|
||||
{
|
||||
return _ice_get_vsi_promisc(hw, vsi_handle, promisc_mask,
|
||||
vid, hw->switch_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_get_vsi_vlan_promisc - get VLAN promiscuous mode of given VSI
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_handle: VSI handle to retrieve info from
|
||||
* @promisc_mask: pointer to mask to be filled in
|
||||
* @vid: VLAN ID of promisc VLAN VSI
|
||||
* @sw: pointer to switch info struct for which function add rule
|
||||
*/
|
||||
static enum ice_status
|
||||
_ice_get_vsi_vlan_promisc(struct ice_hw *hw, u16 vsi_handle, u8 *promisc_mask,
|
||||
u16 *vid, struct ice_switch_info *sw)
|
||||
{
|
||||
struct ice_switch_info *sw = hw->switch_info;
|
||||
struct ice_fltr_mgmt_list_entry *itr;
|
||||
struct LIST_HEAD_TYPE *rule_head;
|
||||
struct ice_lock *rule_lock; /* Lock to protect filter rule list */
|
||||
@ -4433,6 +4448,21 @@ ice_get_vsi_vlan_promisc(struct ice_hw *hw, u16 vsi_handle, u8 *promisc_mask,
|
||||
return ICE_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_get_vsi_vlan_promisc - get VLAN promiscuous mode of given VSI
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_handle: VSI handle to retrieve info from
|
||||
* @promisc_mask: pointer to mask to be filled in
|
||||
* @vid: VLAN ID of promisc VLAN VSI
|
||||
*/
|
||||
enum ice_status
|
||||
ice_get_vsi_vlan_promisc(struct ice_hw *hw, u16 vsi_handle, u8 *promisc_mask,
|
||||
u16 *vid)
|
||||
{
|
||||
return _ice_get_vsi_vlan_promisc(hw, vsi_handle, promisc_mask,
|
||||
vid, hw->switch_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_remove_promisc - Remove promisc based filter rules
|
||||
* @hw: pointer to the hardware structure
|
||||
@ -4458,17 +4488,17 @@ ice_remove_promisc(struct ice_hw *hw, u8 recp_id,
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_clear_vsi_promisc - clear specified promiscuous mode(s) for given VSI
|
||||
* _ice_clear_vsi_promisc - clear specified promiscuous mode(s)
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_handle: VSI handle to clear mode
|
||||
* @promisc_mask: mask of promiscuous config bits to clear
|
||||
* @vid: VLAN ID to clear VLAN promiscuous
|
||||
* @sw: pointer to switch info struct for which function add rule
|
||||
*/
|
||||
enum ice_status
|
||||
ice_clear_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask,
|
||||
u16 vid)
|
||||
static enum ice_status
|
||||
_ice_clear_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask,
|
||||
u16 vid, struct ice_switch_info *sw)
|
||||
{
|
||||
struct ice_switch_info *sw = hw->switch_info;
|
||||
struct ice_fltr_list_entry *fm_entry, *tmp;
|
||||
struct LIST_HEAD_TYPE remove_list_head;
|
||||
struct ice_fltr_mgmt_list_entry *itr;
|
||||
@ -4533,14 +4563,32 @@ ice_clear_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask,
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_set_vsi_promisc - set given VSI to given promiscuous mode(s)
|
||||
* ice_clear_vsi_promisc - clear specified promiscuous mode(s) for given VSI
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_handle: VSI handle to clear mode
|
||||
* @promisc_mask: mask of promiscuous config bits to clear
|
||||
* @vid: VLAN ID to clear VLAN promiscuous
|
||||
*/
|
||||
enum ice_status
|
||||
ice_clear_vsi_promisc(struct ice_hw *hw, u16 vsi_handle,
|
||||
u8 promisc_mask, u16 vid)
|
||||
{
|
||||
return _ice_clear_vsi_promisc(hw, vsi_handle, promisc_mask,
|
||||
vid, hw->switch_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* _ice_set_vsi_promisc - set given VSI to given promiscuous mode(s)
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_handle: VSI handle to configure
|
||||
* @promisc_mask: mask of promiscuous config bits
|
||||
* @vid: VLAN ID to set VLAN promiscuous
|
||||
* @lport: logical port number to configure promisc mode
|
||||
* @sw: pointer to switch info struct for which function add rule
|
||||
*/
|
||||
enum ice_status
|
||||
ice_set_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask, u16 vid)
|
||||
static enum ice_status
|
||||
_ice_set_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask,
|
||||
u16 vid, u8 lport, struct ice_switch_info *sw)
|
||||
{
|
||||
enum { UCAST_FLTR = 1, MCAST_FLTR, BCAST_FLTR };
|
||||
struct ice_fltr_list_entry f_list_entry;
|
||||
@ -4631,17 +4679,16 @@ ice_set_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask, u16 vid)
|
||||
new_fltr.src = hw_vsi_id;
|
||||
} else {
|
||||
new_fltr.flag |= ICE_FLTR_RX;
|
||||
new_fltr.src = hw->port_info->lport;
|
||||
new_fltr.src = lport;
|
||||
}
|
||||
|
||||
new_fltr.fltr_act = ICE_FWD_TO_VSI;
|
||||
new_fltr.vsi_handle = vsi_handle;
|
||||
new_fltr.fwd_id.hw_vsi_id = hw_vsi_id;
|
||||
f_list_entry.fltr_info = new_fltr;
|
||||
recp_list = &hw->switch_info->recp_list[recipe_id];
|
||||
recp_list = &sw->recp_list[recipe_id];
|
||||
|
||||
status = ice_add_rule_internal(hw, recp_list,
|
||||
hw->port_info->lport,
|
||||
status = ice_add_rule_internal(hw, recp_list, lport,
|
||||
&f_list_entry);
|
||||
if (status != ICE_SUCCESS)
|
||||
goto set_promisc_exit;
|
||||
@ -4652,19 +4699,37 @@ ice_set_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask, u16 vid)
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_set_vlan_vsi_promisc
|
||||
* ice_set_vsi_promisc - set given VSI to given promiscuous mode(s)
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_handle: VSI handle to configure
|
||||
* @promisc_mask: mask of promiscuous config bits
|
||||
* @vid: VLAN ID to set VLAN promiscuous
|
||||
*/
|
||||
enum ice_status
|
||||
ice_set_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask,
|
||||
u16 vid)
|
||||
{
|
||||
return _ice_set_vsi_promisc(hw, vsi_handle, promisc_mask, vid,
|
||||
hw->port_info->lport,
|
||||
hw->switch_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* _ice_set_vlan_vsi_promisc
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_handle: VSI handle to configure
|
||||
* @promisc_mask: mask of promiscuous config bits
|
||||
* @rm_vlan_promisc: Clear VLANs VSI promisc mode
|
||||
* @lport: logical port number to configure promisc mode
|
||||
* @sw: pointer to switch info struct for which function add rule
|
||||
*
|
||||
* Configure VSI with all associated VLANs to given promiscuous mode(s)
|
||||
*/
|
||||
enum ice_status
|
||||
ice_set_vlan_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask,
|
||||
bool rm_vlan_promisc)
|
||||
static enum ice_status
|
||||
_ice_set_vlan_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask,
|
||||
bool rm_vlan_promisc, u8 lport,
|
||||
struct ice_switch_info *sw)
|
||||
{
|
||||
struct ice_switch_info *sw = hw->switch_info;
|
||||
struct ice_fltr_list_entry *list_itr, *tmp;
|
||||
struct LIST_HEAD_TYPE vsi_list_head;
|
||||
struct LIST_HEAD_TYPE *vlan_head;
|
||||
@ -4686,11 +4751,13 @@ ice_set_vlan_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask,
|
||||
list_entry) {
|
||||
vlan_id = list_itr->fltr_info.l_data.vlan.vlan_id;
|
||||
if (rm_vlan_promisc)
|
||||
status = ice_clear_vsi_promisc(hw, vsi_handle,
|
||||
promisc_mask, vlan_id);
|
||||
status = _ice_clear_vsi_promisc(hw, vsi_handle,
|
||||
promisc_mask,
|
||||
vlan_id, sw);
|
||||
else
|
||||
status = ice_set_vsi_promisc(hw, vsi_handle,
|
||||
promisc_mask, vlan_id);
|
||||
status = _ice_set_vsi_promisc(hw, vsi_handle,
|
||||
promisc_mask, vlan_id,
|
||||
lport, sw);
|
||||
if (status)
|
||||
break;
|
||||
}
|
||||
@ -4704,6 +4771,24 @@ ice_set_vlan_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask,
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_set_vlan_vsi_promisc
|
||||
* @hw: pointer to the hardware structure
|
||||
* @vsi_handle: VSI handle to configure
|
||||
* @promisc_mask: mask of promiscuous config bits
|
||||
* @rm_vlan_promisc: Clear VLANs VSI promisc mode
|
||||
*
|
||||
* Configure VSI with all associated VLANs to given promiscuous mode(s)
|
||||
*/
|
||||
enum ice_status
|
||||
ice_set_vlan_vsi_promisc(struct ice_hw *hw, u16 vsi_handle, u8 promisc_mask,
|
||||
bool rm_vlan_promisc)
|
||||
{
|
||||
return _ice_set_vlan_vsi_promisc(hw, vsi_handle, promisc_mask,
|
||||
rm_vlan_promisc, hw->port_info->lport,
|
||||
hw->switch_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_remove_vsi_lkup_fltr - Remove lookup type filters for a VSI
|
||||
* @hw: pointer to the hardware structure
|
||||
|
Loading…
Reference in New Issue
Block a user