Fixes some 32 bit usages of NOW
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 19 Aug 2014 22:53:34 +0000 (15:53 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 19 Aug 2014 22:53:34 +0000 (15:53 -0700)
I looked for any place storing NOW in a 32 bit int, but I might have missed a
few or otherwise broke things.

kern/drivers/dev/ether.c
kern/include/ip.h
kern/src/net/arp.c
kern/src/net/ip.c
kern/src/net/ipifc.c
kern/src/net/ipv6.c
kern/src/net/tcp.c

index b928129..af71126 100644 (file)
@@ -227,7 +227,7 @@ static int etherwstat(struct chan *chan, uint8_t * dp, int n)
 
 static void etherrtrace(struct netfile *f, struct etherpkt *pkt, int len)
 {
-       int i, n;
+       uint64_t i, n;
        struct block *bp;
 
        if (qwindow(f->in) <= 0)
@@ -236,18 +236,23 @@ static void etherrtrace(struct netfile *f, struct etherpkt *pkt, int len)
                n = 58;
        else
                n = len;
-       bp = iallocb(64);
+       bp = iallocb(68);
        if (bp == NULL)
                return;
        memmove(bp->wp, pkt->d, n);
+       /* we're storing 8 bytes here (64 bit); old 9ns was 32 bit for msec */
        i = milliseconds();
        bp->wp[58] = len >> 8;
        bp->wp[59] = len;
-       bp->wp[60] = i >> 24;
-       bp->wp[61] = i >> 16;
-       bp->wp[62] = i >> 8;
-       bp->wp[63] = i;
-       bp->wp += 64;
+       bp->wp[60] = i >> 56;
+       bp->wp[61] = i >> 48;
+       bp->wp[62] = i >> 40;
+       bp->wp[63] = i >> 32;
+       bp->wp[64] = i >> 24;
+       bp->wp[65] = i >> 16;
+       bp->wp[66] = i >> 8;
+       bp->wp[67] = i;
+       bp->wp += 68;
        qpass(f->in, bp);
 }
 
index 523feb9..1033e7f 100644 (file)
@@ -146,9 +146,9 @@ struct Iplifc {
        uint8_t tentative;                      /* =1 => v6 dup disc on, =0 => confirmed unique */
        uint8_t onlink;                         /* =1 => onlink, =0 offlink. */
        uint8_t autoflag;                       /* v6 autonomous flag */
-       long validlt;                           /* v6 valid lifetime */
-       long preflt;                            /* v6 preferred lifetime */
-       long origint;                           /* time when addr was added */
+       uint64_t validlt;                               /* v6 valid lifetime */
+       uint64_t preflt;                                /* v6 preferred lifetime */
+       uint64_t origint;                               /* time when addr was added */
        struct Iplink *link;            /* addresses linked to this lifc */
        struct Iplifc *next;
 };
@@ -159,7 +159,7 @@ struct Iplink {
        struct Iplifc *lifc;
        struct Iplink *selflink;        /* next link for this local address */
        struct Iplink *lifclink;        /* next link for this ifc */
-       uint32_t expire;
+       uint64_t expire;
        struct Iplink *next;            /* free list */
        struct kref ref;
 };
index 769cc24..d06413f 100644 (file)
@@ -576,7 +576,7 @@ int arpread(struct arp *arp, char *p, uint32_t offset, int len)
        return n;
 }
 
