diff options
author | mischief <mischief@offblast.org> | 2018-11-17 17:23:56 -0800 |
---|---|---|
committer | mischief <mischief@offblast.org> | 2018-11-17 17:23:56 -0800 |
commit | a25418fddcf958c8a585779c7642bb88ceaf3f66 (patch) | |
tree | dd959e3a5c7c3d472d07030355fe265b3b60e770 /sys/src/9/port/devbridge.c | |
parent | fbfa249c6399e845b2ef1313038a6e4102b4b78d (diff) |
devbridge: fix runt packets going through the bridge (thanks cinap)
linux will send small, unpadded arp packets which may arrive over
wifi, so allow small packets into the bridge and pad any packets that
are too small when going out.
Diffstat (limited to 'sys/src/9/port/devbridge.c')
-rw-r--r-- | sys/src/9/port/devbridge.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/src/9/port/devbridge.c b/sys/src/9/port/devbridge.c index bc4537270..3b8ca9037 100644 --- a/sys/src/9/port/devbridge.c +++ b/sys/src/9/port/devbridge.c @@ -965,7 +965,7 @@ etherread(void *a) if(bp == nil) break; n = BLEN(bp); - if(port->closed || n < ETHERMINTU){ + if(port->closed || n < ETHERHDRSIZE){ freeb(bp); continue; } @@ -1056,6 +1056,9 @@ etherwrite(Port *port, Block *bp) epkt = (Etherpkt*)bp->rp; if(port->type != Ttun || !fragment(epkt, n)) { if(!waserror()){ + /* don't generate small packets */ + if(n < ETHERMINTU) + bp = adjustblock(bp, ETHERMINTU); devtab[port->data[1]->type]->bwrite(port->data[1], bp, 0); poperror(); } |