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.
This commit is contained in:
Beniamino Galvani
2016-11-18 11:52:56 +01:00
parent 803a79f778
commit 0a0bca9c7f
2 changed files with 7 additions and 4 deletions

View File

@@ -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;

View File

@@ -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,