]>
Commit | Line | Data |
---|---|---|
2874c5fd | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
c7e2b968 JP |
2 | /* |
3 | * Copyright (c) 2014 Jiri Pirko <jiri@resnulli.us> | |
c7e2b968 JP |
4 | */ |
5 | ||
6 | #ifndef __NET_TC_VLAN_H | |
7 | #define __NET_TC_VLAN_H | |
8 | ||
9 | #include <net/act_api.h> | |
53e89941 | 10 | #include <linux/tc_act/tc_vlan.h> |
c7e2b968 | 11 | |
4c5b9d96 MK |
12 | struct tcf_vlan_params { |
13 | int tcfv_action; | |
14 | u16 tcfv_push_vid; | |
15 | __be16 tcfv_push_proto; | |
16 | u8 tcfv_push_prio; | |
17 | struct rcu_head rcu; | |
18 | }; | |
19 | ||
c7e2b968 | 20 | struct tcf_vlan { |
ec0595cc | 21 | struct tc_action common; |
4c5b9d96 | 22 | struct tcf_vlan_params __rcu *vlan_p; |
c7e2b968 | 23 | }; |
a85a970a | 24 | #define to_vlan(a) ((struct tcf_vlan *)a) |
c7e2b968 | 25 | |
53e89941 OG |
26 | static inline bool is_tcf_vlan(const struct tc_action *a) |
27 | { | |
28 | #ifdef CONFIG_NET_CLS_ACT | |
eddd2cf1 | 29 | if (a->ops && a->ops->id == TCA_ID_VLAN) |
53e89941 OG |
30 | return true; |
31 | #endif | |
32 | return false; | |
33 | } | |
34 | ||
35 | static inline u32 tcf_vlan_action(const struct tc_action *a) | |
36 | { | |
4c5b9d96 MK |
37 | u32 tcfv_action; |
38 | ||
39 | rcu_read_lock(); | |
40 | tcfv_action = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_action; | |
41 | rcu_read_unlock(); | |
42 | ||
43 | return tcfv_action; | |
53e89941 OG |
44 | } |
45 | ||
46 | static inline u16 tcf_vlan_push_vid(const struct tc_action *a) | |
47 | { | |
4c5b9d96 MK |
48 | u16 tcfv_push_vid; |
49 | ||
50 | rcu_read_lock(); | |
51 | tcfv_push_vid = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_vid; | |
52 | rcu_read_unlock(); | |
53 | ||
54 | return tcfv_push_vid; | |
53e89941 OG |
55 | } |
56 | ||
57 | static inline __be16 tcf_vlan_push_proto(const struct tc_action *a) | |
58 | { | |
4c5b9d96 MK |
59 | __be16 tcfv_push_proto; |
60 | ||
61 | rcu_read_lock(); | |
62 | tcfv_push_proto = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_proto; | |
63 | rcu_read_unlock(); | |
64 | ||
65 | return tcfv_push_proto; | |
53e89941 OG |
66 | } |
67 | ||
a150201a PM |
68 | static inline u8 tcf_vlan_push_prio(const struct tc_action *a) |
69 | { | |
4c5b9d96 | 70 | u8 tcfv_push_prio; |
a150201a | 71 | |
4c5b9d96 MK |
72 | rcu_read_lock(); |
73 | tcfv_push_prio = rcu_dereference(to_vlan(a)->vlan_p)->tcfv_push_prio; | |
74 | rcu_read_unlock(); | |
75 | ||
76 | return tcfv_push_prio; | |
77 | } | |
c7e2b968 | 78 | #endif /* __NET_TC_VLAN_H */ |