diff options
Diffstat (limited to 'net/ipv6/xfrm6_policy.c')
-rw-r--r-- | net/ipv6/xfrm6_policy.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c index 4acc308eac7f..611cffcf554f 100644 --- a/net/ipv6/xfrm6_policy.c +++ b/net/ipv6/xfrm6_policy.c | |||
@@ -323,6 +323,7 @@ static struct ctl_table_header *sysctl_hdr; | |||
323 | int __init xfrm6_init(void) | 323 | int __init xfrm6_init(void) |
324 | { | 324 | { |
325 | int ret; | 325 | int ret; |
326 | unsigned int gc_thresh; | ||
326 | 327 | ||
327 | ret = xfrm6_policy_init(); | 328 | ret = xfrm6_policy_init(); |
328 | if (ret) | 329 | if (ret) |
@@ -331,6 +332,20 @@ int __init xfrm6_init(void) | |||
331 | ret = xfrm6_state_init(); | 332 | ret = xfrm6_state_init(); |
332 | if (ret) | 333 | if (ret) |
333 | goto out_policy; | 334 | goto out_policy; |
335 | /* | ||
336 | * We need a good default value for the xfrm6 gc threshold. | ||
337 | * In ipv4 we set it to the route hash table size * 8, which | ||
338 | * is half the size of the maximaum route cache for ipv4. It | ||
339 | * would be good to do the same thing for v6, except the table is | ||
340 | * constructed differently here. Here each table for a net namespace | ||
341 | * can have FIB_TABLE_HASHSZ entries, so lets go with the same | ||
342 | * computation that we used for ipv4 here. Also, lets keep the initial | ||
343 | * gc_thresh to a minimum of 1024, since, the ipv6 route cache defaults | ||
344 | * to that as a minimum as well | ||
345 | */ | ||
346 | gc_thresh = FIB6_TABLE_HASHSZ * 8; | ||
347 | xfrm6_dst_ops.gc_thresh = (gc_thresh < 1024) ? 1024 : gc_thresh; | ||
348 | |||
334 | sysctl_hdr = register_net_sysctl_table(&init_net, net_ipv6_ctl_path, | 349 | sysctl_hdr = register_net_sysctl_table(&init_net, net_ipv6_ctl_path, |
335 | xfrm6_policy_table); | 350 | xfrm6_policy_table); |
336 | out: | 351 | out: |