Changes devether's Max Trans Unit to 1500
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Mar 2015 20:59:04 +0000 (15:59 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Mar 2015 20:59:04 +0000 (15:59 -0500)
From 1514.  Linux drivers track it as 1500, and add on the header as
needed.  Plan 9 uses 1514, and includes the header.

I don't particularly care one way or another.  This way is a little
easier for porting, but have no problem with changing it back (given a
port to bnx2x's MTU code).

kern/drivers/dev/ether.c
kern/drivers/net/bnx2x/bnx2x_dev.c
kern/drivers/net/ether82563.c
kern/include/ip.h

index 9da3f38..b774889 100644 (file)
@@ -447,7 +447,7 @@ static long etherwrite(struct chan *chan, void *buf, long n, int64_t unused)
                error(Ebadctl);
        }
 
-       if (n > ether->maxmtu)
+       if (n > ether->maxmtu + ETHERHDRSIZE)
                error(Etoobig);
        bp = allocb(n);
        if (waserror()) {
@@ -489,7 +489,7 @@ static long etherbwrite(struct chan *chan, struct block *bp, uint32_t unused)
                runlock(&ether->rwlock);
                nexterror();
        }
-       if (n > ether->maxmtu && (bp->flag & Btso) == 0) {
+       if (n > ether->maxmtu + ETHERHDRSIZE && (bp->flag & Btso) == 0) {
                freeb(bp);
                error(Etoobig);
        }
index 8a3c8f9..9c9303a 100644 (file)
@@ -480,15 +480,6 @@ static int bnx2x_pnp(struct ether *edev)
        edev->promiscuous = bnx2x_promiscuous;
        edev->multicast = bnx2x_multicast;
 
-       /* Plan 9's MTU includes the header (e.g. 1514, instead of 1500).  Linux
-        * drivers expect just the payload and not the header, and will add in the
-        * 14 whenever it is needed.
-        *
-        * There might be issues when plan 9 code accesses maxmtu, now that it's
-        * 1500 instead of 1514.  Keep a lookout for Etoobig in etherwrite.  What a
-        * mess. */
-       edev->maxmtu -= ETHERHDRSIZE;
-
        bnx2x_reset(ctlr);
 
        return 0;
index 93a65e2..8ce14da 100644 (file)
@@ -1924,7 +1924,7 @@ static int pnp(struct ether *edev, int type)
        edev->irq = ctlr->pcidev->irqline;
        edev->tbdf = pci_to_tbdf(ctlr->pcidev);
        edev->mbps = 1000;
-       edev->maxmtu = ctlr->rbsz;
+       edev->maxmtu = ctlr->rbsz - ETHERHDRSIZE;       /* MTU doesn't include header */
        memmove(edev->ea, ctlr->ra, Eaddrlen);
 
        /*
index ea40e01..b779371 100644 (file)
@@ -1006,7 +1006,7 @@ int activemulti(struct ether *, uint8_t *, int);
 enum {
        Eaddrlen = 6,
        ETHERMINTU = 60,        /* minimum transmit size */
-       ETHERMAXTU = 1514,      /* maximum transmit size */
+       ETHERMAXTU = 1500,      /* maximum transmit size */
        ETHERHDRSIZE = 14,      /* size of an ethernet header */
 };