diff options
author | Baowen Zheng <baowen.zheng@corigine.com> | 2021-12-17 19:16:22 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-12-19 14:08:48 +0000 |
commit | 8cbfe939abe905280279e84a297b1cb34e0d0ec9 (patch) | |
tree | 9c9e2dad06886bd0834d16071aa2faccdc20d99d /net/sched/act_gact.c | |
parent | c54e1d920f04d528ab558f09326a78d2ae59e323 (diff) | |
download | linux-8cbfe939abe905280279e84a297b1cb34e0d0ec9.tar.bz2 |
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>
Diffstat (limited to 'net/sched/act_gact.c')
-rw-r--r-- | net/sched/act_gact.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/net/sched/act_gact.c b/net/sched/act_gact.c index f77be22069f4..bde6a6c01e64 100644 --- a/net/sched/act_gact.c +++ b/net/sched/act_gact.c @@ -272,7 +272,18 @@ static int tcf_gact_offload_act_setup(struct tc_action *act, void *entry_data, } *index_inc = 1; } else { - return -EOPNOTSUPP; + struct flow_offload_action *fl_action = entry_data; + + if (is_tcf_gact_ok(act)) + fl_action->id = FLOW_ACTION_ACCEPT; + else if (is_tcf_gact_shot(act)) + fl_action->id = FLOW_ACTION_DROP; + else if (is_tcf_gact_trap(act)) + fl_action->id = FLOW_ACTION_TRAP; + else if (is_tcf_gact_goto_chain(act)) + fl_action->id = FLOW_ACTION_GOTO; + else + return -EOPNOTSUPP; } return 0; |