net/dsa: use intermediate representation for matchall offload
Updates dsa hardware switch handling infrastructure to use the newer intermediate representation for flow actions in matchall offloads. Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ab79af32b0
commit
9681e8b3ef
|
@ -778,27 +778,25 @@ static int dsa_slave_add_cls_matchall(struct net_device *dev,
|
||||||
struct dsa_mall_tc_entry *mall_tc_entry;
|
struct dsa_mall_tc_entry *mall_tc_entry;
|
||||||
__be16 protocol = cls->common.protocol;
|
__be16 protocol = cls->common.protocol;
|
||||||
struct dsa_switch *ds = dp->ds;
|
struct dsa_switch *ds = dp->ds;
|
||||||
struct net_device *to_dev;
|
struct flow_action_entry *act;
|
||||||
const struct tc_action *a;
|
|
||||||
struct dsa_port *to_dp;
|
struct dsa_port *to_dp;
|
||||||
int err = -EOPNOTSUPP;
|
int err = -EOPNOTSUPP;
|
||||||
|
|
||||||
if (!ds->ops->port_mirror_add)
|
if (!ds->ops->port_mirror_add)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
if (!tcf_exts_has_one_action(cls->exts))
|
if (!flow_offload_has_one_action(&cls->rule->action))
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
a = tcf_exts_first_action(cls->exts);
|
act = &cls->rule->action.entries[0];
|
||||||
|
|
||||||
if (is_tcf_mirred_egress_mirror(a) && protocol == htons(ETH_P_ALL)) {
|
if (act->id == FLOW_ACTION_MIRRED && protocol == htons(ETH_P_ALL)) {
|
||||||
struct dsa_mall_mirror_tc_entry *mirror;
|
struct dsa_mall_mirror_tc_entry *mirror;
|
||||||
|
|
||||||
to_dev = tcf_mirred_dev(a);
|
if (!act->dev)
|
||||||
if (!to_dev)
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (!dsa_slave_dev_check(to_dev))
|
if (!dsa_slave_dev_check(act->dev))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL);
|
mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL);
|
||||||
|
@ -809,7 +807,7 @@ static int dsa_slave_add_cls_matchall(struct net_device *dev,
|
||||||
mall_tc_entry->type = DSA_PORT_MALL_MIRROR;
|
mall_tc_entry->type = DSA_PORT_MALL_MIRROR;
|
||||||
mirror = &mall_tc_entry->mirror;
|
mirror = &mall_tc_entry->mirror;
|
||||||
|
|
||||||
to_dp = dsa_slave_to_port(to_dev);
|
to_dp = dsa_slave_to_port(act->dev);
|
||||||
|
|
||||||
mirror->to_local_port = to_dp->index;
|
mirror->to_local_port = to_dp->index;
|
||||||
mirror->ingress = ingress;
|
mirror->ingress = ingress;
|
||||||
|
|
Loading…
Reference in New Issue