core: rename and move nm_ip_config_dns_hash()

The function operates on a NML3ConfigData, rename it and move it to
the right place.

(cherry picked from commit ec0a83b224)
This commit is contained in:
Beniamino Galvani
2023-01-30 17:17:19 +01:00
committed by Thomas Haller
parent 379af3e753
commit a7412e2c65
5 changed files with 73 additions and 71 deletions

View File

@@ -1209,7 +1209,7 @@ compute_hash(NMDnsManager *self, const NMGlobalDnsConfig *global, guint8 buffer[
* configuration without DNS parameters gives a zero checksum. */ * configuration without DNS parameters gives a zero checksum. */
head = _mgr_get_ip_data_lst_head(self); head = _mgr_get_ip_data_lst_head(self);
c_list_for_each_entry (ip_data, head, ip_data_lst) c_list_for_each_entry (ip_data, head, ip_data_lst)
nm_ip_config_dns_hash(ip_data->l3cd, sum, ip_data->addr_family); nm_l3_config_data_hash_dns(ip_data->l3cd, sum, ip_data->addr_family);
} }
nm_utils_checksum_get_digest_len(sum, buffer, HASH_LEN); nm_utils_checksum_get_digest_len(sum, buffer, HASH_LEN);

View File

@@ -509,74 +509,6 @@ nm_ip4_config_class_init(NMIP4ConfigClass *klass)
g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST_ip4, obj_properties_ip4); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST_ip4, obj_properties_ip4);
} }
void
nm_ip_config_dns_hash(const NML3ConfigData *l3cd, GChecksum *sum, int addr_family)
{
guint i;
int val;
const char *const *strarr;
const in_addr_t *wins;
const char *const *domains;
const char *const *searches;
const char *const *options;
guint num_nameservers;
guint num_wins;
guint num_domains;
guint num_searches;
guint num_options;
g_return_if_fail(l3cd);
g_return_if_fail(sum);
strarr = nm_l3_config_data_get_nameservers(l3cd, addr_family, &num_nameservers);
for (i = 0; i < num_nameservers; i++)
g_checksum_update(sum, (gpointer) strarr[i], strlen(strarr[i]));
if (addr_family == AF_INET) {
wins = nm_l3_config_data_get_wins(l3cd, &num_wins);
for (i = 0; i < num_wins; i++)
g_checksum_update(sum, (guint8 *) &wins[i], 4);
}
domains = nm_l3_config_data_get_domains(l3cd, addr_family, &num_domains);
for (i = 0; i < num_domains; i++) {
g_checksum_update(sum, (const guint8 *) domains[i], strlen(domains[i]));
}
searches = nm_l3_config_data_get_searches(l3cd, addr_family, &num_searches);
for (i = 0; i < num_searches; i++) {
g_checksum_update(sum, (const guint8 *) searches[i], strlen(searches[i]));
}
options = nm_l3_config_data_get_dns_options(l3cd, addr_family, &num_options);
for (i = 0; i < num_options; i++) {
g_checksum_update(sum, (const guint8 *) options[i], strlen(options[i]));
}
val = nm_l3_config_data_get_mdns(l3cd);
if (val != NM_SETTING_CONNECTION_MDNS_DEFAULT)
g_checksum_update(sum, (const guint8 *) &val, sizeof(val));
val = nm_l3_config_data_get_llmnr(l3cd);
if (val != NM_SETTING_CONNECTION_LLMNR_DEFAULT)
g_checksum_update(sum, (const guint8 *) &val, sizeof(val));
val = nm_l3_config_data_get_dns_over_tls(l3cd);
if (val != NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT)
g_checksum_update(sum, (const guint8 *) &val, sizeof(val));
/* FIXME(ip-config-checksum): the DNS priority should be considered relevant
* and added into the checksum as well, but this can't be done right now
* because in the DNS manager we rely on the fact that an empty
* configuration (i.e. just created) has a zero checksum. This is needed to
* avoid rewriting resolv.conf when there is no change.
*
* The DNS priority initial value depends on the connection type (VPN or
* not), so it's a bit difficult to add it to checksum maintaining the
* assumption of checksum(empty)=0
*/
}
/*****************************************************************************/ /*****************************************************************************/
/* public */ /* public */

View File

