From 0a0bca9c7fad072c31c91f93a9200c83aab37d0c Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 18 Nov 2016 11:52:56 +0100 Subject: [PATCH] ip6-config: sort addresses only when reading the property value Don't change the address order from configuration, but instead sort addresses just before returning them to clients. --- src/devices/nm-device.c | 2 -- src/nm-ip6-config.c | 9 +++++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 00403db5f..e46983b1c 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -5717,8 +5717,6 @@ 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); - /* Allow setting MTU etc */ if (commit) { NMUtilsIPv6IfaceId iid; diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c index 8b866a8fa..661d4377b 100644 --- a/src/nm-ip6-config.c +++ b/src/nm-ip6-config.c @@ -2066,6 +2066,7 @@ get_property (GObject *object, guint prop_id, case PROP_ADDRESSES: { GVariantBuilder array_builder, addr_builder; + gs_unref_array GArray *new = NULL; const struct in6_addr *gateway; guint naddr, i; @@ -2076,10 +2077,14 @@ get_property (GObject *object, guint prop_id, naddr = nm_ip6_config_get_num_addresses (config); gateway = nm_ip6_config_get_gateway (config); + new = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP6Address), naddr); + g_array_append_vals (new, priv->addresses->data, naddr); + g_array_sort_with_data (new, _addresses_sort_cmp, + GINT_TO_POINTER (priv->privacy)); g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("aa{sv}")); for (i = 0; i < naddr; i++) { - const NMPlatformIP6Address *address = nm_ip6_config_get_address (config, i); + const NMPlatformIP6Address *address = &g_array_index (new, NMPlatformIP6Address, i); g_variant_builder_init (&addr_builder, G_VARIANT_TYPE ("a{sv}")); g_variant_builder_add (&addr_builder, "{sv}", @@ -2101,7 +2106,7 @@ get_property (GObject *object, guint prop_id, g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("a(ayuay)")); for (i = 0; i < naddr; i++) { - const NMPlatformIP6Address *address = nm_ip6_config_get_address (config, i); + const NMPlatformIP6Address *address = &g_array_index (new, NMPlatformIP6Address, i); g_variant_builder_add (&array_builder, "(@ayu@ay)", g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,