1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 #ifndef _NF_CONNTRACK_ACT_CT_H 4 #define _NF_CONNTRACK_ACT_CT_H 5 6 #include <net/netfilter/nf_conntrack.h> 7 #include <linux/netfilter/nf_conntrack_common.h> 8 #include <net/netfilter/nf_conntrack_extend.h> 9 10 struct nf_conn_act_ct_ext { 11 int ifindex[IP_CT_DIR_MAX]; 12 }; 13 nf_conn_act_ct_ext_find(const struct nf_conn * ct)14static inline struct nf_conn_act_ct_ext *nf_conn_act_ct_ext_find(const struct nf_conn *ct) 15 { 16 #if IS_ENABLED(CONFIG_NET_ACT_CT) 17 return nf_ct_ext_find(ct, NF_CT_EXT_ACT_CT); 18 #else 19 return NULL; 20 #endif 21 } 22 nf_conn_act_ct_ext_add(struct nf_conn * ct)23static inline struct nf_conn_act_ct_ext *nf_conn_act_ct_ext_add(struct nf_conn *ct) 24 { 25 #if IS_ENABLED(CONFIG_NET_ACT_CT) 26 struct nf_conn_act_ct_ext *act_ct = nf_ct_ext_find(ct, NF_CT_EXT_ACT_CT); 27 28 if (act_ct) 29 return act_ct; 30 31 act_ct = nf_ct_ext_add(ct, NF_CT_EXT_ACT_CT, GFP_ATOMIC); 32 return act_ct; 33 #else 34 return NULL; 35 #endif 36 } 37 nf_conn_act_ct_ext_fill(struct sk_buff * skb,struct nf_conn * ct,enum ip_conntrack_info ctinfo)38static inline void nf_conn_act_ct_ext_fill(struct sk_buff *skb, struct nf_conn *ct, 39 enum ip_conntrack_info ctinfo) 40 { 41 #if IS_ENABLED(CONFIG_NET_ACT_CT) 42 struct nf_conn_act_ct_ext *act_ct_ext; 43 44 act_ct_ext = nf_conn_act_ct_ext_find(ct); 45 if (dev_net(skb->dev) == &init_net && act_ct_ext) 46 act_ct_ext->ifindex[CTINFO2DIR(ctinfo)] = skb->dev->ifindex; 47 #endif 48 } 49 50 #endif /* _NF_CONNTRACK_ACT_CT_H */ 51