ChangeSet 1.1982.148.15, 2005/03/03 14:38:44+09:00, [EMAIL PROTECTED]

        [IPV6] Ensure to use interface hoplimit by default.
        
        Signed-off-by: Hideaki YOSHIFUJI <[EMAIL PROTECTED]>



 include/net/addrconf.h |    2 ++
 net/ipv6/icmp.c        |    4 ++++
 net/ipv6/ip6_output.c  |    2 ++
 net/ipv6/ndisc.c       |    5 ++++-
 net/ipv6/raw.c         |    2 ++
 net/ipv6/route.c       |   15 ++++-----------
 net/ipv6/udp.c         |    2 ++
 7 files changed, 20 insertions(+), 12 deletions(-)


diff -Nru a/include/net/addrconf.h b/include/net/addrconf.h
--- a/include/net/addrconf.h    2005-03-12 20:46:28 -08:00
+++ b/include/net/addrconf.h    2005-03-12 20:46:28 -08:00
@@ -102,6 +102,8 @@
 
 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)
  */
diff -Nru a/net/ipv6/icmp.c b/net/ipv6/icmp.c
--- a/net/ipv6/icmp.c   2005-03-12 20:46:28 -08:00
+++ b/net/ipv6/icmp.c   2005-03-12 20:46:28 -08:00
@@ -381,6 +381,8 @@
                hlimit = np->hop_limit;
        if (hlimit < 0)
                hlimit = dst_metric(dst, RTAX_HOPLIMIT);
+       if (hlimit < 0)
+               hlimit = ipv6_get_hoplimit(dst->dev);
 
        msg.skb = skb;
        msg.offset = skb->nh.raw - skb->data;
@@ -467,6 +469,8 @@
                hlimit = np->hop_limit;
        if (hlimit < 0)
                hlimit = dst_metric(dst, RTAX_HOPLIMIT);
+       if (hlimit < 0)
+               hlimit = ipv6_get_hoplimit(dst->dev);
 
        idev = in6_dev_get(skb->dev);
 
diff -Nru a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
--- a/net/ipv6/ip6_output.c     2005-03-12 20:46:28 -08:00
+++ b/net/ipv6/ip6_output.c     2005-03-12 20:46:28 -08:00
@@ -253,6 +253,8 @@
                hlimit = np->hop_limit;
        if (hlimit < 0)
                hlimit = dst_metric(dst, RTAX_HOPLIMIT);
+       if (hlimit < 0)
+               hlimit = ipv6_get_hoplimit(dst->dev);
 
        hdr->payload_len = htons(seg_len);
        hdr->nexthdr = proto;
diff -Nru a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
--- a/net/ipv6/ndisc.c  2005-03-12 20:46:28 -08:00
+++ b/net/ipv6/ndisc.c  2005-03-12 20:46:28 -08:00
@@ -1128,8 +1128,11 @@
        if (rt)
                rt->rt6i_expires = jiffies + (HZ * lifetime);
 
-       if (ra_msg->icmph.icmp6_hop_limit)
+       if (ra_msg->icmph.icmp6_hop_limit) {
                in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit;
+               if (rt)
+                       rt->u.dst.metrics[RTAX_HOPLIMIT-1] = 
ra_msg->icmph.icmp6_hop_limit;
+       }
 
        /*
         *      Update Reachable Time and Retrans Timer
diff -Nru a/net/ipv6/raw.c b/net/ipv6/raw.c
--- a/net/ipv6/raw.c    2005-03-12 20:46:28 -08:00
+++ b/net/ipv6/raw.c    2005-03-12 20:46:28 -08:00
@@ -756,6 +756,8 @@
                        hlimit = np->hop_limit;
                if (hlimit < 0)
                        hlimit = dst_metric(dst, RTAX_HOPLIMIT);
+               if (hlimit < 0)
+                       hlimit = ipv6_get_hoplimit(dst->dev);
        }
 
        if (msg->msg_flags&MSG_CONFIRM)
diff -Nru a/net/ipv6/route.c b/net/ipv6/route.c
--- a/net/ipv6/route.c  2005-03-12 20:46:28 -08:00
+++ b/net/ipv6/route.c  2005-03-12 20:46:28 -08:00
@@ -771,7 +771,7 @@
        return mtu;
 }
 
-static int ipv6_get_hoplimit(struct net_device *dev)
+int ipv6_get_hoplimit(struct net_device *dev)
 {
        int hoplimit = ipv6_devconf.hop_limit;
        struct inet6_dev *idev;
@@ -967,15 +967,8 @@
                }
        }
 
-       if (rt->u.dst.metrics[RTAX_HOPLIMIT-1] == 0) {
-               if (ipv6_addr_is_multicast(&rt->rt6i_dst.addr))
-                       rt->u.dst.metrics[RTAX_HOPLIMIT-1] =
-                               IPV6_DEFAULT_MCASTHOPS;
-               else
-                       rt->u.dst.metrics[RTAX_HOPLIMIT-1] =
-                               ipv6_get_hoplimit(dev);
-       }
-
+       if (rt->u.dst.metrics[RTAX_HOPLIMIT-1] == 0)
+               rt->u.dst.metrics[RTAX_HOPLIMIT-1] = -1;
        if (!rt->u.dst.metrics[RTAX_MTU-1])
                rt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(dev);
        if (!rt->u.dst.metrics[RTAX_ADVMSS-1])
@@ -1414,7 +1407,7 @@
        rt->rt6i_idev = idev;
        rt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(rt->rt6i_dev);
        rt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(dst_pmtu(&rt->u.dst));
-       rt->u.dst.metrics[RTAX_HOPLIMIT-1] = ipv6_get_hoplimit(rt->rt6i_dev);
+       rt->u.dst.metrics[RTAX_HOPLIMIT-1] = -1;
        rt->u.dst.obsolete = -1;
 
        rt->rt6i_flags = RTF_UP | RTF_NONEXTHOP;
diff -Nru a/net/ipv6/udp.c b/net/ipv6/udp.c
--- a/net/ipv6/udp.c    2005-03-12 20:46:28 -08:00
+++ b/net/ipv6/udp.c    2005-03-12 20:46:28 -08:00
@@ -811,6 +811,8 @@
                        hlimit = np->hop_limit;
                if (hlimit < 0)
                        hlimit = dst_metric(dst, RTAX_HOPLIMIT);
+               if (hlimit < 0)
+                       hlimit = ipv6_get_hoplimit(dst->dev);
        }
 
        if (msg->msg_flags&MSG_CONFIRM)
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to