The Unix Heritage Society mailing list
 help / color / mirror / Atom feed
* [pups] Trouble with 2.11BSD and CQD-220
@ 2001-11-05  4:15 Steven M. Schultz
  2001-11-06 19:55 ` Tom Ivar Helbekkmo
  0 siblings, 1 reply; 6+ messages in thread
From: Steven M. Schultz @ 2001-11-05  4:15 UTC (permalink / raw)


hi -

> From: "Chuck Dickman" <chd_1 at nktelco.net>
> fine. Except... I cannot get it to boot directly from the SCSI drive. 
> 
> More detail.... The processor is an 11/73 and the SCSI controller is a
> CMD CQD-220 with a Fujitsu 220MB drive. The CQD-220 is set as the primary
> MSCP controller and an RQDX3 with an RX50 drive as the secondary MSCP...
> 
> .: ra(0,0,0)unix
> 
> boots unix from the SCSI drive.
> 
> When booting from the SCSI drive, the boot sector is loaded into memory
> and then relocated. It hangs waiting for the MSCP controller to respond.
> I have not diagnosed it to the command that hangs.

	Bug in the CMD controller but CMD isn't unique - others have had
	the problem as well.   The bug is that the controller insists on
	an interrupt vector being presented during the 3 or 4 step 
	initialization protocol.   The 2BSD boot block code is running without
	interrupts enabled and does not provide an interrupt vector.   The
	result is an endless loop waiting for the controller to say it is
	done.

> Is anybody else booting 2.11BSD directly from a drive attached to a
> CQD-220?

	Perhaps the appended patch (#432) will be of use ;)

	The patchlevel of the 2.11 in the PUPS archive is 431 if I looked
	at the right direcctory (you can check the rev level by looking at
	the first couple lines of /VERSION).

	Patch rauboot.s and reinstall the bootblock - I think that will
	fix your problem of booting directly from the CMD attached disk.

	Steven Schultz
	sms at 2bsd.com

------------------------cut here----------------------
Subject: Y2K troff fix, 4.3compat remnant removed, misc cleanup (#432)
Index:	share/tmac/{tman.an.new,tmac.s},sys/sys/{several},others 2.11BSD

Description:
	1. The 'ms', 'man' and 'me' troff macro packages do not correctly 
	   handle dates past 1999.

	2. There was some unused 4.3BSD compatibility code lingering in the
	   kernel taking up I space.

	3. Kermit coredumps with an illegal system call.

	4. rlogin(1), resolver(3), contained some Vax/Sun/4.3BSD conditional 
	   code that was no longer needed.

	5. The MSCP bootblock could not boot disks attached to a TD Systems 
	   Viking MSCP controller.

	6. /etc/rc.local uses strings(1) on the kernel image instead of
	   simply asking the kernel for its version information with 
	   "sysctl kern.version".   There's no reason why /etc/motd
	   needs to be publically writeable.

	7. sysctl 'kern.ostype' and 'kern.osrelease' return the same 
	   information which is silly (and a bit useless).   

	8. BSD in param.h was defined as "211" which makes date/time 
	   comparisons meaningless ("#if  BSD > 199910").

Repeat-By:
	1. Format a document that uses the "-ms" macro package and has dates
	   in it.   Notice that the date will be "October 6, 19100" instead
	   of "October 6 2000".
	
	2 - 4. Observation.   

	5. Have a MSCP disk attached to a TD Viking Systems controller.  The
	   boot block will go into an endless loop waiting for the controller
	   to respond.

	6 - 7. Observation.

Fix:
	A big thank you to Frank Wortnet for spotting and fixing the troff 
	macros. 

	Thanks to Tim Shoppa for tracking down the problem with the Viking
	MSCP controller and providing the tweek to the RA bootblock.

	I forget who submitted the suggestion that /etc/motd not be
	publically writeable.  Thanks.

	The remaining parts of the update are various odds and ends that
	have been gathering since May or June 2000 but never made it out
	as an update due to time contraints.

	When the 4.3 compatibility code was ripped out a couple parts were
	overlooked.  They're not used and just take up space in the kernel
	(a few bytes here, a few bytes there and fitting the overlays together
	is made harder than it need be) and also slowed the system slightly
	due to calling 'helper' functions (function call/return are fairly
	expensive).

	Another overlooked item when the compatibility code was removed 
	was the Kermit program.  At the time the old system calls were removed
	it was necessary to rebuild the entire system from sources.  Kermit
	is (due to its size) not rebuilt along with the rest of the system.
	Thus, if you attempt to run Kermit it coredumps with an illegal
	system call.   All that is needed is a recompile (takes about an hour).

	Having sysctl(3) return the same information for 'kern.ostype' and
	'kern.osrelease' was a mistake.  This has been changed to be more
	useful.   'sysctl kern.ostype' now returns "BSD" and 'sysctl 
	kern.osrelease' returns "2.11".   

	In <sys/param.h> the BSD define has been changed from 211 to
	200005 (year 2000, month 5) to more accurately reflect the system's
	capabilities.   Basically 'BSD' has changed from an encoded release
	value to a stylized date value.   Sections of the kernel (and several
	userland programs) which relied on "#if BSD < 43" to select old
	compatibility features were modified or removed as a result of changing
	the meaning of 'BSD' in param.h.   Indeed much of the size of the
	patch is directly related to the change in param.h

	rlogin(1) was cleaned up.   Standard include files were used rather
	than locally declaring functions such as index(3) and so on.   As long
	as rlogin was being worked on the sources and the manpage were 
	relocated in accordance with the convention that the manpage source
	goes into the sourcecode directory.

	The update kit below is a shar file containing 4 files:

		432.patch   =  a file to be fed thru patch(1)
		432.sh      =  a shell script to rearrange rlogin(1)'s files
		432.rm      =  a shell script to remove old rlogin(1) files
		432.shar    =  a shar file of rlogin(1)'s new Makefile

	The two shell scripts are small (just two or three commands each).   
	The commands could of course be typed in manually if desired.

	To install the update cut where indicated below and save to a file
	(/tmp/432) and then:

		cd /tmp
		sh 432
		./432.sh
		./432.rm
		sh 432.shar
		patch -p0 < 432.patch

	Watch carefully for any rejected parts of the patch.   Failure of a
	patch typically means the system was not current on all preceeding 
	updates _or_ that local modifications have been made.

	Next rebuild Kermit if this has not previously been done:

		cd /usr/src/new/kermit5.188
		make bsd211
		cp wermit /usr/new/kermit
		make clean

	The updated troff macros are installed next:

		cd /usr/src/share/me
		make install
		cd /usr/src/share/tmac
		make install

	It is not required to build a new kernel at this time since the only
	changes were to remove code that was not being used.   One reason to
	build a new kernel would be to make sure the overlay structure is
	still valid:

		cd /sys/YOUR_KERNEL
		make clean
		make
		and then install as usual

	Lastly the MSCP bootblock is recompiled and installed in /mdec:

		cd /sys/mdec
		install -m 444 rauboot /mdec/rauboot
		make clean

	As always this and previous updates to 2.11BSD are available via
	anonymous FTP to either FTP.IIPO.GTEGSC.COM or MOE.2BSD.COM in the
	directory /pub/2.11BSD.

============================cut here===========================
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#	432.rm
#	432.sh
#	432.shar
#	432.patch
# This archive created: Fri Oct 13 21:52:42 2000
export PATH; PATH=/bin:/usr/bin:$PATH
if test -f '432.rm'
then
	echo shar: "will not over-write existing file '432.rm'"
else
sed 's/^B//' << \SHAR_EOF > '432.rm'
B
B#!/bin/sh
B
Brm -f /usr/src/man/man1/rlogin.1
Brm -f /usr/src/ucb/rlogin.c
SHAR_EOF
chmod 755 '432.rm'
fi
if test -f '432.sh'
then
	echo shar: "will not over-write existing file '432.sh'"
else
sed 's/^B//' << \SHAR_EOF > '432.sh'
B#!/bin/sh
B
Bset -e
Bumask 22
B
Bmkdir -p /usr/src/ucb/rlogin
Bcp -p /usr/src/ucb/rlogin.c /usr/src/ucb/rlogin/rlogin.c
Bcp -p /usr/src/man/man1/rlogin.1 /usr/src/ucb/rlogin/rlogin.1
SHAR_EOF
chmod 755 '432.sh'
fi
if test -f '432.shar'
then
	echo shar: "will not over-write existing file '432.shar'"
else
sed 's/^B//' << \SHAR_EOF > '432.shar'
B#! /bin/sh
B# This is a shell archive, meaning:
B# 1. Remove everything above the #! /bin/sh line.
B# 2. Save the resulting text in a file.
B# 3. Execute the file with /bin/sh (not csh) to create:
B#	/usr/src/ucb/rlogin/Makefile
B# This archive created: Thu Oct 12 21:10:13 2000
Bexport PATH; PATH=/bin:/usr/bin:$PATH
Bif test -f '/usr/src/ucb/rlogin/Makefile'
Bthen
B	echo shar: "will not over-write existing file '/usr/src/ucb/rlogin/Makefile'"
Belse
Bsed 's/^Z//' << \SHAR_EOF > '/usr/src/ucb/rlogin/Makefile'
BZ#
BZ# Public Domain.  1996/11/16 - Steven Schultz
BZ#
BZ#	@(#)Makefile	1.0 (2.11BSD) 2000/5/17
BZ#
BZCFLAGS=	 -O
BZSEPFLAG= -i
BZSRCS=	rlogin.c
BZOBJS=	rlogin.o
BZMAN=	rlogin.0
BZMANSRC=	rlogin.1
BZ
BZall: rlogin rlogin.0
BZ
BZrlogin: ${OBJS}
BZ	${CC} ${CFLAGS} ${SEPFLAG} -o $@ ${OBJS}
BZ
BZrlogin.0: ${MANSRC}
BZ	/usr/man/manroff ${MANSRC} > ${MAN}
BZ
BZclean:
BZ	rm -f ${OBJS} ${MAN} rlogin tags 
BZ
BZdepend: ${SRCS}
BZ	mkdep ${CFLAGS} ${SRCS}
BZ
BZinstall: rlogin
BZ	install -c -o bin -g bin -m 444 ${MAN} ${DESTDIR}/usr/man/cat1
BZ	install -s -o root -g bin -m 4755 rlogin ${DESTDIR}/usr/ucb/rlogin
BZ
BZlint: ${SRCS}
BZ	lint -hax ${SRCS}
BZ
BZtags: ${SRCS}
BZ	ctags ${SRCS}
BZ# DO NOT DELETE THIS LINE -- mkdep uses it.
BZ# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
BSHAR_EOF
Bfi
Bexit 0
B#	End of shell archive
SHAR_EOF
chmod 644 '432.shar'
fi
if test -f '432.patch'
then
	echo shar: "will not over-write existing file '432.patch'"
else
sed 's/^B//' << \SHAR_EOF > '432.patch'
B*** /etc/rc.local.old	Sat Nov 16 16:23:44 1996
B--- /etc/rc.local	Wed May 17 21:00:28 2000
B***************
B*** 1,10 ****
B  #! /bin/sh -
B  # site-specific startup actions, daemons
B  
B! strings /vmunix | grep UNIX >/tmp/t1
B  tail +2 /etc/motd >>/tmp/t1
B  mv /tmp/t1 /etc/motd
B! chmod 666 /etc/motd
B  
B  echo -n			starting local daemons:			>/dev/console 2>&1
B  #if [ $INET = YES -a -f /usr/sbin/timed ]; then
B--- 1,10 ----
B  #! /bin/sh -
B  # site-specific startup actions, daemons
B  
B! sysctl -n kern.version | head -1 > /tmp/t1
B  tail +2 /etc/motd >>/tmp/t1
B  mv /tmp/t1 /etc/motd
B! chmod 644 /etc/motd
B  
B  echo -n			starting local daemons:			>/dev/console 2>&1
B  #if [ $INET = YES -a -f /usr/sbin/timed ]; then
B*** /usr/src/sys/sys/kern_sysctl.c.old	Wed Aug 11 19:40:36 1999
B--- /usr/src/sys/sys/kern_sysctl.c	Wed May 17 20:01:48 2000
B***************
B*** 33,39 ****
B   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
B   * SUCH DAMAGE.
B   *
B!  *	@(#)kern_sysctl.c	8.4.11 (2.11BSD) 1999/8/11
B   */
B  
B  /*
B--- 33,39 ----
B   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
B   * SUCH DAMAGE.
B   *
B!  *	@(#)kern_sysctl.c	8.4.12 (2.11BSD) 2000/5/17
B   */
B  
B  /*
B***************
B*** 195,204 ****
B  
B  	switch (name[0]) {
B  	case KERN_OSTYPE:
B  	case KERN_OSRELEASE:
B! 		/* code is cheaper than D space */
B! 		bsd[0]='2';bsd[1]='.';bsd[2]='1';bsd[3]='1';bsd[4]='B';
B! 		bsd[5]='S';bsd[6]='D';bsd[7]='\0';
B  		return (sysctl_rdstring(oldp, oldlenp, newp, bsd));
B  	case KERN_ACCTTHRESH:
B  		level = Acctthresh;
B--- 195,204 ----
B  
B  	switch (name[0]) {
B  	case KERN_OSTYPE:
B+ 		bsd[0]='B';bsd[1]='S';bsd[2]='D';bsd[3]='\0';
B+ 		return (sysctl_rdstring(oldp, oldlenp, newp, bsd));
B  	case KERN_OSRELEASE:
B! 		bsd[0]='2';bsd[1]='.';bsd[2]='1';bsd[3]='1';bsd[4]='\0';
B  		return (sysctl_rdstring(oldp, oldlenp, newp, bsd));
B  	case KERN_ACCTTHRESH:
B  		level = Acctthresh;
B*** /usr/src/sys/sys/kern_prot2.c.old	Sun Feb 20 18:13:08 2000
B--- /usr/src/sys/sys/kern_prot2.c	Tue Aug  1 20:44:47 2000
B***************
B*** 35,41 ****
B   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
B   * SUCH DAMAGE.
B   *
B!  *	@(#)kern_prot2.c  8.9.2 (2.11BSD) 2000/2/20
B   */
B  
B  #include "param.h"
B--- 35,41 ----
B   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
B   * SUCH DAMAGE.
B   *
B!  *	@(#)kern_prot2.c  8.9.3 (2.11BSD) 2000/8/1
B   */
B  
B  #include "param.h"
B***************
B*** 49,72 ****
B  
B  int
B  setuid()
B! {
B  	struct a {
B  		uid_t uid;
B  		} *uap = (struct a *)u.u_ap;
B  
B- 	return(_setuid(uap->uid));
B- 	}
B- 
B- /*
B-  * This is a helper function used by setuid() above and the 4.3BSD 
B-  * compatibility code.  When the latter goes away this can be joined
B-  * back into the above code and save a function call.
B- */
B- int
B- _setuid(uid)
B- 	register uid_t uid;
B- 	{
B- 
B  	if (uid != u.u_ruid && !suser())
B  		return(u.u_error);
B  	/*
B--- 49,60 ----
B  
B  int
B  setuid()
B! 	{
B  	struct a {
B  		uid_t uid;
B  		} *uap = (struct a *)u.u_ap;
B+ 	register uid_t uid = uap->uid;
B  
B  	if (uid != u.u_ruid && !suser())
B  		return(u.u_error);
B  	/*
B***************
B*** 78,84 ****
B          QUOTAMAP();
B  	if (u.u_quota->q_uid != uid) {
B  		qclean();
B! 		qstart(getquota((uid_t)uid, 0, 0));
B  	}
B  	QUOTAUNMAP();
B  #endif
B--- 66,72 ----
B          QUOTAMAP();
B  	if (u.u_quota->q_uid != uid) {
B  		qclean();
B! 		qstart(getquota(uid, 0, 0));
B  	}
B  	QUOTAUNMAP();
B  #endif
B***************
B*** 88,94 ****
B  	u.u_ruid = uid;
B  	u.u_svuid = uid;
B  	u.u_acflag |= ASUGID;
B! 	return (u.u_error = 0);
B  	}
B  
B  int
B--- 76,82 ----
B  	u.u_ruid = uid;
B  	u.u_svuid = uid;
B  	u.u_acflag |= ASUGID;
B! 	return(u.u_error = 0);
B  	}
B  
B  int
B***************
B*** 97,119 ****
B  	struct a {
B  		uid_t euid;
B  		} *uap = (struct a *)u.u_ap;
B  
B! 	return(_seteuid(uap->euid));
B! 	}
B! 
B! int
B! _seteuid(euid)
B! 	register uid_t euid;
B! 	{
B! 
B! 	if (euid != u.u_ruid && euid != u.u_svuid && !suser())
B! 		return (u.u_error);
B  	/*
B  	 * Everything's okay, do it.
B  	 */
B  	u.u_uid = euid;
B  	u.u_acflag |= ASUGID;
B! 	return (u.u_error = 0);
B  	}
B  
B  int
B--- 85,100 ----
B  	struct a {
B  		uid_t euid;
B  		} *uap = (struct a *)u.u_ap;
B+ 	register uid_t euid = uap->euid;
B  
B! 	if	(euid != u.u_ruid && euid != u.u_svuid && !suser())
B! 		return(u.u_error);
B  	/*
B  	 * Everything's okay, do it.
B  	 */
B  	u.u_uid = euid;
B  	u.u_acflag |= ASUGID;
B! 	return(u.u_error = 0);
B  	}
B  
B  int
B***************
B*** 122,143 ****
B  	struct a {
B  		gid_t gid;
B  		} *uap = (struct a *)u.u_ap;
B! 	
B! 	return(_setgid(uap->gid));
B! 	}
B  
B- int 
B- _setgid(gid)
B- 	register gid_t gid;
B- 	{
B- 
B  	if (gid != u.u_rgid && !suser())
B! 		return (u.u_error);	/* XXX */
B  	u.u_groups[0] = gid;		/* effective gid is u_groups[0] */
B  	u.u_rgid = gid;
B  	u.u_svgid = gid;
B  	u.u_acflag |= ASUGID;
B! 	return (u.u_error = 0);
B  	}
B  
B  int
B--- 103,117 ----
B  	struct a {
B  		gid_t gid;
B  		} *uap = (struct a *)u.u_ap;
B! 	register gid_t	gid = uap->gid;
B  
B  	if (gid != u.u_rgid && !suser())
B! 		return(u.u_error);	/* XXX */
B  	u.u_groups[0] = gid;		/* effective gid is u_groups[0] */
B  	u.u_rgid = gid;
B  	u.u_svgid = gid;
B  	u.u_acflag |= ASUGID;
B! 	return(u.u_error = 0);
B  	}
B  
B  int
B***************
B*** 146,163 ****
B  	struct a {
B  		gid_t egid;
B  	} *uap = (struct a *)u.u_ap;
B  
B- 	return(_setegid(uap->egid));
B- 	}
B- 
B- int
B- _setegid(egid)
B- 	register gid_t egid;
B- 	{
B- 
B  	if (egid != u.u_rgid && egid != u.u_svgid && !suser())
B! 		return (u.u_error);
B  	u.u_groups[0] = egid;
B  	u.u_acflag |= ASUGID;
B! 	return (u.u_error = 0);
B  	}
B--- 120,130 ----
B  	struct a {
B  		gid_t egid;
B  	} *uap = (struct a *)u.u_ap;
B+ 	register gid_t egid = uap->egid;
B  
B  	if (egid != u.u_rgid && egid != u.u_svgid && !suser())
B! 		return(u.u_error);
B  	u.u_groups[0] = egid;
B  	u.u_acflag |= ASUGID;
B! 	return(u.u_error = 0);
B  	}
B*** /usr/src/sys/sys/subr_prf.c.old	Sat Dec  5 17:34:36 1998
B--- /usr/src/sys/sys/subr_prf.c	Tue Aug  1 20:46:48 2000
B***************
B*** 3,9 ****
B   * All rights reserved.  The Berkeley software License Agreement
B   * specifies the terms and conditions for redistribution.
B   *
B!  *	@(#)subr_prf.c	1.2 (2.11BSD) 1998/12/5
B   */
B  
B  #include "param.h"
B--- 3,9 ----
B   * All rights reserved.  The Berkeley software License Agreement
B   * specifies the terms and conditions for redistribution.
B   *
B!  *	@(#)subr_prf.c	1.3 (2.11BSD) 2000/8/1
B   */
B  
B  #include "param.h"
B***************
B*** 300,306 ****
B   * about failing disk tranfers.
B   */
B  harderr(bp, cp)
B! 	struct buf *bp;
B  	char *cp;
B  {
B  	printf("%s%d%c: hard error sn%D ", cp,
B--- 300,306 ----
B   * about failing disk tranfers.
B   */
B  harderr(bp, cp)
B! 	register struct buf *bp;
B  	char *cp;
B  {
B  	printf("%s%d%c: hard error sn%D ", cp,
B*** /usr/src/sys/h/param.h.old	Wed Sep 15 19:38:45 1999
B--- /usr/src/sys/h/param.h	Wed May 17 20:10:44 2000
B***************
B*** 3,12 ****
B   * All rights reserved.  The Berkeley software License Agreement
B   * specifies the terms and conditions for redistribution.
B   *
B!  *	@(#)param.h	1.6 (2.11BSD) 1999/9/5
B   */
B  
B! #define	BSD	211		/* 2.11 * 10, as cpp doesn't do floats */
B  
B  #include <sys/localopts.h>
B  #include <sys/stddef.h>		/* for 'offsetof' */
B--- 3,12 ----
B   * All rights reserved.  The Berkeley software License Agreement
B   * specifies the terms and conditions for redistribution.
B   *
B!  *	@(#)param.h	1.7 (2.11BSD) 2000/5/17
B   */
B  
B! #define	BSD	200005		/* System version (year and month) */
B  
B  #include <sys/localopts.h>
B  #include <sys/stddef.h>		/* for 'offsetof' */
B*** /usr/src/sys/mdec/rauboot.s.old	Wed May 31 19:54:49 1995
B--- /usr/src/sys/mdec/rauboot.s	Wed May 17 19:54:13 2000
B***************
B*** 298,304 ****
B  	clr	(r0)			/ Tell controller we go it
B  	rts	pc
B  
B! icons:	RAERR
B  	ra+RARING
B  	0
B  	RAGO
B--- 298,309 ----
B  	clr	(r0)			/ Tell controller we go it
B  	rts	pc
B  
B! / Some adaptors (TD Systems Viking for example) require the vector field
B! /  to be initialized even though interrupts are not enabled.  Use the primary
B! /  vector of 0154.   The standalone MSCP driver does the same thing and later on
B! /  the  kernel programs the adaptor with an assigned vector
B! 
B! icons:	RAERR + 033			/ 033 = 0154 >> 2
B  	ra+RARING
B  	0
B  	RAGO
B*** /usr/src/sys/netinet/raw_ip.c.old	Fri Jul  7 13:30:17 1989
B--- /usr/src/sys/netinet/raw_ip.c	Wed May 17 20:15:14 2000
B***************
B*** 9,15 ****
B   * software without specific prior written permission. This software
B   * is provided ``as is'' without express or implied warranty.
B   *
B!  *	@(#)raw_ip.c	7.3 (Berkeley) 12/7/87
B   */
B  
B  #include "param.h"
B--- 9,15 ----
B   * software without specific prior written permission. This software
B   * is provided ``as is'' without express or implied warranty.
B   *
B!  *	@(#)raw_ip.c	7.3.1 (2.11BSD) 2000/5/17
B   */
B  
B  #include "param.h"
B***************
B*** 61,71 ****
B  	int error;
B  	struct rawcb *rp = sotorawcb(so);
B  	struct sockaddr_in *sin;
B- #if BSD>=43
B  	short proto = rp->rcb_proto.sp_protocol;
B! #else
B! 	short proto = so->so_proto->pr_protocol;
B! #endif
B  	/*
B  	 * if the protocol is IPPROTO_RAW, the user handed us a 
B  	 * complete IP packet.  Otherwise, allocate an mbuf for a
B--- 61,68 ----
B  	int error;
B  	struct rawcb *rp = sotorawcb(so);
B  	struct sockaddr_in *sin;
B  	short proto = rp->rcb_proto.sp_protocol;
B! 
B  	/*
B  	 * if the protocol is IPPROTO_RAW, the user handed us a 
B  	 * complete IP packet.  Otherwise, allocate an mbuf for a
B***************
B*** 113,125 ****
B  
B  	ip->ip_dst = ((struct sockaddr_in *)&rp->rcb_faddr)->sin_addr;
B  
B- #if BSD>=43
B  	return (ip_output(m, rp->rcb_options, &rp->rcb_route, 
B  	   (so->so_options & SO_DONTROUTE) | IP_ALLOWBROADCAST));
B- #else
B- 	return (ip_output(m, (struct mbuf *)0, &rp->rcb_route, 
B- 	   (so->so_options & SO_DONTROUTE) | IP_ALLOWBROADCAST));
B- #endif
B  bad:
B  	m_freem(m);
B  	return (error);
B--- 110,117 ----
B*** /usr/src/sys/netinet/tcp_input.c.old	Sat May  7 14:43:47 1988
B--- /usr/src/sys/netinet/tcp_input.c	Wed May 17 20:17:27 2000
B***************
B*** 9,15 ****
B   * software without specific prior written permission. This software
B   * is provided ``as is'' without express or implied warranty.
B   *
B!  *	@(#)tcp_input.c	7.15.1.2 (Berkeley) 3/16/88
B   */
B  
B  #include "param.h"
B--- 9,15 ----
B   * software without specific prior written permission. This software
B   * is provided ``as is'' without express or implied warranty.
B   *
B!  *	@(#)tcp_input.c	7.15.1.3 (2.11BSD) 2000/5/17
B   */
B  
B  #include "param.h"
B***************
B*** 321,329 ****
B  		inp = (struct inpcb *)so->so_pcb;
B  		inp->inp_laddr = ti->ti_dst;
B  		inp->inp_lport = ti->ti_dport;
B- #if BSD>=43
B  		inp->inp_options = ip_srcroute();
B- #endif
B  		tp = intotcpcb(inp);
B  		tp->t_state = TCPS_LISTEN;
B  	}
B--- 321,327 ----
B***************
B*** 491,507 ****
B  		ti->ti_seq++;
B  		if (ti->ti_len > tp->rcv_wnd) {
B  			todrop = ti->ti_len - tp->rcv_wnd;
B- #if BSD>=43
B  			m_adj(m, -todrop);
B- #else
B- 			/* XXX work around 4.2 m_adj bug */
B- 			if (m->m_len) {
B- 				m_adj(m, -todrop);
B- 			} else {
B- 				/* skip tcp/ip header in first mbuf */
B- 				m_adj(m->m_next, -todrop);
B- 			}
B- #endif
B  			ti->ti_len = tp->rcv_wnd;
B  			tiflags &= ~TH_FIN;
B  			tcpstat.tcps_rcvpackafterwin++;
B--- 489,495 ----
B***************
B*** 615,631 ****
B  				goto dropafterack;
B  		} else
B  			tcpstat.tcps_rcvbyteafterwin += todrop;
B- #if BSD>=43
B  		m_adj(m, -todrop);
B- #else
B- 		/* XXX work around m_adj bug */
B- 		if (m->m_len) {
B- 			m_adj(m, -todrop);
B- 		} else {
B- 			/* skip tcp/ip header in first mbuf */
B- 			m_adj(m->m_next, -todrop);
B- 		}
B- #endif
B  		ti->ti_len -= todrop;
B  		tiflags &= ~(TH_PUSH|TH_FIN);
B  	}
B--- 603,609 ----
B***************
B*** 1290,1323 ****
B  	tp->snd_cwnd = mss;
B  	return (mss);
B  }
B- 
B- #if BSD<43
B- /* XXX this belongs in netinet/in.c */
B- in_localaddr(in)
B- 	struct in_addr in;
B- {
B- 	register u_long i = ntohl(in.s_addr);
B- 	register struct ifnet *ifp;
B- 	register struct sockaddr_in *sin;
B- 	register u_long mask;
B- 
B- 	if (IN_CLASSA(i))
B- 		mask = IN_CLASSA_NET;
B- 	else if (IN_CLASSB(i))
B- 		mask = IN_CLASSB_NET;
B- 	else if (IN_CLASSC(i))
B- 		mask = IN_CLASSC_NET;
B- 	else
B- 		return (0);
B- 
B- 	i &= mask;
B- 	for (ifp = ifnet; ifp; ifp = ifp->if_next) {
B- 		if (ifp->if_addr.sa_family != AF_INET)
B- 			continue;
B- 		sin = (struct sockaddr_in *)&ifp->if_addr;
B- 		if ((sin->sin_addr.s_addr & mask) == i)
B- 			return (1);
B- 	}
B- 	return (0);
B- }
B- #endif
B--- 1268,1270 ----
B*** /usr/src/sys/netinet/tcp_output.c.old	Tue Oct 10 22:39:54 1995
B--- /usr/src/sys/netinet/tcp_output.c	Wed May 17 20:18:48 2000
B***************
B*** 9,15 ****
B   * software without specific prior written permission. This software
B   * is provided ``as is'' without express or implied warranty.
B   *
B!  *	@(#)tcp_output.c	7.13.1.4 (Berkeley) 1995/10/10
B   */
B  
B  #include "param.h"
B--- 9,15 ----
B   * software without specific prior written permission. This software
B   * is provided ``as is'' without express or implied warranty.
B   *
B!  *	@(#)tcp_output.c	7.13.1.5 (2.11BSD) 2000/5/17
B   */
B  
B  #include "param.h"
B***************
B*** 390,402 ****
B  	 */
B  	((struct ip *)ti)->ip_len = sizeof (struct tcpiphdr) + optlen + len;
B  	((struct ip *)ti)->ip_ttl = ip_defttl;	/* XXX */
B- #if BSD>=43
B  	error = ip_output(m, tp->t_inpcb->inp_options, &tp->t_inpcb->inp_route,
B  	    so->so_options & SO_DONTROUTE);
B- #else
B- 	error = ip_output(m, (struct mbuf *)0, &tp->t_inpcb->inp_route, 
B- 			  so->so_options & SO_DONTROUTE);
B- #endif
B  	if (error) {
B  		if (error == ENOBUFS) {
B  			tcp_quench(tp->t_inpcb);
B--- 390,397 ----
B*** /usr/src/sys/netinet/tcp_timer.c.old	Thu Apr 28 16:25:02 1988
B--- /usr/src/sys/netinet/tcp_timer.c	Wed May 17 20:19:44 2000
B***************
B*** 9,15 ****
B   * software without specific prior written permission. This software
B   * is provided ``as is'' without express or implied warranty.
B   *
B!  *	@(#)tcp_timer.c	7.11.1.2 (Berkeley) 3/16/88
B   */
B  
B  #include "param.h"
B--- 9,15 ----
B   * software without specific prior written permission. This software
B   * is provided ``as is'' without express or implied warranty.
B   *
B!  *	@(#)tcp_timer.c	7.11.1.3 (2.11BSD) 2000/5/17
B   */
B  
B  #include "param.h"
B***************
B*** 178,186 ****
B  		 * retransmit times until then.
B  		 */
B  		if (tp->t_rxtshift > TCP_MAXRXTSHIFT / 4) {
B- #if BSD>=43
B  			in_losing(tp->t_inpcb);
B- #endif
B  			tp->t_rttvar += (tp->t_srtt >> 2);
B  			tp->t_srtt = 0;
B  		}
B--- 178,184 ----
B*** /usr/src/sys/netinet/tcp_usrreq.c.old	Thu Apr 28 16:26:57 1988
B--- /usr/src/sys/netinet/tcp_usrreq.c	Wed May 17 20:20:49 2000
B***************
B*** 9,15 ****
B   * software without specific prior written permission. This software
B   * is provided ``as is'' without express or implied warranty.
B   *
B!  *	@(#)tcp_usrreq.c	7.7.1.2 (Berkeley) 3/16/88
B   */
B  
B  #include "param.h"
B--- 9,15 ----
B   * software without specific prior written permission. This software
B   * is provided ``as is'' without express or implied warranty.
B   *
B!  *	@(#)tcp_usrreq.c	7.7.1.3 (2.11BSD) 2000/5/17
B   */
B  
B  #include "param.h"
B***************
B*** 61,74 ****
B  	int error = 0;
B  	int ostate;
B  
B- #if BSD>=43
B  	if (req == PRU_CONTROL)
B  		return (in_control(so, (int)m, (caddr_t)nam,
B  			(struct ifnet *)rights));
B- #else
B- 	if (req == PRU_CONTROL)
B- 		return(EOPNOTSUPP);
B- #endif
B  	if (rights && rights->m_len)
B  		return (EINVAL);
B  
B--- 61,69 ----
B***************
B*** 317,323 ****
B  	return (error);
B  }
B  
B- #if BSD>=43
B  tcp_ctloutput(op, so, level, optname, mp)
B  	int op;
B  	struct socket *so;
B--- 312,317 ----
B***************
B*** 375,381 ****
B  	}
B  	return (error);
B  }
B- #endif
B  
B  int	tcp_sendspace = 1024*4;
B  int	tcp_recvspace = 1024*4;
B--- 369,374 ----
B*** /usr/src/etc/rc.local.old	Fri Jan 10 20:54:34 1997
B--- /usr/src/etc/rc.local	Wed May 17 21:01:41 2000
B***************
B*** 1,10 ****
B  #! /bin/sh -
B  # site-specific startup actions, daemons
B  
B! strings /vmunix | grep UNIX >/tmp/t1
B  tail +2 /etc/motd >>/tmp/t1
B  mv /tmp/t1 /etc/motd
B! chmod 666 /etc/motd
B  
B  echo -n			starting local daemons:			>/dev/console 2>&1
B  #if [ $INET = YES -a -f /usr/sbin/timed ]; then
B--- 1,10 ----
B  #! /bin/sh -
B  # site-specific startup actions, daemons
B  
B! sysctl -n kern.version | head -1 > /tmp/t1
B  tail +2 /etc/motd >>/tmp/t1
B  mv /tmp/t1 /etc/motd
B! chmod 644 /etc/motd
B  
B  echo -n			starting local daemons:			>/dev/console 2>&1
B  #if [ $INET = YES -a -f /usr/sbin/timed ]; then
B*** /usr/src/lib/libc/net/named/gethnamadr.c.old	Sun Jul 10 18:04:23 1994
B--- /usr/src/lib/libc/net/named/gethnamadr.c	Wed May 17 20:22:57 2000
B***************
B*** 11,18 ****
B   */
B  
B  #if defined(LIBC_SCCS) && !defined(lint)
B! static char sccsid[] = "@(#)gethostnamadr.c	6.31.2 (2.11BSD GTE) 6/27/94";
B! #endif /* LIBC_SCCS and not lint */
B  
B  #include <sys/param.h>
B  #include <sys/socket.h>
B--- 11,18 ----
B   */
B  
B  #if defined(LIBC_SCCS) && !defined(lint)
B! static char sccsid[] = "@(#)gethostnamadr.c	6.31.3 (2.11BSD) 2000/5/17";
B! #endif
B  
B  #include <sys/param.h>
B  #include <sys/socket.h>
B***************
B*** 112,120 ****
B  	ap = host_aliases;
B  	host.h_aliases = host_aliases;
B  	hap = h_addr_ptrs;
B- #if BSD >= 43 || defined(h_addr)	/* new-style hostent structure */
B  	host.h_addr_list = h_addr_ptrs;
B- #endif
B  	haveanswer = 0;
B  	while (--ancount >= 0 && cp < eom) {
B  		if ((n = dn_expand((char *)answer->buf, eom, cp, bp, buflen)) < 0)
B--- 112,118 ----
B***************
B*** 190,200 ****
B  	}
B  	if (haveanswer) {
B  		*ap = NULL;
B- #if BSD >= 43 || defined(h_addr)	/* new-style hostent structure */
B  		*hap = NULL;
B- #else
B- 		host.h_addr = h_addr_ptrs[0];
B- #endif
B  		return (&host);
B  	} else {
B  		h_errno = TRY_AGAIN;
B--- 188,194 ----
B***************
B*** 320,328 ****
B  		goto again;
B  	*cp++ = '\0';
B  	/* THIS STUFF IS INTERNET SPECIFIC */
B- #if BSD >= 43 || defined(h_addr)	/* new-style hostent structure */
B  	host.h_addr_list = host_addrs;
B- #endif
B  	host.h_addr = hostaddr;
B  	*((u_long *)host.h_addr) = inet_addr(p);
B  	host.h_length = sizeof (u_long);
B--- 314,320 ----
B*** /usr/src/lib/libc/net/res_send.c.old	Sun Jun 26 17:22:50 1994
B--- /usr/src/lib/libc/net/res_send.c	Wed May 17 20:27:18 2000
B***************
B*** 11,18 ****
B   */
B  
B  #if defined(LIBC_SCCS) && !defined(lint)
B! static char sccsid[] = "@(#)res_send.c	6.19.1 (Berkeley) 6/27/94";
B! #endif /* LIBC_SCCS and not lint */
B  
B  /*
B   * Send query to name server and wait for reply.
B--- 11,18 ----
B   */
B  
B  #if defined(LIBC_SCCS) && !defined(lint)
B! static char sccsid[] = "@(#)res_send.c	6.19.2 (2.11BSD) 2000/5/17";
B! #endif
B  
B  /*
B   * Send query to name server and wait for reply.
B***************
B*** 28,48 ****
B  #include <arpa/nameser.h>
B  #include <resolv.h>
B  
B- extern int errno;
B- 
B  static int s = -1;	/* socket used for communications */
B  static struct sockaddr no_addr;
B-   
B  
B- #ifndef FD_SET
B- #define	NFDBITS		32
B- #define	FD_SETSIZE	32
B- #define	FD_SET(n, p)	((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
B- #define	FD_CLR(n, p)	((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
B- #define	FD_ISSET(n, p)	((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
B- #define FD_ZERO(p)	bzero((char *)(p), sizeof(*(p)))
B- #endif
B- 
B  #define KEEPOPEN (RES_USEVC|RES_STAYOPEN)
B  
B  res_send(buf, buflen, answer, anslen)
B--- 28,36 ----
B***************
B*** 199,205 ****
B  			 */
B  			if (s < 0)
B  				s = socket(AF_INET, SOCK_DGRAM, 0);
B- #if	BSD >= 43
B  			if (_res.nscount == 1 || retry == _res.retry) {
B  				/*
B  				 * Don't use connect if we might
B--- 187,192 ----
B***************
B*** 224,233 ****
B  #endif DEBUG
B  					continue;
B  				}
B! 			} else
B! #endif BSD
B! 			if (sendto(s, buf, buflen, 0, &_res.nsaddr_list[ns],
B! 			    sizeof(struct sockaddr)) != buflen) {
B  #ifdef DEBUG
B  				if (_res.options & RES_DEBUG)
B  					perror("sendto");
B--- 211,218 ----
B  #endif DEBUG
B  					continue;
B  				}
B! 			} else if (sendto(s,buf,buflen,0,&_res.nsaddr_list[ns],
B! 			    		sizeof(struct sockaddr)) != buflen) {
B  #ifdef DEBUG
B  				if (_res.options & RES_DEBUG)
B  					perror("sendto");
B*** /usr/src/ucb/netstat/inet.c.old	Sun Aug 28 10:53:19 1994
B--- /usr/src/ucb/netstat/inet.c	Wed May 17 20:29:47 2000
B***************
B*** 11,17 ****
B   */
B  
B  #if	defined(DOSCCS) && !defined(lint)
B! static char sccsid[] = "@(#)inet.c	5.9.3 (2.11BSD GTE) 8/28/94";
B  #endif
B  
B  #include <strings.h>
B--- 11,17 ----
B   */
B  
B  #if	defined(DOSCCS) && !defined(lint)
B! static char sccsid[] = "@(#)inet.c	5.9.4 (2.11BSD) 2000/5/17";
B  #endif
B  
B  #include <strings.h>
B***************
B*** 243,252 ****
B  		return;
B  	klseek(kmem, off, 0);
B  	read(kmem, (char *)&ipstat, sizeof (ipstat));
B- #if BSD>=43
B  	printf("%s:\n\t%lu total packets received\n", name,
B  		ipstat.ips_total);
B- #endif
B  	printf("\t%lu bad header checksum%s\n",
B  		ipstat.ips_badsum, plural(ipstat.ips_badsum));
B  	printf("\t%lu with size smaller than minimum\n", ipstat.ips_toosmall);
B--- 243,250 ----
B***************
B*** 253,259 ****
B  	printf("\t%lu with data size < data length\n", ipstat.ips_tooshort);
B  	printf("\t%lu with header length < data size\n", ipstat.ips_badhlen);
B  	printf("\t%lu with data length < header length\n", ipstat.ips_badlen);
B- #if BSD>=43
B  	printf("\t%lu fragment%s received\n",
B  		ipstat.ips_fragments, plural(ipstat.ips_fragments));
B  	printf("\t%lu fragment%s dropped (dup or out of space)\n",
B--- 251,256 ----
B***************
B*** 266,272 ****
B  		ipstat.ips_cantforward, plural(ipstat.ips_cantforward));
B  	printf("\t%lu redirect%s sent\n",
B  		ipstat.ips_redirectsent, plural(ipstat.ips_redirectsent));
B- #endif
B  }
B  
B  static	char *icmpnames[] = {
B--- 263,268 ----
B*** /usr/src/ucb/rlogin/rlogin.c.old	Wed May  7 19:45:04 1997
B--- /usr/src/ucb/rlogin/rlogin.c	Wed May 17 20:44:43 2000
B***************
B*** 9,15 ****
B  "@(#) Copyright (c) 1983 Regents of the University of California.\n\
B   All rights reserved.\n";
B  
B! static char sccsid[] = "@(#)rlogin.c	5.10.1 (2.11BSD) 1997/3/28";
B  #endif
B  
B  /*
B--- 9,15 ----
B  "@(#) Copyright (c) 1983 Regents of the University of California.\n\
B   All rights reserved.\n";
B  
B! static char sccsid[] = "@(#)rlogin.c	5.10.2 (2.11BSD) 2000/5/17";
B  #endif
B  
B  /*
B***************
B*** 28,33 ****
B--- 28,35 ----
B  #include <errno.h>
B  #include <pwd.h>
B  #include <signal.h>
B+ #include <string.h>
B+ #include <stdlib.h>
B  #include <setjmp.h>
B  #include <netdb.h>
B  
B***************
B*** 35,42 ****
B  # define TIOCPKT_WINDOW 0x80
B  # endif TIOCPKT_WINDOW
B  
B- char	*index(), *rindex(), *malloc(), *getenv();
B- struct	passwd *getpwuid();
B  char	*name;
B  int	rem;
B  char	cmdchar = '~';
B--- 37,42 ----
B***************
B*** 46,66 ****
B      { "0", "50", "75", "110", "134", "150", "200", "300",
B        "600", "1200", "1800", "2400", "4800", "9600", "19200", "38400" };
B  char	term[256] = "network";
B- extern	int errno;
B  int	lostpeer();
B  int	dosigwinch = 0;
B- #ifndef sigmask
B- #define sigmask(m)	(1L << ((m)-1))
B- #endif
B- #ifdef sun
B- struct	ttysize winsize;
B- struct winsize {
B- 	unsigned short ws_row, ws_col;
B- 	unsigned short ws_xpixel, ws_ypixel;
B- };
B- #else sun
B  struct	winsize winsize;
B- #endif sun
B  int	sigwinch(), oob();
B  
B  main(argc, argv)
B--- 46,54 ----
B***************
B*** 132,142 ****
B  		strcat(term, "/");
B  		strcat(term, speeds[ttyb.sg_ospeed]);
B  	}
B- #ifdef sun
B- 	(void) ioctl(0, TIOCGSIZE, &winsize);
B- #else sun
B  	(void) ioctl(0, TIOCGWINSZ, &winsize);
B- #endif sun
B  	signal(SIGPIPE, lostpeer);
B  	signal(SIGURG, oob);
B  	oldmask = sigblock(sigmask(SIGURG));
B--- 120,126 ----
B***************
B*** 177,183 ****
B  doit(oldmask)
B  	long oldmask;
B  {
B- 	int exit();
B  	struct sgttyb sb;
B  
B  	ioctl(0, TIOCGETP, (char *)&sb);
B--- 161,166 ----
B***************
B*** 349,369 ****
B  	sigwinch();			/* check for size changes */
B  }
B  
B- #ifdef sun
B  sigwinch()
B  {
B- 	struct ttysize ws;
B- 
B- 	if (dosigwinch && ioctl(0, TIOCGSIZE, &ws) == 0 &&
B- 	    bcmp(&ws, &winsize, sizeof (ws))) {
B- 		winsize = ws;
B- 		sendwindow();
B- 	}
B- }
B- 
B- #else sun
B- sigwinch()
B- {
B  	struct winsize ws;
B  
B  	if (dosigwinch && ioctl(0, TIOCGWINSZ, &ws) == 0 &&
B--- 332,339 ----
B***************
B*** 372,378 ****
B  		sendwindow();
B  	}
B  }
B- #endif
B  
B  /*
B   * Send the window size to the server via the magic escape
B--- 342,347 ----
B***************
B*** 386,402 ****
B  	obuf[1] = 0377;
B  	obuf[2] = 's';
B  	obuf[3] = 's';
B- #ifdef sun
B- 	wp->ws_row = htons(winsize.ts_lines);
B- 	wp->ws_col = htons(winsize.ts_cols);
B- 	wp->ws_xpixel = 0;
B- 	wp->ws_ypixel = 0;
B- #else sun
B  	wp->ws_row = htons(winsize.ws_row);
B  	wp->ws_col = htons(winsize.ws_col);
B  	wp->ws_xpixel = htons(winsize.ws_xpixel);
B  	wp->ws_ypixel = htons(winsize.ws_ypixel);
B- #endif sun
B  	(void) write(rem, obuf, sizeof(obuf));
B  }
B  
B--- 355,364 ----
B***************
B*** 506,516 ****
B   */
B  reader()
B  {
B- #if !defined(BSD) || BSD < 43
B- 	int pid = -getpid();
B- #else
B  	int pid = getpid();
B- #endif
B  	int n, remaining;
B  	char *bufp = rcvbuf;
B  
B--- 468,474 ----
B*** /usr/src/ucb/Makefile.old	Fri Jun 27 19:50:46 1997
B--- /usr/src/ucb/Makefile	Wed May 17 20:32:16 2000
B***************
B*** 3,9 ****
B  # All rights reserved.  The Berkeley software License Agreement
B  # specifies the terms and conditions for redistribution.
B  #
B! #	@(#)Makefile	5.17.4 (2.11BSD GTE) 1997/6/27
B  #
B  DESTDIR=
B  CFLAGS=	-O
B--- 3,9 ----
B  # All rights reserved.  The Berkeley software License Agreement
B  # specifies the terms and conditions for redistribution.
B  #
B! #	@(#)Makefile	5.17.5 (2.11BSD) 2000/5/17
B  #
B  DESTDIR=
B  CFLAGS=	-O
B***************
B*** 12,18 ****
B  # Programs that live in subdirectories, and have makefiles of their own.
B  #
B  SUBDIR=	Mail compress dbx error ex finger fp ftp indent lock man \
B! 	more msgs netstat pascal rdist sendbug talk tftp \
B  	tn3270 tset vgrind vlp window
B  
B  # Shell scripts that need only be installed and are never removed.
B--- 12,18 ----
B  # Programs that live in subdirectories, and have makefiles of their own.
B  #
B  SUBDIR=	Mail compress dbx error ex finger fp ftp indent lock man \
B! 	more msgs netstat pascal rdist rlogin sendbug talk tftp \
B  	tn3270 tset vgrind vlp window
B  
B  # Shell scripts that need only be installed and are never removed.
B***************
B*** 34,40 ****
B  
B  # Programs that must run setuid to root
B  #
B! SETUID=	quota rlogin rsh
B  
B  # Programs that must run set-group-id kmem.
B  #
B--- 34,40 ----
B  
B  # Programs that must run setuid to root
B  #
B! SETUID=	quota rsh
B  
B  # Programs that must run set-group-id kmem.
B  #
B*** /usr/src/share/me/tmac.e.old	Mon Oct 21 20:50:21 1996
B--- /usr/src/share/me/tmac.e	Fri Oct 13 19:56:55 2000
B***************
B*** 1045,1051 ****
B  .if \n(dw=5 .ds dw Thursday
B  .if \n(dw=6 .ds dw Friday
B  .if \n(dw=7 .ds dw Saturday
B! .ds td \*(mo \n(dy, 19\n(yr
B  .\"\f		*** PARAMETRIC INITIALIZATIONS ***
B  .if (1m<0.1i)&(\nx!=0) \
B  .	vs 9p			\" for 12-pitch DTC terminals
B--- 1045,1052 ----
B  .if \n(dw=5 .ds dw Thursday
B  .if \n(dw=6 .ds dw Friday
B  .if \n(dw=7 .ds dw Saturday
B! .nr *y \n(yr+1900
B! .ds td \*(mo \n(dy, \n(*y
B  .\"\f		*** PARAMETRIC INITIALIZATIONS ***
B  .if (1m<0.1i)&(\nx!=0) \
B  .	vs 9p			\" for 12-pitch DTC terminals
B*** /usr/src/share/tmac/tmac.s.old	Mon Oct 21 20:30:44 1996
B--- /usr/src/share/tmac/tmac.s	Mon Oct  9 20:37:30 2000
B***************
B*** 934,940 ****
B  .if \n(mo-9 .ds MO October
B  .if \n(mo-10 .ds MO November
B  .if \n(mo-11 .ds MO December
B! .ds DY \*(MO \n(dy, 19\n(yr
B  .nr * 0 1
B  .IZ
B  .em EM
B--- 934,942 ----
B  .if \n(mo-9 .ds MO October
B  .if \n(mo-10 .ds MO November
B  .if \n(mo-11 .ds MO December
B! .nr *y \n(yr+1900
B! .ds DY \*(MO \n(dy, \n(*y
B! .ie
B  .nr * 0 1
B  .IZ
B  .em EM
B*** /usr/src/share/tmac/tmac.an.new.old	Thu Oct 31 22:18:00 1996
B--- /usr/src/share/tmac/tmac.an.new	Wed Oct 11 23:17:45 2000
B***************
B*** 20,30 ****
B  .if "\nm"10" .ds ]m November
B  .if "\nm"11" .ds ]m December
B  '	# set the date
B  .if n \{.nr m \nm+1
B! .	 ie \nd .ds ]W Modified \nm/\nd/\ny
B! .	 el .ds ]W Printed \n(mo/\n(dy/\n(yr\}
B! .if t \{.ie \nd .ds ]W \*(]m \nd, 19\ny
B! .	 el .ds ]W \*(]m \n(dy, 19\n(yr\}
B  .if t .tr *\(**
B  .ie n \{\
B  .	ds lq \&"\"
B--- 20,35 ----
B  .if "\nm"10" .ds ]m November
B  .if "\nm"11" .ds ]m December
B  '	# set the date
B+ .nr )y \n(yr-100
B+ .ie \n(yr<100 .ds ]Y \n(yr
B+ .el .ds ]Y 0\n()y
B+ '
B+ .nr )Y \n(yr+1900
B  .if n \{.nr m \nm+1
B! .	 ie \nd .ds ]W Modified \nm/\nd/\*(]Y
B! .	 el .ds ]W Printed \n(mo/\n(dy/\*(]Y\}
B! .if t \{.ie \nd .ds ]W \*(]m \nd, \n()Y
B! .	 el .ds ]W \*(]m \n(dy, \n()Y\}
B  .if t .tr *\(**
B  .ie n \{\
B  .	ds lq \&"\"
B*** /VERSION.old	Fri Apr 21 20:38:04 2000
B--- /VERSION	Wed May 17 21:02:26 2000
B***************
B*** 1,5 ****
B! Current Patch Level: 431
B! Date: April 21, 2000
B  
B  2.11 BSD
B  ============
B--- 1,5 ----
B! Current Patch Level: 432
B! Date: May 17, 2000
B  
B  2.11 BSD
B  ============
SHAR_EOF
chmod 644 '432.patch'
fi
exit 0
#	End of shell archive



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pups] Trouble with 2.11BSD and CQD-220
  2001-11-05  4:15 [pups] Trouble with 2.11BSD and CQD-220 Steven M. Schultz
@ 2001-11-06 19:55 ` Tom Ivar Helbekkmo
  0 siblings, 0 replies; 6+ messages in thread
