diff options
Diffstat (limited to 'sys/dev/vx/if_vx.c')
-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, |