<html><body>
<p>Not sure whether it's fine to send this there.<br>
<br>
The scenario:<br>
Interface ETH0, has and only has IPv4:192.168.1.2 and IPv6 aaaa::cccc.  Now the IPv4 address is down, and the IPv6 address is up.  And ranges of 192.168.1.0 and aaaa::/64  are configured.  Next start the DHCP server with IPv6(-6), the result is the ETH0 is skipped with no message in the log about this interface.     If the IPv4 is up, the ETH0 can be listened.<br>
<br>
After debug, I locate the code in discover.c:<br>
<br>
        /* Skip non broadcast interfaces (plus loopback and<br>
           point-to-point in case an OS incorrectly marks them<br>
           as broadcast). Also skip down interfaces unless we're<br>
           trying to get a list of configurable interfaces. */<br>
        if (((!(info.flags & IFF_BROADCAST) ||<br>
              info.flags & IFF_LOOPBACK ||<br>
              info.flags & IFF_POINTOPOINT) && !tmp) ||<br>
            (!(info.flags & IFF_UP) &&<br>
             state != DISCOVER_UNCONFIGURED))<br>
            continue;<br>
<br>
On the surface, the interface can be listened depending on the state of IPv4 address when starting IPv6 DHCP, but it shouldn't.  The key point here is the IFF_BROADCAST flag, for ordinary IPv4 address, it's broadcast address valid, but for IPv6, which has not broadcast, but has multicast (IFF_MULTICAST), so i think it would need to differentiate the IPv4 and IPv6 when to check which interface needs to skip.<br>
<br>
Best&Regards<br>
Andy</body></html>