diff options
author | phk <phk@FreeBSD.org> | 1997-01-28 11:21:21 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1997-01-28 11:21:21 +0000 |
commit | f6dcc30e24808c270de927fa02b5d92d319fc4be (patch) | |
tree | 9666c5df78c4b67fc5aa6c790a81e309dec1eccf /sys/dev/vx | |
parent | 0be2437c94737389c507740ea6694fc646219a96 (diff) | |
download | FreeBSD-src-f6dcc30e24808c270de927fa02b5d92d319fc4be.zip FreeBSD-src-f6dcc30e24808c270de927fa02b5d92d319fc4be.tar.gz |
Some of these cards are always in promiscous mode :-(
If you enable ip forwarding your net melts down.
This is a workaround, probably not the correct fix.
Diffstat (limited to 'sys/dev/vx')
-rw-r--r-- | sys/dev/vx/if_vx.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/sys/dev/vx/if_vx.c b/sys/dev/vx/if_vx.c index a4a29cd..41dfb86 100644 --- a/sys/dev/vx/if_vx.c +++ b/sys/dev/vx/if_vx.c @@ -771,28 +771,25 @@ again: */ if (sc->arpcom.ac_if.if_bpf) { bpf_mtap(&sc->arpcom.ac_if, m); - - /* - * Note that the interface cannot be in promiscuous mode if - * there are no BPF listeners. And if we are in promiscuous - * mode, we have to check if this packet is really ours. - */ - if ((ifp->if_flags & IFF_PROMISC) && - (eh->ether_dhost[0] & 1) == 0 && /* !mcast and !bcast */ - bcmp(eh->ether_dhost, sc->arpcom.ac_enaddr, - sizeof(eh->ether_dhost)) != 0) { - m_freem(m); - return; - } } #endif + /* + * XXX: Some cards seem to be in promiscous mode all the time. + * we need to make sure we only get our own stuff always. + * bleah! + */ + + if ((eh->ether_dhost[0] & 1) == 0 && /* !mcast and !bcast */ + bcmp(eh->ether_dhost, sc->arpcom.ac_enaddr, + sizeof(eh->ether_dhost)) != 0) { + m_freem(m); + return; + } /* We assume the header fit entirely in one mbuf. */ m_adj(m, sizeof(struct ether_header)); ether_input(ifp, eh, m); - - /* * In periods of high traffic we can actually receive enough * packets so that the fifo overrun bit will be set at this point, |