OSDN Git Service

net/dsa: use intermediate representation for matchall offload
authorPieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com>
Sat, 4 May 2019 11:46:19 +0000 (04:46 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 May 2019 04:49:24 +0000 (21:49 -0700)
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>
net/dsa/slave.c

index 8ad9bf9..6ce2fdb 100644 (file)
@@ -778,27 +778,25 @@ static int dsa_slave_add_cls_matchall(struct net_device *dev,
        struct dsa_mall_tc_entry *mall_tc_entry;
        __be16 protocol = cls->common.protocol;
        struct dsa_switch *ds = dp->ds;
-       struct net_device *to_dev;
-       const struct tc_action *a;
+       struct flow_action_entry *act;
        struct dsa_port *to_dp;
        int err = -EOPNOTSUPP;
 
        if (!ds->ops->port_mirror_add)
                return err;
 
-       if (!tcf_exts_has_one_action(cls->exts))
+       if (!flow_offload_has_one_action(&cls->rule->action))
                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;
 
-               to_dev = tcf_mirred_dev(a);
-               if (!to_dev)
+               if (!act->dev)
                        return -EINVAL;
 
-               if (!dsa_slave_dev_check(to_dev))
+               if (!dsa_slave_dev_check(act->dev))
                        return -EOPNOTSUPP;
 
                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;
                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->ingress = ingress;