From: Tom Ivar Helbekkmo @ 2001-11-06 19:55 UTC (permalink / raw)


"Steven M. Schultz" <sms at 2BSD.COM> writes:

>> When booting from the SCSI drive, the boot sector is loaded into memory
>> and then relocated. It hangs waiting for the MSCP controller to respond.
>> I have not diagnosed it to the command that hangs.
> 
> 	Bug in the CMD controller but CMD isn't unique - others have had
> 	the problem as well.   The bug is that the controller insists on
> 	an interrupt vector being presented during the 3 or 4 step 
> 	initialization protocol.

Not exactly.  You and I actually worked this out together back in
1995, when I was figuring out how to get Reno to boot my VAX using a
CQD-220.  :-)  You don't have to present any interrupt vector, but you
shouldn't lie to the controller about this.  Instead of setting the
"please interrupt" bit in the MSCP datagram, and waiting for the
controller to set the "I've interrupted now" bit, you should set the
"controller owns this datagram now" bit, and wait for it to clear it.
This make much better sense, anyway, while running in polled mode.

I don't have any of my 2.11 systems running right now (but with winter
coming up, I shortly will, and will then have quite some work to do
patching them up to the current level), but the change I had to make
to the Reno uda.c illustrates it well:

*** uda.c.ORIG	Tue Nov 25 20:10:01 1997
--- uda.c	Tue Nov 25 20:11:50 1997
***************
*** 140,163 ****
  	u->uda1_cmd.mscp_opcode = op;
  	u->uda1_cmd.mscp_msglen = MSCP_MSGLEN;
  	u->uda1_rsp.mscp_msglen = MSCP_MSGLEN;
