aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-12-13 00:35:57 -0500
committerDavid S. Miller <davem@davemloft.net>2010-12-13 00:35:57 -0500
commit5170ae824ddf1988a63fb12cbedcff817634c444 (patch)
tree9f1619ca6edd0e8078bfcd9d6123e119b935e43b
parentabbf46ae0e4954584eac599bec73502c1c805e9e (diff)
net: Abstract RTAX_HOPLIMIT metric accesses behind helper.
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/pptp.c2
-rw-r--r--include/net/dst.h15
-rw-r--r--net/ipv4/ip_gre.c2
-rw-r--r--net/ipv4/ip_output.c2
-rw-r--r--net/ipv4/netfilter/ipt_REJECT.c2
-rw-r--r--net/ipv4/route.c2
-rw-r--r--net/ipv4/xfrm4_mode_tunnel.c2
-rw-r--r--net/ipv6/route.c4
8 files changed, 22 insertions, 9 deletions
diff --git a/drivers/net/pptp.c b/drivers/net/pptp.c
index 7556a9224f72..c83e168eef21 100644
--- a/drivers/net/pptp.c
+++ b/drivers/net/pptp.c
@@ -277,7 +277,7 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
277 iph->tos = 0; 277 iph->tos = 0;
278 iph->daddr = rt->rt_dst; 278 iph->daddr = rt->rt_dst;
279 iph->saddr = rt->rt_src; 279 iph->saddr = rt->rt_src;
280 iph->ttl = dst_metric(&rt->dst, RTAX_HOPLIMIT); 280 iph->ttl = dst_metric_hoplimit(&rt->dst);
281 iph->tot_len = htons(skb->len); 281 iph->tot_len = htons(skb->len);
282 282
283 skb_dst_drop(skb); 283 skb_dst_drop(skb);
diff --git a/include/net/dst.h b/include/net/dst.h
index 85dee3a57b9b..9208b500aaaf 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -104,11 +104,24 @@ struct dst_entry {
104#ifdef __KERNEL__ 104#ifdef __KERNEL__
105 105
106static inline u32 106static inline u32
107dst_metric(const struct dst_entry *dst, int metric) 107dst_metric_raw(const struct dst_entry *dst, const int metric)
108{ 108{
109 return dst->_metrics[metric-1]; 109 return dst->_metrics[metric-1];
110} 110}
111 111
112static inline u32
113dst_metric(const struct dst_entry *dst, const int metric)
114{
115 WARN_ON_ONCE(metric == RTAX_HOPLIMIT);
116 return dst_metric_raw(dst, metric);
117}
118
119static inline u32
120dst_metric_hoplimit(const struct dst_entry *dst)
121{
122 return dst_metric_raw(dst, RTAX_HOPLIMIT);
123}
124
112static inline void dst_metric_set(struct dst_entry *dst, int metric, u32 val) 125static inline void dst_metric_set(struct dst_entry *dst, int metric, u32 val)
113{ 126{
114 dst->_metrics[metric-1] = val; 127 dst->_metrics[metric-1] = val;
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index ff4e7a4e33ed..46eb3dc37ec6 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(&rt->dst, RTAX_HOPLIMIT); 893 iph->ttl = dst_metric_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 5090c7ff525e..ea28fa5f1992 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -130,7 +130,7 @@ static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst)
130 int ttl = inet->uc_ttl; 130 int ttl = inet->uc_ttl;
131 131
132 if (ttl < 0) 132 if (ttl < 0)
133 ttl = dst_metric(dst, RTAX_HOPLIMIT); 133 ttl = dst_metric_hoplimit(dst);
134 return ttl; 134 return ttl;
135} 135}
136 136
diff --git a/net/ipv4/netfilter/ipt_REJECT.c b/net/ipv4/netfilter/ipt_REJECT.c
index 43eec80c0e7c..f1309072c541 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(skb_dst(nskb), RTAX_HOPLIMIT); 119 niph->ttl = dst_metric_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 26ac396eaa5e..90b5a37555ab 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1821,7 +1821,7 @@ 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(dst, RTAX_HOPLIMIT) == 0) 1824 if (dst_metric_raw(dst, RTAX_HOPLIMIT) == 0)
1825 dst_metric_set(dst, RTAX_HOPLIMIT, sysctl_ip_default_ttl); 1825 dst_metric_set(dst, RTAX_HOPLIMIT, sysctl_ip_default_ttl);
1826 if (dst_mtu(dst) > IP_MAX_MTU) 1826 if (dst_mtu(dst) > IP_MAX_MTU)
1827 dst_metric_set(dst, RTAX_MTU, IP_MAX_MTU); 1827 dst_metric_set(dst, RTAX_MTU, IP_MAX_MTU);
diff --git a/net/ipv4/xfrm4_mode_tunnel.c b/net/ipv4/xfrm4_mode_tunnel.c
index 6f368413eb0e..63b854e74d99 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(dst->child, RTAX_HOPLIMIT); 59 top_iph->ttl = dst_metric_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;
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 9b2d7bc7beda..d9405d1863b8 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -1104,7 +1104,7 @@ static int ipv6_get_mtu(struct net_device *dev)
1104 1104
1105int ip6_dst_hoplimit(struct dst_entry *dst) 1105int ip6_dst_hoplimit(struct dst_entry *dst)
1106{ 1106{
1107 int hoplimit = dst_metric(dst, RTAX_HOPLIMIT); 1107 int hoplimit = dst_metric_raw(dst, RTAX_HOPLIMIT);
1108 if (hoplimit < 0) { 1108 if (hoplimit < 0) {
1109 struct net_device *dev = dst->dev; 1109 struct net_device *dev = dst->dev;
1110 struct inet6_dev *idev; 1110 struct inet6_dev *idev;
@@ -1310,7 +1310,7 @@ install_route:
1310 } 1310 }
1311 } 1311 }
1312 1312
1313 if (dst_metric(&rt->dst, RTAX_HOPLIMIT) == 0) 1313 if (dst_metric_raw(&rt->dst, RTAX_HOPLIMIT) == 0)
1314 dst_metric_set(&rt->dst, RTAX_HOPLIMIT, -1); 1314 dst_metric_set(&rt->dst, RTAX_HOPLIMIT, -1);
1315 if (!dst_mtu(&rt->dst)) 1315 if (!dst_mtu(&rt->dst))
1316 dst_metric_set(&rt->dst, RTAX_MTU, ipv6_get_mtu(dev)); 1316 dst_metric_set(&rt->dst, RTAX_MTU, ipv6_get_mtu(dev));