@@ -51,8 +51,6 @@ NMIPConfig *nm_ip_config_new(int addr_family, NML3Cfg *l3cfg);
void nm_ip_config_take_and_unexport_on_idle(NMIPConfig *self_take); void nm_ip_config_take_and_unexport_on_idle(NMIPConfig *self_take);
void nm_ip_config_dns_hash(const NML3ConfigData *l3cd, GChecksum *sum, int addr_family);
/*****************************************************************************/ /*****************************************************************************/
static inline NML3Cfg * static inline NML3Cfg *

View File

@@ -3018,6 +3018,76 @@ nm_l3_config_data_new_from_platform(NMDedupMultiIndex *multi_idx,
/*****************************************************************************/ /*****************************************************************************/
void
nm_l3_config_data_hash_dns(const NML3ConfigData *l3cd, GChecksum *sum, int addr_family)
{
guint i;
int val;
const char *const *strarr;
const in_addr_t *wins;
const char *const *domains;
const char *const *searches;
const char *const *options;
guint num_nameservers;
guint num_wins;
guint num_domains;
guint num_searches;
guint num_options;
g_return_if_fail(l3cd);
g_return_if_fail(sum);
strarr = nm_l3_config_data_get_nameservers(l3cd, addr_family, &num_nameservers);
for (i = 0; i < num_nameservers; i++)
g_checksum_update(sum, (gpointer) strarr[i], strlen(strarr[i]));
if (addr_family == AF_INET) {
wins = nm_l3_config_data_get_wins(l3cd, &num_wins);
for (i = 0; i < num_wins; i++)
g_checksum_update(sum, (guint8 *) &wins[i], 4);
}
domains = nm_l3_config_data_get_domains(l3cd, addr_family, &num_domains);
for (i = 0; i < num_domains; i++) {
g_checksum_update(sum, (const guint8 *) domains[i], strlen(domains[i]));
}
searches = nm_l3_config_data_get_searches(l3cd, addr_family, &num_searches);
for (i = 0; i < num_searches; i++) {
g_checksum_update(sum, (const guint8 *) searches[i], strlen(searches[i]));
}
options = nm_l3_config_data_get_dns_options(l3cd, addr_family, &num_options);
for (i = 0; i < num_options; i++) {
g_checksum_update(sum, (const guint8 *) options[i], strlen(options[i]));
}
val = nm_l3_config_data_get_mdns(l3cd);
if (val != NM_SETTING_CONNECTION_MDNS_DEFAULT)
g_checksum_update(sum, (const guint8 *) &val, sizeof(val));
val = nm_l3_config_data_get_llmnr(l3cd);
if (val != NM_SETTING_CONNECTION_LLMNR_DEFAULT)
g_checksum_update(sum, (const guint8 *) &val, sizeof(val));
val = nm_l3_config_data_get_dns_over_tls(l3cd);
if (val != NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT)
g_checksum_update(sum, (const guint8 *) &val, sizeof(val));
/* FIXME(ip-config-checksum): the DNS priority should be considered relevant
* and added into the checksum as well, but this can't be done right now
* because in the DNS manager we rely on the fact that an empty
* configuration (i.e. just created) has a zero checksum. This is needed to
* avoid rewriting resolv.conf when there is no change.
*
* The DNS priority initial value depends on the connection type (VPN or
* not), so it's a bit difficult to add it to checksum maintaining the
* assumption of checksum(empty)=0
*/
}
/*****************************************************************************/
void void
nm_l3_config_data_merge(NML3ConfigData *self, nm_l3_config_data_merge(NML3ConfigData *self,
const NML3ConfigData *src, const NML3ConfigData *src,

View File

@@ -604,4 +604,6 @@ nmtst_l3_config_data_get_best_gateway(const NML3ConfigData *self, int addr_famil
return nm_platform_ip_route_get_gateway(addr_family, NMP_OBJECT_CAST_IP_ROUTE(rt)); return nm_platform_ip_route_get_gateway(addr_family, NMP_OBJECT_CAST_IP_ROUTE(rt));
} }
void nm_l3_config_data_hash_dns(const NML3ConfigData *l3cd, GChecksum *sum, int addr_family);
#endif /* __NM_L3_CONFIG_DATA_H__ */ #endif /* __NM_L3_CONFIG_DATA_H__ */