## diffname port/stil.c 1991/1012 ## diff -e /dev/null /n/bootesdump/1991/1012/sys/src/9/port/stil.c 0a /* * stil - Internet link protocol */ #include "u.h" #include "lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "io.h" #include "errno.h" #include "arp.h" #include "ipdat.h" #define DPRINT if(pip)print void ilrcvmsg(Ipconv *, Block *); void ilopen(Queue *q, Stream *s) { Ipconv *ipc; ipc = &ipconv[s->dev][s->id]; ipc->ipinterface = newipifc(IP_ILPROTO, ilrcvmsg, ipconv[s->dev], 1500, 512, ETHER_HDR, "IL"); qlock(ipc); ipc->ref++; qunlock(ipc); ipc->readq = RD(q); RD(q)->ptr = (void *)ipc; WR(q)->next->ptr = (void *)ipc->ipinterface; WR(q)->ptr = (void *)ipc; } void ilclose(Queue *q) { } void iloput(Queue *q, Block *bp) { Ipconv *ipc; Ilhdr *ih; int dlen; /* Prepend udp header to packet and pass on to ip layer */ ipc = (Ipconv *)(q->ptr); if(ipc->psrc == 0) error(Enoport); if(bp->type != M_DATA) { freeb(bp); error(Ebadctl); } /* Only allow atomic Il writes to form datagrams */ if(!(bp->flags & S_DELIM)) { freeb(bp); error(Emsgsize); } dlen = blen(bp); if(dlen > IL_DATMAX) { freeb(bp); error(Emsgsize); } /* Make space to fit il & ip & ethernet header */ bp = padb(bp, IL_EHSIZE+IL_HDRSIZE); ih = (Ilhdr *)(bp->rptr); hnputs(ih->illen, dlen+IL_EHSIZE+IL_HDRSIZE); hnputs(ih->ilsrc, ipc->psrc); hnputs(ih->ildst, ipc->pdst); ih->iltype = Ildata; ih->ilspec = 0; hnputl(ih->ilid, ipc->ilctl.sent++); hnputl(ih->ilack, ipc->ilctl.recvd); ih->ilsum[0] = 0; ih->ilsum[1] = 0; PUTNEXT(q, bp); } void iliput(Queue *q, Block *bp) { } . ## diffname port/stil.c 1991/1013 ## diff -e /n/bootesdump/1991/1012/sys/src/9/port/stil.c /n/bootesdump/1991/1013/sys/src/9/port/stil.c 90a { PUTNEXT(q, bp); } void ilrcvmsg(Ipconv *ipc, Block *bp) { Ilhdr *ih; ih = (Ilhdr *)bp; plen = blen(bp); if(plen < IL_EHSIZE+IL_HDRSIZE) goto drop; if(ilcksum && ptcl_csum(bp, IL_EHSIZE, plen) != 0) { print("il: cksum error\n"); goto drop; } s = ip_conn(ipc, hngets(ih->ildst), hngets(ih->ilsrc), hngetl(), IP_ILPROTO); if(s == 0) { ilsentctl(0, ih, Ilreset); goto drop; } switch(s->state) { case Closed: ilsentctl(0, ih, Ilreset); goto drop; case Syncee: case Syncer: case Established: case Closing: } drop: freeb(bp); } void ilsendctl(Ipconv *ipc, Ilhdr *inih, int type) { Ilhdr *ih; Ilcb *ic; Block *bp; bp = allocb(IL_EHSIZE+IL_HDRSIZE); ih = (Ilhdr *)(bp->rptr); ic = &ipc->ilctl; hnputs(ih->illen, IL_EHSIZE+IL_HDRSIZE); if(inih) { hnputs(ih->ilsrc, inih->ildst); hnputs(ih->ildst, inih->ilsrc); hnputl(ih->ilid, inih->recvd); hnputl(ih->ilack, inih->sent); } else { hnputs(ih->ilsrc, ipc->psrc); hnputs(ih->ildst, ipc->pdst); hnputl(ih->ilid, ic->sent); hnputl(ih->ilack, ic->recvd); } ih->iltype = type; ih->ilspec = 0; ih->ilsum[0] = 0; ih->ilsum[1] = 0; if(ilcksum) hnputs(ih->ilsum, ptcl_csum(bp, IL_EHSIZE, IL_HDRSIZE)); PUTNEXT(Iloutput, bp); } void ilackproc(void *junk) . 88d 84a /* Checksum of ilheader plus data (not ip & no pseudo header) */ if(ilcksum) hnputs(ih->ilsum, ptcl_csum(bp, IL_EHSIZE, dlen+IL_HDRSIZE)); /* Enqueue a copy on the unacked queue in case this one gets lost */ np = copyb(bp, blen(bp)); if(ic->unacked) { ic->unackedtail->next = np; ic->unackedtail = np; } else { ic->unacked = np; ic->unackedtail = np; } np->next = 0; . 80,81c hnputl(ih->ilid, ic->sent++); hnputl(ih->ilack, ic->recvd); . 73a ic = &ipc->ilctl; . 46a Block *np; . 45a Ilcb *ic; . 22a /* Start il service processes */ if(!Iloutput) { Iloutput = WR(q); /* This never goes away - we use this queue to send acks/rejects */ s->opens++; s->inuse++; kproc("ilack", ilackproc, 0); } . 16c void ilrcvmsg(Ipconv*, Block*); void ilackproc(void*); . 14a int ilcksum = 1; Queue *Iloutput; /* Il to lance output channel */ . ## diffname port/stil.c 1991/1014 ## diff -e /n/bootesdump/1991/1013/sys/src/9/port/stil.c /n/bootesdump/1991/1014/sys/src/9/port/stil.c 198a } void ilstart(Ipconv *ipc, int type, int window) { Ilcb *ic = &ipc->ilctl; if(ic->state != Ilclosed) return; ic->unacked = 0; ic->outoforder = 0; initseq += TK2MS(MACHP(0)->ticks); ic->sent = initseq; ic->recvd = ic->sent; ic->lastack = ic->sent; ic->window = window; switch(type) { case IL_PASSIVE: ic->state = Illistening; break; case IL_ACTIVE: ic->state = Ilsyncer; ilsendctl(ipc, 0, Ilsync); break; } . 174,177c hnputs(ih->ilsrc, nhgets(inih->ildst)); hnputs(ih->ildst, nhgets(inih->ilsrc)); hnputl(ih->ilid, nhgetl(inih->ilack)); hnputl(ih->ilack, nhgetl(inih->ilid)); . 147,155d 143c ilsendctl(0, ih, Ilreset); . 141c s = ip_conn(ipc, nhgets(ih->ildst), nhgets(ih->ilsrc), nhgetl(ih->src), IP_ILPROTO); . 128a int plen; Ipconv *s; . 19a void ilsendctl(Ipconv *, Ilhdr *, int); . 16a static int initseq = 25000; . ## diffname port/stil.c 1991/1015 ## diff -e /n/bootesdump/1991/1014/sys/src/9/port/stil.c /n/bootesdump/1991/1015/sys/src/9/port/stil.c 17a char *ilstate[] = { "Closed", "Syncer", "Syncee", "Established", "Listening", "Closing" }; . ## diffname port/stil.c 1991/1019 ## diff -e /n/bootesdump/1991/1015/sys/src/9/port/stil.c /n/bootesdump/1991/1019/sys/src/9/port/stil.c 189c if(!ack) { ic->sent++; /* Maybe needs locking */ ilackq(&ipc->ilctl, bp); } PUTNEXT(Ipoutput, bp); . 168c /* Ip fields */ hnputl(ih->src, Myip); hnputl(ih->dst, ipc->dst); ih->proto = IP_ILPROTO; hnputs(ih->illen, IL_HDRSIZE); . 164a bp->wptr += IL_EHSIZE+IL_HDRSIZE; . 159a switch(s->ilctl.state) { case Ilclosed: case Ilclosing: case Illistener: error(Ehungup); } switch(h->type) { case Ilsync: if(s->ilctl.state == Ilsync) s->ilctl.state = Ilestablished; freeb(bp); break; case Ilack: ilackto(&s->ilctl, hngetl(g->ilack)); freeb(bp); break; case Ilquerey: ilsendctl(s, 0, Ilack, 1); freeb(bp); break; case Ildataquery: case Ildata: ilackto(&s->ilctl, hngetl(h->ilack)); bp->rptr += IL_EHSIZE+IL_HDRSIZE; PUTNEXT(s->readq, bp); break; case Ilreset: s->ilctl.state = Closed; freeb(bp); } } void ilsendctl(Ipconv *ipc, Ilhdr *inih, int type, int ack) { . 158c ilprocess(Ipconv *s, Ihdr *h, Block *bp) . 151,153c for(s = ipc; s < etab; s++) { if(s->state == Illistening && s->sport == 0) { /* Do the listener stuff */ ilprocess(s, ih, bp); return; } } ilsendctl(0, ih, Ilreset); . 146,149c etab = &ipc[conf.ip]; for(s = ipc; s < etab; s++) { if(s->sport == ih->ildst && s->dport == ih->ilsrc) { ilprocess(s, ih, bp); return; } . 119c void ilackto(Ilctl *ic, ulong ackto) { Ilhdr *h; Block *bp; for(;;) { lock(ic); if(ic->unacked) { h = (Ilhdr *)ic->unacked->rptr; if(ackto < hngetl(h->ilack)) { unlock(ic); break; } bp = ic->unacked; ic->unacked = bp->next; unlock(ic); freeb(bp); } else { unlock(ic); break; } } . 117a unlock(ic); } . 108a lock(ic); . 106a ilackq(ic, bp); PUTNEXT(q, bp); } void ilackq(Ilctl *ic, Block *bp) { Block *np; . 93c /* Ip fields */ hnputl(ih->src, Myip); hnputl(ih->dst, ipc->dst); ih->proto = IP_ILPROTO; /* Il fields */ hnputs(ih->illen, dlen+IL_HDRSIZE); . 69a switch(ipc->ilctl.state) { case Ilclosed: case Ilsyncee: case Illistening: case Ilclosing: error(Ehungup); } . 65d 34a } if(ilkproc == 0) { ilkproc = 1; . 30,31c if(!Ipoutput) { Ipoutput = WR(q); . 27a static int ilkproc; . 16c . ## diffname port/stil.c 1991/1022 ## diff -e /n/bootesdump/1991/1019/sys/src/9/port/stil.c /n/bootesdump/1991/1022/sys/src/9/port/stil.c 327c ilsendctl(ipc, 0, Ilsync, 1); . 250c s->ilctl.state = Ilclosed; . 245c ilackto(&s->ilctl, nhgetl(h->ilack)); . 236c ilackto(&s->ilctl, nhgetl(h->ilack)); . 229c switch(h->iltype) { . 225c case Illistening: . 220c ilprocess(Ipconv *s, Ilhdr *h, Block *bp) . 215c ilsendctl(0, ih, Ilreset, 0); drop: . 209c if(s->ilctl.state == Illistening && s->psrc == 0) { . 202c if(s->psrc == sp && s->pdst == dp) { . 199a sp = nhgets(ih->ildst); dp = nhgets(ih->ilsrc); . 187c Ipconv *s, *etab; short sp, dp; . 160c if(ackto < nhgetl(h->ilack)) { . 151c ilackto(Ilcb *ic, ulong ackto) . 130c ilackq(Ilcb *ic, Block *bp) . 22c void ilsendctl(Ipconv*, Ilhdr*, int, int); void ilackq(Ilcb*, Block*); void ilprocess(Ipconv*, Ilhdr*, Block*); . ## diffname port/stil.c 1991/1023 ## diff -e /n/bootesdump/1991/1022/sys/src/9/port/stil.c /n/bootesdump/1991/1023/sys/src/9/port/stil.c 336d 219a reset: . 216c new = ipincoming(ipc); if(new == 0) goto reset; if(ih->type != Ilsync) goto reset; new->newcon = 1; new->ipinterface = s->ipinterface; s->ipinterface->ref++; new->psrc = sp; new->pdst = dp; new->dst = nhgetl(ih->src); ilprocess(new, ih, bp); wakeup(&s->listenr); . 212a . 189c Ipconv *s, *etab, *new; . 17,19d 15c int ilcksum = 1; static int initseq = 25000; char *ilstate[] = { "Closed", "Syncer", "Syncee", "Established", "Listening", "Closing" }; . ## diffname port/stil.c 1991/1024 ## diff -e /n/bootesdump/1991/1023/sys/src/9/port/stil.c /n/bootesdump/1991/1024/sys/src/9/port/stil.c 314c if(!ack && ipc) { . 300a hnputl(ih->dst, ipc->dst); . 294a hnputl(ih->dst, nhgetl(inih->src)); . 292a hnputl(ih->src, Myip); . 290,291d 271a nb = allocb(0); nb->type = M_HANGUP; PUTNEXT(s->readq, nb); . 267a /* Check and trim to length */ . 242a Block *nb; . 224a s->curlog++; . 214c if(s->ilctl.state == Illistening && s->pdst == 0) { . 212a if(s->curlog > s->backlog) { print("Backlog\n"); goto reset; } . 206c if(s->psrc == sp && s->pdst == dp && s->dst == dst) { . 203a dst = nhgetl(ih->src); print("got packet from %d.%d.%d.%d %d %d\n", fmtaddr(dst), sp, dp); . 191c ih = (Ilhdr *)bp->rptr; . 189a Ipaddr dst; . ## diffname port/stil.c 1991/1025 ## diff -e /n/bootesdump/1991/1024/sys/src/9/port/stil.c /n/bootesdump/1991/1025/sys/src/9/port/stil.c 290a } void iloutoforder(Ipconv *s, Ilhdr *h, Block *bp) { Block *f, **l; Ilcb *ic; ulong id; uchar *lid; ic = &s->ilctl; if(ic->outoforder == 0) { ic->outoforder = bp; bp->next = 0; return; } id = nhgetl(h->id); l = &ic->outoforder; for(f = *l; f; f = f->next) { lid = ((Ilhdr*)(bp->rptr))->ilid; if(id < nhgetl(lid)) break; l = &f->next; } bp->next = *l; *l = bp; . 286,288c hungup: if(s->readq) { nb = allocb(0); nb->type = M_HANGUP; PUTNEXT(s->readq, nb); } . 280,282c switch(s->ilctl.state) { default: iloutoforder(s, h, bp); break; case Ilestablished: id = nhgetl(h->ilid); if(id < s->ilctl.recvd) freeb(bp); else if(id > s->ilctl.recvd) iloutoforder(s, h, bp); else { bp->rptr += IL_EHSIZE+IL_HDRSIZE; PUTNEXT(s->readq, bp); } } . 270c ack = nhgetl(h->ilack); if(s->ilctl.recvd+1 == ack) s->ilctl.recvd = ack; ilackto(&s->ilctl, ack); . 264,268d 262a /* Passive actions based on packet type */ . 259,260c goto hungup; . 256a case Ilsyncee: switch(h->iltype) { case Ilsync: ilsendctl(s, 0, Ilsync, 0); break; case Ilack: s->ilctl.state = Ilestablished; break; } break; . 255a /* Active transition machine - this tracks connection state */ . 254a ulong id, ack; . 240a s->ipinterface->ref++; s->curlog++; . 237a new->ilctl.state = Ilsyncee; . 234,235d 229c if(ih->iltype != Ilsync) . 227c if(new == 0) . 224c if(s->ilctl.state == Illistening && s->pdst == 0 && s->dst == 0) { . 221d 218,219c if(s->curlog > s->backlog) . 157,173c while(ic->unacked) { h = (Ilhdr *)ic->unacked->rptr; if(ackto < nhgetl(h->ilack)) break; bp = ic->unacked; ic->unacked = bp->next; freeb(bp); . 148d 138d ## diffname port/stil.c 1991/1026 ## diff -e /n/bootesdump/1991/1025/sys/src/9/port/stil.c /n/bootesdump/1991/1026/sys/src/9/port/stil.c 396c ic->start = ic->sent; ic->recvd = 0; . 362a print("sendctl: id %d ack %d\n", ic->sent, ic->recvd); . 341a bp->flags |= S_DELIM; . 304a . 302a /* Process out of order packets */ if(ic->state == Ilestablished) { while(ic->outoforder) { bp = ic->outoforder; oh = (Ilhdr*)bp->rptr; oid = nhgetl(oh->ilid); print("recvd = %d outoforder = %d\n", ic->recvd, oid); if(oid < ic->recvd) { ic->outoforder = bp->next; freeb(bp); } if(oid == ic->recvd) { print("outoforder %d\n", oid); ic->recvd++; ic->outoforder = bp->next; bp->rptr += IL_EHSIZE+IL_HDRSIZE; PUTNEXT(s->readq, bp); } } } . 298a nb->flags |= S_DELIM; . 287a s->ilctl.recvd++; . 282d 276c ilackto(&s->ilctl, ack); . 264,266d 262a default: freeb(bp); break; . 255a case Ilsyncer: if(h->iltype == Ilsync && ic->start == ack) { ic->recvd = id; ilsendctl(s, 0, Ilack, 0); ic->state = Ilestablished; } break; . 252c ic->state = Ilestablished; . 248a ic->recvd = id; . 245c switch(ic->state) { . 243a id = nhgetl(h->ilid); ack = nhgetl(h->ilack); ic = &s->ilctl; . 242c Ilcb *ic; Ilhdr *oh; ulong id, ack, oid; . 222a initseq += TK2MS(MACHP(0)->ticks); new->ilctl.sent = initseq; . ## diffname port/stil.c 1991/1028 ## diff -e /n/bootesdump/1991/1026/sys/src/9/port/stil.c /n/bootesdump/1991/1028/sys/src/9/port/stil.c 327a if(oid > ic->recvd) break; . ## diffname port/stil.c 1991/1030 ## diff -e /n/bootesdump/1991/1028/sys/src/9/port/stil.c /n/bootesdump/1991/1030/sys/src/9/port/stil.c 370,371d 361,368c else { id = nhgetl(h->id); l = &ic->outoforder; for(f = *l; f; f = f->next) { lid = ((Ilhdr*)(bp->rptr))->ilid; if(id > nhgetl(lid)) break; l = &f->next; } bp->next = *l; *l = bp; . 359d 355d 342a if(sendack) ilsendctl(s, 0, Ilack, 1); print("revd = %d sent = %d\n", ic->recvd, ic->sent); . 338c bp->next = 0; dlen = nhgets(oh->illen)-IL_HDRSIZE; bp = btrim(bp, IL_EHSIZE+IL_HDRSIZE, dlen); . 322c if(ic->state == Ilestablished && s->readq) { . 304c dlen = nhgets(h->illen)-IL_HDRSIZE; bp = btrim(bp, IL_EHSIZE+IL_HDRSIZE, dlen); . 290a sendack = 1; . 267,268c ic->recvd = id+1; sendack = 1; . 246c ulong id, ack, oid, dlen; int sendack = 0; . 215,216d 211d 208a /* Look for a listener */ . 205a if(ih->iltype != Ilsync) goto drop; . 203d 195,196d 186c illen = nhgets(ih->illen); if(illen+IL_EHSIZE > plen) goto drop; if(ilcksum && ptcl_csum(bp, IL_EHSIZE, illen) != 0) { . 175c int plen, illen; . 160a bp->next = 0; . 144,145c ic->unackedtail = np; . 140,142c else . 138c if(ic->unacked) . 126d 77d 59a Ipconv *s; s = (Ipconv *)(q->ptr); qlock(s); s->ref--; qunlock(s); s->readq = 0; . 34d 31d ## diffname port/stil.c 1991/10302 ## diff -e /n/bootesdump/1991/1030/sys/src/9/port/stil.c /n/bootesdump/1991/10302/sys/src/9/port/stil.c 436a Rendez wait; Ipconv *base, *end, *s; base = (Ipconv*)a; end = &base[conf.ip]; for(;;) { tsleep(&wait, return0, 0, 250); for(s = base; s < end; s++) { if(s->ilctl.state == Ilclosed) continue; } } . 435c ilackproc(void *a) . 381c bp->list = *l; . 379c l = &f->list; . 375c for(f = *l; f; f = f->list) { . 370c bp->list = 0; . 343,344c ic->outoforder = bp->list; bp->list = 0; . 337c ic->outoforder = bp->list; . 316c ic->state = Ilclosed; . 305c else if(s->readq == 0 || id > ic->recvd) . 297,298c ilackto(ic, ack); switch(ic->state) { . 287c ilackto(ic, ack); . 163a if(ic->unacked == 0) print("ack empty: %d\n", ackto); . 160,161c ic->unacked = bp->list; bp->list = 0; . 146c np->list = 0; . 142c ic->unackedtail->list = np; . 93c for(f = bp; f && (f->flags&S_DELIM) == 0; f = f->next) ; if(f ==0 || (f->flags & S_DELIM) == 0) { . 74c Block *np, *f; . 39c kproc("ilack", ilackproc, ipconv[s->dev]); . ## diffname port/stil.c 1991/1101 ## diff -e /n/bootesdump/1991/10302/sys/src/9/port/stil.c /n/bootesdump/1991/1101/sys/src/9/port/stil.c 449,450c /* Decide if we have to do the action !! */ switch(s->ilctl.state) { case Ilclosed: case Illistening: break; case Ilclosing: bp = s->ilctl.unacked; if(bp) { np = copyb(bp, blen(bp)); PUTNEXT(Ipoutput, np); } break; case Ilsyncer: case Ilsyncee: case Ilestablished: break; } . 447c tsleep(&ilackr, return0, 0, 100); . 441a Block *bp, *np; . 440d 430c if(ack == 0 && ipc) { . 420d 354,358d 344d 336d 330c /* Since recvd may have changed we can process out of order packets */ . 318c case Ilclose: . 312,313c bp->rptr += IL_EHSIZE+IL_HDRSIZE; . 310c else if(s->readq) { . 308c else if(id > s->ilctl.recvd) . 300,301c ilackto(&s->ilctl, ack); switch(s->ilctl.state) { . 298c ilsendctl(s, 0, Ilack, 1); /* NO break */ . 275c ilsendctl(s, 0, Ilack, 1); . 253d 241c ilsendctl(0, ih, Ilclose, 0); . 219c if(s->ilctl.state == Illistening) if(s->pdst == 0) if(s->dst == 0) { . 209d 204,205c for(s = ipc; s < etab; s++) if(s->psrc == sp) if(s->pdst == dp) if(s->dst == dst) { . 166d 123a ih->iltype = Ildata; ih->ilspec = 0; . 120,121d 95c if((f->flags & S_DELIM) == 0) { . 93c for(f = bp; f->next; f = f->next) . 64a qunlock(s); switch(ic->state) { case Ilclosed: break; case Ilsyncer: case Ilsyncee: case Ilestablished: for(bp = ic->outoforder; bp; bp = next) { next = bp->list; freeb(bp); } ic->outoforder = 0; ic->state = Ilclosing; ilsendctl(s, 0, Ilclose, 0); break; Illistening: ic->state = Ilclosed; break; Ilclosing: /* ?? */ break; } . 63d 60a ic = &s->ilctl; . 58a Ilcb *ic; Block *bp, *next; . 15,16c int ilcksum = 1; static int initseq = 25000; static Rendez ilackr; . ## diffname port/stil.c 1991/1102 ## diff -e /n/bootesdump/1991/1101/sys/src/9/port/stil.c /n/bootesdump/1991/1102/sys/src/9/port/stil.c 474,479d 472d 346c ic->state = Ilclosing; . 326c /* No break */ . 307a ilsendctl(s, 0, Ilclose, 0); ic->state = Ilclosed; /* No break */ case Ilclosed: . 306d 279a int sendack = 0; . 270d 267a drop: freeb(bp); return; . 87,89d 70a case Ilclosing: . ## diffname port/stil.c 1991/1104 ## diff -e /n/bootesdump/1991/1102/sys/src/9/port/stil.c /n/bootesdump/1991/1104/sys/src/9/port/stil.c 280d ## diffname port/stil.c 1991/1105 ## diff -e /n/bootesdump/1991/1104/sys/src/9/port/stil.c /n/bootesdump/1991/1105/sys/src/9/port/stil.c 492a ic->timeout = 0; . 478a if(++ic->timeout == Fasttime) { if(ic->lastack < ic->recvd) ilsendctl(s, 0, Ilstate, 1); ic->timeout = 0; } . 477a case Ilsyncer: ilsendctl(s, 0, Ilsync, 1); if(++ic->timeout == Slowtime) { ilhangup(s); ic->state = Ilclosed; s->dst = 0; s->pdst = 0; ic->timeout = 0; } break; . 476c break; . 474a break; . 471,472c ic = &s->ilctl; switch(ic->state) { . 462a Ilcb *ic; . 409a bp->list = *l; *l = bp; . 398,408c id = nhgetl(h->id); l = &ic->outoforder; for(f = *l; f; f = f->list) { lid = ((Ilhdr*)(bp->rptr))->ilid; if(id > nhgetl(lid)) break; l = &f->list; . 396c return; . 393a bp->list = 0; . 384a if(s->readq == 0) return; ic = &s->ilctl; if(ic->state != Ilestablished) return; while(ic->outoforder) { bp = ic->outoforder; oh = (Ilhdr*)bp->rptr; oid = nhgetl(oh->ilid); if(oid > ic->recvd) break; if(oid < ic->recvd) { ic->outoforder = bp->list; freeb(bp); } if(oid == ic->recvd) { ic->recvd++; ic->outoforder = bp->list; bp->list = 0; dlen = nhgets(oh->illen)-IL_HDRSIZE; bp = btrim(bp, IL_EHSIZE+IL_HDRSIZE, dlen); PUTNEXT(s->readq, bp); } } } . 383a void ilpullup(Ipconv *s) { Ilcb *ic; Ilhdr *oh; ulong oid, dlen; Block *bp; . 360,380c void ilhangup(Ipconv *s) { Block *nb; if(s->readq) { nb = allocb(0); nb->type = M_HANGUP; nb->flags |= S_DELIM; PUTNEXT(s->readq, nb); . 358a } . 357a break; . 350,356c ilhangup(s); /* No break */ default: . 344a ilpullup(s); . 316c case Ilstate: if(ic->unacked) { nb = copyb(ic->unacked, blen(ic->unacked)); PUTNEXT(Ipoutput, nb); } else ilsendctl(s, 0, Ilack, 1); . 311c ilhangup(s); freeb(bp); return; . 303a ilpullup(s); . 285a ic->timeout = 0; . 279,280c ulong id, ack, dlen; . 184c break; . 24a void ilpullup(Ipconv*); void ilhangup(Ipconv*); . 19a enum { Slowtime = 20, Fasttime = 1, }; . ## diffname port/stil.c 1991/1106 ## diff -e /n/bootesdump/1991/1105/sys/src/9/port/stil.c /n/bootesdump/1991/1106/sys/src/9/port/stil.c 566c ilsendctl(ipc, 0, Ilsync); . 531,535d 521,528d 519a break; . 510c tsleep(&ilackr, return0, 0, 250); . 492,495d 481c id = ic->sent; if(type == Ilsync) id = ic->start; hnputl(ih->ilid, id); . 457a ulong id; . 453c ilsendctl(Ipconv *ipc, Ilhdr *inih, int type) . 376a ilprocess(Ipconv *s, Ilhdr *h, Block *bp) { Ilcb *ic = &s->ilctl; print("%s start %d rstart %d recvd %d sent %d\n", ilstate[ic->state], ic->start, ic->rstart, ic->recvd, ic->sent); print("pkt(%s id %d ack %d)\n", iltype[h->iltype], nhgetl(h->ilid), nhgetl(h->ilack)); _ilprocess(s, h, bp); print("%s start %d rstart %d recvd %d sent %d\n", ilstate[ic->state], ic->start, ic->rstart, ic->recvd, ic->sent); } void . 375a /* DEBUG */ . 365,370d 353,363d 351c ic->state = Ilclosed; ilsendctl(s, 0, Ilclose); ilhangup(s); . 336,349c case Ilclosing: switch(h->iltype) { case Ilclose: if(ack == ic->sent) { ic->state = Ilclosed; ilhangup(s); } ic->recvd = id; ilsendctl(s, 0, Ilclose); break; . 322,334d 315,320c case Illistening: . 312a if(h->iltype == Ildataquery) ilsendctl(s, 0, Ilstate); break; case Ilack: ilackto(ic, ack); freeb(bp); break; case Ilquerey: ilackto(ic, ack); ilsendctl(s, 0, Ilstate); freeb(bp); break; case Ilstate: ilackto(ic, ack); if(ic->unacked) { nb = copyb(ic->unacked, blen(ic->unacked)); h = (Ilhdr*)nb; h->iltype = Ildataquery; hnputl(h->ilack, ic->recvd); PUTNEXT(Ipoutput, nb); } freeb(bp); break; case Ilclose: freeb(bp); if(ic->start >= ack || ack < ic->sent) break; ic->sent++; ic->recvd = ack; ilsendctl(s, 0, Ilclose); ic->state = Ilclosing; for(nb = ic->unacked; nb; nb = next) { next = nb->list; freeb(nb); } for(nb = ic->outoforder; nb; nb = next) { next = nb->list; freeb(nb); } ic->unacked = 0; ic->outoforder = 0; break; . 307,311c case Ilestablished: switch(h->iltype) { case Ilsync: if(id != ic->start) { ic->state = Ilclosed; ilhangup(s); } else ilsendctl(s, 0, Ilack); freeb(bp); break; case Ildata: case Ildataquery: if(id < ic->recvd) { freeb(bp); break; } if(ack >= ic->recvd) ilackto(ic, ack); iloutoforder(s, h, bp); . 305a freeb(bp); . 304a case Ilclose: if(ack == ic->start) { ic->state = Ilclosed; ilhangup(s); } break; . 303c if(ack == ic->start) { ic->state = Ilestablished; ilpullup(s); } . 301a case Ilclose: if(ack == ic->start) { ic->state = Ilclosed; ilhangup(s); } break; } freeb(bp); break; case Ilsyncee: switch(h->iltype) { default: break; case Ilsync: if(id != ic->rstart || ack != 0) ic->state = Ilclosed; else { ic->recvd = id; ilsendctl(s, 0, Ilsync); } break; . 299,300c if(ack != ic->start) { ilhangup(s); ic->state = Ilclosed; } else { ic->recvd = id; ic->rstart = id; ilsendctl(s, 0, Ilack); ic->state = Ilestablished; ilpullup(s); } . 297a default: break; . 296c default: panic("il unknown state"); case Ilclosed: freeb(bp); break; case Ilsyncer: . 293,294d 286a Block *nb, *next; . 285d 283c _ilprocess(Ipconv *s, Ilhdr *h, Block *bp) . 278c print("reset\n"); ilsendctl(0, ih, Ilclose); . 274a print("drop\n"); . 265a ic = &new->ilctl; ic->state = Ilsyncee; initseq += TK2MS(MACHP(0)->ticks); ic->sent = initseq; ic->start = ic->sent; ic->recvd = 0; ic->rstart = nhgetl(ih->ilid); . 262,264d 209a Ilcb *ic; . 192a ic->lastack = ackto; . 191c ack = nhgetl(h->ilack); if(ackto < ack) . 187a ulong ack; . 174d 163a delay(100); . 91c ic->sent++; ilsendctl(s, 0, Ilclose); . 88a ic->unacked = 0; . 84a for(bp = ic->unacked; bp; bp = next) { next = bp->list; freeb(bp); } . 28c void ilsendctl(Ipconv*, Ilhdr*, int); . 18a char *iltype[] = { "sync", "data", "dataquerey", "ack", "querey", "state", "close" }; . 17a Rendez poor; /* DEBUG */ . 14d ## diffname port/stil.c 1991/1107 ## diff -e /n/bootesdump/1991/1106/sys/src/9/port/stil.c /n/bootesdump/1991/1107/sys/src/9/port/stil.c 655a } void ilfreeq(Ilcb *ic) { Block *bp, *next; for(bp = ic->unacked; bp; bp = next) { next = bp->list; freeb(bp); } for(bp = ic->outoforder; bp; bp = next) { next = bp->list; freeb(bp); } ic->unacked = 0; ic->outoforder = 0; . 644c ic->lastack = ic->next; . 641,642c ic->next = initseq; ic->start = ic->next; . 594a print("ctl(%s id %d ack %d %d->%d) ", iltype[ih->iltype], nhgetl(ih->ilid), nhgetl(ih->ilack), nhgets(ih->ilsrc), nhgets(ih->ildst)); . 581c id = ic->next; . 471,472c print("%s rcv %d snt %d\n", ilstate[ic->state], ic->recvd, ic->next); . 465,467c print("%s rcv %d/%d snt %d/%d pkt(%s id %d ack %d %d->%d) ", ilstate[ic->state], ic->rstart, ic->recvd, ic->start, ic->next, iltype[h->iltype], nhgetl(h->ilid), nhgetl(h->ilack), nhgets(h->ilsrc), nhgets(h->ildst)); . 449d 445,446c else { ic->recvd = id; ilsendctl(s, 0, Ilclose); } . 441c if(ack == ic->next) { . 422,431c ilfreeq(ic); . 418,419d 416c if(id != ic->recvd) . 278,279c ic->next = initseq; ic->start = ic->next; . 159c hnputl(ih->ilid, ic->next++); . 97d 86,95c ilfreeq(ic); . 33a void ilfreeq(Ilcb*); . ## diffname port/stil.c 1991/1108 ## diff -e /n/bootesdump/1991/1107/sys/src/9/port/stil.c /n/bootesdump/1991/1108/sys/src/9/port/stil.c 576c DBG("\nctl(%s id %d ack %d %d->%d)\n", . 453c DBG("%s rcv %d snt %d\n", ilstate[ic->state], ic->recvd, ic->next); . 446c USED(ic); DBG("%s rcv %d/%d snt %d/%d pkt(%s id %d ack %d %d->%d) ", . 431,432d 425,428c ilsendctl(s, 0, Ilclose); . 420a ic->recvd = id; . 407c if(id != ic->recvd) . 400a h->ilsum[0] = 0; h->ilsum[1] = 0; if(ilcksum) hnputs(h->ilsum, ptcl_csum(nb, IL_EHSIZE, IL_HDRSIZE)); . 235a if(ilcksum && ptcl_csum(bp, IL_EHSIZE, illen) != 0) { st = (ih->iltype < 0 || ih->iltype > Ilclose) ? "?" : iltype[ih->iltype]; print("il: cksum error, pkt(%s id %d ack %d %d.%d.%d.%d/%d->%d)\n", st, nhgetl(ih->ilid), nhgetl(ih->ilack), fmtaddr(dst), sp, dp); goto drop; } . 227,231d 215a char *st; . 140d 138d 110c ic = &ipc->ilctl; switch(ic->state) { . 13a #define DBG if(0)print . ## diffname port/stil.c 1991/1115 ## diff -e /n/bootesdump/1991/1108/sys/src/9/port/stil.c /n/bootesdump/1991/1115/sys/src/9/port/stil.c 259c new = ipincoming(ipc, s); . 95a netdisown(&s->ipinterface->net, s->index); . 1c /* . ## diffname port/stil.c 1991/1119 ## diff -e /n/bootesdump/1991/1115/sys/src/9/port/stil.c /n/bootesdump/1991/1119/sys/src/9/port/stil.c 18c . 1c /* . ## diffname port/stil.c 1991/1120 ## diff -e /n/bootesdump/1991/1119/sys/src/9/port/stil.c /n/bootesdump/1991/1120/sys/src/9/port/stil.c 630a */ initseq = 1; . 629a /* . 273c */ initseq =1; ic->next = initseq; . 271a /* . 233a print("len = %d BLEN = %d IL %d\n", blen(bp), BLEN(bp), illen); . 163a print("TX len = %d BLEN = %d IL %d\n", blen(bp), BLEN(bp), dlen+IL_HDRSIZE); . 77d 58,60d 14c #define DBG if(1)print . ## diffname port/stil.c 1991/1121 ## diff -e /n/bootesdump/1991/1120/sys/src/9/port/stil.c /n/bootesdump/1991/1121/sys/src/9/port/stil.c 584c */ . 581c /* DBG("\nctl(%s id %d ack %d %d->%d)\n", . 458c DBG("%11s rcv %d snt %d\n", ilstate[ic->state], ic->recvd, ic->next); . 451c DBG("%11s rcv %d/%d snt %d/%d pkt(%s id %d ack %d %d->%d) ", . 408c hnputs(h->ilsum, ptcl_csum(nb, IL_EHSIZE, nhgets(h->illen))); . 319a ilhangup(s); . 318d 240,242c if(s->psrc == sp && s->pdst == dp && s->dst == dst) { . 231d 217d 160d 157d ## diffname port/stil.c 1991/1122 ## diff -e /n/bootesdump/1991/1121/sys/src/9/port/stil.c /n/bootesdump/1991/1122/sys/src/9/port/stil.c 606a ic->timeout++; if(ic->unacked == 0) break; if(ic->timeout >= Slowtime) { ic->state = Ilclosed; ilhangup(s, Ctimedout); break; } print("Rxmit %d/%d %s", s->psrc, s->pdst, ilstate[ic->state]); ilsendctl(s, 0, Ilstate); . 604a ic->timeout++; if(ic->timeout >= Slowtime) { ic->state = Ilclosed; ilhangup(s, Ctimedout); break; } print("Rxmit %d/%d %s", s->psrc, s->pdst, ilstate[ic->state]); ilsendctl(s, 0, Ilsync); . 602a ic->timeout++; if(ic->timeout >= Slowtime) { ic->state = Ilclosed; ilhangup(s, Ctimedout); break; } print("Rxmit %d/%d %s", s->psrc, s->pdst, ilstate[ic->state]); ilsendctl(s, 0, Ilsync); . 600a ic->timeout++; if(ic->timeout >= Slowtime) { ic->state = Ilclosed; ilhangup(s, 0); } . 597,598c default: . 593c tsleep(&ilackr, return0, 0, Mstime); . 591d 461c if(msg) { l = strlen(msg); nb = allocb(l); strcpy((char*)nb->wptr, msg); nb->wptr += l; } else nb = allocb(0); . 458a ulong l; . 456c ilhangup(Ipconv *s, char *msg) . 452c DBG("%-11s rcv %d snt %d\n", ilstate[ic->state], ic->recvd, ic->next); . 445c DBG("%-11s rcv %d/%d snt %d/%d pkt(%-6s id %d ack %d %d->%d) ", . 426c ilhangup(s, 0); . 364c ilhangup(s, Creset); . 353c ilhangup(s, Crefused); . 326c ilhangup(s, Crefused); . 313c ilhangup(s, Crefused); . 299a ic->timeout = 0; . 254a } . 253c if(new == 0) { print("incoming\n"); . 251a if(s->curlog > s->backlog) goto reset; . 244,246d 236c if(s->ilctl.state != Ilclosed) if(s->psrc == sp) if(s->pdst == dp) if(s->dst == dst) { . 158d 156a . 89a s->psrc = 0; . 88c case Illistening: . 36a char Crefused[] = "connection refused"; char Ctimedout[] = "connection timed out"; char Creset[] = "connection reset by peer"; . 34c void ilhangup(Ipconv*, char*); . 24,25c Mstime = 200, Slowtime = Mstime*20, Fasttime = Mstime, . 14c #define DBG if(0)print . ## diffname port/stil.c 1991/1124 ## diff -e /n/bootesdump/1991/1122/sys/src/9/port/stil.c /n/bootesdump/1991/1124/sys/src/9/port/stil.c 707a qunlock(&ic->outo); . 706d 701a ic->unacked = 0; qunlock(&ic->ackq); qlock(&ic->outo); . 697a qlock(&ic->ackq); . 688c ilsendctl(ipc, 0, Ilsync, ic->start, ic->recvd); . 679d 674,677c ic->start = initseq; ic->next = ic->start+1; . 672c ic->slowtime = Slowtime; . 653,654d 650c ilhangup(s, etime); . 648c } if(ic->timeout >= ic->fasttime) { ilrexmit(ic); Backoff(ic->fasttime); } if(ic->timeout >= ic->slowtime) { . 645,646c ic->acktime -= Iltickms; if(ic->acktime <= 0) ilsendctl(s, 0, Ilack, ic->next, ic->recvd); if(ic->unacked == 0) { ic->timeout = 0; . 641,642d 638,639c ilhangup(s, etime); . 635,636c if(ic->timeout >= ic->fasttime) { ilsendctl(s, 0, Ilsync, ic->start, ic->recvd); Backoff(ic->fasttime); } if(ic->timeout >= ic->slowtime) { . 625,633d 618,619c if(ic->timeout >= ic->fasttime) { ilsendctl(s, 0, Ilclose, ic->next, ic->recvd); Backoff(ic->fasttime); } if(ic->timeout >= ic->slowtime) { . 615c case Ilclosed: case Illistening: . 613a ic->timeout += Iltickms; . 611c tsleep(&ilackr, return0, 0, Iltickms); . 609a . 584c hnputl(ih->ilack, ack); ic->acktime = Ackkeepalive; . 580,582d 556d 551c ilsendctl(Ipconv *ipc, Ilhdr *inih, int type, ulong id, ulong ack) . 546,547c qunlock(&ic->outo); . 538,544c /* Packet is acceptable so sort onto receive queue for pullup */ qlock(&ic->outo); ic->oblks++; if(ic->outoforder == 0) ic->outoforder = bp; else { l = &ic->outoforder; for(f = *l; f; f = f->list) { lid = ((Ilhdr*)(f->rptr))->ilid; if(id < nhgetl(lid)) { bp->list = f; *l = bp; qunlock(&ic->outo); return; } l = &f->list; } *l = bp; . 533,534c id = nhgetl(h->ilid); /* Window checks */ if(id <= ic->recvd || ic->oblks > ic->window) { freeb(bp); . 520a qunlock(&ic->outo); . 512,519c if(oid != ic->recvd+1) break; ic->recvd = oid; ic->outoforder = bp->list; ic->oblks--; qunlock(&ic->outo); bp->list = 0; dlen = nhgets(oh->illen)-IL_HDRSIZE; bp = btrim(bp, IL_EHSIZE+IL_HDRSIZE, dlen); PUTNEXT(s->readq, bp); qlock(&ic->outo); . 510a continue; . 506,508c if(oid <= ic->recvd) { . 501a qlock(&ic->outo); . 484a s->psrc = 0; s->pdst = 0; s->dst = 0; . 471a DBG("hangup! %s %d/%d\n", msg ? msg : "??", s->psrc, s->pdst); . 470c int l; . 463c DBG("%11s rcv %d snt %d\n", ilstate[ic->state], ic->recvd, ic->next); . 456c DBG("%11s rcv %d/%d snt %d/%d pkt(%s id %d ack %d %d->%d) ", . 448a void ilrexmit(Ilcb *ic) { Block *nb; Ilhdr *h; if(ic->unacked == 0) return; nb = copyb(ic->unacked, blen(ic->unacked)); h = (Ilhdr*)nb->rptr; DBG("rxmit %d.", nhgetl(h->ilid)); h->iltype = Ildataquery; hnputl(h->ilack, ic->recvd); h->ilsum[0] = 0; h->ilsum[1] = 0; if(ilcksum) hnputs(h->ilsum, ptcl_csum(nb, IL_EHSIZE, nhgets(h->illen))); PUTNEXT(Ipoutput, nb); } . 439c Starttimer(ic); . 434a ilsendctl(s, 0, Ilclose, ic->next, ic->recvd); . 424a Starttimer(ic); . 422c ilsendctl(s, 0, Ilclose, ic->next, ic->recvd); . 420c if(ack < ic->start || ack > ic->next) . 405,415c ilrexmit(ic); Starttimer(ic); . 400c ilsendctl(s, 0, Ilstate, ic->next, ic->recvd); Starttimer(ic); . 395a Starttimer(ic); . 391,392c ilsendctl(s, 0, Ilstate, ic->next, ic->recvd); . 383,388c Starttimer(ic); ilackto(ic, ack); ic->acktime = Acktime; . 381a Starttimer(ic); ilackto(ic, ack); ic->acktime = Acktime; iloutoforder(s, h, bp); ilpullup(s); break; . 377,378c else { ilsendctl(s, 0, Ilack, ic->next, ic->rstart); Starttimer(ic); } . 375c ilhangup(s, "remote close"); . 364c ilhangup(s, "remote close"); . 362c if(id == ic->next) { . 358a Starttimer(ic); . 352c ilsendctl(s, 0, Ilsync, ic->start, ic->recvd); Starttimer(ic); . 337c ilhangup(s, "remote close"); . 331a Starttimer(ic); . 329c ilsendctl(s, 0, Ilack, ic->next, ic->recvd); . 324c ilhangup(s, "connection rejected"); . 310d 294,295c ilsendctl(0, ih, Ilclose, 0, 0); . 290d 280a ic->slowtime = Slowtime; ic->window = Defaultwin; . 276,278c ic->start = initseq; ic->next = ic->start+1; . 274d 264d 261,262c if(new == 0) . 259a . 242d 200a qunlock(&ic->ackq); . 195c . 192,193c id = nhgetl(h->ilid); if(ackto < id) . 189a qlock(&ic->ackq); . 188c ulong id; . 179a qunlock(&ic->ackq); . 174a qlock(&ic->ackq); . 164a ic->acktime = Ackkeepalive; . 163d 95a s->pdst = 0; s->dst = 0; . 91c ilsendctl(s, 0, Ilclose, ic->next, ic->recvd); . 38,41d 36a void ilrexmit(Ilcb*); . 35c void ilhangup(Ipconv*, char *); . 31c void ilsendctl(Ipconv*, Ilhdr*, int, ulong, ulong); . 28a #define Backoff(s) (s)*=2 #define Starttimer(s) {(s)->timeout = 0; (s)->fasttime = Fasttime;} . 24,26c Iltickms = 100, Slowtime = 20*Iltickms, Fasttime = 5*Iltickms, Acktime = 3*Iltickms, Ackkeepalive = 1000*Iltickms, Defaultwin = 20, . 21a /* Always Acktime < Fasttime < Slowtime << Ackkeepalive */ . 20a static char *etime = "connection timed out"; . ## diffname port/stil.c 1991/1125 ## diff -e /n/bootesdump/1991/1124/sys/src/9/port/stil.c /n/bootesdump/1991/1125/sys/src/9/port/stil.c 714a } void ilbackoff(Ilcb *ic) { if(ic->fasttime < Slowtime/2) ic->fasttime += Fasttime; else ic->fasttime = (ic->fasttime)*3/2; . 704c ilbackoff(ic); . 687c ilbackoff(ic); . 676c ilbackoff(ic); . 187a } . 186c else { /* Start timer since we may have been idle for some time */ Starttimer(ic); . 45a void ilbackoff(Ilcb*); . 35a /* Packet dropping putnext for testing */ #define DPUTNEXT(q, b) if((MACHP(0)->ticks&7) != 3)PUTNEXT(q, b);else{freeb(b);print(".");} . 34d 27,30c Slowtime = 200*Iltickms, Fasttime = 4*Iltickms, Acktime = 2*Iltickms, Ackkeepalive = 6000*Iltickms, . ## diffname port/stil.c 1991/1126 ## diff -e /n/bootesdump/1991/1125/sys/src/9/port/stil.c /n/bootesdump/1991/1126/sys/src/9/port/stil.c 107d ## diffname port/stil.c 1991/1214 ## diff -e /n/bootesdump/1991/1126/sys/src/9/port/stil.c /n/bootesdump/1991/1214/sys/src/9/port/stil.c 748a ic->oblks = 0; . ## diffname port/stil.c 1991/1219 ## diff -e /n/bootesdump/1991/1214/sys/src/9/port/stil.c /n/bootesdump/1991/1219/sys/src/9/port/stil.c 68c 1500, 60, ETHER_HDR, "IL"); . ## diffname port/stil.c 1991/1230 ## diff -e /n/bootesdump/1991/1219/sys/src/9/port/stil.c /n/bootesdump/1991/1230/sys/src/9/port/stil.c 471a qunlock(&ic->ackq); . 470a qlock(&ic->ackq); . 194a qunlock(&ic->ackq); . 193d ## diffname port/stil.c 1992/0101 ## diff -e /n/bootesdump/1991/1230/sys/src/9/port/stil.c /n/bootesdump/1992/0101/sys/src/9/port/stil.c 473a if(nb == 0) return; . 472c if(ic->unacked) nb = copyb(ic->unacked, blen(ic->unacked)); . 468,470c nb = 0; . ## diffname port/stil.c 1992/0103 ## diff -e /n/bootesdump/1992/0101/sys/src/9/port/stil.c /n/bootesdump/1992/0103/sys/src/9/port/stil.c 161a unlock(&ic->nxl); . 160a lock(&ic->nxl); . ## diffname port/stil.c 1992/0105 ## diff -e /n/bootesdump/1992/0103/sys/src/9/port/stil.c /n/bootesdump/1992/0105/sys/src/9/port/stil.c 756d 597d 590c if(id <= ic->recvd || id > ic->recvd+ic->window) { . 564d 317,318c ulong id, ack; . 253c print("il: cksum error, pkt(%s id %lud ack %lud %d.%d.%d.%d/%d->%d)\n", . 163a hnputl(ih->ilid, id); . 162c id = ic->next++; . 160a . 116a ulong id; . ## diffname port/stil.c 1992/0106 ## diff -e /n/bootesdump/1992/0105/sys/src/9/port/stil.c /n/bootesdump/1992/0106/sys/src/9/port/stil.c 753c ic->start = initseq & 0xffffff; . 470c Block *nb, *bp; . 295c ic->start = initseq & 0xffffff; . 154a ih->frag[0] = 0; ih->frag[1] = 0; . ## diffname port/stil.c 1992/0107 ## diff -e /n/bootesdump/1992/0106/sys/src/9/port/stil.c /n/bootesdump/1992/0107/sys/src/9/port/stil.c 637a ih->frag[0] = 0; ih->frag[1] = 0; . ## diffname port/stil.c 1992/0111 ## diff -e /n/bootesdump/1992/0107/sys/src/9/port/stil.c /n/bootesdump/1992/0111/sys/src/9/port/stil.c 10c #include "../port/error.h" . ## diffname port/stil.c 1992/0213 ## diff -e /n/bootesdump/1992/0111/sys/src/9/port/stil.c /n/bootesdump/1992/0213/sys/src/9/port/stil.c 636c hnputl(ih->src, Myip[Myself]); . 157c hnputl(ih->src, Myip[Myself]); . ## diffname port/stil.c 1992/0301 ## diff -e /n/bootesdump/1992/0213/sys/src/9/port/stil.c /n/bootesdump/1992/0301/sys/src/9/port/stil.c 713a ic->querytime -= Iltickms; if(ic->querytime <= 0){ ic->deathtime -= Querytime; if(ic->deathtime < 0){ ic->state = Ilclosed; ilhangup(s, etime); break; } ilsendctl(s, 0, Ilquerey, ic->next, ic->recvd); ic->querytime = Querytime; } . 328a ic->querytime = Keepalivetime; ic->deathtime = Keepalivetime; . 301a ic->querytime = Keepalivetime; ic->deathtime = Keepalivetime; . 34c #define Starttimer(s) {(s)->timeout = 0; (s)->fasttime = Fasttime; } . 30a Querytime = 60*Iltickms, /* time between queries */ Keepalivetime = 10*Querytime, /* keep alive time */ . ## diffname port/stil.c 1992/0302 ## diff -e /n/bootesdump/1992/0301/sys/src/9/port/stil.c /n/bootesdump/1992/0302/sys/src/9/port/stil.c 261,262c /* print("il: cksum error, pkt(%s id %lud ack %lud %d.%d.%d.%d/%d->%d)\n", st, nhgetl(ih->ilid), nhgetl(ih->ilack), fmtaddr(dst), sp, dp); /**/ . ## diffname port/stil.c 1992/0303 ## diff -e /n/bootesdump/1992/0302/sys/src/9/port/stil.c /n/bootesdump/1992/0303/sys/src/9/port/stil.c 785a sleep(&ic->syncer, notsyncer, ic); if(ic->state == Ilclosed) error(Etimedout); . 758a static int notsyncer(void *ic) { return ((Ilcb*)ic)->state != Ilsyncer; } . 740d 724d 714d 711,712c if(ic->timeout >= ic->slowtime) . 703d 700,701c if(ic->timeout >= ic->slowtime) . 539a if(callout) wakeup(&ic->syncer); . 526a ic = &s->ilctl; callout = ic->state == Ilsyncer; ic->state = Ilclosed; . 524a Ilcb *ic; int callout; . 464d 461,462c if(ack == ic->next) . 403d 400,401c if(id != ic->start) . 392d 389,390c if(id == ic->next) . 363d 360,361c if(ack == ic->start) . 354a wakeup(&ic->syncer); . 349d 346,347c if(ack != ic->start) . 260,261c /* st = (ih->iltype < 0 || ih->iltype > Ilclose) ? "?" : iltype[ih->iltype]; print("il: cksum error, pkt(%s id %lud ack %lud %d.%d.%d.%d/%d->%d)\n", . ## diffname port/stil.c 1992/0307 ## diff -e /n/bootesdump/1992/0303/sys/src/9/port/stil.c /n/bootesdump/1992/0307/sys/src/9/port/stil.c 714a . 259a ipc->ipinterface->chkerrs++; . ## diffname port/stil.c 1992/0310 ## diff -e /n/bootesdump/1992/0307/sys/src/9/port/stil.c /n/bootesdump/1992/0310/sys/src/9/port/stil.c 767c Starttimer(ic); . ## diffname port/stil.c 1992/0321 ## diff -e /n/bootesdump/1992/0310/sys/src/9/port/stil.c /n/bootesdump/1992/0321/sys/src/9/port/stil.c 19,20c char *ilstate[] = { "Closed", "Syncer", "Syncee", "Established", "Listening", "Closing" }; char *iltype[] = { "sync", "data", "dataquerey", "ack", "querey", "state", "close" }; . 5c #include "../port/lib.h" . ## diffname port/stil.c 1992/0414 ## diff -e /n/bootesdump/1992/0321/sys/src/9/port/stil.c /n/bootesdump/1992/0414/sys/src/9/port/stil.c 297c new->newcon = s; . ## diffname port/stil.c 1992/0614 ## diff -e /n/bootesdump/1992/0414/sys/src/9/port/stil.c /n/bootesdump/1992/0614/sys/src/9/port/stil.c 777c ic->rtt = Iltickms; Starttimer(ic); . 773d 310a ic->rtt = Iltickms; . 219a if(ic->rttack == ackto) { t = TK2MS(MACHP(0)->ticks - ic->ackms); /* Guard against the ulong zero wrap */ if(t < 100*ic->rtt) ic->rtt = (ic->rtt*(ILgain-1)+t)/ILgain; if(ic->rtt < Iltickms) ic->rtt = Iltickms; } /* Cancel if we lost the packet we were interested in */ if(ic->rttack <= ackto) ic->rttack = 0; . 218c ulong id, t; . 187a /* Start the round trip timer for this packet if the timer is free */ if(ic->rttack == 0) { ic->rttack = id; ic->ackms = MACHP(0)->ticks; } . 42,44c #define Starttimer(s) {(s)->timeout = 0; (s)->fasttime = (Fasttime*(s)->rtt)/Iltickms; (s)->slowtime = (Slowtime*(s)->rtt)/Iltickms; } . 39a ILgain = 8, . ## diffname port/stil.c 1992/0615 ## diff -e /n/bootesdump/1992/0614/sys/src/9/port/stil.c /n/bootesdump/1992/0615/sys/src/9/port/stil.c 227c /* Guard against the ulong zero wrap if MACP->ticks */ . 43c #define Starttimer(s) {(s)->timeout = 0; \ (s)->fasttime = (Fasttime*(s)->rtt)/Iltickms; \ (s)->slowtime = (Slowtime*(s)->rtt)/Iltickms; } . ## diffname port/stil.c 1992/0626 ## diff -e /n/bootesdump/1992/0615/sys/src/9/port/stil.c /n/bootesdump/1992/0626/sys/src/9/port/stil.c 715c for(p = base; p < end && *p; p++) { s = *p; . 710,711c ifc = (Ipifc*)a; base = ifc->conv; end = &base[Nipconv]; . 706c Ipifc *ifc; Ipconv **base, **p, **end, *s; . 564a qunlock(s); . 551a qlock(s); . 337d 318c new->ifc = s->ifc; . 313c new = ipincoming(ifc, s); . 306c for(p = ifc->conv; p < etab; p++) { s = *p; if(s == 0) break; . 300a } . 293,294c etab = &ifc->conv[Nipconv]; for(p = ifc->conv; p < etab; p++) { s = *p; if(s == 0) break; . 286c ifc->chkerrs++; . 267c Ipconv *s, **p, **etab, *new; . 262c ilrcvmsg(Ipifc *ifc, Block *bp) . 81c WR(q)->next->ptr = (void *)ipc->ifc; . 75,77c ipc = ipcreateconv(ipifc[s->dev], s->id); initipifc(ipc->ifc, IP_ILPROTO, ilrcvmsg, 1500, 60, ETHER_HDR, "IL"); . 72c kproc("ilack", ilackproc, ipifc[s->dev]); . 47c void ilrcvmsg(Ipifc*, Block*); . ## diffname port/stil.c 1992/0711 ## diff -e /n/bootesdump/1992/0626/sys/src/9/port/stil.c /n/bootesdump/1992/0711/sys/src/9/port/stil.c 716d 502c Block *nb; . 269d 124c Block *f; . 89d 76c initipifc(ipc->ifc, IP_ILPROTO, ilrcvmsg, 1500, 60, ETHER_HDR); . ## diffname port/stil.c 1992/0904 ## diff -e /n/bootesdump/1992/0711/sys/src/9/port/stil.c /n/bootesdump/1992/0904/sys/src/9/port/stil.c 791c Ilcb *i; i = ic; return i->state != Ilsyncer; . ## diffname port/stil.c 1992/0907 ## diff -e /n/bootesdump/1992/0904/sys/src/9/port/stil.c /n/bootesdump/1992/0907/sys/src/9/port/stil.c 795a . 583a ulong oid, dlen; . 582d 25c "sync", "data", "dataquerey", "ack", "querey", "state", "close" . 22a . 21c "Closed", "Syncer", "Syncee", "Established", "Listening", "Closing" . ## diffname port/stil.c 1992/1017 ## diff -e /n/bootesdump/1992/0907/sys/src/9/port/stil.c /n/bootesdump/1992/1017/sys/src/9/port/stil.c 353,357c new->newcon = s; new->ifc = s->ifc; new->psrc = sp; new->pdst = dp; new->dst = nhgetl(ih->src); ic = &new->ilctl; ic->state = Ilsyncee; initseq += TK2MS(MACHP(0)->ticks); ic->start = initseq & 0xffffff; ic->next = ic->start+1; ic->recvd = 0; ic->rstart = nhgetl(ih->ilid); ic->slowtime = Slowtime; ic->rtt = Iltickms; ic->querytime = Keepalivetime; ic->deathtime = Keepalivetime; ic->window = Defaultwin; ilprocess(new, ih, bp); s->curlog++; wakeup(&s->listenr); return; . 339,351c new = ipincoming(ifc, s); if(new == 0) goto reset; . 333,337c if(s->curlog > s->backlog) goto reset; . 329,331c if(spec) s = spec; else if(gen) s = gen; else goto drop; . 326,327c if(s->psrc == sp){ spec = s; break; } if(s->psrc == 0) gen = s; } } . 321,322d 318,319c gen = 0; spec = 0; etab = &ifc->conv[Nipconv]; for(p = ifc->conv; p < etab && *p; p++) { . 277c Ipconv *s, **p, **etab, *new, *spec, *gen; . ## diffname port/stil.c 1993/0123 ## diff -e /n/bootesdump/1992/1017/sys/src/9/port/stil.c /n/bootesdump/1993/0123/sys/src/9/port/stil.c 748c for(p = base; p < last && *p; p++) { . 744c last = &base[Nipconv]; . 739c Ipconv **base, **p, **last, *s; . ## diffname port/stil.c 1993/0328 ## diff -e /n/bootesdump/1993/0123/sys/src/9/port/stil.c /n/bootesdump/1993/0328/sys/src/9/port/stil.c 453c if(id != ic->rstart) . ## diffname port/stil.c 1993/0401 ## diff -e /n/bootesdump/1993/0328/sys/src/9/port/stil.c /n/bootesdump/1993/0401/sys/src/9/port/stil.c 16c static int initseq = 25001; . ## diffname port/stil.c 1993/0501 ## diff -e /n/bootesdump/1993/0401/sys/src/9/port/stil.c /n/fornaxdump/1993/0501/sys/src/brazil/port/stil.c 748c for(p = base; p < end && *p; p++) { . 744c end = &base[Nipconv]; . 739c Ipconv **base, **p, **end, *s; . 600,601d 598a . 16c static int initseq = 26000; . ## diffname port/stil.c 1993/0804 # deleted ## diff -e /n/fornaxdump/1993/0501/sys/src/brazil/port/stil.c /n/fornaxdump/1993/0804/sys/src/brazil/port/stil.c 1,877d