summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2016-11-18 11:52:56 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2016-11-29 15:56:50 +0100
commitcf47dab17a0adf6038c199033d216fc6d04c6b9d (patch)
treeaa637d24bc954e409be23bee45a258f346d28cbe
parentd74afa94c6106fba1d294d274b270316056f44a6 (diff)
downloadNetworkManager-cf47dab17a0adf6038c199033d216fc6d04c6b9d.tar.gz
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.
-rw-r--r--src/devices/nm-device.c2
-rw-r--r--src/nm-ip6-config.c9
2 files changed, 7 insertions, 4 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 0a595dbeda..92b1cc0edb 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 8b866a8fa2..661d4377b6 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,