net: schedule: add action gate offloading
Add the gate action to the flow action entry. Add the gate parameters to the tc_setup_flow_action() queueing to the entries of flow_action_entry array provide to the driver. Signed-off-by: Po Liu <Po.Liu@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -39,6 +39,7 @@
|
||||
#include <net/tc_act/tc_skbedit.h>
|
||||
#include <net/tc_act/tc_ct.h>
|
||||
#include <net/tc_act/tc_mpls.h>
|
||||
#include <net/tc_act/tc_gate.h>
|
||||
#include <net/flow_offload.h>
|
||||
|
||||
extern const struct nla_policy rtm_tca_policy[TCA_MAX + 1];
|
||||
@@ -3526,6 +3527,27 @@ static void tcf_sample_get_group(struct flow_action_entry *entry,
|
||||
#endif
|
||||
}
|
||||
|
||||
static void tcf_gate_entry_destructor(void *priv)
|
||||
{
|
||||
struct action_gate_entry *oe = priv;
|
||||
|
||||
kfree(oe);
|
||||
}
|
||||
|
||||
static int tcf_gate_get_entries(struct flow_action_entry *entry,
|
||||
const struct tc_action *act)
|
||||
{
|
||||
entry->gate.entries = tcf_gate_get_list(act);
|
||||
|
||||
if (!entry->gate.entries)
|
||||
return -EINVAL;
|
||||
|
||||
entry->destructor = tcf_gate_entry_destructor;
|
||||
entry->destructor_priv = entry->gate.entries;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tc_setup_flow_action(struct flow_action *flow_action,
|
||||
const struct tcf_exts *exts)
|
||||
{
|
||||
@@ -3672,6 +3694,17 @@ int tc_setup_flow_action(struct flow_action *flow_action,
|
||||
} else if (is_tcf_skbedit_priority(act)) {
|
||||
entry->id = FLOW_ACTION_PRIORITY;
|
||||
entry->priority = tcf_skbedit_priority(act);
|
||||
} else if (is_tcf_gate(act)) {
|
||||
entry->id = FLOW_ACTION_GATE;
|
||||
entry->gate.index = tcf_gate_index(act);
|
||||
entry->gate.prio = tcf_gate_prio(act);
|
||||
entry->gate.basetime = tcf_gate_basetime(act);
|
||||
entry->gate.cycletime = tcf_gate_cycletime(act);
|
||||
entry->gate.cycletimeext = tcf_gate_cycletimeext(act);
|
||||
entry->gate.num_entries = tcf_gate_num_entries(act);
|
||||
err = tcf_gate_get_entries(entry, act);
|
||||
if (err)
|
||||
goto err_out;
|
||||
} else {
|
||||
err = -EOPNOTSUPP;
|
||||
goto err_out_locked;
|
||||
|
Reference in New Issue
Block a user