diff options
Diffstat (limited to 'sys/src/9/kw/devether.c')
| -rw-r--r-- | sys/src/9/kw/devether.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/sys/src/9/kw/devether.c b/sys/src/9/kw/devether.c index 63d06f62c..df59c22b1 100644 --- a/sys/src/9/kw/devether.c +++ b/sys/src/9/kw/devether.c @@ -213,7 +213,7 @@ etheriq(Ether* ether, Block* bp, int fromwire) static int etheroq(Ether* ether, Block* bp) { - int len, loopback, s; + int len, loopback; Etherpkt *pkt; ether->outpackets++; @@ -230,19 +230,13 @@ etheroq(Ether* ether, Block* bp) pkt = (Etherpkt*)bp->rp; len = BLEN(bp); loopback = memcmp(pkt->d, ether->ea, sizeof(pkt->d)) == 0; - if(loopback || memcmp(pkt->d, ether->bcast, sizeof(pkt->d)) == 0 || ether->prom){ - s = splhi(); - etheriq(ether, bp, 0); - splx(s); - } - - if(!loopback){ - qbwrite(ether->oq, bp); - if(ether->transmit != nil) - ether->transmit(ether); - } else - freeb(bp); + if(loopback || memcmp(pkt->d, ether->bcast, sizeof(pkt->d)) == 0 || ether->prom) + if(etheriq(ether, bp, loopback) == 0) + return len; + qbwrite(ether->oq, bp); + if(ether->transmit != nil) + ether->transmit(ether); return len; } |
