|
@@ -279,6 +279,27 @@ static inline bool rt6_duplicate_nexthop(struct fib6_info *a, struct fib6_info *
|
|
|
!lwtunnel_cmp_encap(a->fib6_nh.nh_lwtstate, b->fib6_nh.nh_lwtstate);
|
|
|
}
|
|
|
|
|
|
+static inline unsigned int ip6_dst_mtu_forward(const struct dst_entry *dst)
|
|
|
+{
|
|
|
+ struct inet6_dev *idev;
|
|
|
+ unsigned int mtu;
|
|
|
+
|
|
|
+ if (dst_metric_locked(dst, RTAX_MTU)) {
|
|
|
+ mtu = dst_metric_raw(dst, RTAX_MTU);
|
|
|
+ if (mtu)
|
|
|
+ return mtu;
|
|
|
+ }
|
|
|
+
|
|
|
+ mtu = IPV6_MIN_MTU;
|
|
|
+ rcu_read_lock();
|
|
|
+ idev = __in6_dev_get(dst->dev);
|
|
|
+ if (idev)
|
|
|
+ mtu = idev->cnf.mtu6;
|
|
|
+ rcu_read_unlock();
|
|
|
+
|
|
|
+ return mtu;
|
|
|
+}
|
|
|
+
|
|
|
struct neighbour *ip6_neigh_lookup(const struct in6_addr *gw,
|
|
|
struct net_device *dev, struct sk_buff *skb,
|
|
|
const void *daddr);
|