Branch data Line data Source code
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 : 0 : static inline bool is_tcf_skbedit_mark(const struct tc_action *a) 32 : : { 33 : : #ifdef CONFIG_NET_CLS_ACT 34 : 0 : u32 flags; 35 : : 36 [ # # # # ]: 0 : if (a->ops && a->ops->id == TCA_ID_SKBEDIT) { 37 : 0 : rcu_read_lock(); 38 : 0 : flags = rcu_dereference(to_skbedit(a)->params)->flags; 39 : 0 : rcu_read_unlock(); 40 [ # # ]: 0 : return flags == SKBEDIT_F_MARK; 41 : : } 42 : : #endif 43 : : return false; 44 : : } 45 : : 46 : 0 : static inline u32 tcf_skbedit_mark(const struct tc_action *a) 47 : : { 48 : 0 : u32 mark; 49 : : 50 : 0 : rcu_read_lock(); 51 : 0 : mark = rcu_dereference(to_skbedit(a)->params)->mark; 52 : 0 : rcu_read_unlock(); 53 : : 54 : 0 : return mark; 55 : : } 56 : : 57 : : /* Return true iff action is ptype */ 58 : 0 : static inline bool is_tcf_skbedit_ptype(const struct tc_action *a) 59 : : { 60 : : #ifdef CONFIG_NET_CLS_ACT 61 : 0 : u32 flags; 62 : : 63 [ # # # # ]: 0 : if (a->ops && a->ops->id == TCA_ID_SKBEDIT) { 64 : 0 : rcu_read_lock(); 65 : 0 : flags = rcu_dereference(to_skbedit(a)->params)->flags; 66 : 0 : rcu_read_unlock(); 67 [ # # ]: 0 : return flags == SKBEDIT_F_PTYPE; 68 : : } 69 : : #endif 70 : : return false; 71 : : } 72 : : 73 : 0 : static inline u32 tcf_skbedit_ptype(const struct tc_action *a) 74 : : { 75 : 0 : u16 ptype; 76 : : 77 : 0 : rcu_read_lock(); 78 : 0 : ptype = rcu_dereference(to_skbedit(a)->params)->ptype; 79 : 0 : rcu_read_unlock(); 80 : : 81 : 0 : return ptype; 82 : : } 83 : : 84 : : #endif /* __NET_TC_SKBEDIT_H */