1 /* SPDX-License-Identifier: GPL-2.0 */
5 #include <net/act_api.h>
6 #include <linux/tc_act/tc_pedit.h>
8 struct tcf_pedit_key_ex
{
9 enum pedit_header_type htype
;
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
;
20 #define to_pedit(a) ((struct tcf_pedit *)a)
22 static inline bool is_tcf_pedit(const struct tc_action
*a
)
24 #ifdef CONFIG_NET_CLS_ACT
25 if (a
->ops
&& a
->ops
->type
== TCA_ACT_PEDIT
)
31 static inline int tcf_pedit_nkeys(const struct tc_action
*a
)
33 return to_pedit(a
)->tcfp_nkeys
;
36 static inline u32
tcf_pedit_htype(const struct tc_action
*a
, int index
)
38 if (to_pedit(a
)->tcfp_keys_ex
)
39 return to_pedit(a
)->tcfp_keys_ex
[index
].htype
;
41 return TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK
;
44 static inline u32
tcf_pedit_cmd(const struct tc_action
*a
, int index
)
46 if (to_pedit(a
)->tcfp_keys_ex
)
47 return to_pedit(a
)->tcfp_keys_ex
[index
].cmd
;
49 return __PEDIT_CMD_MAX
;
52 static inline u32
tcf_pedit_mask(const struct tc_action
*a
, int index
)
54 return to_pedit(a
)->tcfp_keys
[index
].mask
;
57 static inline u32
tcf_pedit_val(const struct tc_action
*a
, int index
)
59 return to_pedit(a
)->tcfp_keys
[index
].val
;
62 static inline u32
tcf_pedit_offset(const struct tc_action
*a
, int index
)
64 return to_pedit(a
)->tcfp_keys
[index
].off
;
66 #endif /* __NET_TC_PED_H */