Linux-libre 5.3.12-gnu
[librecmc/linux-libre.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 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 #endif /* __NET_TC_SKBEDIT_H */