Curious UUCP (reposting...)

jm at wlbr.UUCP jm at wlbr.UUCP
Thu Jun 7 04:33:11 AEST 1984


[]

Evidently, this didn't make it everywhere, so here it goes again...
(Sorry to everyone who has seen it before)

Erik Fair complains about V7 uucp timing out at shutdown when
communicating with a System V uucp.  The problem also occurs with
4.x systems.  Having studied  this problem, I offer the following
detailed (and rather long winded) explanation, with some general
suggestions (but no details) on how to fix it.

	This problem occurs because of the pk user mode emulation.
	cntrl() exhanges HUPY messages, then calls pkclose(), which
	tries to exchange M_CLOSE messages with the remote system.
	The problem is that, in the user mode pk routines, pkclose()
	does not wait for the reply from the other side.  It merely
	tries twice (sending two control packets), then "gives up",
	and proceeds with the close.

	As a result, two packets are left in the input queue of the
	both hosts (this is true for all uucps that I know of).  Now
	then, cntrl() returns to main(), which tries to exchange
	OO messages using imsg() and omsg().

	imsg() uses the same message sync character as the pk routines.
	Soooooo.... imsg() sees the M_CLOSE message that pkclose() left
	on the line, and starts looking for a terminator (a NULL or
	newline, I believe), and finds it after the two M_CLOSE messages
	and the desired OO message, so he returns a bunch of garbage as
	data.  No biggee, main() discards the rubbish, sends another
	OO message, and things go on correctly.  That is why two V7 sites
	work OK.

	Now then, System V uucp has a new, improved imsg().  If he finds
	an imbedded sync character while receiving a message, he will
	reset some pointers, and start over again, throwing away the
	garbage.  So, a System V uucp will see the FIRST OO message,
	and terminate without further hassle.  This is fine on dialup
	lines, because the line will be hung up before long, and this
	will also terminate the V7 uucp.  However, if the two are
	connected with a hardwire line, the V7 uucp will wait around for
	another OO message that will never come (until it times out).

There are several ways to "fix" the problem:

	1) Fix the user mode pkclose(), so that he WAITS for a response.
	   This would really be the preferred fix, but.....

	2) Fix the V7 (and 4.x) imsg() to conform to System V.
	   (Let's see now, how many thousands of sites was that????)

	3) Break the System V imsg() to conform to V7 (Yeuchhh!!!)

	4) Shorten the time that main() waits for imsg() to come back
	   with the OO message.  (Blahhhhhh!!!!!!)

Not having a whole lot of time to come up with a solution, I chose (2)
at our site, so our hardwired systems work right.

		Jim Macropol
		{ihnp4,trwrb,vortex,scgvaxd}!wlbr!jm



More information about the Comp.unix.wizards mailing list