summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/9/bitsy/devether.c17
-rw-r--r--sys/src/9/kw/devether.c20
-rw-r--r--sys/src/9/mtx/devether.c17
-rw-r--r--sys/src/9/omap/devether.c20
-rw-r--r--sys/src/9/pc/devether.c22
-rw-r--r--sys/src/9/ppc/devether.c18
-rw-r--r--sys/src/9/teg2/devether.c20
7 files changed, 47 insertions, 87 deletions
diff --git a/sys/src/9/bitsy/devether.c b/sys/src/9/bitsy/devether.c
index 457c09e22..fe117f8a6 100644
--- a/sys/src/9/bitsy/devether.c
+++ b/sys/src/9/bitsy/devether.c
@@ -414,7 +414,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++;
@@ -431,18 +431,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 || memcmp(pkt->d, ether->bcast, sizeof(pkt->d)) == 0 || ether->prom)
+ if(etheriq(ether, bp, loopback) == 0)
+ return len;
- if(!loopback){
- qbwrite(ether->oq, bp);
+ qbwrite(ether->oq, bp);
+ if(ether->transmit != nil)
ether->transmit(ether);
- } else
- freeb(bp);
-
return len;
}
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;
}
diff --git a/sys/src/9/mtx/devether.c b/sys/src/9/mtx/devether.c
index 8a5457954..51c63857d 100644
--- a/sys/src/9/mtx/devether.c
+++ b/sys/src/9/mtx/devether.c
@@ -204,7 +204,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++;
@@ -221,18 +221,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 || memcmp(pkt->d, ether->bcast, sizeof(pkt->d)) == 0 || ether->prom)
+ if(etheriq(ether, bp, loopback) == 0)
+ return len;
- if(!loopback){
- qbwrite(ether->oq, bp);
+ qbwrite(ether->oq, bp);
+ if(ether->transmit != nil)
ether->transmit(ether);
- } else
- freeb(bp);
-
return len;
}
diff --git a/sys/src/9/omap/devether.c b/sys/src/9/omap/devether.c
index 0fd506792..de03504d9 100644
--- a/sys/src/9/omap/devether.c
+++ b/sys/src/9/omap/devether.c
@@ -211,7 +211,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++;
@@ -228,19 +228,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;
}
diff --git a/sys/src/9/pc/devether.c b/sys/src/9/pc/devether.c
index 91d1c8574..3fe9d9645 100644
--- a/sys/src/9/pc/devether.c
+++ b/sys/src/9/pc/devether.c
@@ -217,7 +217,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++;
@@ -234,21 +234,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){
- if(qfull(ether->oq))
- print("etheroq: WARNING: ether->oq full!\n");
- 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;
}
diff --git a/sys/src/9/ppc/devether.c b/sys/src/9/ppc/devether.c
index 2f8553932..112a581b4 100644
--- a/sys/src/9/ppc/devether.c
+++ b/sys/src/9/ppc/devether.c
@@ -205,10 +205,11 @@ 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++;
+
/*
* Check if the packet has to be placed back onto the input queue,
* i.e. if it's a loopback or broadcast packet or the interface is
@@ -221,18 +222,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 || memcmp(pkt->d, ether->bcast, sizeof(pkt->d)) == 0 || ether->prom)
+ if(etheriq(ether, bp, loopback) == 0)
+ return len;
- if(!loopback){
- qbwrite(ether->oq, bp);
+ qbwrite(ether->oq, bp);
+ if(ether->transmit != nil)
ether->transmit(ether);
- } else
- freeb(bp);
-
return len;
}
diff --git a/sys/src/9/teg2/devether.c b/sys/src/9/teg2/devether.c
index 04bce26a9..eb0ae1b21 100644
--- a/sys/src/9/teg2/devether.c
+++ b/sys/src/9/teg2/devether.c
@@ -209,7 +209,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++;
@@ -226,19 +226,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;
}