! 	u->uda1_ca.ca_rspdsc |= MSCP_OWN|MSCP_INT;
! 	u->uda1_ca.ca_cmddsc |= MSCP_OWN|MSCP_INT;
  	i = udaddr[io->i_adapt][io->i_ctlr]->udaip;	/* start uda polling */
  #ifdef lint
  	i = i;
  #endif
  	mp = &u->uda1_rsp;
  	for (;;) {
  		if (u->uda1_ca.ca_cmdint)
  			u->uda1_ca.ca_cmdint = 0;
! 		if (u->uda1_ca.ca_rspint == 0)
  			continue;
  		u->uda1_ca.ca_rspint = 0;
  		if (mp->mscp_opcode == (op | M_OP_END))
  			break;
  		printf("unexpected rsp type %x op %x ignored\n",
  			MSCP_MSGTYPE(mp->mscp_msgtc), mp->mscp_opcode);
! 		u->uda1_ca.ca_rspdsc |= MSCP_OWN | MSCP_INT;
  	}
  	if ((mp->mscp_status&M_ST_MASK) != M_ST_SUCCESS)
  		return (-1);
--- 140,165 ----
  	u->uda1_cmd.mscp_opcode = op;
  	u->uda1_cmd.mscp_msglen = MSCP_MSGLEN;
  	u->uda1_rsp.mscp_msglen = MSCP_MSGLEN;
