net: tc_skbedit: Make the skbedit priority offloadable
The skbedit action "priority" is used for adjusting SKB priority. Allow drivers to offload the action by introducing two new skbedit getters and a new flow action, and initializing appropriately in tc_setup_flow_action(). Signed-off-by: Petr Machata <petrm@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fe93f0b225
commit
2ce124109c
|
@ -137,6 +137,7 @@ enum flow_action_id {
|
|||
FLOW_ACTION_CSUM,
|
||||
FLOW_ACTION_MARK,
|
||||
FLOW_ACTION_PTYPE,
|
||||
FLOW_ACTION_PRIORITY,
|
||||
FLOW_ACTION_WAKE,
|
||||
FLOW_ACTION_QUEUE,
|
||||
FLOW_ACTION_SAMPLE,
|
||||
|
@ -211,6 +212,7 @@ struct flow_action_entry {
|
|||
u32 csum_flags; /* FLOW_ACTION_CSUM */
|
||||
u32 mark; /* FLOW_ACTION_MARK */
|
||||
u16 ptype; /* FLOW_ACTION_PTYPE */
|
||||
u32 priority; /* FLOW_ACTION_PRIORITY */
|
||||
struct { /* FLOW_ACTION_QUEUE */
|
||||
u32 ctx;
|
||||
u32 index;
|
||||
|
|
|
@ -77,4 +77,21 @@ static inline u32 tcf_skbedit_ptype(const struct tc_action *a)
|
|||
return ptype;
|
||||
}
|
||||
|
||||
/* Return true iff action is priority */
|
||||
static inline bool is_tcf_skbedit_priority(const struct tc_action *a)
|
||||
{
|
||||
return is_tcf_skbedit_with_flag(a, SKBEDIT_F_PRIORITY);
|
||||
}
|
||||
|
||||
static inline u32 tcf_skbedit_priority(const struct tc_action *a)
|
||||
{
|
||||
u32 priority;
|
||||
|
||||
rcu_read_lock();
|
||||
priority = rcu_dereference(to_skbedit(a)->params)->priority;
|
||||
rcu_read_unlock();
|
||||
|
||||
return priority;
|
||||
}
|
||||
|
||||
#endif /* __NET_TC_SKBEDIT_H */
|
||||
|
|
|
@ -3665,6 +3665,9 @@ int tc_setup_flow_action(struct flow_action *flow_action,
|
|||
} else if (is_tcf_skbedit_ptype(act)) {
|
||||
entry->id = FLOW_ACTION_PTYPE;
|
||||
entry->ptype = tcf_skbedit_ptype(act);
|
||||
} else if (is_tcf_skbedit_priority(act)) {
|
||||
entry->id = FLOW_ACTION_PRIORITY;
|
||||
entry->priority = tcf_skbedit_priority(act);
|
||||
} else {
|
||||
err = -EOPNOTSUPP;
|
||||
goto err_out_locked;
|
||||
|
|
Loading…
Reference in New Issue