xref: /linux/include/net/tc_act/tc_csum.h (revision eddd2cf1)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2eb4d4065SGrégoire Baron #ifndef __NET_TC_CSUM_H
3eb4d4065SGrégoire Baron #define __NET_TC_CSUM_H
4eb4d4065SGrégoire Baron 
5eb4d4065SGrégoire Baron #include <linux/types.h>
6eb4d4065SGrégoire Baron #include <net/act_api.h>
73aa42664SOr Gerlitz #include <linux/tc_act/tc_csum.h>
8eb4d4065SGrégoire Baron 
99c5f69bbSDavide Caratti struct tcf_csum_params {
109c5f69bbSDavide Caratti 	u32 update_flags;
119c5f69bbSDavide Caratti 	struct rcu_head rcu;
129c5f69bbSDavide Caratti };
139c5f69bbSDavide Caratti 
14eb4d4065SGrégoire Baron struct tcf_csum {
15ec0595ccSWANG Cong 	struct tc_action common;
16eb4d4065SGrégoire Baron 
179c5f69bbSDavide Caratti 	struct tcf_csum_params __rcu *params;
18eb4d4065SGrégoire Baron };
19a85a970aSWANG Cong #define to_tcf_csum(a) ((struct tcf_csum *)a)
20eb4d4065SGrégoire Baron 
is_tcf_csum(const struct tc_action * a)213aa42664SOr Gerlitz static inline bool is_tcf_csum(const struct tc_action *a)
223aa42664SOr Gerlitz {
233aa42664SOr Gerlitz #ifdef CONFIG_NET_CLS_ACT
24*eddd2cf1SEli Cohen 	if (a->ops && a->ops->id == TCA_ID_CSUM)
253aa42664SOr Gerlitz 		return true;
263aa42664SOr Gerlitz #endif
273aa42664SOr Gerlitz 	return false;
283aa42664SOr Gerlitz }
293aa42664SOr Gerlitz 
tcf_csum_update_flags(const struct tc_action * a)303aa42664SOr Gerlitz static inline u32 tcf_csum_update_flags(const struct tc_action *a)
313aa42664SOr Gerlitz {
329c5f69bbSDavide Caratti 	u32 update_flags;
339c5f69bbSDavide Caratti 
349c5f69bbSDavide Caratti 	rcu_read_lock();
359c5f69bbSDavide Caratti 	update_flags = rcu_dereference(to_tcf_csum(a)->params)->update_flags;
369c5f69bbSDavide Caratti 	rcu_read_unlock();
379c5f69bbSDavide Caratti 
389c5f69bbSDavide Caratti 	return update_flags;
393aa42664SOr Gerlitz }
403aa42664SOr Gerlitz 
41eb4d4065SGrégoire Baron #endif /* __NET_TC_CSUM_H */
42