~kris/9p

9hist

d6bbe2d86ff53ed2dcf484ca6c7d4f7f33360caf — David du Colombier 35 years ago 316bcac
Plan 9 from Bell Labs 1990-10-22
2 files changed, 47 insertions(+), 11 deletions(-)

M gnot/devdk.c
M port/devdk.c
M gnot/devdk.c => gnot/devdk.c +0 -4
@@ 206,7 206,6 @@ static void
dkmuxopen(Queue *q, Stream *s)
{
	Dk *dp;
	Line *lp;
	int i;

	for(dp = dk; dp < &dk[Ndk]; dp++){


@@ 223,9 222,6 @@ dkmuxopen(Queue *q, Stream *s)
			dp->lines = 16;
			dp->name[0] = 0;
			dp->wq = WR(q);
			for(lp = dp->line; lp < &dp->line[Nline]; lp++)
				if(lp->state != 0)
					panic("dkmuxopen l %d s %lux", lp-dp->line, lp->state);
			qunlock(dp);
			return;
		}

M port/devdk.c => port/devdk.c +47 -7
@@ 206,6 206,7 @@ static void
dkmuxopen(Queue *q, Stream *s)
{
	Dk *dp;
	Line *lp;
	int i;

	for(dp = dk; dp < &dk[Ndk]; dp++){


@@ 222,6 223,9 @@ dkmuxopen(Queue *q, Stream *s)
			dp->lines = 16;
			dp->name[0] = 0;
			dp->wq = WR(q);
			for(lp = dp->line; lp < &dp->line[Nline]; lp++)
				if(lp->state != 0)
					panic("dkmuxopen l %d s %lux", lp-dp->line, lp->state);
			qunlock(dp);
			return;
		}


@@ 1368,15 1372,15 @@ dkchgmesg(Dk *dp, Dkmsg *dialp, int line)
{
	Line *lp;

	if (line <= 0 || line >= dp->lines) {
		/* tell controller this line is not in use */
		dkmesg(dp, T_CHG, D_CLOSE, line, 0);
		return;
	}
	lp = &dp->line[line];
	switch (dialp->srv) {

	case D_CLOSE:		/* remote shutdown */
		if (line <= 0 || line >= dp->lines) {
			/* tell controller this line is not in use */
			dkmesg(dp, T_CHG, D_CLOSE, line, 0);
			return;
		}
		lp = &dp->line[line];
		switch (lp->state) {

		case Ldialing:


@@ 1407,6 1411,12 @@ dkchgmesg(Dk *dp, Dkmsg *dialp, int line)
		break;
	
	case D_ISCLOSED:	/* acknowledging a local shutdown */
		if (line <= 0 || line >= dp->lines) {
			/* tell controller this line is not in use */
			dkmesg(dp, T_CHG, D_CLOSE, line, 0);
			return;
		}
		lp = &dp->line[line];
		switch (lp->state) {
		case Llclose:
		case Lclosed:


@@ 1421,6 1431,36 @@ dkchgmesg(Dk *dp, Dkmsg *dialp, int line)
		}
		break;

	case D_CLOSEALL:
		for(line = dp->ncsc+1; line < dp->lines; line++){
			lp = &dp->line[line];
			switch (lp->state) {
	
			case Ldialing:
				/* simulate a failed connection */
				dkreplymesg(dp, (Dkmsg *)0, line);
				lp->state = Lrclose;
				break;
	
			case Lrclose:
			case Lconnected:
			case Llistening:
			case Lackwait:
				dkhangup(lp);
				lp->state = Lrclose;
				break;
	
			case Lopened:
				break;
	
			case Llclose:
			case Lclosed:
				lp->state = Lclosed;
				break;
			}
		}
		break;

	default:
		print("unrecognized T_CHG\n");
	}


@@ 1503,7 1543,7 @@ dktimer(void *a)
			 *  remind controller of dead lines and
			 *  timeout calls that take to long
			 */
			for (i=0; i<dp->lines; i++){
			for (i=dp->ncsc+1; i<dp->lines; i++){
				lp = &dp->line[i];
				switch(lp->state){
				case Llclose: