Subject: priority queuing bug in *BSD ppp (if_ppp.c)
To: <>
From: Pierre Beyssac <pb@fasterix.frmug.fr.net>
List: netbsd-bugs
Date: 05/07/1994 02:43:53
[ Mail copy to the FreeBSD/NetBSD mailing-lists and Paul Mackerras
(paulus@cs.anu.edu.au) ]
I think there is a bug in ppp 2.0.4 in the priority queuing for
*BSD.
It seems the bug is present in ppp 2.1 too. It is a byte order
problem and only shows up on little endian machines.
Apparently, the bug is present in all 386BSD-derived systems.
In if_ppp.c, the line
if (INTERACTIVE(p & 0xffff) || INTERACTIVE(p >> 16))
should be
if (INTERACTIVE(ntohs(p & 0xffff)) || INTERACTIVE(ntohs(p >> 16)))
I'm not sure it is the cleanest solution, though it looks like a
sensible place to fix it. I can only say it works better now :-)
The consequence of this bug was that telnet/rlogin/ftp control
connections were not identified and were queued normally. It can
be noticed when sending large amounts of data by ftp from a Intel
*BSD machine and aborting the session while typing in a telnet :
the telnet echo is received only after the full 14kbytes in the
tcp buffers for the ftp have been transmitted.
Since the fix is obvious, I thought it would be all right to post
it directly to comp.os.386bsd.bugs and comp.protocols.ppp.
For answers, please email me or post in the news, as I'm not
subscribed to the freebsd-bugs or netbsd-bugs lists.
--
Pierre Beyssac FreeBSD@home: pb@fasterix.frmug.fr.net
FreeBSD, NetBSD, Linux -- Il y a moins bien, mais c'est plus cher.
You can also get less bang for more bucks. (translation F. Berjon)
------------------------------------------------------------------------------