tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Multicast problems with bridge(4) ports



Hi all,
I've found a really weird problem with NetBSD 6.1 (and earlier) that affects 
delivery of multicast packets. It seems that the packets are discarded if and 
only if they have crossed a bridge(4) that is directly attached to the 
interface that passes the packet up into the network statck. This prevents IPv6 
from working.

A (trimmed) sample configuration that I have is:

    xen# brconfig bridge0
    bridge0: flags=41<UP,RUNNING>
                    ste0 flags=3<LEARNING,DISCOVER>
                    xvif1i0 flags=3<LEARNING,DISCOVER>
                    re0 flags=3<LEARNING,DISCOVER>
    xen# ifconfig -a
    re0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> 
mtu 1500
            status: active
            inet6 2002:cb61:d534:3:1::30 prefixlen 64
    ste0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> 
mtu 1500
            status: active
            inet6 2002:cb61:d534:3:1::3000 prefixlen 64

tap(4) interfaces are affected in the same way that re(4) and ste(4) interfaces 
are affected, I just didn't happen to have one on that bridge at the time I was 
testing.

On the physical network that is hanging off re0 I have "ping6 
2002:cb61:d534:3:1::30" and "ping6 2002:cb61:d534:3:1::3000" running and only 
the pings to re0 respond. Using tcpdump I can see that the neighbour 
solicitations are reaching both interfaces (i.e. they are crossing the bridge 
correctly), but I never get any replies from ste0. In "netstat -s" I do see the 
"multicast packets which we don't join" and "packets not forwardable" 
statistics climb while the non-working ping is running.

I've tested packets going in all manner of directions, and it seems that if and 
only if the path is bridge(4) -> interface -> ip6_input, then the packet is 
dropped. Looking at the code in lines 480-503 of ip6_input.c version 1.136 it 
seems that IN6_LOOKUP_MULTI() isn't coming up with the right answer.

Does anyone have a feeling for what might be going wrong? I'm about to start 
putting printfs in the kernel.

Cheers,
Lloyd



Home | Main Index | Thread Index | Old Index