mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-01 20:00:12 +01:00
dns: better track l3cd changes
Update DNS only when something relevant changes: - an old l3cd gets removed, without adding a new one - a new one is added without removing an old one - an old is removed and it differs (in routes and DNS) from the new added one
This commit is contained in:
parent
ddaee5d7e6
commit
ce0a36d20f
1 changed files with 19 additions and 6 deletions
|
|
@ -1862,6 +1862,7 @@ nm_dns_manager_set_ip_config(NMDnsManager *self,
|
||||||
gboolean changed = FALSE;
|
gboolean changed = FALSE;
|
||||||
NMDnsConfigIPData *ip_data = NULL;
|
NMDnsConfigIPData *ip_data = NULL;
|
||||||
int dns_priority;
|
int dns_priority;
|
||||||
|
gboolean any_removed = FALSE;
|
||||||
|
|
||||||
g_return_val_if_fail(NM_IS_DNS_MANAGER(self), FALSE);
|
g_return_val_if_fail(NM_IS_DNS_MANAGER(self), FALSE);
|
||||||
g_return_val_if_fail(!l3cd || NM_IS_L3_CONFIG_DATA(l3cd), FALSE);
|
g_return_val_if_fail(!l3cd || NM_IS_L3_CONFIG_DATA(l3cd), FALSE);
|
||||||
|
|
@ -1919,7 +1920,16 @@ nm_dns_manager_set_ip_config(NMDnsManager *self,
|
||||||
if (!replace_all && l3cd && ip_data_iter->l3cd != l3cd)
|
if (!replace_all && l3cd && ip_data_iter->l3cd != l3cd)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
changed = TRUE;
|
if (!l3cd || ip_config_type == NM_DNS_IP_CONFIG_TYPE_REMOVED
|
||||||
|
|| nm_l3_config_data_cmp_full(l3cd,
|
||||||
|
ip_data_iter->l3cd,
|
||||||
|
NM_L3_CONFIG_CMP_FLAGS_DNS
|
||||||
|
| NM_L3_CONFIG_CMP_FLAGS_ROUTES_ID)
|
||||||
|
!= 0) {
|
||||||
|
changed = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
any_removed = TRUE;
|
||||||
_dns_config_ip_data_free(ip_data_iter);
|
_dns_config_ip_data_free(ip_data_iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1941,8 +1951,6 @@ nm_dns_manager_set_ip_config(NMDnsManager *self,
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
changed = TRUE;
|
|
||||||
|
|
||||||
if (!data) {
|
if (!data) {
|
||||||
data = g_slice_new(NMDnsConfigData);
|
data = g_slice_new(NMDnsConfigData);
|
||||||
*data = (NMDnsConfigData){
|
*data = (NMDnsConfigData){
|
||||||
|
|
@ -1956,12 +1964,17 @@ nm_dns_manager_set_ip_config(NMDnsManager *self,
|
||||||
priv->configs_lst_need_sort = TRUE;
|
priv->configs_lst_need_sort = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ip_data)
|
if (!ip_data) {
|
||||||
ip_data = _dns_config_ip_data_new(data, addr_family, source_tag, l3cd, ip_config_type);
|
ip_data = _dns_config_ip_data_new(data, addr_family, source_tag, l3cd, ip_config_type);
|
||||||
else
|
if (!any_removed)
|
||||||
|
changed = TRUE;
|
||||||
|
} else {
|
||||||
ip_data->ip_config_type = ip_config_type;
|
ip_data->ip_config_type = ip_config_type;
|
||||||
|
changed = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
priv->ip_data_lst_need_sort = TRUE;
|
if (changed)
|
||||||
|
priv->ip_data_lst_need_sort = TRUE;
|
||||||
|
|
||||||
nm_assert(l3cd);
|
nm_assert(l3cd);
|
||||||
nm_assert(ip_config_type != NM_DNS_IP_CONFIG_TYPE_REMOVED);
|
nm_assert(ip_config_type != NM_DNS_IP_CONFIG_TYPE_REMOVED);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue