diff options
Diffstat (limited to 'net/ipv6/route.c')
-rw-r--r-- | net/ipv6/route.c | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 0c7382f4fb85..d2b3cf695aff 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
@@ -73,14 +73,6 @@ | |||
73 | 73 | ||
74 | #define CLONE_OFFLINK_ROUTE 0 | 74 | #define CLONE_OFFLINK_ROUTE 0 |
75 | 75 | ||
76 | static int ip6_rt_max_size = 4096; | ||
77 | static int ip6_rt_gc_min_interval = HZ / 2; | ||
78 | static int ip6_rt_gc_timeout = 60*HZ; | ||
79 | int ip6_rt_gc_interval = 30*HZ; | ||
80 | static int ip6_rt_gc_elasticity = 9; | ||
81 | static int ip6_rt_mtu_expires = 10*60*HZ; | ||
82 | static int ip6_rt_min_advmss = IPV6_MIN_MTU - 20 - 40; | ||
83 | |||
84 | static struct rt6_info * ip6_rt_copy(struct rt6_info *ort); | 76 | static struct rt6_info * ip6_rt_copy(struct rt6_info *ort); |
85 | static struct dst_entry *ip6_dst_check(struct dst_entry *dst, u32 cookie); | 77 | static struct dst_entry *ip6_dst_check(struct dst_entry *dst, u32 cookie); |
86 | static struct dst_entry *ip6_negative_advice(struct dst_entry *); | 78 | static struct dst_entry *ip6_negative_advice(struct dst_entry *); |
@@ -894,8 +886,8 @@ static inline unsigned int ipv6_advmss(unsigned int mtu) | |||
894 | { | 886 | { |
895 | mtu -= sizeof(struct ipv6hdr) + sizeof(struct tcphdr); | 887 | mtu -= sizeof(struct ipv6hdr) + sizeof(struct tcphdr); |
896 | 888 | ||
897 | if (mtu < ip6_rt_min_advmss) | 889 | if (mtu < init_net.ipv6.sysctl.ip6_rt_min_advmss) |
898 | mtu = ip6_rt_min_advmss; | 890 | mtu = init_net.ipv6.sysctl.ip6_rt_min_advmss; |
899 | 891 | ||
900 | /* | 892 | /* |
901 | * Maximal non-jumbo IPv6 payload is IPV6_MAXPLEN and | 893 | * Maximal non-jumbo IPv6 payload is IPV6_MAXPLEN and |
@@ -995,19 +987,19 @@ static int ip6_dst_gc(void) | |||
995 | static unsigned long last_gc; | 987 | static unsigned long last_gc; |
996 | unsigned long now = jiffies; | 988 | unsigned long now = jiffies; |
997 | 989 | ||
998 | if (time_after(last_gc + ip6_rt_gc_min_interval, now) && | 990 | if (time_after(last_gc + init_net.ipv6.sysctl.ip6_rt_gc_min_interval, now) && |
999 | atomic_read(&ip6_dst_ops.entries) <= ip6_rt_max_size) | 991 | atomic_read(&ip6_dst_ops.entries) <= init_net.ipv6.sysctl.ip6_rt_max_size) |
1000 | goto out; | 992 | goto out; |
1001 | 993 | ||
1002 | expire++; | 994 | expire++; |
1003 | fib6_run_gc(expire); | 995 | fib6_run_gc(expire); |
1004 | last_gc = now; | 996 | last_gc = now; |
1005 | if (atomic_read(&ip6_dst_ops.entries) < ip6_dst_ops.gc_thresh) | 997 | if (atomic_read(&ip6_dst_ops.entries) < ip6_dst_ops.gc_thresh) |
1006 | expire = ip6_rt_gc_timeout>>1; | 998 | expire = init_net.ipv6.sysctl.ip6_rt_gc_timeout>>1; |
1007 | 999 | ||
1008 | out: | 1000 | out: |
1009 | expire -= expire>>ip6_rt_gc_elasticity; | 1001 | expire -= expire>>init_net.ipv6.sysctl.ip6_rt_gc_elasticity; |
1010 | return (atomic_read(&ip6_dst_ops.entries) > ip6_rt_max_size); | 1002 | return (atomic_read(&ip6_dst_ops.entries) > init_net.ipv6.sysctl.ip6_rt_max_size); |
1011 | } | 1003 | } |
1012 | 1004 | ||
1013 | /* Clean host part of a prefix. Not necessary in radix tree, | 1005 | /* Clean host part of a prefix. Not necessary in radix tree, |
@@ -1513,7 +1505,7 @@ void rt6_pmtu_discovery(struct in6_addr *daddr, struct in6_addr *saddr, | |||
1513 | rt->u.dst.metrics[RTAX_MTU-1] = pmtu; | 1505 | rt->u.dst.metrics[RTAX_MTU-1] = pmtu; |
1514 | if (allfrag) | 1506 | if (allfrag) |
1515 | rt->u.dst.metrics[RTAX_FEATURES-1] |= RTAX_FEATURE_ALLFRAG; | 1507 | rt->u.dst.metrics[RTAX_FEATURES-1] |= RTAX_FEATURE_ALLFRAG; |
1516 | dst_set_expires(&rt->u.dst, ip6_rt_mtu_expires); | 1508 | dst_set_expires(&rt->u.dst, init_net.ipv6.sysctl.ip6_rt_mtu_expires); |
1517 | rt->rt6i_flags |= RTF_MODIFIED|RTF_EXPIRES; | 1509 | rt->rt6i_flags |= RTF_MODIFIED|RTF_EXPIRES; |
1518 | goto out; | 1510 | goto out; |
1519 | } | 1511 | } |
@@ -1539,7 +1531,7 @@ void rt6_pmtu_discovery(struct in6_addr *daddr, struct in6_addr *saddr, | |||
1539 | * which is 10 mins. After 10 mins the decreased pmtu is expired | 1531 | * which is 10 mins. After 10 mins the decreased pmtu is expired |
1540 | * and detecting PMTU increase will be automatically happened. | 1532 | * and detecting PMTU increase will be automatically happened. |
1541 | */ | 1533 | */ |
1542 | dst_set_expires(&nrt->u.dst, ip6_rt_mtu_expires); | 1534 | dst_set_expires(&nrt->u.dst, init_net.ipv6.sysctl.ip6_rt_mtu_expires); |
1543 | nrt->rt6i_flags |= RTF_DYNAMIC|RTF_EXPIRES; | 1535 | nrt->rt6i_flags |= RTF_DYNAMIC|RTF_EXPIRES; |
1544 | 1536 | ||
1545 | ip6_ins_rt(nrt); | 1537 | ip6_ins_rt(nrt); |
@@ -2395,15 +2387,14 @@ static inline void ipv6_route_proc_fini(struct net *net) | |||
2395 | 2387 | ||
2396 | #ifdef CONFIG_SYSCTL | 2388 | #ifdef CONFIG_SYSCTL |
2397 | 2389 | ||
2398 | static int flush_delay; | ||
2399 | |||
2400 | static | 2390 | static |
2401 | int ipv6_sysctl_rtcache_flush(ctl_table *ctl, int write, struct file * filp, | 2391 | int ipv6_sysctl_rtcache_flush(ctl_table *ctl, int write, struct file * filp, |
2402 | void __user *buffer, size_t *lenp, loff_t *ppos) | 2392 | void __user *buffer, size_t *lenp, loff_t *ppos) |
2403 | { | 2393 | { |
2394 | int delay = init_net.ipv6.sysctl.flush_delay; | ||
2404 | if (write) { | 2395 | if (write) { |
2405 | proc_dointvec(ctl, write, filp, buffer, lenp, ppos); | 2396 | proc_dointvec(ctl, write, filp, buffer, lenp, ppos); |
2406 | fib6_run_gc(flush_delay <= 0 ? ~0UL : (unsigned long)flush_delay); | 2397 | fib6_run_gc(delay <= 0 ? ~0UL : (unsigned long)delay); |
2407 | return 0; | 2398 | return 0; |
2408 | } else | 2399 | } else |
2409 | return -EINVAL; | 2400 | return -EINVAL; |
@@ -2412,7 +2403,7 @@ int ipv6_sysctl_rtcache_flush(ctl_table *ctl, int write, struct file * filp, | |||
2412 | ctl_table ipv6_route_table_template[] = { | 2403 | ctl_table ipv6_route_table_template[] = { |
2413 | { | 2404 | { |
2414 | .procname = "flush", | 2405 | .procname = "flush", |
2415 | .data = &flush_delay, | 2406 | .data = &init_net.ipv6.sysctl.flush_delay, |
2416 | .maxlen = sizeof(int), | 2407 | .maxlen = sizeof(int), |
2417 | .mode = 0200, | 2408 | .mode = 0200, |
2418 | .proc_handler = &ipv6_sysctl_rtcache_flush | 2409 | .proc_handler = &ipv6_sysctl_rtcache_flush |
@@ -2428,7 +2419,7 @@ ctl_table ipv6_route_table_template[] = { | |||
2428 | { | 2419 | { |
2429 | .ctl_name = NET_IPV6_ROUTE_MAX_SIZE, | 2420 | .ctl_name = NET_IPV6_ROUTE_MAX_SIZE, |
2430 | .procname = "max_size", | 2421 | .procname = "max_size", |
2431 | .data = &ip6_rt_max_size, | 2422 | .data = &init_net.ipv6.sysctl.ip6_rt_max_size, |
2432 | .maxlen = sizeof(int), | 2423 | .maxlen = sizeof(int), |
2433 | .mode = 0644, | 2424 | .mode = 0644, |
2434 | .proc_handler = &proc_dointvec, | 2425 | .proc_handler = &proc_dointvec, |
@@ -2436,7 +2427,7 @@ ctl_table ipv6_route_table_template[] = { | |||
2436 | { | 2427 | { |
2437 | .ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL, | 2428 | .ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL, |
2438 | .procname = "gc_min_interval", | 2429 | .procname = "gc_min_interval", |
2439 | .data = &ip6_rt_gc_min_interval, | 2430 | .data = &init_net.ipv6.sysctl.ip6_rt_gc_min_interval, |
2440 | .maxlen = sizeof(int), | 2431 | .maxlen = sizeof(int), |
2441 | .mode = 0644, | 2432 | .mode = 0644, |
2442 | .proc_handler = &proc_dointvec_jiffies, | 2433 | .proc_handler = &proc_dointvec_jiffies, |
@@ -2445,7 +2436,7 @@ ctl_table ipv6_route_table_template[] = { | |||
2445 | { | 2436 | { |
2446 | .ctl_name = NET_IPV6_ROUTE_GC_TIMEOUT, | 2437 | .ctl_name = NET_IPV6_ROUTE_GC_TIMEOUT, |
2447 | .procname = "gc_timeout", | 2438 | .procname = "gc_timeout", |
2448 | .data = &ip6_rt_gc_timeout, | 2439 | .data = &init_net.ipv6.sysctl.ip6_rt_gc_timeout, |
2449 | .maxlen = sizeof(int), | 2440 | .maxlen = sizeof(int), |
2450 | .mode = 0644, | 2441 | .mode = 0644, |
2451 | .proc_handler = &proc_dointvec_jiffies, | 2442 | .proc_handler = &proc_dointvec_jiffies, |
@@ -2454,7 +2445,7 @@ ctl_table ipv6_route_table_template[] = { | |||
2454 | { | 2445 | { |
2455 | .ctl_name = NET_IPV6_ROUTE_GC_INTERVAL, | 2446 | .ctl_name = NET_IPV6_ROUTE_GC_INTERVAL, |
2456 | .procname = "gc_interval", | 2447 | .procname = "gc_interval", |
2457 | .data = &ip6_rt_gc_interval, | 2448 | .data = &init_net.ipv6.sysctl.ip6_rt_gc_interval, |
2458 | .maxlen = sizeof(int), | 2449 | .maxlen = sizeof(int), |
2459 | .mode = 0644, | 2450 | .mode = 0644, |
2460 | .proc_handler = &proc_dointvec_jiffies, | 2451 | .proc_handler = &proc_dointvec_jiffies, |
@@ -2463,7 +2454,7 @@ ctl_table ipv6_route_table_template[] = { | |||
2463 | { | 2454 | { |
2464 | .ctl_name = NET_IPV6_ROUTE_GC_ELASTICITY, | 2455 | .ctl_name = NET_IPV6_ROUTE_GC_ELASTICITY, |
2465 | .procname = "gc_elasticity", | 2456 | .procname = "gc_elasticity", |
2466 | .data = &ip6_rt_gc_elasticity, | 2457 | .data = &init_net.ipv6.sysctl.ip6_rt_gc_elasticity, |
2467 | .maxlen = sizeof(int), | 2458 | .maxlen = sizeof(int), |
2468 | .mode = 0644, | 2459 | .mode = 0644, |
2469 | .proc_handler = &proc_dointvec_jiffies, | 2460 | .proc_handler = &proc_dointvec_jiffies, |
@@ -2472,7 +2463,7 @@ ctl_table ipv6_route_table_template[] = { | |||
2472 | { | 2463 | { |
2473 | .ctl_name = NET_IPV6_ROUTE_MTU_EXPIRES, | 2464 | .ctl_name = NET_IPV6_ROUTE_MTU_EXPIRES, |
2474 | .procname = "mtu_expires", | 2465 | .procname = "mtu_expires", |
2475 | .data = &ip6_rt_mtu_expires, | 2466 | .data = &init_net.ipv6.sysctl.ip6_rt_mtu_expires, |
2476 | .maxlen = sizeof(int), | 2467 | .maxlen = sizeof(int), |
2477 | .mode = 0644, | 2468 | .mode = 0644, |
2478 | .proc_handler = &proc_dointvec_jiffies, | 2469 | .proc_handler = &proc_dointvec_jiffies, |
@@ -2481,7 +2472,7 @@ ctl_table ipv6_route_table_template[] = { | |||
2481 | { | 2472 | { |
2482 | .ctl_name = NET_IPV6_ROUTE_MIN_ADVMSS, | 2473 | .ctl_name = NET_IPV6_ROUTE_MIN_ADVMSS, |
2483 | .procname = "min_adv_mss", | 2474 | .procname = "min_adv_mss", |
2484 | .data = &ip6_rt_min_advmss, | 2475 | .data = &init_net.ipv6.sysctl.ip6_rt_min_advmss, |
2485 | .maxlen = sizeof(int), | 2476 | .maxlen = sizeof(int), |
2486 | .mode = 0644, | 2477 | .mode = 0644, |
2487 | .proc_handler = &proc_dointvec_jiffies, | 2478 | .proc_handler = &proc_dointvec_jiffies, |
@@ -2490,7 +2481,7 @@ ctl_table ipv6_route_table_template[] = { | |||
2490 | { | 2481 | { |
2491 | .ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS, | 2482 | .ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS, |
2492 | .procname = "gc_min_interval_ms", | 2483 | .procname = "gc_min_interval_ms", |
2493 | .data = &ip6_rt_gc_min_interval, | 2484 | .data = &init_net.ipv6.sysctl.ip6_rt_gc_min_interval, |
2494 | .maxlen = sizeof(int), | 2485 | .maxlen = sizeof(int), |
2495 | .mode = 0644, | 2486 | .mode = 0644, |
2496 | .proc_handler = &proc_dointvec_ms_jiffies, | 2487 | .proc_handler = &proc_dointvec_ms_jiffies, |