提交 5170ae82 编写于 作者: D David S. Miller

net: Abstract RTAX_HOPLIMIT metric accesses behind helper.

Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 abbf46ae
...@@ -277,7 +277,7 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb) ...@@ -277,7 +277,7 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
iph->tos = 0; iph->tos = 0;
iph->daddr = rt->rt_dst; iph->daddr = rt->rt_dst;
iph->saddr = rt->rt_src; 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); iph->tot_len = htons(skb->len);
skb_dst_drop(skb); skb_dst_drop(skb);
......
...@@ -104,11 +104,24 @@ struct dst_entry { ...@@ -104,11 +104,24 @@ struct dst_entry {
#ifdef __KERNEL__ #ifdef __KERNEL__
static inline u32 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]; 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) static inline void dst_metric_set(struct dst_entry *dst, int metric, u32 val)
{ {
dst->_metrics[metric-1] = val; dst->_metrics[metric-1] = val;
......
...@@ -890,7 +890,7 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev ...@@ -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; iph->ttl = ((struct ipv6hdr *)old_iph)->hop_limit;
#endif #endif
else else
iph->ttl = dst_metric(&rt->dst, RTAX_HOPLIMIT); iph->ttl = dst_metric_hoplimit(&rt->dst);
} }
((__be16 *)(iph + 1))[0] = tunnel->parms.o_flags; ((__be16 *)(iph + 1))[0] = tunnel->parms.o_flags;
......
...@@ -130,7 +130,7 @@ static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst) ...@@ -130,7 +130,7 @@ static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst)
int ttl = inet->uc_ttl; int ttl = inet->uc_ttl;
if (ttl < 0) if (ttl < 0)
ttl = dst_metric(dst, RTAX_HOPLIMIT); ttl = dst_metric_hoplimit(dst);
return ttl; return ttl;
} }
......
...@@ -116,7 +116,7 @@ static void send_reset(struct sk_buff *oldskb, int hook) ...@@ -116,7 +116,7 @@ static void send_reset(struct sk_buff *oldskb, int hook)
if (ip_route_me_harder(nskb, addr_type)) if (ip_route_me_harder(nskb, addr_type))
goto free_nskb; goto free_nskb;
niph->ttl = dst_metric(skb_dst(nskb), RTAX_HOPLIMIT); niph->ttl = dst_metric_hoplimit(skb_dst(nskb));
/* "Never happens" */ /* "Never happens" */
if (nskb->len > dst_mtu(skb_dst(nskb))) if (nskb->len > dst_mtu(skb_dst(nskb)))
......
...@@ -1821,7 +1821,7 @@ static void rt_set_nexthop(struct rtable *rt, struct fib_result *res, u32 itag) ...@@ -1821,7 +1821,7 @@ static void rt_set_nexthop(struct rtable *rt, struct fib_result *res, u32 itag)
} else } else
dst_metric_set(dst, RTAX_MTU, dst->dev->mtu); 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); dst_metric_set(dst, RTAX_HOPLIMIT, sysctl_ip_default_ttl);
if (dst_mtu(dst) > IP_MAX_MTU) if (dst_mtu(dst) > IP_MAX_MTU)
dst_metric_set(dst, RTAX_MTU, IP_MAX_MTU); dst_metric_set(dst, RTAX_MTU, IP_MAX_MTU);
......
...@@ -56,7 +56,7 @@ static int xfrm4_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) ...@@ -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)); 0 : (XFRM_MODE_SKB_CB(skb)->frag_off & htons(IP_DF));
ip_select_ident(top_iph, dst->child, NULL); 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->saddr = x->props.saddr.a4;
top_iph->daddr = x->id.daddr.a4; top_iph->daddr = x->id.daddr.a4;
......
...@@ -1104,7 +1104,7 @@ static int ipv6_get_mtu(struct net_device *dev) ...@@ -1104,7 +1104,7 @@ static int ipv6_get_mtu(struct net_device *dev)
int ip6_dst_hoplimit(struct dst_entry *dst) 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) { if (hoplimit < 0) {
struct net_device *dev = dst->dev; struct net_device *dev = dst->dev;
struct inet6_dev *idev; struct inet6_dev *idev;
...@@ -1310,7 +1310,7 @@ int ip6_route_add(struct fib6_config *cfg) ...@@ -1310,7 +1310,7 @@ int ip6_route_add(struct fib6_config *cfg)
} }
} }
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); dst_metric_set(&rt->dst, RTAX_HOPLIMIT, -1);
if (!dst_mtu(&rt->dst)) if (!dst_mtu(&rt->dst))
dst_metric_set(&rt->dst, RTAX_MTU, ipv6_get_mtu(dev)); dst_metric_set(&rt->dst, RTAX_MTU, ipv6_get_mtu(dev));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册