Sorry, there was a mistake in my first listing. IFF_PROMISC should allow acceptance, but it should not be passed to upper layers. IFF_PPROMISC should also pass the packet to upper layers if I'm right.
If a packet ingresses an interface where ( dst MAC != interface MAC ) && ( dst MAC != multicast joined groups ) && ( dst MAC != broadcast ) I'd expect - the packet to be directly discarded if !( IFF_PROMISC || IFF_PPROMISC ) - the packet to be accepted but not passed to upper layers if ( IFF_PROMISC && !IFF_PPROMISC ) - the packet to be accepted and passed to upper layers if ( IFF_PPROMISC )
