From: Vicente Jimenez Aguilar <goo...@gmail.com>
Date: Fri, 11 Nov 2016 21:20:18 +0100

> @@ -819,6 +820,12 @@ static bool icmp_unreach(struct sk_buff *skb)
>                               /* fall through */
>                       case 0:
>                               info = ntohs(icmph->un.frag.mtu);
> +                             /* Handle weird case where next hop MTU is
> +                              * equal to or exceeding dropped packet size
> +                              */
> +                             old_mtu = ntohs(iph->tot_len);
> +                             if (info >= old_mtu)
> +                                     info = old_mtu - 2;

This isn't something the old code did.

The old code behaved much differently.

In the case where the new mtu was smaller than 68 or larger than
the iph->tot_len value, it would do several things:

1) First it would check for a BSD 4.2 anomaly and subtract old_mtu
   by the IP header length.

2) Second, it would try to guess the intended MTU using the
   mtu_plateau table.

I don't see any code where a subtraction by a fixed constant of 2
occurred.

Nor can I figure out what that might accomplish.  If you really
want to do this, you have to docuement what this 2 means, what
it is accomplishing, and why you have choosen to accomplish it
this way.

Thanks.

Reply via email to