mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-04 19:10:17 +01:00
ip6-config: add nm_ip6_config_set_privacy()
This commit is contained in:
parent
ed4d5889c7
commit
803a79f778
4 changed files with 31 additions and 10 deletions
|
|
@ -5582,13 +5582,15 @@ ip6_config_merge_and_apply (NMDevice *self,
|
|||
|
||||
/* If no config was passed in, create a new one */
|
||||
composite = nm_ip6_config_new (nm_device_get_ip_ifindex (self));
|
||||
nm_ip6_config_set_privacy (composite,
|
||||
priv->ndisc ?
|
||||
priv->ndisc_use_tempaddr :
|
||||
NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
|
||||
init_ip6_config_dns_priority (self, composite);
|
||||
|
||||
if (commit)
|
||||
ensure_con_ip6_config (self);
|
||||
|
||||
g_assert (composite);
|
||||
|
||||
/* Merge all the IP configs into the composite config */
|
||||
if (priv->ac_ip6_config) {
|
||||
nm_ip6_config_merge (composite, priv->ac_ip6_config,
|
||||
|
|
@ -5715,8 +5717,7 @@ END_ADD_DEFAULT_ROUTE:
|
|||
priv->default_route.v6_has = _device_get_default_route_from_platform (self, AF_INET6, (NMPlatformIPRoute *) &priv->default_route.v6);
|
||||
}
|
||||
|
||||
nm_ip6_config_addresses_sort (composite,
|
||||
priv->ndisc ? priv->ndisc_use_tempaddr : NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
|
||||
nm_ip6_config_addresses_sort (composite);
|
||||
|
||||
/* Allow setting MTU etc */
|
||||
if (commit) {
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ typedef struct {
|
|||
gint dns_priority;
|
||||
GVariant *address_data_variant;
|
||||
GVariant *addresses_variant;
|
||||
NMSettingIP6ConfigPrivacy privacy;
|
||||
} NMIP6ConfigPrivate;
|
||||
|
||||
struct _NMIP6Config {
|
||||
|
|
@ -106,6 +107,14 @@ nm_ip6_config_get_ifindex (const NMIP6Config *config)
|
|||
return NM_IP6_CONFIG_GET_PRIVATE (config)->ifindex;
|
||||
}
|
||||
|
||||
void
|
||||
nm_ip6_config_set_privacy (NMIP6Config *config, NMSettingIP6ConfigPrivacy privacy)
|
||||
{
|
||||
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
|
||||
|
||||
priv->privacy = privacy;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
|
|
@ -279,7 +288,7 @@ _addresses_sort_cmp (gconstpointer a, gconstpointer b, gpointer user_data)
|
|||
}
|
||||
|
||||
gboolean
|
||||
nm_ip6_config_addresses_sort (NMIP6Config *self, NMSettingIP6ConfigPrivacy use_temporary)
|
||||
nm_ip6_config_addresses_sort (NMIP6Config *self)
|
||||
{
|
||||
NMIP6ConfigPrivate *priv;
|
||||
size_t data_len = 0;
|
||||
|
|
@ -294,7 +303,8 @@ nm_ip6_config_addresses_sort (NMIP6Config *self, NMSettingIP6ConfigPrivacy use_t
|
|||
data_pre = g_new (char, data_len);
|
||||
memcpy (data_pre, priv->addresses->data, data_len);
|
||||
|
||||
g_array_sort_with_data (priv->addresses, _addresses_sort_cmp, GINT_TO_POINTER (use_temporary));
|
||||
g_array_sort_with_data (priv->addresses, _addresses_sort_cmp,
|
||||
GINT_TO_POINTER (priv->privacy));
|
||||
|
||||
changed = memcmp (data_pre, priv->addresses->data, data_len) != 0;
|
||||
g_free (data_pre);
|
||||
|
|
@ -1168,6 +1178,11 @@ nm_ip6_config_replace (NMIP6Config *dst, const NMIP6Config *src, gboolean *relev
|
|||
has_minor_changes = TRUE;
|
||||
}
|
||||
|
||||
if (src_priv->privacy != dst_priv->privacy) {
|
||||
nm_ip6_config_set_privacy (dst, src_priv->privacy);
|
||||
has_minor_changes = TRUE;
|
||||
}
|
||||
|
||||
#if NM_MORE_ASSERTS
|
||||
/* config_equal does not compare *all* the fields, therefore, we might have has_minor_changes
|
||||
* regardless of config_equal. But config_equal must correspond to has_relevant_changes. */
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ guint nm_ip6_config_get_num_addresses (const NMIP6Config *config);
|
|||
const NMPlatformIP6Address *nm_ip6_config_get_address (const NMIP6Config *config, guint i);
|
||||
const NMPlatformIP6Address *nm_ip6_config_get_address_first_nontentative (const NMIP6Config *config, gboolean linklocal);
|
||||
gboolean nm_ip6_config_address_exists (const NMIP6Config *config, const NMPlatformIP6Address *address);
|
||||
gboolean nm_ip6_config_addresses_sort (NMIP6Config *config, NMSettingIP6ConfigPrivacy use_temporary);
|
||||
gboolean nm_ip6_config_addresses_sort (NMIP6Config *config);
|
||||
gboolean nm_ip6_config_has_any_dad_pending (const NMIP6Config *self,
|
||||
const NMIP6Config *candidates);
|
||||
|
||||
|
|
@ -134,6 +134,8 @@ guint32 nm_ip6_config_get_mss (const NMIP6Config *config);
|
|||
void nm_ip6_config_hash (const NMIP6Config *config, GChecksum *sum, gboolean dns_only);
|
||||
gboolean nm_ip6_config_equal (const NMIP6Config *a, const NMIP6Config *b);
|
||||
|
||||
void nm_ip6_config_set_privacy (NMIP6Config *config, NMSettingIP6ConfigPrivacy privacy);
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Testing-only functions */
|
||||
|
||||
|
|
|
|||
|
|
@ -238,10 +238,13 @@ test_nm_ip6_config_addresses_sort_check (NMIP6Config *config, NMSettingIP6Config
|
|||
{
|
||||
int addr_count = nm_ip6_config_get_num_addresses (config);
|
||||
int i, irepeat;
|
||||
NMIP6Config *copy = nmtst_ip6_config_clone (config);
|
||||
NMIP6Config *copy2 = nmtst_ip6_config_clone (config);
|
||||
NMIP6Config *copy, *copy2;
|
||||
int *idx = g_new (int, addr_count);
|
||||
|
||||
nm_ip6_config_set_privacy (config, use_tempaddr);
|
||||
copy = nmtst_ip6_config_clone (config);
|
||||
copy2 = nmtst_ip6_config_clone (config);
|
||||
|
||||
/* initialize the array of indeces, and keep shuffling them for every @repeat iteration. */
|
||||
for (i = 0; i < addr_count; i++)
|
||||
idx[i] = i;
|
||||
|
|
@ -257,7 +260,7 @@ test_nm_ip6_config_addresses_sort_check (NMIP6Config *config, NMSettingIP6Config
|
|||
}
|
||||
|
||||
/* reorder them again */
|
||||
nm_ip6_config_addresses_sort (copy, use_tempaddr);
|
||||
nm_ip6_config_addresses_sort (copy);
|
||||
|
||||
/* check equality using nm_ip6_config_equal() */
|
||||
if (!nm_ip6_config_equal (copy, config)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue