Commit c5e6bd97 authored by Marcin Szycik's avatar Marcin Szycik Committed by Tony Nguyen

ice: Deduplicate tc action setup

ice_tc_setup_redirect_action() and ice_tc_setup_mirror_action() are almost
identical, except for setting filter action. Reduce them to one function
with an extra param, which handles both cases.
Reviewed-by: default avatarMateusz Polchlopek <mateusz.polchlopek@intel.com>
Signed-off-by: default avatarMarcin Szycik <marcin.szycik@linux.intel.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Tested-by: default avatarSujai Buvaneswaran <sujai.buvaneswaran@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent a8e682f0
...@@ -669,13 +669,19 @@ static bool ice_tc_is_dev_uplink(struct net_device *dev) ...@@ -669,13 +669,19 @@ static bool ice_tc_is_dev_uplink(struct net_device *dev)
return netif_is_ice(dev) || ice_is_tunnel_supported(dev); return netif_is_ice(dev) || ice_is_tunnel_supported(dev);
} }
static int ice_tc_setup_redirect_action(struct net_device *filter_dev, static int ice_tc_setup_action(struct net_device *filter_dev,
struct ice_tc_flower_fltr *fltr, struct ice_tc_flower_fltr *fltr,
struct net_device *target_dev) struct net_device *target_dev,
enum ice_sw_fwd_act_type action)
{ {
struct ice_repr *repr; struct ice_repr *repr;
fltr->action.fltr_act = ICE_FWD_TO_VSI; if (action != ICE_FWD_TO_VSI && action != ICE_MIRROR_PACKET) {
NL_SET_ERR_MSG_MOD(fltr->extack, "Unsupported action to setup provided");
return -EINVAL;
}
fltr->action.fltr_act = action;
if (ice_is_port_repr_netdev(filter_dev) && if (ice_is_port_repr_netdev(filter_dev) &&
ice_is_port_repr_netdev(target_dev)) { ice_is_port_repr_netdev(target_dev)) {
...@@ -723,41 +729,6 @@ ice_tc_setup_drop_action(struct net_device *filter_dev, ...@@ -723,41 +729,6 @@ ice_tc_setup_drop_action(struct net_device *filter_dev,
return 0; return 0;
} }
static int ice_tc_setup_mirror_action(struct net_device *filter_dev,
struct ice_tc_flower_fltr *fltr,
struct net_device *target_dev)
{
struct ice_repr *repr;
fltr->action.fltr_act = ICE_MIRROR_PACKET;
if (ice_is_port_repr_netdev(filter_dev) &&
ice_is_port_repr_netdev(target_dev)) {
repr = ice_netdev_to_repr(target_dev);
fltr->dest_vsi = repr->src_vsi;
fltr->direction = ICE_ESWITCH_FLTR_EGRESS;
} else if (ice_is_port_repr_netdev(filter_dev) &&
ice_tc_is_dev_uplink(target_dev)) {
repr = ice_netdev_to_repr(filter_dev);
fltr->dest_vsi = repr->src_vsi->back->eswitch.uplink_vsi;
fltr->direction = ICE_ESWITCH_FLTR_EGRESS;
} else if (ice_tc_is_dev_uplink(filter_dev) &&
ice_is_port_repr_netdev(target_dev)) {
repr = ice_netdev_to_repr(target_dev);
fltr->dest_vsi = repr->src_vsi;
fltr->direction = ICE_ESWITCH_FLTR_INGRESS;
} else {
NL_SET_ERR_MSG_MOD(fltr->extack,
"Unsupported netdevice in switchdev mode");
return -EINVAL;
}
return 0;
}
static int ice_eswitch_tc_parse_action(struct net_device *filter_dev, static int ice_eswitch_tc_parse_action(struct net_device *filter_dev,
struct ice_tc_flower_fltr *fltr, struct ice_tc_flower_fltr *fltr,
struct flow_action_entry *act) struct flow_action_entry *act)
...@@ -773,16 +744,19 @@ static int ice_eswitch_tc_parse_action(struct net_device *filter_dev, ...@@ -773,16 +744,19 @@ static int ice_eswitch_tc_parse_action(struct net_device *filter_dev,
break; break;
case FLOW_ACTION_REDIRECT: case FLOW_ACTION_REDIRECT:
err = ice_tc_setup_redirect_action(filter_dev, fltr, act->dev); err = ice_tc_setup_action(filter_dev, fltr,
act->dev, ICE_FWD_TO_VSI);
if (err) if (err)
return err; return err;
break; break;
case FLOW_ACTION_MIRRED: case FLOW_ACTION_MIRRED:
err = ice_tc_setup_mirror_action(filter_dev, fltr, act->dev); err = ice_tc_setup_action(filter_dev, fltr,
act->dev, ICE_MIRROR_PACKET);
if (err) if (err)
return err; return err;
break; break;
default: default:
......
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