From e6bf99985ceff9378a106171de69bd2b0bf51916 Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Tue, 28 Jan 1997 11:21:21 +0000 Subject: [PATCH] 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. --- sys/dev/vx/if_vx.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/sys/dev/vx/if_vx.c b/sys/dev/vx/if_vx.c index a4a29cd3535..41dfb865a9d 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,