[prev in list] [next in list] [prev in thread] [next in thread] 

List:       dhcp-users
Subject:    Interface Discover issue in ISC DHCP 4.1.0
From:       Yong Bo Hu <huyongbo () cn ! ibm ! com>
Date:       2009-12-23 2:24:14
Message-ID: OF7D169A9C.BC87DF2C-ON48257694.0026D99B-48257695.000D2D1B () cn ! ibm ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Not sure whether it's fine to send this there.

The scenario:
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.

After debug, I locate the code in discover.c:.

        /* Skip non broadcast interfaces (plus loopback and
           point-to-point in case an OS incorrectly marks them
           as broadcast). Also skip down interfaces unless we're:
           trying to get a list of configurable interfaces. */
        if (((!(info.flags & IFF_BROADCAST) ||
              info.flags & IFF_LOOPBACK ||)
              info.flags & IFF_POINTOPOINT) && !tmp) ||
            (!(info.flags & IFF_UP) &&
             state != DISCOVER_UNCONFIGURED))
            continue;

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.

Best&Regards
Andy
[Attachment #5 (text/html)]

<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 &amp; IFF_BROADCAST) ||<br>
              info.flags &amp; IFF_LOOPBACK ||<br>
              info.flags &amp; IFF_POINTOPOINT) &amp;&amp; !tmp) ||<br>
            (!(info.flags &amp; IFF_UP) &amp;&amp;<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&amp;Regards<br>
Andy</body></html>



_______________________________________________
dhcp-users mailing list
dhcp-users@lists.isc.org
https://lists.isc.org/mailman/listinfo/dhcp-users

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic