Fixes netif binding
authorBarret Rhoden <brho@cs.berkeley.edu>
Sun, 20 Oct 2013 17:01:28 +0000 (10:01 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 22 Jan 2014 19:13:14 +0000 (11:13 -0800)
We were setting the netfile's type to 0, which means we would never
detect/match any incoming packets.  This includes broadcast packets that
we sent ourselves (such as an arp, telling us that we are 10.0.2.15).

The root issue is atoi vs strtol.  I ran into this issue a while ago,
and atoi should catch any further cases of this.

kern/src/net/netif.c

index e689217..cb985f2 100644 (file)
@@ -321,7 +321,7 @@ netifwrite(struct netif *nif, struct chan *c, void *a, long n)
        qlock(&nif->qlock);
        f = nif->f[NETID(c->qid.path)];
        if((p = matchtoken(buf, "connect")) != 0){
-               type = atoi(p);
+               type = strtol(p, 0, 0); /* allows any base, though usually hex */
                if(typeinuse(nif, type))
                        error(Einuse);
                f->type = type;
@@ -337,7 +337,7 @@ netifwrite(struct netif *nif, struct chan *c, void *a, long n)
        } else if((p = matchtoken(buf, "scanbs")) != 0){
                /* scan for base stations */
                if(f->scan == 0){
-                       type = atoi(p);
+                       type = strtol(p, 0, 0); /* allows any base, though usually hex */
                        if(type < 5)
                                type = 5;
                        if(nif->scanbs != NULL)