~kris/9p

9hist

517e4604a170bd835c325607f1500bcefec5a276 — David du Colombier 25 years ago 54efb1f
Plan 9 from Bell Labs 2001-03-06
13 files changed, 30 insertions(+), 35 deletions(-)

M ip/devip.c
M ip/esp.c
M ip/gre.c
M ip/icmp.c
M ip/il.c
M ip/ip.h
M ip/ipifc.c
M ip/ipmux.c
M ip/rudp.c
M ip/tcp.c
M ip/udp.c
M port/portfns.h
M port/qio.c
M ip/devip.c => ip/devip.c +2 -2
@@ 988,7 988,7 @@ ipwrite(Chan* ch, void *v, long n, vlong off)
			error(Eperm);

		qwrite(c->wq, a, n);
		x->kick(c, n);
		x->kick(c);
		break;
	case Qarp:
		return arpwrite(f, a, n);


@@ 1081,7 1081,7 @@ ipbwrite(Chan* ch, Block* bp, ulong offset)
			bp = concatblock(bp);
		n = BLEN(bp);
		qbwrite(c->wq, bp);
		x->kick(c, n);
		x->kick(c);
		return n;
	default:
		return devbwrite(ch, bp, offset);

M ip/esp.c => ip/esp.c +1 -1
@@ 220,7 220,7 @@ espclose(Conv *c)
}

