diff options
author | David S. Miller <davem@davemloft.net> | 2010-12-13 00:55:08 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-12-13 01:08:17 -0500 |
commit | 323e126f0c5995f779d7df7fd035f6e8fed8764d (patch) | |
tree | 402c7267a45ae488363bb1ef8e4c786b65b82572 /net/ipv4 | |
parent | a02e4b7dae455151c423e2f69ef222c502a321fd (diff) |
ipv4: Don't pre-seed hoplimit metric.
Always go through a new ip4_dst_hoplimit() helper, just like ipv6.
This allowed several simplifications:
1) The interim dst_metric_hoplimit() can go as it's no longer
userd.
2) The sysctl_ip_default_ttl entry no longer needs to use
ipv4_doint_and_flush, since the sysctl is not cached in
routing cache metrics any longer.
3) ipv4_doint_and_flush no longer needs to be exported and
therefore can be marked static.
When ipv4_doint_and_flush_strategy was removed some time ago,
the external declaration in ip.h was mistakenly left around
so kill that off too.
We have to move the sysctl_ip_default_ttl declaration into
ipv4's route cache definition header net/route.h, because
currently net/ip.h (where the declaration lives now) has
a back dependency on net/route.h
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/devinet.c | 6 | ||||
-rw-r--r-- | net/ipv4/ip_gre.c | 2 | ||||
-rw-r--r-- | net/ipv4/ip_output.c | 3 | ||||
-rw-r--r-- | net/ipv4/netfilter/ipt_REJECT.c | 2 | ||||
-rw-r--r-- | net/ipv4/route.c | 2 | ||||
-rw-r--r-- | net/ipv4/sysctl_net_ipv4.c | 2 | ||||
-rw-r--r-- | net/ipv4/xfrm4_mode_tunnel.c | 2 |
7 files changed, 9 insertions, 10 deletions
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 3b067704ab38..748cb5b337bd 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
@@ -1430,9 +1430,9 @@ static int devinet_sysctl_forward(ctl_table *ctl, int write, | |||
1430 | return ret; | 1430 | return ret; |
1431 | } | 1431 | } |
1432 | 1432 | ||
1433 | int ipv4_doint_and_flush(ctl_table *ctl, int write, | 1433 | static int ipv4_doint_and_flush(ctl_table *ctl, int write, |
1434 | void __user *buffer, | 1434 | void __user *buffer, |
1435 | size_t *lenp, loff_t *ppos) | 1435 | size_t *lenp, loff_t *ppos) |
1436 | { | 1436 | { |
1437 | int *valp = ctl->data; | 1437 | int *valp = ctl->data; |
1438 | int val = *valp; | 1438 | int val = *valp; |
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 46eb3dc37ec6..eb68a0e34e49 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c | |||
@@ -890,7 +890,7 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev | |||
890 | iph->ttl = ((struct ipv6hdr *)old_iph)->hop_limit; | 890 | iph->ttl = ((struct ipv6hdr *)old_iph)->hop_limit; |
891 | #endif | 891 | #endif |
892 | else | 892 | else |
893 | iph->ttl = dst_metric_hoplimit(&rt->dst); | 893 | iph->ttl = ip4_dst_hoplimit(&rt->dst); |
894 | } | 894 | } |
895 | 895 | ||
896 | ((__be16 *)(iph + 1))[0] = tunnel->parms.o_flags; | 896 | ((__be16 *)(iph + 1))[0] = tunnel->parms.o_flags; |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index ea28fa5f1992..04c7b3ba6b39 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -82,6 +82,7 @@ | |||
82 | #include <linux/tcp.h> | 82 | #include <linux/tcp.h> |
83 | 83 | ||
84 | int sysctl_ip_default_ttl __read_mostly = IPDEFTTL; | 84 | int sysctl_ip_default_ttl __read_mostly = IPDEFTTL; |
85 | EXPORT_SYMBOL(sysctl_ip_default_ttl); | ||
85 | 86 | ||
86 | /* Generate a checksum for an outgoing IP datagram. */ | 87 | /* Generate a checksum for an outgoing IP datagram. */ |
87 | __inline__ void ip_send_check(struct iphdr *iph) | 88 | __inline__ void ip_send_check(struct iphdr *iph) |
@@ -130,7 +131,7 @@ static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst) | |||
130 | int ttl = inet->uc_ttl; | 131 | int ttl = inet->uc_ttl; |
131 | 132 | ||
132 | if (ttl < 0) | 133 | if (ttl < 0) |
133 | ttl = dst_metric_hoplimit(dst); | 134 | ttl = ip4_dst_hoplimit(dst); |
134 | return ttl; | 135 | return ttl; |
135 | } | 136 | } |
136 | 137 | ||
diff --git a/net/ipv4/netfilter/ipt_REJECT.c b/net/ipv4/netfilter/ipt_REJECT.c index f1309072c541..1ff79e557f96 100644 --- a/net/ipv4/netfilter/ipt_REJECT.c +++ b/net/ipv4/netfilter/ipt_REJECT.c | |||
@@ -116,7 +116,7 @@ static void send_reset(struct sk_buff *oldskb, int hook) | |||
116 | if (ip_route_me_harder(nskb, addr_type)) | 116 | if (ip_route_me_harder(nskb, addr_type)) |
117 | goto free_nskb; | 117 | goto free_nskb; |
118 | 118 | ||
119 | niph->ttl = dst_metric_hoplimit(skb_dst(nskb)); | 119 | niph->ttl = ip4_dst_hoplimit(skb_dst(nskb)); |
120 | 120 | ||
121 | /* "Never happens" */ | 121 | /* "Never happens" */ |
122 | if (nskb->len > dst_mtu(skb_dst(nskb))) | 122 | if (nskb->len > dst_mtu(skb_dst(nskb))) |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 90b5a37555ab..770f70427f0b 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -1821,8 +1821,6 @@ static void rt_set_nexthop(struct rtable *rt, struct fib_result *res, u32 itag) | |||
1821 | } else | 1821 | } else |
1822 | dst_metric_set(dst, RTAX_MTU, dst->dev->mtu); | 1822 | dst_metric_set(dst, RTAX_MTU, dst->dev->mtu); |
1823 | 1823 | ||
1824 | if (dst_metric_raw(dst, RTAX_HOPLIMIT) == 0) | ||
1825 | dst_metric_set(dst, RTAX_HOPLIMIT, sysctl_ip_default_ttl); | ||
1826 | if (dst_mtu(dst) > IP_MAX_MTU) | 1824 | if (dst_mtu(dst) > IP_MAX_MTU) |
1827 | dst_metric_set(dst, RTAX_MTU, IP_MAX_MTU); | 1825 | dst_metric_set(dst, RTAX_MTU, IP_MAX_MTU); |
1828 | if (dst_metric(dst, RTAX_ADVMSS) == 0) | 1826 | if (dst_metric(dst, RTAX_ADVMSS) == 0) |
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 1b4ec21497a4..e85ff5930607 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c | |||
@@ -155,7 +155,7 @@ static struct ctl_table ipv4_table[] = { | |||
155 | .data = &sysctl_ip_default_ttl, | 155 | .data = &sysctl_ip_default_ttl, |
156 | .maxlen = sizeof(int), | 156 | .maxlen = sizeof(int), |
157 | .mode = 0644, | 157 | .mode = 0644, |
158 | .proc_handler = ipv4_doint_and_flush, | 158 | .proc_handler = proc_dointvec, |
159 | .extra2 = &init_net, | 159 | .extra2 = &init_net, |
160 | }, | 160 | }, |
161 | { | 161 | { |
diff --git a/net/ipv4/xfrm4_mode_tunnel.c b/net/ipv4/xfrm4_mode_tunnel.c index 63b854e74d99..534972e114ac 100644 --- a/net/ipv4/xfrm4_mode_tunnel.c +++ b/net/ipv4/xfrm4_mode_tunnel.c | |||
@@ -56,7 +56,7 @@ static int xfrm4_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) | |||
56 | 0 : (XFRM_MODE_SKB_CB(skb)->frag_off & htons(IP_DF)); | 56 | 0 : (XFRM_MODE_SKB_CB(skb)->frag_off & htons(IP_DF)); |
57 | ip_select_ident(top_iph, dst->child, NULL); | 57 | ip_select_ident(top_iph, dst->child, NULL); |
58 | 58 | ||
59 | top_iph->ttl = dst_metric_hoplimit(dst->child); | 59 | top_iph->ttl = ip4_dst_hoplimit(dst->child); |
60 | 60 | ||
61 | top_iph->saddr = x->props.saddr.a4; | 61 | top_iph->saddr = x->props.saddr.a4; |
62 | top_iph->daddr = x->id.daddr.a4; | 62 | top_iph->daddr = x->id.daddr.a4; |