~kris/9p

9hist

643b6b605c1751de1706a86283a0ac5d16ae3a4c — David du Colombier 34 years ago 0790130
Plan 9 from Bell Labs 1992-07-24
7 files changed, 47 insertions(+), 37 deletions(-)

M boot/key.c
M port/stip.c
M port/tcpinput.c
M port/tcpoutput.c
M ss/l.s
M ss/main.c
M ss/mmu.c
M boot/key.c => boot/key.c +6 -8
@@ 3,14 3,12 @@
#include <auth.h>
#include <../boot/boot.h>

char defpass[] = {0x64, 0x3e, 0x4d, 0x13, 0x32, 0x00, 0x0b, 0xe1, 0xce};

void
key(int islocal, Method *mp)
{
	Nvrsafe safe;
	char password[20];
	int prompt, fd, i;
	int prompt, fd;

	USED(islocal);
	USED(mp);


@@ 25,16 23,16 @@ key(int islocal, Method *mp)
	|| read(fd, &safe, sizeof safe) != sizeof safe)
		warning("can't read nvram key");

getp:
	if(prompt){
		do
			getpasswd(password, sizeof password);
		while(!passtokey(safe.machkey, password));
	}else if(nvcsum(safe.machkey, DESKEYLEN) != safe.machsum){
		warning("bad nvram key; using default password");
		/* Just so its not plain text in the binary */
		for(i=0; i<sizeof(defpass); i++)
			defpass[i] = (defpass[i]-19)^(17*(i+3));
		passtokey(safe.machkey, defpass);
		warning("bad nvram key");
		prompt = 1;
		kflag = 1;
		goto getp;
	}
	safe.machsum = nvcsum(safe.machkey, DESKEYLEN);
	if(kflag){

M port/stip.c => port/stip.c +3 -0
@@ 467,6 467,9 @@ ip_reassemble(int offset, Block *bp, Etherhdr *ip)
				fragstat.succall++;
				BLKFRAG(*l)->flen -= ovlap;
				BLKFRAG(*l)->foff += ovlap;
				/* move up ether+ip hdrs */
				memmove((*l)->rptr + ovlap, (*l)->rptr,
					 ETHER_HDR+ETHER_IPHDR);
				(*l)->rptr += ovlap;
				break;
			}

M port/tcpinput.c => port/tcpinput.c +10 -3
@@ 163,7 163,7 @@ tcp_input(Ipifc *ifc, Block *bp)
	if(bp == 0)
		return;
	
	/* Look for a connection, failing that attempt to establish a listen */
	/* Look for a connection. failing that look for a listener. */
	s = ip_conn(ifc, seg.dest, seg.source, source);
	if (s == 0) {
		if(seg.flags & SYN){


@@ 390,7 390,6 @@ tcp_input(Ipifc *ifc, Block *bp)
			case Syn_received:
			case Established:
			case Finwait1:
			case Finwait2:
				/* Place on receive queue */
				tcb->rcvcnt += blen(bp);
				if(bp){


@@ 409,6 408,12 @@ tcp_input(Ipifc *ifc, Block *bp)
				if(tcb->max_snd <= tcb->rcv.nxt-tcb->last_ack)
					tcb->flags |= FORCE;
				break;
			case Finwait2:
				/* no process to read the data, send a reset */
				if(bp)
					freeb(bp);
				reset(source, dest, tos, length, &seg);
				goto done;
			}
		}



@@ 612,8 617,10 @@ add_reseq(Tcpctl *tcb, char tos, Tcp *seg, Block *bp, ushort length)
	Reseq *rp, *rp1;

	rp = malloc(sizeof(Reseq));
	if(rp == 0)
	if(rp == 0){
		freeb(bp);	/* bp always consumed by add_reseq */
		return;
	}

	rp->seg = *seg;
	rp->tos = tos;

M port/tcpoutput.c => port/tcpoutput.c +6 -2
@@ 231,13 231,17 @@ void
tcprcvwin(Ipconv *s)				/* Call with tcb locked */
{
	Tcpctl *tcb = &s->tcpctl;
	int w;

	/* Calculate new window */
	qlock(s);
	if(s->readq) {
		tcb->rcv.wnd = Streamhi - s->readq->next->len;
		if(tcb->rcv.wnd < 0)
		/* use w because rcv.wnd is unsigned */
		w = Streamhi - s->readq->next->len;
		if(w < 0)
			tcb->rcv.wnd = 0;
		else
			tcb->rcv.wnd = w;
	}
	else
		tcb->rcv.wnd = Streamhi;

M ss/l.s => ss/l.s +15 -15
@@ 430,35 430,35 @@ TEXT	putwE16(SB), $0

	MOVW	4(FP), R8
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	ADD	$(1<<4), R7
	ADD	$VACLINESZ, R7
	MOVW	R8, (R7, 0xE)
	RETURN


M ss/main.c => ss/main.c +0 -2
@@ 96,14 96,12 @@ init0(void)
	u->p->state = Running;
	u->p->mach = m;
	spllo();
print("init0:\n"); prflush();

	u->slash = (*devtab[0].attach)(0);
	u->dot = clone(u->slash, 0);

	kproc("alarm", alarmkproc, 0);
	chandevinit();
print("alarmkp:\n"); prflush();

	if(!waserror()){
		ksetterm("sun %s");

M ss/mmu.c => ss/mmu.c +7 -7
@@ 125,8 125,8 @@ flushcontext(void)
	/*
	 * Clear context from cache
	 */
	for(i=0; i<0x1000; i+=16)
		putwE16((i<<4), 0);
	for(i=0; i<VACSIZE; i+=16*VACLINESZ)
		putwE16(i, 0);
}

void


@@ 142,9 142,9 @@ mmuinit(void)
	ulong ktop, l, i, j, c, pte;

	/*
	 * TEMP: just map the first 8M of bank 0 for the kernel - philw
	 * TEMP: just map the first 4M of bank 0 for the kernel - philw
	 */
	ktop = 8*1024*1024;
	ktop = 4*1024*1024;
	/*
	 * First map lots of memory as kernel addressable in all contexts
	 */


@@ 270,7 270,7 @@ putpmeg(ulong virt, ulong phys)
	/*
	 * Flush old entries from cache
	 */
	for(i=0; i<VACSIZE; i+=16*VACLINESZ)
	for(i=0; i<BY2PG; i+=16*VACLINESZ)
		putwD16(virt+i, 0);
	putw4(virt, phys);
}


@@ 305,8 305,8 @@ cacheinit(void)
	 */
	for(c=0; c<NCONTEXT; c++){	/* necessary? */
		putcontext(c);
		for(i=0; i<0x1000; i++)
			putw2(CACHETAGS+(i<<4), 0);
		for(i=0; i<VACSIZE; i+=VACLINESZ)
			putw2(CACHETAGS+i, 0);
	}
	putcontext(0);