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
@ -368,6 +368,39 @@ static size_t tcf_vlan_get_fill_size(const struct tc_action *act)
|
||||
+ nla_total_size(sizeof(u8)); /* TCA_VLAN_PUSH_VLAN_PRIORITY */
|
||||
}
|
||||
|
||||
static int tcf_vlan_offload_act_setup(struct tc_action *act, void *entry_data,
|
||||
u32 *index_inc, bool bind)
|
||||
{
|
||||
if (bind) {
|
||||
struct flow_action_entry *entry = entry_data;
|
||||
|
||||
switch (tcf_vlan_action(act)) {
|
||||
case TCA_VLAN_ACT_PUSH:
|
||||
entry->id = FLOW_ACTION_VLAN_PUSH;
|
||||
entry->vlan.vid = tcf_vlan_push_vid(act);
|
||||
entry->vlan.proto = tcf_vlan_push_proto(act);
|
||||
entry->vlan.prio = tcf_vlan_push_prio(act);
|
||||
break;
|
||||
case TCA_VLAN_ACT_POP:
|
||||
entry->id = FLOW_ACTION_VLAN_POP;
|
||||
break;
|
||||
case TCA_VLAN_ACT_MODIFY:
|
||||
entry->id = FLOW_ACTION_VLAN_MANGLE;
|
||||
entry->vlan.vid = tcf_vlan_push_vid(act);
|
||||
entry->vlan.proto = tcf_vlan_push_proto(act);
|
||||
entry->vlan.prio = tcf_vlan_push_prio(act);
|
||||
break;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
*index_inc = 1;
|
||||
} else {
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct tc_action_ops act_vlan_ops = {
|
||||
.kind = "vlan",
|
||||
.id = TCA_ID_VLAN,
|
||||
@ -380,6 +413,7 @@ static struct tc_action_ops act_vlan_ops = {
|
||||
.stats_update = tcf_vlan_stats_update,
|
||||
.get_fill_size = tcf_vlan_get_fill_size,
|
||||
.lookup = tcf_vlan_search,
|
||||
.offload_act_setup = tcf_vlan_offload_act_setup,
|
||||
.size = sizeof(struct tcf_vlan),
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user