]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - include/net/tc_act/tc_skbedit.h
Merge tag 'for-linus-5.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw...
[mirror_ubuntu-jammy-kernel.git] / include / net / tc_act / tc_skbedit.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3 * Copyright (c) 2008, Intel Corporation.
4 *
5 * Author: Alexander Duyck <alexander.h.duyck@intel.com>
6 */
7
8 #ifndef __NET_TC_SKBEDIT_H
9 #define __NET_TC_SKBEDIT_H
10
11 #include <net/act_api.h>
12 #include <linux/tc_act/tc_skbedit.h>
13
14 struct tcf_skbedit_params {
15 u32 flags;
16 u32 priority;
17 u32 mark;
18 u32 mask;
19 u16 queue_mapping;
20 u16 ptype;
21 struct rcu_head rcu;
22 };
23
24 struct tcf_skbedit {
25 struct tc_action common;
26 struct tcf_skbedit_params __rcu *params;
27 };
28 #define to_skbedit(a) ((struct tcf_skbedit *)a)
29
30 /* Return true iff action is the one identified by FLAG. */
31 static inline bool is_tcf_skbedit_with_flag(const struct tc_action *a, u32 flag)
32 {
33 #ifdef CONFIG_NET_CLS_ACT
34 u32 flags;
35
36 if (a->ops && a->ops->id == TCA_ID_SKBEDIT) {
37 rcu_read_lock();
38 flags = rcu_dereference(to_skbedit(a)->params)->flags;
39 rcu_read_unlock();
40 return flags == flag;
41 }
42 #endif
43 return false;
44 }
45
46 /* Return true iff action is mark */
47 static inline bool is_tcf_skbedit_mark(const struct tc_action *a)
48 {
49 return is_tcf_skbedit_with_flag(a, SKBEDIT_F_MARK);
50 }
51
52 static inline u32 tcf_skbedit_mark(const struct tc_action *a)
53 {
54 u32 mark;
55
56 rcu_read_lock();
57 mark = rcu_dereference(to_skbedit(a)->params)->mark;
58 rcu_read_unlock();
59
60 return mark;
61 }
62
63 /* Return true iff action is ptype */
64 static inline bool is_tcf_skbedit_ptype(const struct tc_action *a)
65 {
66 return is_tcf_skbedit_with_flag(a, SKBEDIT_F_PTYPE);
67 }
68
69 static inline u32 tcf_skbedit_ptype(const struct tc_action *a)
70 {
71 u16 ptype;
72
73 rcu_read_lock();
74 ptype = rcu_dereference(to_skbedit(a)->params)->ptype;
75 rcu_read_unlock();
76
77 return ptype;
78 }
79
80 /* Return true iff action is priority */
81 static inline bool is_tcf_skbedit_priority(const struct tc_action *a)
82 {
83 return is_tcf_skbedit_with_flag(a, SKBEDIT_F_PRIORITY);
84 }
85
86 static inline u32 tcf_skbedit_priority(const struct tc_action *a)
87 {
88 u32 priority;
89
90 rcu_read_lock();
91 priority = rcu_dereference(to_skbedit(a)->params)->priority;
92 rcu_read_unlock();
93
94 return priority;
95 }
96
97 #endif /* __NET_TC_SKBEDIT_H */