mirror of
https://github.com/torvalds/linux
synced 2024-09-06 18:01:05 +00:00
net/sched: add vlan push_eth and pop_eth action to the hardware IR
Add vlan push_eth and pop_eth action to the hardware intermediate representation model which would subsequently allow it to be used by drivers for offload. Signed-off-by: Maor Dickman <maord@nvidia.com> Reviewed-by: Roi Dayan <roid@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
a860352e9d
commit
ab95465cde
|
@ -150,6 +150,8 @@ enum flow_action_id {
|
|||
FLOW_ACTION_PPPOE_PUSH,
|
||||
FLOW_ACTION_JUMP,
|
||||
FLOW_ACTION_PIPE,
|
||||
FLOW_ACTION_VLAN_PUSH_ETH,
|
||||
FLOW_ACTION_VLAN_POP_ETH,
|
||||
NUM_FLOW_ACTIONS,
|
||||
};
|
||||
|
||||
|
@ -211,6 +213,10 @@ struct flow_action_entry {
|
|||
__be16 proto;
|
||||
u8 prio;
|
||||
} vlan;
|
||||
struct { /* FLOW_ACTION_VLAN_PUSH_ETH */
|
||||
unsigned char dst[ETH_ALEN];
|
||||
unsigned char src[ETH_ALEN];
|
||||
} vlan_push_eth;
|
||||
struct { /* FLOW_ACTION_MANGLE */
|
||||
/* FLOW_ACTION_ADD */
|
||||
enum flow_action_mangle_base htype;
|
||||
|
|
|
@ -78,4 +78,14 @@ static inline u8 tcf_vlan_push_prio(const struct tc_action *a)
|
|||
|
||||
return tcfv_push_prio;
|
||||
}
|
||||
|
||||
static inline void tcf_vlan_push_eth(unsigned char *src, unsigned char *dest,
|
||||
const struct tc_action *a)
|
||||
{
|
||||
rcu_read_lock();
|
||||
memcpy(dest, rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_dst, ETH_ALEN);
|
||||
memcpy(dest, rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_src, ETH_ALEN);
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
#endif /* __NET_TC_VLAN_H */
|
||||
|
|
|
@ -390,6 +390,13 @@ static int tcf_vlan_offload_act_setup(struct tc_action *act, void *entry_data,
|
|||
entry->vlan.proto = tcf_vlan_push_proto(act);
|
||||
entry->vlan.prio = tcf_vlan_push_prio(act);
|
||||
break;
|
||||
case TCA_VLAN_ACT_POP_ETH:
|
||||
entry->id = FLOW_ACTION_VLAN_POP_ETH;
|
||||
break;
|
||||
case TCA_VLAN_ACT_PUSH_ETH:
|
||||
entry->id = FLOW_ACTION_VLAN_PUSH_ETH;
|
||||
tcf_vlan_push_eth(entry->vlan_push_eth.src, entry->vlan_push_eth.dst, act);
|
||||
break;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@ -407,6 +414,12 @@ static int tcf_vlan_offload_act_setup(struct tc_action *act, void *entry_data,
|
|||
case TCA_VLAN_ACT_MODIFY:
|
||||
fl_action->id = FLOW_ACTION_VLAN_MANGLE;
|
||||
break;
|
||||
case TCA_VLAN_ACT_POP_ETH:
|
||||
fl_action->id = FLOW_ACTION_VLAN_POP_ETH;
|
||||
break;
|
||||
case TCA_VLAN_ACT_PUSH_ETH:
|
||||
fl_action->id = FLOW_ACTION_VLAN_PUSH_ETH;
|
||||
break;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue