flow_offload: add ops to tc_action_ops for flow action setup
Add a new ops to tc_action_ops for flow action setup. Refactor function tc_setup_flow_action to use this new ops. We make this change to facilitate to add standalone action module. We will also use this ops to offload action independent of filter in following patch. Signed-off-by: Baowen Zheng <baowen.zheng@corigine.com> Signed-off-by: Simon Horman <simon.horman@corigine.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
9c1c0e124c
commit
c54e1d920f
@ -282,6 +282,33 @@ tcf_sample_get_group(const struct tc_action *a,
|
||||
return group;
|
||||
}
|
||||
|
||||
static void tcf_offload_sample_get_group(struct flow_action_entry *entry,
|
||||
const struct tc_action *act)
|
||||
{
|
||||
entry->sample.psample_group =
|
||||
act->ops->get_psample_group(act, &entry->destructor);
|
||||
entry->destructor_priv = entry->sample.psample_group;
|
||||
}
|
||||
|
||||
static int tcf_sample_offload_act_setup(struct tc_action *act, void *entry_data,
|
||||
u32 *index_inc, bool bind)
|
||||
{
|
||||
if (bind) {
|
||||
struct flow_action_entry *entry = entry_data;
|
||||
|
||||
entry->id = FLOW_ACTION_SAMPLE;
|
||||
entry->sample.trunc_size = tcf_sample_trunc_size(act);
|
||||
entry->sample.truncate = tcf_sample_truncate(act);
|
||||
entry->sample.rate = tcf_sample_rate(act);
|
||||
tcf_offload_sample_get_group(entry, act);
|
||||
*index_inc = 1;
|
||||
} else {
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct tc_action_ops act_sample_ops = {
|
||||
.kind = "sample",
|
||||
.id = TCA_ID_SAMPLE,
|
||||
@ -294,6 +321,7 @@ static struct tc_action_ops act_sample_ops = {
|
||||
.walk = tcf_sample_walker,
|
||||
.lookup = tcf_sample_search,
|
||||
.get_psample_group = tcf_sample_get_group,
|
||||
.offload_act_setup = tcf_sample_offload_act_setup,
|
||||
.size = sizeof(struct tcf_sample),
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user