! 	u->uda1_ca.ca_rspdsc |= MSCP_OWN;
! 	u->uda1_ca.ca_cmddsc |= MSCP_OWN;
! 
  	i = udaddr[io->i_adapt][io->i_ctlr]->udaip;	/* start uda polling */
  #ifdef lint
  	i = i;
  #endif
  	mp = &u->uda1_rsp;
+ 
  	for (;;) {
  		if (u->uda1_ca.ca_cmdint)
  			u->uda1_ca.ca_cmdint = 0;
! 		if (u->uda1_ca.ca_rspdsc & MSCP_OWN)
  			continue;
  		u->uda1_ca.ca_rspint = 0;
  		if (mp->mscp_opcode == (op | M_OP_END))
  			break;
  		printf("unexpected rsp type %x op %x ignored\n",
  			MSCP_MSGTYPE(mp->mscp_msgtc), mp->mscp_opcode);
! 		u->uda1_ca.ca_rspdsc |= MSCP_OWN;
  	}
  	if ((mp->mscp_status&M_ST_MASK) != M_ST_SUCCESS)
  		return (-1);

Oh, and that very VAX is still running Reno, happily booting off the
CQD-220 whenever I ask it to.  :-)

-tih
-- 
Popularity is the hallmark of mediocrity.  --Niles Crane, "Frasier"



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pups] Trouble with 2.11BSD and CQD-220
@ 2001-11-07  4:01 Steven M. Schultz
  0 siblings, 0 replies; 6+ messages in thread
