From 2bfcded8114f8feb706c317f9425cfca1fb63c43 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Tue, 27 Feb 2001 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2001-02-27 --- ip/devip.c | 2 +- ip/il.c | 25 ++++++++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/ip/devip.c b/ip/devip.c index df13383196334d1985e6bb4fc027031064bc50a7..c724b378c00f1cd288c6d52c49492b39458f4519 100644 --- a/ip/devip.c +++ b/ip/devip.c @@ -797,7 +797,7 @@ setraddrport(Conv* c, char* str) c->rport = atoi(p); p = strchr(p, '!'); if(p){ - if(strcmp(p, "!r") == 0) + if(strstr(p, "!r") != nil) c->restricted = 1; } return nil; diff --git a/ip/il.c b/ip/il.c index e5944b1c2f195f98b90bb3d3e2b43e0315ec1a34..3c3fd3b3eb0d55216ee93267003766d76f18ddda 100644 --- a/ip/il.c +++ b/ip/il.c @@ -100,6 +100,9 @@ struct Ilcb /* Control block */ ulong qt[Nqt+1]; /* state table for query messages */ int qtx; /* ... index into qt */ + /* if set, fasttimeout causes a connection request to terminate after 4*Iltickms */ + int fasttimeout; + /* timers */ ulong lastxmit; /* time of last xmit */ ulong lastrecv; /* time of last recv */ @@ -210,7 +213,7 @@ void ilfreeq(Ilcb*); void ilrexmit(Ilcb*); void ilbackoff(Ilcb*); void ilsettimeout(Ilcb*); -char* ilstart(Conv*, int); +char* ilstart(Conv*, int, int); void ilackproc(void*); void iloutoforder(Conv*, Ilhdr*, Block*); void iliput(Proto*, uchar*, Block*); @@ -229,11 +232,13 @@ static char* ilconnect(Conv *c, char **argv, int argc) { char *e; + int fast; + fast = argc > 1 && strstr(argv[1], "!fasttimeout") != nil; e = Fsstdconnect(c, argv, argc); if(e != nil) return e; - return ilstart(c, IL_CONNECT); + return ilstart(c, IL_CONNECT, fast); } static int @@ -267,7 +272,7 @@ ilannounce(Conv *c, char **argv, int argc) e = Fsstdannounce(c, argv, argc); if(e != nil) return e; - e = ilstart(c, IL_LISTEN); + e = ilstart(c, IL_LISTEN, 0); if(e != nil) return e; Fsconnected(c, nil); @@ -496,7 +501,6 @@ ilackto(Ilcb *ic, ulong ackto, Block *bp) bp->list = nil; ic->unackedbytes -= blocklen(bp); freeblist(bp); - ic->rexmit = 0; ilsettimeout(ic); } qunlock(&ic->ackq); @@ -1092,6 +1096,9 @@ ilbackoff(Ilcb *ic) pt = MaxTimeout; ic->timeout = msec + pt; + if(ic->fasttimeout) + ic->timeout = msec+Iltickms; + ic->rexmit++; } @@ -1206,6 +1213,7 @@ ilcbinit(Ilcb *ic) ic->rxtot = 0; ic->rxquery = 0; ic->qtx = 1; + ic->fasttimeout = 0; /* timers */ ic->delay = DefRtt<fasttimeout = 1; + ic->timeout = msec+Iltickms; + ic->rexmit = MaxRexmit - 4; + }; + switch(type) { default: netlog(c->p->f, Logil, "il: start: type %d\n", type);