1 #ifndef __NETNS_XFRM_H
2 #define __NETNS_XFRM_H
3 
4 #include <linux/list.h>
5 #include <linux/wait.h>
6 #include <linux/workqueue.h>
7 #include <linux/xfrm.h>
8 #include <net/dst_ops.h>
9 
10 struct ctl_table_header;
11 
12 struct xfrm_policy_hash {
13 	struct hlist_head	*table;
14 	unsigned int		hmask;
15 };
16 
17 struct netns_xfrm {
18 	struct list_head	state_all;
19 	/*
20 	 * Hash table to find appropriate SA towards given target (endpoint of
21 	 * tunnel or destination of transport mode) allowed by selector.
22 	 *
23 	 * Main use is finding SA after policy selected tunnel or transport
24 	 * mode. Also, it can be used by ah/esp icmp error handler to find
25 	 * offending SA.
26 	 */
27 	struct hlist_head	*state_bydst;
28 	struct hlist_head	*state_bysrc;
29 	struct hlist_head	*state_byspi;
30 	unsigned int		state_hmask;
31 	unsigned int		state_num;
32 	struct work_struct	state_hash_work;
33 	struct hlist_head	state_gc_list;
34 	struct work_struct	state_gc_work;
35 
36 	wait_queue_head_t	km_waitq;
37 
38 	struct list_head	policy_all;
39 	struct hlist_head	*policy_byidx;
40 	unsigned int		policy_idx_hmask;
41 	struct hlist_head	policy_inexact[XFRM_POLICY_MAX * 2];
42 	struct xfrm_policy_hash	policy_bydst[XFRM_POLICY_MAX * 2];
43 	unsigned int		policy_count[XFRM_POLICY_MAX * 2];
44 	struct work_struct	policy_hash_work;
45 
46 
47 	struct sock		*nlsk;
48 	struct sock		*nlsk_stash;
49 
50 	u32			sysctl_aevent_etime;
51 	u32			sysctl_aevent_rseqth;
52 	int			sysctl_larval_drop;
53 	u32			sysctl_acq_expires;
54 #ifdef CONFIG_SYSCTL
55 	struct ctl_table_header	*sysctl_hdr;
56 #endif
57 
58 	struct dst_ops		xfrm4_dst_ops;
59 #if IS_ENABLED(CONFIG_IPV6)
60 	struct dst_ops		xfrm6_dst_ops;
61 #endif
62 };
63 
64 #endif
65