[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: Fwd: DHCPv6 broken in RHEL 6.x

On 11/17/2010 11:29 AM, Harald Hoyer wrote:

-------- Original-Nachricht --------
Betreff: DHCPv6 broken in RHEL 6.x
Datum: Tue, 16 Nov 2010 17:14:16 -0500
Von: Ray Soucy <rps maine edu>
An: teg redhat com, harald redhat com

2. There seems to be an assumption made that "stateless" == "autoconf".

When DHCPv6 is selected in the installer, it adds a IPV6_AUTOCONF="no"
to the interface configuration.  DHCPv6 has no way to provide default
route information.  In IPv6, that task is handled by router

If you disable autoconf, then you disable the mechanistic for the host
to get a default gateway, making DHCPv6 pointless.

Similarly, host systems should not decide to "disable" stateless
address configuration in favor of DHCPv6.  The "A" (autonomous) flag
within a router advertisement signals hosts on a network whether to
assign a stateless address or not; Linux already respects this flag.

It is a legitimate configuration to use _both_ a stateless and a
stateful IPv6 address on a single interface.  That should be
determined by the network, not the host, as the default behavior.

If the RFC were followed, you would actually wait for an IPv6 router
advertisement to announce either the "M" or "O" flags before starting
a DHCPv6 client; but I'm not sure how you would do that in Linux.  The
only reliable way right now is to just enable DHCPv6 by default if
"Automatic" configuration is selected.

Please see discussion in NetworkManager bug
where IPV6_AUTOCONF=no was added to DHCPv6 configuration option.

In anaconda loader we follow NetworkManager Connection Editor
(we are using it in anaconda GUI) which behaves the same way
('Automatic, DHCP only' option), from NM's ifcfg-rh plugin:

    value = nm_setting_ip6_config_get_method (s_ip6);
    g_assert (value);
    if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
        svSetValue (ifcfg, "IPV6INIT", "no", FALSE);
        svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
        return TRUE;
    } else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
        svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
        svSetValue (ifcfg, "IPV6_AUTOCONF", "yes", FALSE);
        svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
    } else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
        svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
        svSetValue (ifcfg, "IPV6_AUTOCONF", "no", FALSE);
        svSetValue (ifcfg, "DHCPV6C", "yes", FALSE);
    } else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
        svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
        svSetValue (ifcfg, "IPV6_AUTOCONF", "no", FALSE);
        svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
    } else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL)) {
        svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
        svSetValue (ifcfg, "IPV6_AUTOCONF", "no", FALSE);
        svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
    } else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_SHARED)) {
        svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
        svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
        /* TODO */

4. The network setup utility (which has your names on it, ;D) doesn't
provide for IPv6 configuration as the installer does.  We really need
the default tools to setup IPv6 to be in place at this point.  We
can't wait for RHEL 7 to get this right.

Are you talking about system-config-network? In anaconda we use
NetworkManager Connection Editor (nm-c-e) in GUI and I think we don't
offer more ipv6 configuration options in loader than nm-c-e has

Essentially, there should be 2 options for IPv6:  "Automatic" and
"Static" configuration.  Automatic should imply that a working DHCPv6
client will be started.  If you have a way to only start it when a
router advertisement with the "O" (other) or "M" (managed) flags set,
then that would be better since it would match the requirement by the
RFC... I can't think of a way to easily do that though (maybe with
udev...).  So the other obvious solution is to just start the DHCPv6
client up in case it's needed.  This seems to be how Windows handles
it by default.

Perhaps "stateless" (or "automatic") DHCPv6 (with IPV6_AUTOCONF="yes",
that is what you are suggesting below) can be added to present
("stateful" or "static") DHCPv6 in loader. It should be easy,
but I'd hesitate to do it unless it has been added to nm-c-e too.

Example interface configuration for "automatic" IPv6:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]