mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-08 18:50:18 +01:00
ip4-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:
parent
5ce81e23b7
commit
9609d4da1d
3 changed files with 6 additions and 35 deletions
|
|
@ -4957,8 +4957,6 @@ END_ADD_DEFAULT_ROUTE:
|
|||
priv->default_route.v4_has = _device_get_default_route_from_platform (self, AF_INET, (NMPlatformIPRoute *) &priv->default_route.v4);
|
||||
}
|
||||
|
||||
nm_ip4_config_addresses_sort (composite);
|
||||
|
||||
/* Allow setting MTU etc */
|
||||
if (commit) {
|
||||
if (NM_DEVICE_GET_CLASS (self)->ip4_config_pre_commit)
|
||||
|
|
|
|||
|
|
@ -238,36 +238,6 @@ _addresses_sort_cmp (gconstpointer a, gconstpointer b)
|
|||
return memcmp (&n1, &n2, sizeof (guint32));
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_ip4_config_addresses_sort (NMIP4Config *self)
|
||||
{
|
||||
NMIP4ConfigPrivate *priv;
|
||||
size_t data_len = 0;
|
||||
char *data_pre = NULL;
|
||||
gboolean changed;
|
||||
|
||||
g_return_val_if_fail (NM_IS_IP4_CONFIG (self), FALSE);
|
||||
|
||||
priv = NM_IP4_CONFIG_GET_PRIVATE (self);
|
||||
if (priv->addresses->len > 1) {
|
||||
data_len = priv->addresses->len * g_array_get_element_size (priv->addresses);
|
||||
data_pre = g_new (char, data_len);
|
||||
memcpy (data_pre, priv->addresses->data, data_len);
|
||||
|
||||
g_array_sort (priv->addresses, _addresses_sort_cmp);
|
||||
|
||||
changed = memcmp (data_pre, priv->addresses->data, data_len) != 0;
|
||||
g_free (data_pre);
|
||||
|
||||
if (changed) {
|
||||
_notify (self, PROP_ADDRESS_DATA);
|
||||
_notify (self, PROP_ADDRESSES);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
|
|
@ -2315,6 +2285,7 @@ get_property (GObject *object, guint prop_id,
|
|||
case PROP_ADDRESSES:
|
||||
{
|
||||
GVariantBuilder array_builder, addr_builder;
|
||||
gs_unref_array GArray *new = NULL;
|
||||
guint naddr, i;
|
||||
|
||||
g_return_if_fail (!!priv->address_data_variant == !!priv->addresses_variant);
|
||||
|
|
@ -2323,11 +2294,14 @@ get_property (GObject *object, guint prop_id,
|
|||
goto return_cached;
|
||||
|
||||
naddr = nm_ip4_config_get_num_addresses (config);
|
||||
new = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP4Address), naddr);
|
||||
g_array_append_vals (new, priv->addresses->data, priv->addresses->len);
|
||||
g_array_sort (new, _addresses_sort_cmp);
|
||||
|
||||
/* Build address data variant */
|
||||
g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("aa{sv}"));
|
||||
for (i = 0; i < naddr; i++) {
|
||||
const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, i);
|
||||
const NMPlatformIP4Address *address = &g_array_index (new, NMPlatformIP4Address, i);
|
||||
|
||||
g_variant_builder_init (&addr_builder, G_VARIANT_TYPE ("a{sv}"));
|
||||
g_variant_builder_add (&addr_builder, "{sv}",
|
||||
|
|
@ -2355,7 +2329,7 @@ get_property (GObject *object, guint prop_id,
|
|||
/* Build addresses variant */
|
||||
g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("aau"));
|
||||
for (i = 0; i < naddr; i++) {
|
||||
const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, i);
|
||||
const NMPlatformIP4Address *address = &g_array_index (new, NMPlatformIP4Address, i);
|
||||
guint32 dbus_addr[3];
|
||||
|
||||
dbus_addr[0] = address->address;
|
||||
|
|
|
|||
|
|
@ -87,7 +87,6 @@ void nm_ip4_config_del_address (NMIP4Config *config, guint i);
|
|||
guint nm_ip4_config_get_num_addresses (const NMIP4Config *config);
|
||||
const NMPlatformIP4Address *nm_ip4_config_get_address (const NMIP4Config *config, guint i);
|
||||
gboolean nm_ip4_config_address_exists (const NMIP4Config *config, const NMPlatformIP4Address *address);
|
||||
gboolean nm_ip4_config_addresses_sort (NMIP4Config *config);
|
||||
|
||||
void nm_ip4_config_reset_routes (NMIP4Config *config);
|
||||
void nm_ip4_config_add_route (NMIP4Config *config, const NMPlatformIP4Route *route);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue