From owner-freebsd-hackers Thu Mar 6 10:15:43 1997 Return-Path: Received: (from root@localhost) by freefall.freebsd.org (8.8.5/8.8.5) id KAA02172 for hackers-outgoing; Thu, 6 Mar 1997 10:15:43 -0800 (PST) Received: from godzilla.zeta.org.au (godzilla.zeta.org.au [203.2.228.19]) by freefall.freebsd.org (8.8.5/8.8.5) with ESMTP id KAA02166 for ; Thu, 6 Mar 1997 10:15:40 -0800 (PST) Received: (from bde@localhost) by godzilla.zeta.org.au (8.8.3/8.6.9) id FAA12675; Fri, 7 Mar 1997 05:11:20 +1100 Date: Fri, 7 Mar 1997 05:11:20 +1100 From: Bruce Evans Message-Id: <199703061811.FAA12675@godzilla.zeta.org.au> To: hackers@FreeBSD.ORG, jkh@time.cdrom.com Subject: Re: Weirdie with SLIP line seen here too... Sender: owner-hackers@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk >Strange, now I'm seeing that magic "bit pattern-o-death" that >guarantees that the download of a given file over a slip line will >always hang in a given place. See if any of you fellow sufferers can >download the following file: > > ftp://freefall.freebsd.org/pub/jkh/badbits > >If not, we may be onto something which could enable more reasonable >failure analysis to take place. Oops. I made the clist limit too small by a factor of 2 (special characters like the ones in "badbits" get expanded by a factor of 2). This problem only affects the sender. The problem was rare because the limit had 0-254 bytes of slop, depending on the mtu and the buffer state. The default mtu of 552 had 48-175 bytes of slop depending on the buffer state. An mtu of 352 works for "badbits" for some reason. Try this fix. Bruce diff -c2 if_sl.c~ if_sl.c *** if_sl.c~ Mon Feb 24 00:37:09 1997 --- if_sl.c Fri Mar 7 04:46:33 1997 *************** *** 298,303 **** clist_alloc_cblocks(&tp->t_canq, 0, 0); clist_alloc_cblocks(&tp->t_outq, ! sc->sc_if.if_mtu + SLIP_HIWAT, ! sc->sc_if.if_mtu + SLIP_HIWAT); clist_alloc_cblocks(&tp->t_rawq, 0, 0); --- 295,300 ---- clist_alloc_cblocks(&tp->t_canq, 0, 0); clist_alloc_cblocks(&tp->t_outq, ! SLIP_HIWAT + 2 * sc->sc_if.if_mtu + 1, ! SLIP_HIWAT + 2 * sc->sc_if.if_mtu + 1); clist_alloc_cblocks(&tp->t_rawq, 0, 0); *************** *** 974,979 **** if (tp != NULL) clist_alloc_cblocks(&tp->t_outq, ! ifp->if_mtu + SLIP_HIWAT, ! ifp->if_mtu + SLIP_HIWAT); } break; --- 971,976 ---- if (tp != NULL) clist_alloc_cblocks(&tp->t_outq, ! SLIP_HIWAT + 2 * ifp->if_mtu + 1, ! SLIP_HIWAT + 2 * ifp->if_mtu + 1); } break;