void
espkick(Conv *c, int)
espkick(Conv *c)
{
	Esphdr *eh;
	Esptail *et;

M ip/gre.c => ip/gre.c +1 -3
@@ 119,14 119,12 @@ greclose(Conv *c)
int drop;

static void
grekick(Conv *c, int l)
grekick(Conv *c)
{
	GREhdr *ghp;
	Block *bp;
	uchar laddr[IPaddrlen], raddr[IPaddrlen];

	USED(l);

	bp = qget(c->wq);
	if(bp == nil)
		return;

M ip/icmp.c => ip/icmp.c +1 -2
@@ 148,13 148,12 @@ icmpclose(Conv *c)
}

static void
icmpkick(Conv *c, int l)
icmpkick(Conv *c)
{
	Icmp *p;
	Block *bp;
	Icmppriv *ipriv;

	USED(l);
	bp = qget(c->wq);
	if(bp == nil)
		return;

M ip/il.c => ip/il.c +1 -4
@@ 335,7 335,7 @@ ilclose(Conv *c)
}

void
ilkick(Conv *c, int l)
ilkick(Conv *c)
{
	Ilhdr *ih;
	Ilcb *ic;


@@ 345,9 345,6 @@ ilkick(Conv *c, int l)
	Fs *f;
	Ilpriv *priv;


	USED(l);

	f = c->p->f;
	priv = c->p->priv;
	ic = (Ilcb*)c->ptcl;

M ip/ip.h => ip/ip.h +1 -1
@@ 235,7 235,7 @@ struct Proto
	int		x;		/* protocol index */
	int		ipproto;	/* ip protocol type */

	void		(*kick)(Conv*, int);
	void		(*kick)(Conv*);
	char*		(*connect)(Conv*, char**, int);
	char*		(*announce)(Conv*, char**, int);
	char*		(*bind)(Conv*, char**, int);

M ip/ipifc.c => ip/ipifc.c +1 -1
@@ 257,7 257,7 @@ ipifcinuse(Conv *c)
 *  called when a process writes to an interface's 'data'
 */
static void
ipifckick(Conv *c, int)
ipifckick(Conv *c)
{
	Block *bp;
	Ipifc *ifc;

M ip/ipmux.c => ip/ipmux.c +1 -1
@@ 626,7 626,7 @@ ipmuxclose(Conv *c)
 *  the stack
 */
static void
ipmuxkick(Conv *c, int)
ipmuxkick(Conv *c)
{
	Block *bp;
	Iphdr *ih;

M ip/rudp.c => ip/rudp.c +1 -1
@@ 333,7 333,7 @@ flow(void *v)
}

void
rudpkick(Conv *c, int)
rudpkick(Conv *c)
{
	Udphdr *uh;
	ushort rport;

M ip/tcp.c => ip/tcp.c +15 -16
@@ 176,7 176,6 @@ struct Tcpctl
	uchar	backoff;		/* Exponential backoff counter */
	int	backedoff;		/* ms we've backed off for rexmits */
	uchar	flags;			/* State flags */
	ulong	sndcnt;			/* Amount of data in send queue */
	Reseq	*reseq;			/* Resequencing queue */
	Timer	timer;			/* Activity timer */
	Timer	acktimer;		/* Acknowledge timer */


@@ 189,6 188,7 @@ struct Tcpctl
	uint	sndsyntime;		/* time syn sent */
	ulong	time;			/* time Finwait2 or Syn_received was sent */
	int	nochecksum;		/* non-zero means don't send checksums */
	int	flgcnt;			/* 1 when we're waiting for a SYN/FIN ACK */

	Tcphdr	protohdr;		/* prototype header */
};


@@ 393,13 393,13 @@ tcpclose(Conv *c)
		break;
	case Syn_received:
	case Established:
		tcb->sndcnt++;
		tcb->flgcnt++;
		tcb->snd.nxt++;
		tcpsetstate(c, Finwait1);
		tcpoutput(c);
		break;
	case Close_wait:
		tcb->sndcnt++;
		tcb->flgcnt++;
		tcb->snd.nxt++;
		tcpsetstate(c, Last_ack);
		tcpoutput(c);


@@ 408,7 408,7 @@ tcpclose(Conv *c)
}

void
tcpkick(Conv *s, int len)
tcpkick(Conv *s)
{
	Tcpctl *tcb;



@@ 433,7 433,6 @@ tcpkick(Conv *s, int len)
		/*
		 * Push data
		 */
		tcb->sndcnt += len;
		tcprcvwin(s);
		tcpoutput(s);
		break;


@@ 888,7 887,7 @@ tcpsndsyn(Tcpctl *tcb)
	tcb->snd.una = tcb->iss;
	tcb->snd.ptr = tcb->rttseq;
	tcb->snd.nxt = tcb->rttseq;
	tcb->sndcnt++;
	tcb->flgcnt++;
	tcb->flags |= FORCE;
	tcb->sndsyntime = msec;
}


@@ 1150,7 1149,7 @@ update(Conv *s, Tcp *seg)
	if((tcb->flags & SYNACK) == 0) {
		tcb->flags |= SYNACK;
		acked--;
		tcb->sndcnt--;
		tcb->flgcnt--;
		goto done;
	}



@@ 1200,9 1199,9 @@ update(Conv *s, Tcp *seg)
	}

done:
	qdiscard(s->wq, acked);
	if(qdiscard(s->wq, acked) < acked)
		tcb->flgcnt--;

	tcb->sndcnt -= acked;
	tcb->snd.una = seg->ack;
	if(seq_gt(seg->ack, tcb->snd.urg))
		tcb->snd.urg = seg->ack;


@@ 1380,7 1379,7 @@ reset:
	if(tcptrim(tcb, &seg, &bp, &length) == -1) {
		netlog(f, Logtcp, "tcp len < 0, %lux\n", seg.seq);
		update(s, &seg);
		if(tcb->sndcnt == 0 && tcb->state == Closing) {
		if(qlen(s->wq)+tcb->flgcnt == 0 && tcb->state == Closing) {
			tcphalt(tpriv, &tcb->rtt_timer);
			tcphalt(tpriv, &tcb->acktimer);
			tcphalt(tpriv, &tcb->katimer);


@@ 1445,7 1444,7 @@ reset:
			break;
		case Finwait1:
			update(s, &seg);
			if(tcb->sndcnt == 0){
			if(qlen(s->wq)+tcb->flgcnt == 0){
				tcphalt(tpriv, &tcb->rtt_timer);
				tcphalt(tpriv, &tcb->acktimer);
				tcpsetkacounter(tcb);


@@ 1460,7 1459,7 @@ reset:
			break;
		case Closing:
			update(s, &seg);
			if(tcb->sndcnt == 0) {
			if(qlen(s->wq)+tcb->flgcnt == 0) {
				tcphalt(tpriv, &tcb->rtt_timer);
				tcphalt(tpriv, &tcb->acktimer);
				tcphalt(tpriv, &tcb->katimer);


@@ 1471,7 1470,7 @@ reset:
			break;
		case Last_ack:
			update(s, &seg);
			if(tcb->sndcnt == 0) {
			if(qlen(s->wq)+tcb->flgcnt == 0) {
				localclose(s, nil);
				goto raise;
			}


@@ 1560,7 1559,7 @@ reset:
				break;
			case Finwait1:
				tcb->rcv.nxt++;
				if(tcb->sndcnt == 0) {
				if(qlen(s->wq)+tcb->flgcnt == 0) {
					tcphalt(tpriv, &tcb->rtt_timer);
					tcphalt(tpriv, &tcb->acktimer);
					tcphalt(tpriv, &tcb->katimer);


@@ 1616,7 1615,7 @@ raise:
	qunlock(s);
	poperror();
	freeblist(bp);
	tcpkick(s, 0);
	tcpkick(s);
}

/*


@@ 1656,7 1655,7 @@ tcpoutput(Conv *s)
			tcb->flags |= FORCE;
		}
	
		sndcnt = tcb->sndcnt;
		sndcnt = qlen(s->wq)+tcb->flgcnt;
		sent = tcb->snd.ptr - tcb->snd.una;

		/* Don't send anything else until our SYN has been acked */

M ip/udp.c => ip/udp.c +1 -1
@@ 147,7 147,7 @@ udpclose(Conv *c)
}

void
udpkick(Conv *c, int)
udpkick(Conv *c)
{
	Udphdr *uh;
	ushort rport;

M port/portfns.h => port/portfns.h +1 -1
@@ 233,7 233,7 @@ int		qcanread(Queue*);
void		qclose(Queue*);
int		qconsume(Queue*, void*, int);
Block*		qcopy(Queue*, int, ulong);
void		qdiscard(Queue*, int);
int		qdiscard(Queue*, int);
void		qflush(Queue*);
void		qfree(Queue*);
int		qfull(Queue*);

M port/qio.c => port/qio.c +3 -1
@@ 406,7 406,7 @@ qget(Queue *q)
/*
 *  throw away the next 'len' bytes in the queue
 */
void
int
qdiscard(Queue *q, int len)
{
	Block *b;


@@ 443,6 443,8 @@ qdiscard(Queue *q, int len)

	if(dowakeup)
		wakeup(&q->wr);

	return sofar;
}

/*