|
@@ -403,9 +403,8 @@ static void ip6gre_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|
|
return;
|
|
|
|
|
|
switch (type) {
|
|
|
- __u32 teli;
|
|
|
struct ipv6_tlv_tnl_enc_lim *tel;
|
|
|
- __u32 mtu;
|
|
|
+ __u32 teli;
|
|
|
case ICMPV6_DEST_UNREACH:
|
|
|
net_dbg_ratelimited("%s: Path to destination invalid or inactive!\n",
|
|
|
t->parms.name);
|
|
@@ -436,12 +435,7 @@ static void ip6gre_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|
|
}
|
|
|
return;
|
|
|
case ICMPV6_PKT_TOOBIG:
|
|
|
- mtu = be32_to_cpu(info) - offset - t->tun_hlen;
|
|
|
- if (t->dev->type == ARPHRD_ETHER)
|
|
|
- mtu -= ETH_HLEN;
|
|
|
- if (mtu < IPV6_MIN_MTU)
|
|
|
- mtu = IPV6_MIN_MTU;
|
|
|
- t->dev->mtu = mtu;
|
|
|
+ ip6_update_pmtu(skb, net, info, 0, 0, sock_net_uid(net, NULL));
|
|
|
return;
|
|
|
case NDISC_REDIRECT:
|
|
|
ip6_redirect(skb, net, skb->dev->ifindex, 0,
|
|
@@ -508,7 +502,6 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
|
|
|
__u32 *pmtu, __be16 proto)
|
|
|
{
|
|
|
struct ip6_tnl *tunnel = netdev_priv(dev);
|
|
|
- struct dst_entry *dst = skb_dst(skb);
|
|
|
__be16 protocol;
|
|
|
|
|
|
if (dev->type == ARPHRD_ETHER)
|
|
@@ -527,10 +520,6 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
|
|
|
gre_build_header(skb, tunnel->tun_hlen, tunnel->parms.o_flags,
|
|
|
protocol, tunnel->parms.o_key, htonl(tunnel->o_seqno));
|
|
|
|
|
|
- /* TooBig packet may have updated dst->dev's mtu */
|
|
|
- if (dst && dst_mtu(dst) > dst->dev->mtu)
|
|
|
- dst->ops->update_pmtu(dst, NULL, skb, dst->dev->mtu);
|
|
|
-
|
|
|
return ip6_tnl_xmit(skb, dev, dsfield, fl6, encap_limit, pmtu,
|
|
|
NEXTHDR_GRE);
|
|
|
}
|