1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __NETNS_XFRM_H 3 #define __NETNS_XFRM_H 4 5 #include <linux/list.h> 6 #include <linux/wait.h> 7 #include <linux/workqueue.h> 8 #include <linux/rhashtable-types.h> 9 #include <linux/xfrm.h> 10 #include <linux/android_kabi.h> 11 #include <net/dst_ops.h> 12 13 struct ctl_table_header; 14 15 struct xfrm_policy_hash { 16 struct hlist_head __rcu *table; 17 unsigned int hmask; 18 u8 dbits4; 19 u8 sbits4; 20 u8 dbits6; 21 u8 sbits6; 22 }; 23 24 struct xfrm_policy_hthresh { 25 struct work_struct work; 26 seqlock_t lock; 27 u8 lbits4; 28 u8 rbits4; 29 u8 lbits6; 30 u8 rbits6; 31 }; 32 33 struct netns_xfrm { 34 struct list_head state_all; 35 /* 36 * Hash table to find appropriate SA towards given target (endpoint of 37 * tunnel or destination of transport mode) allowed by selector. 38 * 39 * Main use is finding SA after policy selected tunnel or transport 40 * mode. Also, it can be used by ah/esp icmp error handler to find 41 * offending SA. 42 */ 43 struct hlist_head __rcu *state_bydst; 44 struct hlist_head __rcu *state_bysrc; 45 struct hlist_head __rcu *state_byspi; 46 struct hlist_head __rcu *state_byseq; 47 struct hlist_head __percpu *state_cache_input; 48 unsigned int state_hmask; 49 unsigned int state_num; 50 struct work_struct state_hash_work; 51 52 struct list_head policy_all; 53 struct hlist_head *policy_byidx; 54 unsigned int policy_idx_hmask; 55 unsigned int idx_generator; 56 struct xfrm_policy_hash policy_bydst[XFRM_POLICY_MAX]; 57 unsigned int policy_count[XFRM_POLICY_MAX * 2]; 58 struct work_struct policy_hash_work; 59 struct xfrm_policy_hthresh policy_hthresh; 60 struct list_head inexact_bins; 61 62 63 struct sock *nlsk; 64 struct sock *nlsk_stash; 65 66 u32 sysctl_aevent_etime; 67 u32 sysctl_aevent_rseqth; 68 int sysctl_larval_drop; 69 u32 sysctl_acq_expires; 70 71 u8 policy_default[XFRM_POLICY_MAX]; 72 73 #ifdef CONFIG_SYSCTL 74 struct ctl_table_header *sysctl_hdr; 75 #endif 76 77 struct dst_ops xfrm4_dst_ops; 78 #if IS_ENABLED(CONFIG_IPV6) 79 struct dst_ops xfrm6_dst_ops; 80 #endif 81 spinlock_t xfrm_state_lock; 82 seqcount_spinlock_t xfrm_state_hash_generation; 83 seqcount_spinlock_t xfrm_policy_hash_generation; 84 85 spinlock_t xfrm_policy_lock; 86 struct mutex xfrm_cfg_mutex; 87 struct delayed_work nat_keepalive_work; 88 89 ANDROID_KABI_RESERVE(1); 90 }; 91 92 #endif 93