Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : #ifndef __NET_TC_PED_H 3 : : #define __NET_TC_PED_H 4 : : 5 : : #include <net/act_api.h> 6 : : #include <linux/tc_act/tc_pedit.h> 7 : : 8 : : struct tcf_pedit_key_ex { 9 : : enum pedit_header_type htype; 10 : : enum pedit_cmd cmd; 11 : : }; 12 : : 13 : : struct tcf_pedit { 14 : : struct tc_action common; 15 : : unsigned char tcfp_nkeys; 16 : : unsigned char tcfp_flags; 17 : : struct tc_pedit_key *tcfp_keys; 18 : : struct tcf_pedit_key_ex *tcfp_keys_ex; 19 : : }; 20 : : 21 : : #define to_pedit(a) ((struct tcf_pedit *)a) 22 : : 23 : 0 : static inline bool is_tcf_pedit(const struct tc_action *a) 24 : : { 25 : : #ifdef CONFIG_NET_CLS_ACT 26 [ # # # # : 0 : if (a->ops && a->ops->id == TCA_ID_PEDIT) # # # # # # # # ] 27 : 0 : return true; 28 : : #endif 29 : : return false; 30 : : } 31 : : 32 : 0 : static inline int tcf_pedit_nkeys(const struct tc_action *a) 33 : : { 34 [ # # ]: 0 : return to_pedit(a)->tcfp_nkeys; 35 : : } 36 : : 37 : 0 : static inline u32 tcf_pedit_htype(const struct tc_action *a, int index) 38 : : { 39 [ # # ]: 0 : if (to_pedit(a)->tcfp_keys_ex) 40 : 0 : return to_pedit(a)->tcfp_keys_ex[index].htype; 41 : : 42 : : return TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK; 43 : : } 44 : : 45 : 0 : static inline u32 tcf_pedit_cmd(const struct tc_action *a, int index) 46 : : { 47 [ # # ]: 0 : if (to_pedit(a)->tcfp_keys_ex) 48 [ # # # ]: 0 : return to_pedit(a)->tcfp_keys_ex[index].cmd; 49 : : 50 : : return __PEDIT_CMD_MAX; 51 : : } 52 : : 53 : 0 : static inline u32 tcf_pedit_mask(const struct tc_action *a, int index) 54 : : { 55 : 0 : return to_pedit(a)->tcfp_keys[index].mask; 56 : : } 57 : : 58 : 0 : static inline u32 tcf_pedit_val(const struct tc_action *a, int index) 59 : : { 60 : 0 : return to_pedit(a)->tcfp_keys[index].val; 61 : : } 62 : : 63 : 0 : static inline u32 tcf_pedit_offset(const struct tc_action *a, int index) 64 : : { 65 : 0 : return to_pedit(a)->tcfp_keys[index].off; 66 : : } 67 : : #endif /* __NET_TC_PED_H */