Re: [PATCH] Use /128 as prefix length for IA_NA assignments
- From: Dan Williams <dcbw redhat com>
- To: Tore Anderson <tore fud no>
- Cc: networkmanager-list gnome org
- Subject: Re: [PATCH] Use /128 as prefix length for IA_NA assignments
- Date: Fri, 01 Jun 2012 13:39:35 -0500
On Sat, 2012-05-19 at 16:02 +0200, Tore Anderson wrote:
> DHCPv6 IA_NA assignments do not contain a prefix length, they are for a
> single address (/128) only. However, the ISC DHCPv6 client incorrectly
> assumes IA_NA assignments come with a implicit prefix length of /64, and
> passes this incorrect information on to NetworkManager, which adds this
> prefix as a on-link route. This will cause communication failures in
> certain networks, for example NBMA networks, and in organisations using
> longer prefix lengths than /64 for their LANs. For more discussion
> regarding this problem, see RFC 5942 section 5.
>
> This patch makes NM ignore the false prefix length attribute provided by
> the ISC DHCPv6 client, instead setting it to a /128 (single address) in
> all cases. Note that this does not preclude an on-link prefix from being
> added by NM if it is being advertised in the correct way, i.e., by
> including a Prefix Information Option with the L flag set in an ICMPv6
> Router Advertisement.
>
> Fixes: bgo #656610, debian #661885
Pushed with a few cleanups. Thanks!
dan
> For what it's worth I've also sent a patch to ISC to change the hard-
> coded implicit prefix length value from /64 to /128 in [ISC-Bugs #29468].
> ---
> src/dhcp-manager/nm-dhcp-client.c | 26 ++++++--------------------
> 1 files changed, 6 insertions(+), 20 deletions(-)
>
> diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c
> index f6fec0a..6a4b5ea 100644
> --- a/src/dhcp-manager/nm-dhcp-client.c
> +++ b/src/dhcp-manager/nm-dhcp-client.c
> @@ -1244,7 +1244,12 @@ ip6_options_to_config (NMDHCPClient *self)
> }
>
> nm_ip6_address_set_address (addr, &tmp_addr);
> - nm_log_info (LOGD_DHCP6, " address %s", str);
> + /* DHCPv6 IA_NA assignments are single address only */
> + nm_ip6_address_set_prefix (addr, (guint32) 128);
> + nm_log_info (LOGD_DHCP6, " address %s/128", str);
> +
> + nm_ip6_config_take_address (ip6_config, addr);
> + addr = NULL;
> } else {
> /* No address in managed mode is a hard error */
> if (priv->info_only == FALSE)
> @@ -1255,25 +1260,6 @@ ip6_options_to_config (NMDHCPClient *self)
> addr = NULL;
> }
>
> - /* Only care about prefix if we got an address */
> - if (addr) {
> - str = g_hash_table_lookup (priv->options, "new_ip6_prefixlen");
> - if (str) {
> - long unsigned int prefix;
> -
> - errno = 0;
> - prefix = strtoul (str, NULL, 10);
> - if (errno != 0 || prefix > 128)
> - goto error;
> -
> - nm_ip6_address_set_prefix (addr, (guint32) prefix);
> - nm_log_info (LOGD_DHCP6, " prefix %lu", prefix);
> - }
> -
> - nm_ip6_config_take_address (ip6_config, addr);
> - addr = NULL;
> - }
> -
> str = g_hash_table_lookup (priv->options, "new_host_name");
> if (str)
> nm_log_info (LOGD_DHCP6, " hostname '%s'", str);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]