diff options
Diffstat (limited to 'net/ipv4/xfrm4_policy.c')
-rw-r--r-- | net/ipv4/xfrm4_policy.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c index 26496babdf3a..1ba44742ebbf 100644 --- a/net/ipv4/xfrm4_policy.c +++ b/net/ipv4/xfrm4_policy.c | |||
@@ -290,10 +290,21 @@ static void __exit xfrm4_policy_fini(void) | |||
290 | xfrm_policy_unregister_afinfo(&xfrm4_policy_afinfo); | 290 | xfrm_policy_unregister_afinfo(&xfrm4_policy_afinfo); |
291 | } | 291 | } |
292 | 292 | ||
293 | void __init xfrm4_init(void) | 293 | void __init xfrm4_init(int rt_max_size) |
294 | { | 294 | { |
295 | xfrm4_state_init(); | 295 | xfrm4_state_init(); |
296 | xfrm4_policy_init(); | 296 | xfrm4_policy_init(); |
297 | /* | ||
298 | * Select a default value for the gc_thresh based on the main route | ||
299 | * table hash size. It seems to me the worst case scenario is when | ||
300 | * we have ipsec operating in transport mode, in which we create a | ||
301 | * dst_entry per socket. The xfrm gc algorithm starts trying to remove | ||
302 | * entries at gc_thresh, and prevents new allocations as 2*gc_thresh | ||
303 | * so lets set an initial xfrm gc_thresh value at the rt_max_size/2. | ||
304 | * That will let us store an ipsec connection per route table entry, | ||
305 | * and start cleaning when were 1/2 full | ||
306 | */ | ||
307 | xfrm4_dst_ops.gc_thresh = rt_max_size/2; | ||
297 | sysctl_hdr = register_net_sysctl_table(&init_net, net_ipv4_ctl_path, | 308 | sysctl_hdr = register_net_sysctl_table(&init_net, net_ipv4_ctl_path, |
298 | xfrm4_policy_table); | 309 | xfrm4_policy_table); |
299 | } | 310 | } |