summaryrefslogtreecommitdiff
path: root/sys/src/9/kw/devether.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/src/9/kw/devether.c')
-rw-r--r--sys/src/9/kw/devether.c20
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;
}