diff options
author | Baowen Zheng <baowen.zheng@corigine.com> | 2021-12-17 19:16:22 +0100 |
---|---|---|
committer | Vladimir Oltean <vladimir.oltean@nxp.com> | 2022-05-04 16:33:12 +0300 |
commit | 043944aa28cc80e050af6919a500d84feefa8433 (patch) | |
tree | a3574e6e733f50e9d1f58bdd5b3d9760d3d59683 /net/sched/act_mpls.c | |
parent | 1d996fc0fc1945feadeed2502c551c48b1891de7 (diff) |
flow_offload: allow user to offload tc action to net device
Use flow_indr_dev_register/flow_indr_dev_setup_offload to
offload tc action.
We need to call tc_cleanup_flow_action to clean up tc action entry since
in tc_setup_action, some actions may hold dev refcnt, especially the mirror
action.
Signed-off-by: Baowen Zheng <baowen.zheng@corigine.com>
Signed-off-by: Louis Peens <louis.peens@corigine.com>
Signed-off-by: Simon Horman <simon.horman@corigine.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 8cbfe939abe905280279e84a297b1cb34e0d0ec9)
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Diffstat (limited to 'net/sched/act_mpls.c')
-rw-r--r-- | net/sched/act_mpls.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/net/sched/act_mpls.c b/net/sched/act_mpls.c index 071ca3eb6e1e..dc928c1aad65 100644 --- a/net/sched/act_mpls.c +++ b/net/sched/act_mpls.c @@ -415,7 +415,21 @@ static int tcf_mpls_offload_act_setup(struct tc_action *act, void *entry_data, } *index_inc = 1; } else { - return -EOPNOTSUPP; + struct flow_offload_action *fl_action = entry_data; + + switch (tcf_mpls_action(act)) { + case TCA_MPLS_ACT_PUSH: + fl_action->id = FLOW_ACTION_MPLS_PUSH; + break; + case TCA_MPLS_ACT_POP: + fl_action->id = FLOW_ACTION_MPLS_POP; + break; + case TCA_MPLS_ACT_MODIFY: + fl_action->id = FLOW_ACTION_MPLS_MANGLE; + break; + default: + return -EOPNOTSUPP; + } } return 0; |