~kris/9p

9hist

fd2b7c0db9aa3256c498007e41359bdfc066a9e4 — David du Colombier 33 years ago b020507
Plan 9 from Bell Labs 1993-02-18
3 files changed, 14 insertions(+), 11 deletions(-)

M port/ipdat.h
M port/tcpinput.c
M port/tcpoutput.c
M port/ipdat.h => port/ipdat.h +4 -4
@@ 217,7 217,7 @@ struct Tctl
		int	wl2;
	} snd;
	struct {
		int	nxt;		/* Receive pointer to next byte slot */
		ulong	nxt;		/* Receive pointer to next byte slot */
		ushort	wnd;		/* Receive window incoming */
		int	up;		/* Urgent pointer */
	} rcv;


@@ 230,7 230,7 @@ struct Tctl
	int	rerecv;			/* Overlap of data rerecevived */
	ushort	window;			/* Recevive window */
	int	max_snd;		/* Max send */
	int	last_ack;		/* Last acknowledege received */
	ulong	last_ack;		/* Last acknowledege received */
	char	backoff;		/* Exponential backoff counter */
	char	flags;			/* State flags */
	char	tos;			/* Type of service */


@@ 311,7 311,7 @@ struct Ipconv
enum
{
	MAX_TIME 	= (1<<20),	/* Forever */
	TCP_ACK		= 200,		/* Timed ack sequence every 200ms */
	TCP_ACK		= 50,		/* Timed ack sequence in ms */

	URG		= 0x20,		/* Data marked urgent */
	ACK		= 0x10,		/* Aknowledge is valid */


@@ 326,7 326,7 @@ enum

	MSS_LENGTH	= 4,		/* Mean segment size */
	MSL2		= 10,
	MSPTICK		= 100,		/* Milliseconds per timer tick */
	MSPTICK		= 50,		/* Milliseconds per timer tick */
	DEF_MSS		= 1024,		/* Default mean segment */
	DEF_RTT		= 1000,		/* Default round trip */


M port/tcpinput.c => port/tcpinput.c +6 -3
@@ 84,7 84,8 @@ tcpflushincoming(Ipconv *s)
	seg.dest = s->psrc;
	seg.flags = ACK;	
	seg.seq = tcb->snd.ptr;
	seg.ack = tcb->last_ack = tcb->rcv.nxt;
	tcb->last_ack = tcb->rcv.nxt;
	seg.ack = tcb->rcv.nxt;

	sndrst(s->dst, Myip[Myself], 0, &seg);
	localclose(s, 0);


@@ 409,10 410,12 @@ tcpinput(Ipifc *ifc, Block *bp)

				tcprcvwin(s);
	
				tcpgo(&tcb->acktimer);
				if(tcb->acktimer.state != TimerON)
					tcpgo(&tcb->acktimer);

				if(tcb->max_snd <= tcb->rcv.nxt-tcb->last_ack)
				if(tcb->rcv.nxt-tcb->last_ack > Streamhi/2)
					tcb->flags |= FORCE;

				break;
			case Finwait2:
				/* no process to read the data, send a reset */

M port/tcpoutput.c => port/tcpoutput.c +4 -4
@@ 46,10 46,9 @@ tcpoutput(Ipconv *s)
		 */
		if(tcb->snd.wnd == 0){
			if(sent != 0) {
				if (tcb->flags&FORCE)
						tcb->snd.ptr = tcb->snd.una;
				else
				if ((tcb->flags&FORCE) == 0)
					break;
				tcb->snd.ptr = tcb->snd.una;
			}
			usable = 1;
		}


@@ 92,8 91,9 @@ tcpoutput(Ipconv *s)
			}
			break;
		}
		tcb->last_ack = tcb->rcv.nxt;
		seg.seq = tcb->snd.ptr;
		seg.ack = tcb->last_ack = tcb->rcv.nxt;
		seg.ack = tcb->rcv.nxt;
		seg.wnd = tcb->rcv.wnd;

		/* Pull out data to send */