From: Steven M. Schultz @ 2001-11-07  4:01 UTC (permalink / raw)


Hi -

> From: "Chuck Dickman" <chd_1 at nktelco.net>
> Combining what Steven and Tom have said and looking at ra.c
> in standalone, I think I have a working version of rauboot now. 

	Congratulations!

	It's a Good Thing when folks who encounter a problem can also 
	provide a fix :-)

	If Tim Shoppa has a chance it'd be nice to confirm that the Viking
	adaptor is happy with the changed rauboot (it should be but...). 
	
	Thanks again for the fix.

	Steven Schultz
	sms at 2bsd.com



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pups] Trouble with 2.11BSD and CQD-220
  2001-11-06 20:50 Steven M. Schultz
@ 2001-11-07  0:48 ` Chuck Dickman
  0 siblings, 0 replies; 6+ messages in thread
From: Chuck Dickman @ 2001-11-07  0:48 UTC (permalink / raw)


Hi
Combining what Steven and Tom have said and looking at ra.c
in standalone, I think I have a working version of rauboot now. 

rauboot set the bit to cause an interrupt on ring transitions,
and then looped on the interrupt flag of the command and
response packets. I guess since CQD-220 was not completely set
up for interrupts, it would never set these flags.

pdpstand/ra.c did not set the interrupt on ring transitions bit,
and instead looped on the packet ownership bits. The CQD-220
seems to handle these bits as the standalone code expects.

Here are the changes that I made to rauboot.s. 

Chuck

[Steven, Let me know if you want me to send you more than
this.]
------------------------cut here----------------------
*** rauboot.s.orig      Wed May 31 22:54:49 1995
--- rauboot.s   Mon Nov  5 19:21:26 2001
***************
*** 16,22 ****
 
  MSCPSIZE =    64.     / One MSCP command packet is 64bytes long (need
2)

! RASEMAP       =       140000  / RA controller owner semaphore

  RAERR =               100000  / error bit
  RASTEP1 =     04000   / step1 has started
--- 16,23 ----

  MSCPSIZE =    64.     / One MSCP command packet is 64bytes long (need
2)
  
! /RASEMAP =    140000  / RA controller owner semaphore and _interrupt_
! RASEMAP       =       100000  / RA controller owner semaphore

  RAERR =               100000  / error bit
  RASTEP1 =     04000   / step1 has started
***************
*** 287,304 ****
        mov     $RASEMAP,*$ra+RARSPH    / set mscp semaphores
        mov     $RASEMAP,*$ra+RACMDH
        mov     *raip,r0                / tap controllers shoulder
!       mov     $ra+RACMDI,r0
  1:
        tst     (r0)
!       beq     1b                      / Wait till command read
!       clr     (r0)+                   / Tell controller we saw it, ok.
  2:
        tst     (r0)
!       beq     2b                      / Wait till response written
        clr     (r0)                    / Tell controller we go it
        rts     pc

! icons:        RAERR
        ra+RARING
        0
        RAGO
--- 288,308 ----
        mov     $RASEMAP,*$ra+RARSPH    / set mscp semaphores
        mov     $RASEMAP,*$ra+RACMDH
        mov     *raip,r0                / tap controllers shoulder
!       mov     $ra+RACMDH,r0
  1:
        tst     (r0)
!       bmi     1b                      / Wait till command read
! /     clr     (r0)+                   / Tell controller we saw it, ok.
!       mov     $ra+RARSPH,r0
  2:
        tst     (r0)
!       bmi     2b                      / Wait till response written
!       mov     $ra+RACMDI,r0
!       clr     (r0)+                   / Tell controller we saw it, ok.
        clr     (r0)                    / Tell controller we go it
        rts     pc
  
! icons:        RAERR + 033
        ra+RARING
        0
        RAGO



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pups] Trouble with 2.11BSD and CQD-220
@ 2001-11-06 20:50 Steven M. Schultz
  2001-11-07  0:48 ` Chuck Dickman
  0 siblings, 1 reply; 6+ messages in thread
