simplify loopback case, and remove unused or redundant code Reference: /n/atom/patch/applied2013/etherloop Date: Sun Dec 29 17:54:52 CET 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/k10/devether.c Sun Dec 29 17:54:05 2013 +++ /sys/src/nix/k10/devether.c Sun Dec 29 17:54:06 2013 @@ -192,21 +192,16 @@ 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){ - if(loopback) - etheriq(ether, bp, -1); - else - etheriq(ether, bp, 0); - } - - if(!loopback){ - qbwrite(ether->oq, bp); /* botch: might block; should track overflows */ - if(ether->transmit != nil) - ether->transmit(ether); - }else{ - // freeb(bp); + if(loopback){ + etheriq(ether, bp, -1); + return len; } + if(memcmp(pkt->d, ether->bcast, sizeof(pkt->d)) == 0 || ether->prom) + etheriq(ether, bp, 0); + qbwrite(ether->oq, bp); /* botch: might block; should track overflows */ + if(ether->transmit != nil) + ether->transmit(ether); return len; } @@ -308,29 +303,6 @@ } int -parseether(uchar *to, char *from) -{ - char nip[4]; - char *p; - int i; - - p = from; - for(i = 0; i < Eaddrlen; i++){ - if(*p == 0) - return -1; - nip[0] = *p++; - if(*p == 0) - return -1; - nip[1] = *p++; - nip[2] = 0; - to[i] = strtoul(nip, 0, 16); - if(*p == ':') - p++; - } - return 0; -} - -int ethercfgmatch(Ether *e, Pcidev *p, uintmem port) { if(e->port == 0 || e->port == port) @@ -343,7 +315,7 @@ static Ether* etherprobe(int cardno, int ctlrno) { - char buf[128], name[32], *type, *p, *e; + char name[32], *type; int i, j, reset; Ether *ether; extern int eipfmt(Fmt*); @@ -405,13 +377,8 @@ */ if(ether->irq >= 0) ether->vector = intrenable(ether->irq, ether->interrupt, ether, ether->tbdf, name); - e = buf + sizeof buf; - p = seprint(buf, e, "#l%d: %s: %dMbps port %#p tu %d", - ctlrno, cards[cardno].type, ether->mbps, ether->port, ether->mtu); - if(ether->mem) - p = seprint(p, e, " addr %#p", ether->mem); - seprint(p, e, " %E\n", ether->ea); - print("%s", buf); + print("#l%d: %s: %dMbps port %#p tu %d %E\n", + ctlrno, cards[cardno].type, ether->mbps, ether->port, ether->mtu, ether->ea); j = ether->mbps; if(j > 1000) @@ -420,9 +387,9 @@ j /= 10; i = 128*1024<oq == 0) + if(ether->oq == nil) ether->oq = qopen(i, Qmsg, 0, 0); - if(ether->oq == 0) + if(ether->oq == nil) panic("etherreset %s", name); ether->alen = Eaddrlen; memmove(ether->addr, ether->ea, Eaddrlen); @@ -479,27 +446,6 @@ intrdisable(ether->vector); (*ether->shutdown)(ether); } -} - - -#define POLY 0xedb88320 - -/* really slow 32 bit crc for ethers */ -uint -ethercrc(uchar *p, int len) -{ - int i, j; - u32int crc, b; - - crc = 0xffffffff; - for(i = 0; i < len; i++){ - b = *p++; - for(j = 0; j < 8; j++){ - crc = (crc>>1) ^ (((crc^b) & 1) ? POLY : 0); - b >>= 1; - } - } - return crc; } Dev etherdevtab = {