xref: /openbmc/linux/include/net/tc_act/tc_skbedit.h (revision 32ced09d)
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 mark */
31 static inline bool is_tcf_skbedit_mark(const struct tc_action *a)
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 == SKBEDIT_F_MARK;
41 	}
42 #endif
43 	return false;
44 }
45 
46 static inline u32 tcf_skbedit_mark(const struct tc_action *a)
47 {
48 	u32 mark;
49 
50 	rcu_read_lock();
51 	mark = rcu_dereference(to_skbedit(a)->params)->mark;
52 	rcu_read_unlock();
53 
54 	return mark;
55 }
56 
57 /* Return true iff action is ptype */
58 static inline bool is_tcf_skbedit_ptype(const struct tc_action *a)
59 {
60 #ifdef CONFIG_NET_CLS_ACT
61 	u32 flags;
62 
63 	if (a->ops && a->ops->id == TCA_ID_SKBEDIT) {
64 		rcu_read_lock();
65 		flags = rcu_dereference(to_skbedit(a)->params)->flags;
66 		rcu_read_unlock();
67 		return flags == SKBEDIT_F_PTYPE;
68 	}
69 #endif
70 	return false;
71 }
72 
73 static inline u32 tcf_skbedit_ptype(const struct tc_action *a)
74 {
75 	u16 ptype;
76 
77 	rcu_read_lock();
78 	ptype = rcu_dereference(to_skbedit(a)->params)->ptype;
79 	rcu_read_unlock();
80 
81 	return ptype;
82 }
83 
84 #endif /* __NET_TC_SKBEDIT_H */
85