mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-24 16:50:32 +01:00
merge: branch 'bg/ipv6-route-src'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1097
(cherry picked from commit 8fc9f818b8)
This commit is contained in:
commit
6d7b978c65
3 changed files with 37 additions and 1 deletions
|
|
@ -3057,6 +3057,7 @@ _dev_ip_state_check(NMDevice *self, int addr_family)
|
|||
gboolean s_is_started = FALSE;
|
||||
gboolean s_is_failed = FALSE;
|
||||
gboolean s_is_pending = FALSE;
|
||||
gboolean has_tna = FALSE;
|
||||
gboolean v_bool;
|
||||
NMDeviceIPState ip_state;
|
||||
NMDeviceIPState ip_state_other;
|
||||
|
|
@ -3188,6 +3189,10 @@ _dev_ip_state_check(NMDevice *self, int addr_family)
|
|||
&s_is_pending,
|
||||
&s_is_failed);
|
||||
|
||||
has_tna = priv->l3cfg && nm_l3cfg_has_temp_not_available_obj(priv->l3cfg, addr_family);
|
||||
if (has_tna)
|
||||
s_is_pending = TRUE;
|
||||
|
||||
if (s_is_failed)
|
||||
ip_state = NM_DEVICE_IP_STATE_FAILED;
|
||||
else if (s_is_pending)
|
||||
|
|
@ -3215,7 +3220,7 @@ got_ip_state:
|
|||
nm_assert(!priv->ip_data_4.is_ignore);
|
||||
|
||||
_LOGT_ip(addr_family,
|
||||
"check-state: state %s => %s, is_failed=%d, is_pending=%d, is_started=%d, "
|
||||
"check-state: state %s => %s, is_failed=%d, is_pending=%d, is_started=%d temp_na=%d, "
|
||||
"may-fail-4=%d, may-fail-6=%d;"
|
||||
"%s;%s%s%s%s%s%s;%s%s%s%s%s%s%s%s",
|
||||
nm_device_ip_state_to_string(priv->ip_data_x[IS_IPv4].state),
|
||||
|
|
@ -3223,6 +3228,7 @@ got_ip_state:
|
|||
s_is_failed,
|
||||
s_is_pending,
|
||||
s_is_started,
|
||||
has_tna,
|
||||
_prop_get_ipvx_may_fail_cached(self, AF_INET, IS_IPv4 ? &may_fail : &may_fail_other),
|
||||
_prop_get_ipvx_may_fail_cached(self, AF_INET6, !IS_IPv4 ? &may_fail : &may_fail_other),
|
||||
priv->ip_data_4.is_disabled ? " disabled4" : "",
|
||||
|
|
@ -3932,6 +3938,9 @@ _dev_l3_cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, N
|
|||
AF_INET6,
|
||||
NM_L3CFG_CHECK_READY_FLAGS_IP6_DAD_READY,
|
||||
NULL)) {
|
||||
if (nm_l3cfg_has_temp_not_available_obj(priv->l3cfg, AF_INET6))
|
||||
_dev_l3_cfg_commit(self, FALSE);
|
||||
|
||||
nm_clear_l3cd(&priv->ipac6_data.l3cd);
|
||||
_dev_ipac6_set_state(self, NM_DEVICE_IP_STATE_READY);
|
||||
_dev_ip_state_check_async(self, AF_INET6);
|
||||
|
|
@ -9821,6 +9830,14 @@ _dev_ipmanual_check_ready(NMDevice *self)
|
|||
_dev_ipmanual_set_state(self, addr_family, NM_DEVICE_IP_STATE_FAILED);
|
||||
_dev_ip_state_check_async(self, AF_UNSPEC);
|
||||
} else if (ready) {
|
||||
if (priv->ipmanual_data.state_x[IS_IPv4] != NM_DEVICE_IP_STATE_READY
|
||||
&& nm_l3cfg_has_temp_not_available_obj(priv->l3cfg, addr_family)) {
|
||||
/* Addresses with pending ACD/DAD are a possible cause for the
|
||||
* presence of temporarily-not-available objects. Once all addresses
|
||||
* are ready, retry to commit those unavailable objects. */
|
||||
_dev_l3_cfg_commit(self, FALSE);
|
||||
}
|
||||
|
||||
_dev_ipmanual_set_state(self, addr_family, NM_DEVICE_IP_STATE_READY);
|
||||
_dev_ip_state_check_async(self, AF_UNSPEC);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2947,6 +2947,23 @@ nm_l3cfg_get_acd_addr_info(NML3Cfg *self, in_addr_t addr)
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
gboolean
|
||||
nm_l3cfg_has_temp_not_available_obj(NML3Cfg *self, int addr_family)
|
||||
{
|
||||
ObjStateData *obj_state;
|
||||
|
||||
nm_assert(NM_IS_L3CFG(self));
|
||||
nm_assert_addr_family(addr_family);
|
||||
|
||||
c_list_for_each_entry (obj_state,
|
||||
&self->priv.p->obj_state_temporary_not_available_lst_head,
|
||||
os_temporary_not_available_lst) {
|
||||
if (NMP_OBJECT_GET_ADDR_FAMILY(obj_state->obj) == addr_family)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_l3cfg_check_ready(NML3Cfg *self,
|
||||
const NML3ConfigData *l3cd,
|
||||
|
|
|
|||
|
|
@ -410,6 +410,8 @@ gboolean nm_l3cfg_check_ready(NML3Cfg *self,
|
|||
NML3CfgCheckReadyFlags flags,
|
||||
gboolean *acd_used);
|
||||
|
||||
gboolean nm_l3cfg_has_temp_not_available_obj(NML3Cfg *self, int addr_family);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
NML3CfgCommitType nm_l3cfg_commit_type_get(NML3Cfg *self);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue