Good idea; I'll incorporate all the comments, retest and repost.
> So... hmm... Let's check dev->flags ^ (IFF_PROMISC|IFF_ALLMULTI) like this.
I think you mean (dev->flags & (IFF_PROMISC|IFF_ALLMULTI)) here, right?
> I don't think it is so costy for usual operation.
> If you think it is, please introduce hash table for mc_list in idev;
> it should have been "heavy." :-)
> (You can do it later, of course.)
This certainly could be done and I had this in mind for the future when
I designed the interface filter data structures (made sure everything
for the intersection and union is directly available given only the
ifmcaddr). I should do some testing to see how many MCA's or source
filters are needed to make a hash worthwhile, and maybe how many before
it falls over. :-)