diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2016-11-18 11:52:56 +0100 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2016-12-09 14:30:57 +0100 |
commit | 2ea42eee5ab11f8540dfec4140e548b9ee48af69 (patch) | |
tree | 57454cb79c6c38cf644e6c2b0929fac838468d1f | |
parent | 450572cff48f0dde662cccd8d816472629ef824e (diff) | |
download | NetworkManager-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.c | 2 | ||||
-rw-r--r-- | 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 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, |