[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: system/1878: MTU problem when sending mail using postfix



Hi,

your fix is not complete.

tcp_mtudisc() just fixes up the TCP segment size based on interface MTU
and route MTU.

You forgot about the part in ip_output(),  this is the corresponding
code snip from FreeBSD:


        /*
         * Too large for interface; fragment if possible.
         * Must be able to put at least 8 bytes per fragment.
         */
        if (ip->ip_off & IP_DF) {
                error = EMSGSIZE;
                /*
                 * This case can happen if the user changed the MTU
                 * of an interface after enabling IP on it.  Because
                 * most netifs don't keep track of routes pointing to
                 * them, there is no way for one to update all its
                 * routes when the MTU is changed.
                 */
                if ((ro->ro_rt->rt_flags & (RTF_UP | RTF_HOST))
                    && !(ro->ro_rt->rt_rmx.rmx_locks & RTV_MTU)
                    && (ro->ro_rt->rt_rmx.rmx_mtu > ifp->if_mtu)) {
                        ro->ro_rt->rt_rmx.rmx_mtu = ifp->if_mtu;
                }
                ipstat.ips_cantfrag++;
                goto bad;
        }

Please, test with this code.  I am surprised that it worked at all
for you.  The diff that you submitted would cause tcp_output()
to loop.

Niels.