IPv6 with mcast UserModeLinux backends

I am doing some work with IPv6. (see http://bluerose.sandelman.ca/projects/show/unstrung )

I have a test network shown at: http://bluerose.sandelman.ca/repositories/changes/unstrung/doc/network-1.png

In automated testing I would normally use the daemon mode, with uml_netjig. In casual use, I was using the mcast backend, because it has fewer moving parts…. but my network interfaces kept remaining in state “tentative” and I could not send packets.

What was the problem, I debugging for awhile through the IPv6 code, and finally thought that it had something to do with the UserModeLinux network interface never providing low-level LINK “UP” signal, and so it never did Duplicate Address Discovery, and remove the tentative mark.

5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 fe80::1000:ff:fedc:bcff/64 scope link tentative valid_lft forever preferred_lft forever 6: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 fe80::1000:ff:fe64:6423/64 scope link tentative valid_lft forever preferred_lft forever

Note that it says “tentative”.

NO! DAD was occuring just fine, but it FAILS. Why? Because it thinks it has a duplicate… finally I noticed

eth0: duplicate address detected! eth1: duplicate address detected!

Why is this? It’s because the mcast interface gets a copy of the packets that are output. I.e. it hears itself. DAD should work even when that happens, I think.

I need to look at whether the mcast interface should be fixed (remember it’s own packets and ignore them? Drop packets that originate from it’s own MAC address?), or should DAD be fixed?