From: Steven M. Schultz @ 2001-11-06 20:50 UTC (permalink / raw)


Hi -

> From: Tom Ivar Helbekkmo <tih at Hamartun.Priv.NO>
> Not exactly.  You and I actually worked this out together back in
> 1995, when I was figuring out how to get Reno to boot my VAX using a
> CQD-220.  :-)  You don't have to present any interrupt vector, but you

	Has it been that long? ;)

> shouldn't lie to the controller about this.  Instead of setting the

	But if you do present a vector then everything should work, right?

	The problem isn't in the standalone 'ra' driver though - that seems
	to be working.   The boot block though ends up in an endless loop
	during the 'online the unit' command (after the initialization).

> "please interrupt" bit in the MSCP datagram, and waiting for the
> controller to set the "I've interrupted now" bit, you should set the
> "controller owns this datagram now" bit, and wait for it to clear it.
> This make much better sense, anyway, while running in polled mode.

	True.  I'd have to look at the mdec/rauboot.s sources to see
	exactly what it is doing (or not doing ;)).  The change Tim Shoppa
	made was to specify a vector and that did the trick for the Viking
	controller.

	Steven



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pups] Trouble with 2.11BSD and CQD-220
@ 2001-11-05  2:37 Chuck Dickman
  0 siblings, 0 replies; 6+ messages in thread
