mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-27 04:40:09 +01:00
device: fail DHCPv6 if a link-local address is not present
Instead of throwing an assertion, fail DHCPv6 when a IPv6 link-local address is not configured on the device. There are different reasons why the assertion may fail: for example the address was removed externally; or the device is gone (and thus the platform already received the notification of addresses removal) but the device is still connecting because its disposal happens in an idle callback. None of these deserves an assertion, which should only be for programming errors. https://bugzilla.redhat.com/show_bug.cgi?id=1432251 (cherry picked from commit4987ec408a) (cherry picked from commit238fc87298)
This commit is contained in:
parent
135fa26dab
commit
a75d6b8fbb
1 changed files with 8 additions and 5 deletions
|
|
@ -5871,17 +5871,20 @@ dhcp6_start_with_link_ready (NMDevice *self, NMConnection *connection)
|
|||
s_ip6 = nm_connection_get_setting_ip6_config (connection);
|
||||
g_assert (s_ip6);
|
||||
|
||||
if (priv->ext_ip6_config_captured)
|
||||
ll_addr = nm_ip6_config_get_address_first_nontentative (priv->ext_ip6_config_captured, TRUE);
|
||||
|
||||
if (!ll_addr) {
|
||||
_LOGW (LOGD_DHCP6, "can't start DHCPv6: no link-local address");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
hw_addr = nm_platform_link_get_address (NM_PLATFORM_GET, nm_device_get_ip_ifindex (self), &hw_addr_len);
|
||||
if (hw_addr_len) {
|
||||
tmp = g_byte_array_sized_new (hw_addr_len);
|
||||
g_byte_array_append (tmp, hw_addr, hw_addr_len);
|
||||
}
|
||||
|
||||
if (priv->ext_ip6_config_captured)
|
||||
ll_addr = nm_ip6_config_get_address_first_nontentative (priv->ext_ip6_config_captured, TRUE);
|
||||
|
||||
g_return_val_if_fail (ll_addr, FALSE);
|
||||
|
||||
priv->dhcp6.client = nm_dhcp_manager_start_ip6 (nm_dhcp_manager_get (),
|
||||
nm_device_get_ip_iface (self),
|
||||
nm_device_get_ip_ifindex (self),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue