diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2017-05-15 17:17:26 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2017-05-24 15:56:15 +0200 |
commit | 31656a066bfb3edc106f5efd5d2be46396824930 (patch) | |
tree | ac6ef4fce9b9c709ae7c557262cc22aeecdc660a /src/platform | |
parent | 44df6d793818c62719a7efe65808beb3461a8436 (diff) | |
download | NetworkManager-31656a066bfb3edc106f5efd5d2be46396824930.tar.gz |
core: add configuration flag to choose slaves activation order
Commits 39d0559d9a7a ("platform: sort links by name instead of
ifindex") and 529a0a1a7f19 ("manager: sort slaves to be autoconnected
by device name") changed the order of activation of slaves. Introduce
a system-wide configuration property to preserve the old behavior.
https://bugzilla.redhat.com/show_bug.cgi?id=1452585
Diffstat (limited to 'src/platform')
-rw-r--r-- | src/platform/nm-platform.c | 26 | ||||
-rw-r--r-- | src/platform/nm-platform.h | 2 | ||||
-rw-r--r-- | src/platform/tests/test-common.c | 2 | ||||
-rw-r--r-- | src/platform/tests/test-general.c | 2 |
4 files changed, 18 insertions, 14 deletions
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index e9a1d75b5e..90be93fd3b 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -437,7 +437,8 @@ nm_platform_sysctl_get_int_checked (NMPlatform *self, const char *pathid, int di static int _link_get_all_presort (gconstpointer p_a, - gconstpointer p_b) + gconstpointer p_b, + gpointer sort_by_name) { const NMPlatformLink *a = p_a; const NMPlatformLink *b = p_b; @@ -448,13 +449,16 @@ _link_get_all_presort (gconstpointer p_a, if (b->ifindex == 1) return 1; - /* Initialized links first */ - if (a->initialized > b->initialized) - return -1; - if (a->initialized < b->initialized) - return 1; + if (GPOINTER_TO_INT (sort_by_name)) { + /* Initialized links first */ + if (a->initialized > b->initialized) + return -1; + if (a->initialized < b->initialized) + return 1; - return strcmp (a->name, b->name); + return strcmp (a->name, b->name); + } else + return a->ifindex - b->ifindex; } /** @@ -465,7 +469,7 @@ _link_get_all_presort (gconstpointer p_a, * owned by the caller and should be freed with g_array_unref(). */ GArray * -nm_platform_link_get_all (NMPlatform *self) +nm_platform_link_get_all (NMPlatform *self, gboolean sort_by_name) { GArray *links, *result; guint i, j, nresult; @@ -479,9 +483,9 @@ nm_platform_link_get_all (NMPlatform *self) if (!links || links->len == 0) return links; - /* first sort the links by their ifindex. Below we will sort further by moving - * children/slaves to the end. */ - g_array_sort (links, _link_get_all_presort); + /* first sort the links by their ifindex or name. Below we will sort + * further by moving children/slaves to the end. */ + g_array_sort_with_data (links, _link_get_all_presort, GINT_TO_POINTER (sort_by_name)); unseen = g_hash_table_new (g_direct_hash, g_direct_equal); for (i = 0; i < links->len; i++) { diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index 43be17fa0c..1b8fa13319 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -763,7 +763,7 @@ const NMPlatformLink *nm_platform_link_get (NMPlatform *self, int ifindex); const NMPlatformLink *nm_platform_link_get_by_ifname (NMPlatform *self, const char *ifname); const NMPlatformLink *nm_platform_link_get_by_address (NMPlatform *self, gconstpointer address, size_t length); -GArray *nm_platform_link_get_all (NMPlatform *self); +GArray *nm_platform_link_get_all (NMPlatform *self, gboolean sort_by_name); NMPlatformError nm_platform_link_dummy_add (NMPlatform *self, const char *name, const NMPlatformLink **out_link); NMPlatformError nm_platform_link_bridge_add (NMPlatform *self, const char *name, const void *address, size_t address_len, const NMPlatformLink **out_link); NMPlatformError nm_platform_link_bond_add (NMPlatform *self, const char *name, const NMPlatformLink **out_link); diff --git a/src/platform/tests/test-common.c b/src/platform/tests/test-common.c index 04db862df6..a9d0694d9d 100644 --- a/src/platform/tests/test-common.c +++ b/src/platform/tests/test-common.c @@ -185,7 +185,7 @@ link_callback (NMPlatform *platform, int obj_type_i, int ifindex, NMPlatformLink /* Check the data */ g_assert (received->ifindex > 0); - links = nm_platform_link_get_all (NM_PLATFORM_GET); + links = nm_platform_link_get_all (NM_PLATFORM_GET, TRUE); for (i = 0; i < links->len; i++) { cached = &g_array_index (links, NMPlatformLink, i); if (cached->ifindex == received->ifindex) { diff --git a/src/platform/tests/test-general.c b/src/platform/tests/test-general.c index 2ccfac7d2c..e772662c37 100644 --- a/src/platform/tests/test-general.c +++ b/src/platform/tests/test-general.c @@ -48,7 +48,7 @@ test_link_get_all (void) platform = nm_linux_platform_new (TRUE, NM_PLATFORM_NETNS_SUPPORT_DEFAULT); - links = nm_platform_link_get_all (platform); + links = nm_platform_link_get_all (platform, TRUE); } /*****************************************************************************/ |