aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/route.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-11 14:38:13 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-11 14:38:13 -0500
commitcb18eccff48ef3986d1072964590bce6fec705fb (patch)
tree777fb1d15e0281341e1e02c9803d989538d346f2 /net/ipv6/route.c
parentc827ba4cb49a30ce581201fd0ba2be77cde412c7 (diff)
parent5ef213f6842277ee1df5659f59fac0ffc9beb411 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (45 commits) [IPV4]: Restore multipath routing after rt_next changes. [XFRM] IPV6: Fix outbound RO transformation which is broken by IPsec tunnel patch. [NET]: Reorder fields of struct dst_entry [DECNET]: Convert decnet route to use the new dst_entry 'next' pointer [IPV6]: Convert ipv6 route to use the new dst_entry 'next' pointer [IPV4]: Convert ipv4 route to use the new dst_entry 'next' pointer [NET]: Introduce union in struct dst_entry to hold 'next' pointer [DECNET]: fix misannotation of linkinfo_dn [DECNET]: FRA_{DST,SRC} are le16 for decnet [UDP]: UDP can use sk_hash to speedup lookups [NET]: Fix whitespace errors. [NET] XFRM: Fix whitespace errors. [NET] X25: Fix whitespace errors. [NET] WANROUTER: Fix whitespace errors. [NET] UNIX: Fix whitespace errors. [NET] TIPC: Fix whitespace errors. [NET] SUNRPC: Fix whitespace errors. [NET] SCTP: Fix whitespace errors. [NET] SCHED: Fix whitespace errors. [NET] RXRPC: Fix whitespace errors. ...
Diffstat (limited to 'net/ipv6/route.c')
-rw-r--r--net/ipv6/route.c108
1 files changed, 54 insertions, 54 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 19c906f6efa1..a415ac610e2d 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -3,7 +3,7 @@
3 * FIB front-end. 3 * FIB front-end.
4 * 4 *
5 * Authors: 5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt> 6 * Pedro Roque <roque@di.fc.ul.pt>
7 * 7 *
8 * $Id: route.c,v 1.56 2001/10/31 21:55:55 davem Exp $ 8 * $Id: route.c,v 1.56 2001/10/31 21:55:55 davem Exp $
9 * 9 *
@@ -201,7 +201,7 @@ static void ip6_dst_destroy(struct dst_entry *dst)
201 if (idev != NULL) { 201 if (idev != NULL) {
202 rt->rt6i_idev = NULL; 202 rt->rt6i_idev = NULL;
203 in6_dev_put(idev); 203 in6_dev_put(idev);
204 } 204 }
205} 205}
206 206
207static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev, 207static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev,
@@ -243,7 +243,7 @@ static __inline__ struct rt6_info *rt6_device_match(struct rt6_info *rt,
243 struct rt6_info *sprt; 243 struct rt6_info *sprt;
244 244
245 if (oif) { 245 if (oif) {
246 for (sprt = rt; sprt; sprt = sprt->u.next) { 246 for (sprt = rt; sprt; sprt = sprt->u.dst.rt6_next) {
247 struct net_device *dev = sprt->rt6i_dev; 247 struct net_device *dev = sprt->rt6i_dev;
248 if (dev->ifindex == oif) 248 if (dev->ifindex == oif)
249 return sprt; 249 return sprt;
@@ -252,7 +252,7 @@ static __inline__ struct rt6_info *rt6_device_match(struct rt6_info *rt,
252 sprt->rt6i_idev->dev->ifindex != oif) { 252 sprt->rt6i_idev->dev->ifindex != oif) {
253 if (strict && oif) 253 if (strict && oif)
254 continue; 254 continue;
255 if (local && (!oif || 255 if (local && (!oif ||
256 local->rt6i_idev->dev->ifindex == oif)) 256 local->rt6i_idev->dev->ifindex == oif))
257 continue; 257 continue;
258 } 258 }
@@ -350,7 +350,7 @@ static int rt6_score_route(struct rt6_info *rt, int oif,
350 int strict) 350 int strict)
351{ 351{
352 int m, n; 352 int m, n;
353 353
354 m = rt6_check_dev(rt, oif); 354 m = rt6_check_dev(rt, oif);
355 if (!m && (strict & RT6_LOOKUP_F_IFACE)) 355 if (!m && (strict & RT6_LOOKUP_F_IFACE))
356 return -1; 356 return -1;
@@ -376,7 +376,7 @@ static struct rt6_info *rt6_select(struct rt6_info **head, int oif,
376 376
377 for (rt = rt0, metric = rt0->rt6i_metric; 377 for (rt = rt0, metric = rt0->rt6i_metric;
378 rt && rt->rt6i_metric == metric && (!last || rt != rt0); 378 rt && rt->rt6i_metric == metric && (!last || rt != rt0);
379 rt = rt->u.next) { 379 rt = rt->u.dst.rt6_next) {
380 int m; 380 int m;
381 381
382 if (rt6_check_expired(rt)) 382 if (rt6_check_expired(rt))
@@ -404,9 +404,9 @@ static struct rt6_info *rt6_select(struct rt6_info **head, int oif,
404 /* no entries matched; do round-robin */ 404 /* no entries matched; do round-robin */
405 static DEFINE_SPINLOCK(lock); 405 static DEFINE_SPINLOCK(lock);
406 spin_lock(&lock); 406 spin_lock(&lock);
407 *head = rt0->u.next; 407 *head = rt0->u.dst.rt6_next;
408 rt0->u.next = last->u.next; 408 rt0->u.dst.rt6_next = last->u.dst.rt6_next;
409 last->u.next = rt0; 409 last->u.dst.rt6_next = rt0;
410 spin_unlock(&lock); 410 spin_unlock(&lock);
411 } 411 }
412 412
@@ -723,7 +723,7 @@ void ip6_route_input(struct sk_buff *skb)
723 .flowlabel = (* (__be32 *) iph)&IPV6_FLOWINFO_MASK, 723 .flowlabel = (* (__be32 *) iph)&IPV6_FLOWINFO_MASK,
724 }, 724 },
725 }, 725 },
726 .mark = skb->mark, 726 .mark = skb->mark,
727 .proto = iph->nexthdr, 727 .proto = iph->nexthdr,
728 }; 728 };
729 729
@@ -888,9 +888,9 @@ static inline unsigned int ipv6_advmss(unsigned int mtu)
888 mtu = ip6_rt_min_advmss; 888 mtu = ip6_rt_min_advmss;
889 889
890 /* 890 /*
891 * Maximal non-jumbo IPv6 payload is IPV6_MAXPLEN and 891 * Maximal non-jumbo IPv6 payload is IPV6_MAXPLEN and
892 * corresponding MSS is IPV6_MAXPLEN - tcp_header_size. 892 * corresponding MSS is IPV6_MAXPLEN - tcp_header_size.
893 * IPV6_MAXPLEN is also valid and means: "any MSS, 893 * IPV6_MAXPLEN is also valid and means: "any MSS,
894 * rely only on pmtu discovery" 894 * rely only on pmtu discovery"
895 */ 895 */
896 if (mtu > IPV6_MAXPLEN - sizeof(struct tcphdr)) 896 if (mtu > IPV6_MAXPLEN - sizeof(struct tcphdr))
@@ -901,7 +901,7 @@ static inline unsigned int ipv6_advmss(unsigned int mtu)
901static struct dst_entry *ndisc_dst_gc_list; 901static struct dst_entry *ndisc_dst_gc_list;
902static DEFINE_SPINLOCK(ndisc_lock); 902static DEFINE_SPINLOCK(ndisc_lock);
903 903
904struct dst_entry *ndisc_dst_alloc(struct net_device *dev, 904struct dst_entry *ndisc_dst_alloc(struct net_device *dev,
905 struct neighbour *neigh, 905 struct neighbour *neigh,
906 struct in6_addr *addr, 906 struct in6_addr *addr,
907 int (*output)(struct sk_buff *)) 907 int (*output)(struct sk_buff *))
@@ -934,8 +934,8 @@ struct dst_entry *ndisc_dst_alloc(struct net_device *dev,
934 rt->u.dst.output = output; 934 rt->u.dst.output = output;
935 935
936#if 0 /* there's no chance to use these for ndisc */ 936#if 0 /* there's no chance to use these for ndisc */
937 rt->u.dst.flags = ipv6_addr_type(addr) & IPV6_ADDR_UNICAST 937 rt->u.dst.flags = ipv6_addr_type(addr) & IPV6_ADDR_UNICAST
938 ? DST_HOST 938 ? DST_HOST
939 : 0; 939 : 0;
940 ipv6_addr_copy(&rt->rt6i_dst.addr, addr); 940 ipv6_addr_copy(&rt->rt6i_dst.addr, addr);
941 rt->rt6i_dst.plen = 128; 941 rt->rt6i_dst.plen = 128;
@@ -958,7 +958,7 @@ int ndisc_dst_gc(int *more)
958 int freed; 958 int freed;
959 959
960 next = NULL; 960 next = NULL;
961 freed = 0; 961 freed = 0;
962 962
963 spin_lock_bh(&ndisc_lock); 963 spin_lock_bh(&ndisc_lock);
964 pprev = &ndisc_dst_gc_list; 964 pprev = &ndisc_dst_gc_list;
@@ -1276,9 +1276,9 @@ static int ip6_route_del(struct fib6_config *cfg)
1276 fn = fib6_locate(&table->tb6_root, 1276 fn = fib6_locate(&table->tb6_root,
1277 &cfg->fc_dst, cfg->fc_dst_len, 1277 &cfg->fc_dst, cfg->fc_dst_len,
1278 &cfg->fc_src, cfg->fc_src_len); 1278 &cfg->fc_src, cfg->fc_src_len);
1279 1279
1280 if (fn) { 1280 if (fn) {
1281 for (rt = fn->leaf; rt; rt = rt->u.next) { 1281 for (rt = fn->leaf; rt; rt = rt->u.dst.rt6_next) {
1282 if (cfg->fc_ifindex && 1282 if (cfg->fc_ifindex &&
1283 (rt->rt6i_dev == NULL || 1283 (rt->rt6i_dev == NULL ||
1284 rt->rt6i_dev->ifindex != cfg->fc_ifindex)) 1284 rt->rt6i_dev->ifindex != cfg->fc_ifindex))
@@ -1329,7 +1329,7 @@ static struct rt6_info *__ip6_route_redirect(struct fib6_table *table,
1329 read_lock_bh(&table->tb6_lock); 1329 read_lock_bh(&table->tb6_lock);
1330 fn = fib6_lookup(&table->tb6_root, &fl->fl6_dst, &fl->fl6_src); 1330 fn = fib6_lookup(&table->tb6_root, &fl->fl6_dst, &fl->fl6_src);
1331restart: 1331restart:
1332 for (rt = fn->leaf; rt; rt = rt->u.next) { 1332 for (rt = fn->leaf; rt; rt = rt->u.dst.rt6_next) {
1333 /* 1333 /*
1334 * Current route is on-link; redirect is always invalid. 1334 * Current route is on-link; redirect is always invalid.
1335 * 1335 *
@@ -1405,7 +1405,7 @@ void rt6_redirect(struct in6_addr *dest, struct in6_addr *src,
1405 * We have finally decided to accept it. 1405 * We have finally decided to accept it.
1406 */ 1406 */
1407 1407
1408 neigh_update(neigh, lladdr, NUD_STALE, 1408 neigh_update(neigh, lladdr, NUD_STALE,
1409 NEIGH_UPDATE_F_WEAK_OVERRIDE| 1409 NEIGH_UPDATE_F_WEAK_OVERRIDE|
1410 NEIGH_UPDATE_F_OVERRIDE| 1410 NEIGH_UPDATE_F_OVERRIDE|
1411 (on_link ? 0 : (NEIGH_UPDATE_F_OVERRIDE_ISROUTER| 1411 (on_link ? 0 : (NEIGH_UPDATE_F_OVERRIDE_ISROUTER|
@@ -1454,7 +1454,7 @@ void rt6_redirect(struct in6_addr *dest, struct in6_addr *src,
1454 } 1454 }
1455 1455
1456out: 1456out:
1457 dst_release(&rt->u.dst); 1457 dst_release(&rt->u.dst);
1458 return; 1458 return;
1459} 1459}
1460 1460
@@ -1478,7 +1478,7 @@ void rt6_pmtu_discovery(struct in6_addr *daddr, struct in6_addr *saddr,
1478 1478
1479 if (pmtu < IPV6_MIN_MTU) { 1479 if (pmtu < IPV6_MIN_MTU) {
1480 /* 1480 /*
1481 * According to RFC2460, PMTU is set to the IPv6 Minimum Link 1481 * According to RFC2460, PMTU is set to the IPv6 Minimum Link
1482 * MTU (1280) and a fragment header should always be included 1482 * MTU (1280) and a fragment header should always be included
1483 * after a node receiving Too Big message reporting PMTU is 1483 * after a node receiving Too Big message reporting PMTU is
1484 * less than the IPv6 Minimum Link MTU. 1484 * less than the IPv6 Minimum Link MTU.
@@ -1590,7 +1590,7 @@ static struct rt6_info *rt6_get_route_info(struct in6_addr *prefix, int prefixle
1590 if (!fn) 1590 if (!fn)
1591 goto out; 1591 goto out;
1592 1592
1593 for (rt = fn->leaf; rt; rt = rt->u.next) { 1593 for (rt = fn->leaf; rt; rt = rt->u.dst.rt6_next) {
1594 if (rt->rt6i_dev->ifindex != ifindex) 1594 if (rt->rt6i_dev->ifindex != ifindex)
1595 continue; 1595 continue;
1596 if ((rt->rt6i_flags & (RTF_ROUTEINFO|RTF_GATEWAY)) != (RTF_ROUTEINFO|RTF_GATEWAY)) 1596 if ((rt->rt6i_flags & (RTF_ROUTEINFO|RTF_GATEWAY)) != (RTF_ROUTEINFO|RTF_GATEWAY))
@@ -1632,7 +1632,7 @@ static struct rt6_info *rt6_add_route_info(struct in6_addr *prefix, int prefixle
1632#endif 1632#endif
1633 1633
1634struct rt6_info *rt6_get_dflt_router(struct in6_addr *addr, struct net_device *dev) 1634struct rt6_info *rt6_get_dflt_router(struct in6_addr *addr, struct net_device *dev)
1635{ 1635{
1636 struct rt6_info *rt; 1636 struct rt6_info *rt;
1637 struct fib6_table *table; 1637 struct fib6_table *table;
1638 1638
@@ -1641,7 +1641,7 @@ struct rt6_info *rt6_get_dflt_router(struct in6_addr *addr, struct net_device *d
1641 return NULL; 1641 return NULL;
1642 1642
1643 write_lock_bh(&table->tb6_lock); 1643 write_lock_bh(&table->tb6_lock);
1644 for (rt = table->tb6_root.leaf; rt; rt=rt->u.next) { 1644 for (rt = table->tb6_root.leaf; rt; rt=rt->u.dst.rt6_next) {
1645 if (dev == rt->rt6i_dev && 1645 if (dev == rt->rt6i_dev &&
1646 ((rt->rt6i_flags & (RTF_ADDRCONF | RTF_DEFAULT)) == (RTF_ADDRCONF | RTF_DEFAULT)) && 1646 ((rt->rt6i_flags & (RTF_ADDRCONF | RTF_DEFAULT)) == (RTF_ADDRCONF | RTF_DEFAULT)) &&
1647 ipv6_addr_equal(&rt->rt6i_gateway, addr)) 1647 ipv6_addr_equal(&rt->rt6i_gateway, addr))
@@ -1684,7 +1684,7 @@ void rt6_purge_dflt_routers(void)
1684 1684
1685restart: 1685restart:
1686 read_lock_bh(&table->tb6_lock); 1686 read_lock_bh(&table->tb6_lock);
1687 for (rt = table->tb6_root.leaf; rt; rt = rt->u.next) { 1687 for (rt = table->tb6_root.leaf; rt; rt = rt->u.dst.rt6_next) {
1688 if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) { 1688 if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) {
1689 dst_hold(&rt->u.dst); 1689 dst_hold(&rt->u.dst);
1690 read_unlock_bh(&table->tb6_lock); 1690 read_unlock_bh(&table->tb6_lock);
@@ -1896,8 +1896,8 @@ static int rt6_mtu_change_route(struct rt6_info *rt, void *p_arg)
1896 */ 1896 */
1897 if (rt->rt6i_dev == arg->dev && 1897 if (rt->rt6i_dev == arg->dev &&
1898 !dst_metric_locked(&rt->u.dst, RTAX_MTU) && 1898 !dst_metric_locked(&rt->u.dst, RTAX_MTU) &&
1899 (dst_mtu(&rt->u.dst) > arg->mtu || 1899 (dst_mtu(&rt->u.dst) > arg->mtu ||
1900 (dst_mtu(&rt->u.dst) < arg->mtu && 1900 (dst_mtu(&rt->u.dst) < arg->mtu &&
1901 dst_mtu(&rt->u.dst) == idev->cnf.mtu6))) 1901 dst_mtu(&rt->u.dst) == idev->cnf.mtu6)))
1902 rt->u.dst.metrics[RTAX_MTU-1] = arg->mtu; 1902 rt->u.dst.metrics[RTAX_MTU-1] = arg->mtu;
1903 rt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(arg->mtu); 1903 rt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(arg->mtu);
@@ -2083,13 +2083,13 @@ static int rt6_fill_node(struct sk_buff *skb, struct rt6_info *rt,
2083 2083
2084 if (dst) { 2084 if (dst) {
2085 NLA_PUT(skb, RTA_DST, 16, dst); 2085 NLA_PUT(skb, RTA_DST, 16, dst);
2086 rtm->rtm_dst_len = 128; 2086 rtm->rtm_dst_len = 128;
2087 } else if (rtm->rtm_dst_len) 2087 } else if (rtm->rtm_dst_len)
2088 NLA_PUT(skb, RTA_DST, 16, &rt->rt6i_dst.addr); 2088 NLA_PUT(skb, RTA_DST, 16, &rt->rt6i_dst.addr);
2089#ifdef CONFIG_IPV6_SUBTREES 2089#ifdef CONFIG_IPV6_SUBTREES
2090 if (src) { 2090 if (src) {
2091 NLA_PUT(skb, RTA_SRC, 16, src); 2091 NLA_PUT(skb, RTA_SRC, 16, src);
2092 rtm->rtm_src_len = 128; 2092 rtm->rtm_src_len = 128;
2093 } else if (rtm->rtm_src_len) 2093 } else if (rtm->rtm_src_len)
2094 NLA_PUT(skb, RTA_SRC, 16, &rt->rt6i_src.addr); 2094 NLA_PUT(skb, RTA_SRC, 16, &rt->rt6i_src.addr);
2095#endif 2095#endif
@@ -2299,7 +2299,7 @@ static int rt6_info_route(struct rt6_info *rt, void *p_arg)
2299 arg->len += sprintf(arg->buffer + arg->len, 2299 arg->len += sprintf(arg->buffer + arg->len,
2300 " %08x %08x %08x %08x %8s\n", 2300 " %08x %08x %08x %08x %8s\n",
2301 rt->rt6i_metric, atomic_read(&rt->u.dst.__refcnt), 2301 rt->rt6i_metric, atomic_read(&rt->u.dst.__refcnt),
2302 rt->u.dst.__use, rt->rt6i_flags, 2302 rt->u.dst.__use, rt->rt6i_flags,
2303 rt->rt6i_dev ? rt->rt6i_dev->name : ""); 2303 rt->rt6i_dev ? rt->rt6i_dev->name : "");
2304 return 0; 2304 return 0;
2305} 2305}
@@ -2371,91 +2371,91 @@ int ipv6_sysctl_rtcache_flush(ctl_table *ctl, int write, struct file * filp,
2371} 2371}
2372 2372
2373ctl_table ipv6_route_table[] = { 2373ctl_table ipv6_route_table[] = {
2374 { 2374 {
2375 .ctl_name = NET_IPV6_ROUTE_FLUSH, 2375 .ctl_name = NET_IPV6_ROUTE_FLUSH,
2376 .procname = "flush", 2376 .procname = "flush",
2377 .data = &flush_delay, 2377 .data = &flush_delay,
2378 .maxlen = sizeof(int), 2378 .maxlen = sizeof(int),
2379 .mode = 0200, 2379 .mode = 0200,
2380 .proc_handler = &ipv6_sysctl_rtcache_flush 2380 .proc_handler = &ipv6_sysctl_rtcache_flush
2381 }, 2381 },
2382 { 2382 {
2383 .ctl_name = NET_IPV6_ROUTE_GC_THRESH, 2383 .ctl_name = NET_IPV6_ROUTE_GC_THRESH,
2384 .procname = "gc_thresh", 2384 .procname = "gc_thresh",
2385 .data = &ip6_dst_ops.gc_thresh, 2385 .data = &ip6_dst_ops.gc_thresh,
2386 .maxlen = sizeof(int), 2386 .maxlen = sizeof(int),
2387 .mode = 0644, 2387 .mode = 0644,
2388 .proc_handler = &proc_dointvec, 2388 .proc_handler = &proc_dointvec,
2389 }, 2389 },
2390 { 2390 {
2391 .ctl_name = NET_IPV6_ROUTE_MAX_SIZE, 2391 .ctl_name = NET_IPV6_ROUTE_MAX_SIZE,
2392 .procname = "max_size", 2392 .procname = "max_size",
2393 .data = &ip6_rt_max_size, 2393 .data = &ip6_rt_max_size,
2394 .maxlen = sizeof(int), 2394 .maxlen = sizeof(int),
2395 .mode = 0644, 2395 .mode = 0644,
2396 .proc_handler = &proc_dointvec, 2396 .proc_handler = &proc_dointvec,
2397 }, 2397 },
2398 { 2398 {
2399 .ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL, 2399 .ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL,
2400 .procname = "gc_min_interval", 2400 .procname = "gc_min_interval",
2401 .data = &ip6_rt_gc_min_interval, 2401 .data = &ip6_rt_gc_min_interval,
2402 .maxlen = sizeof(int), 2402 .maxlen = sizeof(int),
2403 .mode = 0644, 2403 .mode = 0644,
2404 .proc_handler = &proc_dointvec_jiffies, 2404 .proc_handler = &proc_dointvec_jiffies,
2405 .strategy = &sysctl_jiffies, 2405 .strategy = &sysctl_jiffies,
2406 }, 2406 },
2407 { 2407 {
2408 .ctl_name = NET_IPV6_ROUTE_GC_TIMEOUT, 2408 .ctl_name = NET_IPV6_ROUTE_GC_TIMEOUT,
2409 .procname = "gc_timeout", 2409 .procname = "gc_timeout",
2410 .data = &ip6_rt_gc_timeout, 2410 .data = &ip6_rt_gc_timeout,
2411 .maxlen = sizeof(int), 2411 .maxlen = sizeof(int),
2412 .mode = 0644, 2412 .mode = 0644,
2413 .proc_handler = &proc_dointvec_jiffies, 2413 .proc_handler = &proc_dointvec_jiffies,
2414 .strategy = &sysctl_jiffies, 2414 .strategy = &sysctl_jiffies,
2415 }, 2415 },
2416 { 2416 {
2417 .ctl_name = NET_IPV6_ROUTE_GC_INTERVAL, 2417 .ctl_name = NET_IPV6_ROUTE_GC_INTERVAL,
2418 .procname = "gc_interval", 2418 .procname = "gc_interval",
2419 .data = &ip6_rt_gc_interval, 2419 .data = &ip6_rt_gc_interval,
2420 .maxlen = sizeof(int), 2420 .maxlen = sizeof(int),
2421 .mode = 0644, 2421 .mode = 0644,
2422 .proc_handler = &proc_dointvec_jiffies, 2422 .proc_handler = &proc_dointvec_jiffies,
2423 .strategy = &sysctl_jiffies, 2423 .strategy = &sysctl_jiffies,
2424 }, 2424 },
2425 { 2425 {
2426 .ctl_name = NET_IPV6_ROUTE_GC_ELASTICITY, 2426 .ctl_name = NET_IPV6_ROUTE_GC_ELASTICITY,
2427 .procname = "gc_elasticity", 2427 .procname = "gc_elasticity",
2428 .data = &ip6_rt_gc_elasticity, 2428 .data = &ip6_rt_gc_elasticity,
2429 .maxlen = sizeof(int), 2429 .maxlen = sizeof(int),
2430 .mode = 0644, 2430 .mode = 0644,
2431 .proc_handler = &proc_dointvec_jiffies, 2431 .proc_handler = &proc_dointvec_jiffies,
2432 .strategy = &sysctl_jiffies, 2432 .strategy = &sysctl_jiffies,
2433 }, 2433 },
2434 { 2434 {
2435 .ctl_name = NET_IPV6_ROUTE_MTU_EXPIRES, 2435 .ctl_name = NET_IPV6_ROUTE_MTU_EXPIRES,
2436 .procname = "mtu_expires", 2436 .procname = "mtu_expires",
2437 .data = &ip6_rt_mtu_expires, 2437 .data = &ip6_rt_mtu_expires,
2438 .maxlen = sizeof(int), 2438 .maxlen = sizeof(int),
2439 .mode = 0644, 2439 .mode = 0644,
2440 .proc_handler = &proc_dointvec_jiffies, 2440 .proc_handler = &proc_dointvec_jiffies,
2441 .strategy = &sysctl_jiffies, 2441 .strategy = &sysctl_jiffies,
2442 }, 2442 },
2443 { 2443 {
2444 .ctl_name = NET_IPV6_ROUTE_MIN_ADVMSS, 2444 .ctl_name = NET_IPV6_ROUTE_MIN_ADVMSS,
2445 .procname = "min_adv_mss", 2445 .procname = "min_adv_mss",
2446 .data = &ip6_rt_min_advmss, 2446 .data = &ip6_rt_min_advmss,
2447 .maxlen = sizeof(int), 2447 .maxlen = sizeof(int),
2448 .mode = 0644, 2448 .mode = 0644,
2449 .proc_handler = &proc_dointvec_jiffies, 2449 .proc_handler = &proc_dointvec_jiffies,
2450 .strategy = &sysctl_jiffies, 2450 .strategy = &sysctl_jiffies,
2451 }, 2451 },
2452 { 2452 {
2453 .ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS, 2453 .ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS,
2454 .procname = "gc_min_interval_ms", 2454 .procname = "gc_min_interval_ms",
2455 .data = &ip6_rt_gc_min_interval, 2455 .data = &ip6_rt_gc_min_interval,
2456 .maxlen = sizeof(int), 2456 .maxlen = sizeof(int),
2457 .mode = 0644, 2457 .mode = 0644,
2458 .proc_handler = &proc_dointvec_ms_jiffies, 2458 .proc_handler = &proc_dointvec_ms_jiffies,
2459 .strategy = &sysctl_ms_jiffies, 2459 .strategy = &sysctl_ms_jiffies,
2460 }, 2460 },
2461 { .ctl_name = 0 } 2461 { .ctl_name = 0 }