Skip to content

Commit

Permalink
[IPV6]: Optimize hop-limit determination.
Browse files Browse the repository at this point in the history
Last part of hop-limit determination is always:
    hoplimit = dst_metric(dst, RTAX_HOPLIMIT);
    if (hoplimit < 0)
        hoplimit = ipv6_get_hoplimit(dst->dev).

Let's consolidate it as ip6_dst_hoplimit(dst).

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
  • Loading branch information
YOSHIFUJI Hideaki committed Mar 25, 2008
1 parent 4725474 commit 6b75d09
Show file tree
Hide file tree
Showing 8 changed files with 19 additions and 29 deletions.
2 changes: 0 additions & 2 deletions include/net/addrconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,6 @@ extern int ipv6_is_mld(struct sk_buff *skb, int nexthdr);

extern void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len);

extern int ipv6_get_hoplimit(struct net_device *dev);

/*
* anycast prototypes (anycast.c)
*/
Expand Down
2 changes: 2 additions & 0 deletions include/net/ip6_route.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ extern struct rt6_info *addrconf_dst_alloc(struct inet6_dev *idev,
const struct in6_addr *addr,
int anycast);

extern int ip6_dst_hoplimit(struct dst_entry *dst);

/*
* support functions for ND
*
Expand Down
8 changes: 2 additions & 6 deletions net/ipv6/icmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -464,9 +464,7 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info,
else
hlimit = np->hop_limit;
if (hlimit < 0)
hlimit = dst_metric(dst, RTAX_HOPLIMIT);
if (hlimit < 0)
hlimit = ipv6_get_hoplimit(dst->dev);
hlimit = ip6_dst_hoplimit(dst);

tclass = np->tclass;
if (tclass < 0)
Expand Down Expand Up @@ -560,9 +558,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
else
hlimit = np->hop_limit;
if (hlimit < 0)
hlimit = dst_metric(dst, RTAX_HOPLIMIT);
if (hlimit < 0)
hlimit = ipv6_get_hoplimit(dst->dev);
hlimit = ip6_dst_hoplimit(dst);

tclass = np->tclass;
if (tclass < 0)
Expand Down
4 changes: 1 addition & 3 deletions net/ipv6/ip6_output.c
Original file line number Diff line number Diff line change
Expand Up @@ -237,9 +237,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
if (np)
hlimit = np->hop_limit;
if (hlimit < 0)
hlimit = dst_metric(dst, RTAX_HOPLIMIT);
if (hlimit < 0)
hlimit = ipv6_get_hoplimit(dst->dev);
hlimit = ip6_dst_hoplimit(dst);

tclass = -1;
if (np)
Expand Down
4 changes: 1 addition & 3 deletions net/ipv6/ipv6_sockglue.c
Original file line number Diff line number Diff line change
Expand Up @@ -904,9 +904,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
dst = sk_dst_get(sk);
if (dst) {
if (val < 0)
val = dst_metric(dst, RTAX_HOPLIMIT);
if (val < 0)
val = ipv6_get_hoplimit(dst->dev);
val = ip6_dst_hoplimit(dst);
dst_release(dst);
}
if (val < 0)
Expand Down
4 changes: 1 addition & 3 deletions net/ipv6/raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -885,9 +885,7 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
else
hlimit = np->hop_limit;
if (hlimit < 0)
hlimit = dst_metric(dst, RTAX_HOPLIMIT);
if (hlimit < 0)
hlimit = ipv6_get_hoplimit(dst->dev);
hlimit = ip6_dst_hoplimit(dst);
}

if (tclass < 0) {
Expand Down
20 changes: 11 additions & 9 deletions net/ipv6/route.c
Original file line number Diff line number Diff line change
Expand Up @@ -1034,15 +1034,17 @@ static int ipv6_get_mtu(struct net_device *dev)
return mtu;
}

int ipv6_get_hoplimit(struct net_device *dev)
{
int hoplimit = ipv6_devconf.hop_limit;
struct inet6_dev *idev;

idev = in6_dev_get(dev);
if (idev) {
hoplimit = idev->cnf.hop_limit;
in6_dev_put(idev);
int ip6_dst_hoplimit(struct dst_entry *dst)
{
int hoplimit = dst_metric(dst, RTAX_HOPLIMIT);
if (hoplimit < 0) {
struct net_device *dev = dst->dev;
struct inet6_dev *idev = in6_dev_get(dev);
if (idev) {
hoplimit = idev->cnf.hop_limit;
in6_dev_put(idev);
} else
hoplimit = ipv6_devconf.hop_limit;
}
return hoplimit;
}
Expand Down
4 changes: 1 addition & 3 deletions net/ipv6/udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -792,9 +792,7 @@ int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk,
else
hlimit = np->hop_limit;
if (hlimit < 0)
hlimit = dst_metric(dst, RTAX_HOPLIMIT);
if (hlimit < 0)
hlimit = ipv6_get_hoplimit(dst->dev);
hlimit = ip6_dst_hoplimit(dst);
}

if (tclass < 0) {
Expand Down

0 comments on commit 6b75d09

Please sign in to comment.