net: Abstract RTAX_HOPLIMIT metric accesses behind helper.
authorDavid S. Miller <davem@davemloft.net>
Mon, 13 Dec 2010 05:35:57 +0000 (21:35 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 13 Dec 2010 05:35:57 +0000 (21:35 -0800)
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/pptp.c
include/net/dst.h
net/ipv4/ip_gre.c
net/ipv4/ip_output.c
net/ipv4/netfilter/ipt_REJECT.c
net/ipv4/route.c
net/ipv4/xfrm4_mode_tunnel.c
net/ipv6/route.c

index 7556a9224f725757c0f35d4e108ee3bd684734a8..c83e168eef21fb31fba51f859601ade0230e4a35 100644 (file)
@@ -277,7 +277,7 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
        iph->tos      = 0;
        iph->daddr    = rt->rt_dst;
        iph->saddr    = rt->rt_src;
-       iph->ttl      = dst_metric(&rt->dst, RTAX_HOPLIMIT);
+       iph->ttl      = dst_metric_hoplimit(&rt->dst);
        iph->tot_len  = htons(skb->len);
 
        skb_dst_drop(skb);
index 85dee3a57b9b464afceb8c02baf1d9e55da918ad..9208b500aaafb8e93f3e60e4cdf5ea4bb9475b8b 100644 (file)
@@ -104,11 +104,24 @@ struct dst_entry {
 #ifdef __KERNEL__
 
 static inline u32
-dst_metric(const struct dst_entry *dst, int metric)
+dst_metric_raw(const struct dst_entry *dst, const int metric)
 {
        return dst->_metrics[metric-1];
 }
 
+static inline u32
+dst_metric(const struct dst_entry *dst, const int metric)
+{
+       WARN_ON_ONCE(metric == RTAX_HOPLIMIT);
+       return dst_metric_raw(dst, metric);
+}
+
+static inline u32
+dst_metric_hoplimit(const struct dst_entry *dst)
+{
+       return dst_metric_raw(dst, RTAX_HOPLIMIT);
+}
+
 static inline void dst_metric_set(struct dst_entry *dst, int metric, u32 val)
 {
        dst->_metrics[metric-1] = val;
index ff4e7a4e33ed21896c872a45a210b440e7f3c9bf..46eb3dc37ec625a966ed234f0867f37dda50db86 100644 (file)
@@ -890,7 +890,7 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev
                        iph->ttl = ((struct ipv6hdr *)old_iph)->hop_limit;
 #endif
                else
-                       iph->ttl = dst_metric(&rt->dst, RTAX_HOPLIMIT);
+                       iph->ttl = dst_metric_hoplimit(&rt->dst);
        }
 
        ((__be16 *)(iph + 1))[0] = tunnel->parms.o_flags;
index 5090c7ff525e7d202c08d2e727f9dc1d815121c8..ea28fa5f19921671a7282bb03fce1945d5e410ac 100644 (file)
@@ -130,7 +130,7 @@ static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst)
        int ttl = inet->uc_ttl;
 
        if (ttl < 0)
-               ttl = dst_metric(dst, RTAX_HOPLIMIT);
+               ttl = dst_metric_hoplimit(dst);
        return ttl;
 }
 
index 43eec80c0e7c55a2f6dc20790a30603236b7d93f..f1309072c54172cbbe9baf384e7b84a79966f21d 100644 (file)
@@ -116,7 +116,7 @@ static void send_reset(struct sk_buff *oldskb, int hook)
        if (ip_route_me_harder(nskb, addr_type))
                goto free_nskb;
 
-       niph->ttl       = dst_metric(skb_dst(nskb), RTAX_HOPLIMIT);
+       niph->ttl       = dst_metric_hoplimit(skb_dst(nskb));
 
        /* "Never happens" */
        if (nskb->len > dst_mtu(skb_dst(nskb)))
index 26ac396eaa5ef0bdd20fadc9997b3391fdb81849..90b5a37555ab2bac2b4b1fda2875cb1c9cddc9e9 100644 (file)
@@ -1821,7 +1821,7 @@ static void rt_set_nexthop(struct rtable *rt, struct fib_result *res, u32 itag)
        } else
                dst_metric_set(dst, RTAX_MTU, dst->dev->mtu);
 
-       if (dst_metric(dst, RTAX_HOPLIMIT) == 0)
+       if (dst_metric_raw(dst, RTAX_HOPLIMIT) == 0)
                dst_metric_set(dst, RTAX_HOPLIMIT, sysctl_ip_default_ttl);
        if (dst_mtu(dst) > IP_MAX_MTU)
                dst_metric_set(dst, RTAX_MTU, IP_MAX_MTU);
index 6f368413eb0e6b35bdb4500f175372809f43a18d..63b854e74d99e82184bbf0a433329cf3ff8088d8 100644 (file)
@@ -56,7 +56,7 @@ static int xfrm4_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
                0 : (XFRM_MODE_SKB_CB(skb)->frag_off & htons(IP_DF));
        ip_select_ident(top_iph, dst->child, NULL);
 
-       top_iph->ttl = dst_metric(dst->child, RTAX_HOPLIMIT);
+       top_iph->ttl = dst_metric_hoplimit(dst->child);
 
        top_iph->saddr = x->props.saddr.a4;
        top_iph->daddr = x->id.daddr.a4;
index 9b2d7bc7beda4679ffd2a64e911d6c69ad9a2b4e..d9405d1863b8871ebe5881561c136de06a942189 100644 (file)
@@ -1104,7 +1104,7 @@ static int ipv6_get_mtu(struct net_device *dev)
 
 int ip6_dst_hoplimit(struct dst_entry *dst)
 {
-       int hoplimit = dst_metric(dst, RTAX_HOPLIMIT);
+       int hoplimit = dst_metric_raw(dst, RTAX_HOPLIMIT);
        if (hoplimit < 0) {
                struct net_device *dev = dst->dev;
                struct inet6_dev *idev;
@@ -1310,7 +1310,7 @@ install_route:
                }
        }
 
-       if (dst_metric(&rt->dst, RTAX_HOPLIMIT) == 0)
+       if (dst_metric_raw(&rt->dst, RTAX_HOPLIMIT) == 0)
                dst_metric_set(&rt->dst, RTAX_HOPLIMIT, -1);
        if (!dst_mtu(&rt->dst))
                dst_metric_set(&rt->dst, RTAX_MTU, ipv6_get_mtu(dev));