From: Chuck Dickman @ 2001-11-05  2:37 UTC (permalink / raw)


\x03I have a QBus SCSI disk controller (Horray!) and it is working
fine. Except... I cannot get it to boot directly from the SCSI drive. 

More detail.... The processor is an 11/73 and the SCSI controller is a
CMD CQD-220 with a Fujitsu 220MB drive. The CQD-220 is set as the
primary
MSCP controller and an RQDX3 with an RX50 drive as the secondary MSCP
controller. I have placed rauboot from 2.11BSD on the SCSI drive and
on a floppy. I can boot fine from the floppy, but not from the SCSI
drive. The floppy loads boot and then from there

.: ra(0,0,0)unix

boots unix from the SCSI drive.

When booting from the SCSI drive, the boot sector is loaded into memory
and then relocated. It hangs waiting for the MSCP controller to respond.
I have not diagnosed it to the command that hangs.

Is anybody else booting 2.11BSD directly from a drive attached to a
CQD-220?

-chuck



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2001-11-07  4:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-11-05  4:15 [pups] Trouble with 2.11BSD and CQD-220 Steven M. Schultz
2001-11-06 19:55 ` Tom Ivar Helbekkmo
  -- strict thread matches above, loose matches on Subject: below --
2001-11-07  4:01 Steven M. Schultz
2001-11-06 20:50 Steven M. Schultz
2001-11-07  0:48 ` Chuck Dickman
2001-11-05  2:37 Chuck Dickman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).