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

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


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;
                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.