-extern int rxmitsols(struct arp *arp)
+static uint64_t rxmitsols(struct arp *arp)
 {
        unsigned int sflag;
        struct block *next, *xp;
@@ -584,7 +584,7 @@ extern int rxmitsols(struct arp *arp)
        struct Fs *f;
        uint8_t ipsrc[IPaddrlen];
        struct Ipifc *ifc = NULL;
-       long nrxt;
+       uint64_t nrxt;
 
        qlock(&arp->qlock);
        f = arp->f;
@@ -679,7 +679,7 @@ static void rxmitproc(void *v)
 {
        ERRSTACK(2);
        struct arp *arp = v;
-       long wakeupat;
+       uint64_t wakeupat;
 
        arp->rxmitp = current;
        //print("arp rxmitproc started\n");
index bde05d4..7a9033c 100644 (file)
@@ -76,7 +76,7 @@ struct fragment4 {
        uint32_t src;
        uint32_t dst;
        uint16_t id;
-       uint32_t age;
+       uint64_t age;
 };
 
 struct fragment6 {
@@ -85,7 +85,7 @@ struct fragment6 {
        uint8_t src[IPaddrlen];
        uint8_t dst[IPaddrlen];
        unsigned int id;
-       uint32_t age;
+       uint64_t age;
 };
 
 struct Ipfrag {
index 428b7d2..7fe5d72 100644 (file)
@@ -447,8 +447,8 @@ char *ipifcadd(struct Ipifc *ifc, char **argv, int argc, int tentative,
        } else {        // default values
                lifc->onlink = 1;
                lifc->autoflag = 1;
-               lifc->validlt = 0xffffffff;
-               lifc->preflt = 0xffffffff;
+               lifc->validlt = UINT64_MAX;
+               lifc->preflt = UINT64_MAX;
                lifc->origint = NOW / 10 ^ 3;
        }
        lifc->next = NULL;
@@ -927,7 +927,7 @@ static struct Ipself *freeipself;
 static void iplinkfree(struct Iplink *p)
 {
        struct Iplink **l, *np;
-       uint32_t now = NOW;
+       uint64_t now = NOW;
 
        l = &freeiplink;
        for (np = *l; np; np = *l) {
@@ -946,7 +946,7 @@ static void iplinkfree(struct Iplink *p)
 static void ipselffree(struct Ipself *p)
 {
        struct Ipself **l, *np;
-       uint32_t now = NOW;
+       uint64_t now = NOW;
 
        l = &freeipself;
        for (np = *l; np; np = *l) {
@@ -1187,7 +1187,7 @@ int v6addrtype(uint8_t * addr)
        return unknownv6;
 }
 
-#define v6addrcurr(lifc) (( (lifc)->origint + (lifc)->preflt >= (NOW/10^3) ) || ( (lifc)->preflt == 0xffffffff ))
+#define v6addrcurr(lifc) (( (lifc)->origint + (lifc)->preflt >= (NOW/10^3) ) || ( (lifc)->preflt == UINT64_MAX ))
 
 static void findprimaryipv6(struct Fs *f, uint8_t * local)
 {
@@ -1615,9 +1615,9 @@ char *ipifcaddpref6(struct Ipifc *ifc, char **argv, int argc)
 {
        uint8_t onlink = 1;
        uint8_t autoflag = 1;
-       long validlt = 0xffffffff;
-       long preflt = 0xffffffff;
-       long origint = NOW / 10 ^ 3;
+       uint64_t validlt = UINT64_MAX;
+       uint64_t preflt = UINT64_MAX;
+       uint64_t origint = NOW / 10 ^ 3;
        uint8_t prefix[IPaddrlen];
        int plen = 64;
        struct Iplifc *lifc;
index 77a2f64..4321e57 100644 (file)
@@ -107,7 +107,7 @@ struct Fragment4 {
        uint32_t src;
        uint32_t dst;
        uint16_t id;
-       uint32_t age;
+       uint64_t age;
 };
 
 struct fragment6 {
@@ -116,7 +116,7 @@ struct fragment6 {
        uint8_t src[IPaddrlen];
        uint8_t dst[IPaddrlen];
        unsigned int id;
-       uint32_t age;
+       uint64_t age;
 };
 
 struct Ipfrag {
index ec405c4..fedcd60 100644 (file)
@@ -117,8 +117,8 @@ struct Tcptimer {
        Tcptimer *prev;
        Tcptimer *readynext;
        int state;
-       int start;
-       int count;
+       uint64_t start;
+       uint64_t count;
        void (*func) (void *);
        void *arg;
 };
@@ -254,8 +254,8 @@ struct Tcpctl {
        int srtt;                                       /* Shortened round trip */
        int mdev;                                       /* Mean deviation of round trip */
        int kacounter;                          /* count down for keep alive */
-       unsigned int sndsyntime;        /* time syn sent */
-       uint32_t time;                          /* time Finwait2 or Syn_received was sent */
+       uint64_t sndsyntime;            /* time syn sent */
+       uint64_t time;                          /* time Finwait2 or Syn_received was sent */
        int nochecksum;                         /* non-zero means don't send checksums */
        int flgcnt;                                     /* number of flags in the sequence (FIN,SEQ) */
 
@@ -291,7 +291,7 @@ struct Limbo {
        uint16_t mss;                           /* mss from the other end */
        uint16_t rcvscale;                      /* how much to scale rcvd windows */
        uint16_t sndscale;                      /* how much to scale sent windows */
-       uint32_t lastsend;                      /* last time we sent a synack */
+       uint64_t lastsend;                      /* last time we sent a synack */
        uint8_t version;                        /* v4 or v6 */
        uint8_t rexmits;                        /* number of retransmissions */
 };
@@ -455,7 +455,7 @@ static int tcpstate(struct conv *c, char *state, int n)
        s = (Tcpctl *) (c->ptcl);
 
        return snprintf(state, n,
-                                       "%s qin %d qout %d srtt %d mdev %d cwin %lu swin %lu>>%d rwin %lu>>%d timer.start %d timer.count %d rerecv %d katimer.start %d katimer.count %d\n",
+                                       "%s qin %d qout %d srtt %d mdev %d cwin %lu swin %lu>>%d rwin %lu>>%d timer.start %llu timer.count %llu rerecv %d katimer.start %d katimer.count %d\n",
                                        tcpstates[s->state],
                                        c->rq ? qlen(c->rq) : 0,
                                        c->wq ? qlen(c->wq) : 0,
@@ -1500,7 +1500,7 @@ static void limborexmit(struct Proto *tcp)
        Limbo **l, *lp;
        int h;
        int seen;
-       uint32_t now;
+       uint64_t now;
 
        tpriv = tcp->priv;
 
@@ -1746,7 +1746,7 @@ int seq_ge(uint32_t x, uint32_t y)
 void tcpsynackrtt(struct conv *s)
 {
        Tcpctl *tcb;
-       int delta;
+       uint64_t delta;
        struct tcppriv *tpriv;
 
        tcb = (Tcpctl *) s->ptcl;
@@ -2812,7 +2812,7 @@ void tcptimeout(void *arg)
                                localclose(s, Etimedout);
                                break;
                        }
-                       netlog(s->p->f, Logtcprxmt, "timeout rexmit 0x%lx %d/%d\n",
+                       netlog(s->p->f, Logtcprxmt, "timeout rexmit 0x%lx %llu/%llu\n",
                                   tcb->snd.una, tcb->timer.start, NOW);
                        tcpsettimer(tcb);
                        tcprxmit(s);