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 Gerlitzstatic 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 Gerlitzstatic 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