summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2016-11-18 11:52:56 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2016-12-09 14:30:57 +0100
commit2ea42eee5ab11f8540dfec4140e548b9ee48af69 (patch)
tree57454cb79c6c38cf644e6c2b0929fac838468d1f
parent450572cff48f0dde662cccd8d816472629ef824e (diff)
downloadNetworkManager-bg/ip-order-rh1394500-on-nm-1-4.tar.gz
ip6-config: sort addresses only when reading the property valuebg/ip-order-rh1394500-on-nm-1-4
Don't change the address order from configuration, but instead sort addresses just before returning them to clients. (cherry picked from commit 0a0bca9c7fad072c31c91f93a9200c83aab37d0c)
-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 093f7a5150..ac840ab931 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -5567,8 +5567,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 893302b33b..a0211246cc 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,