]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/ipv6/output_core.c
ipv6: move ip6_dst_hoplimit() into core kernel
[karo-tx-linux.git] / net / ipv6 / output_core.c
index ab92a3673fbbddd9f3d32b69730c3b1b61fbcbde..53a062187db1a4c00df818de6029a40346d337aa 100644 (file)
@@ -5,6 +5,7 @@
 #include <linux/export.h>
 #include <net/ipv6.h>
 #include <net/ip6_fib.h>
 #include <linux/export.h>
 #include <net/ipv6.h>
 #include <net/ip6_fib.h>
+#include <net/addrconf.h>
 
 void ipv6_select_ident(struct frag_hdr *fhdr, struct rt6_info *rt)
 {
 
 void ipv6_select_ident(struct frag_hdr *fhdr, struct rt6_info *rt)
 {
@@ -75,3 +76,24 @@ int ip6_find_1stfragopt(struct sk_buff *skb, u8 **nexthdr)
        return offset;
 }
 EXPORT_SYMBOL(ip6_find_1stfragopt);
        return offset;
 }
 EXPORT_SYMBOL(ip6_find_1stfragopt);
+
+#if IS_ENABLED(CONFIG_IPV6)
+int ip6_dst_hoplimit(struct dst_entry *dst)
+{
+       int hoplimit = dst_metric_raw(dst, RTAX_HOPLIMIT);
+       if (hoplimit == 0) {
+               struct net_device *dev = dst->dev;
+               struct inet6_dev *idev;
+
+               rcu_read_lock();
+               idev = __in6_dev_get(dev);
+               if (idev)
+                       hoplimit = idev->cnf.hop_limit;
+               else
+                       hoplimit = dev_net(dev)->ipv6.devconf_all->hop_limit;
+               rcu_read_unlock();
+       }
+       return hoplimit;
+}
+EXPORT_SYMBOL(ip6_dst_hoplimit);
+#endif