summaryrefslogtreecommitdiff
path: root/src/platform
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2017-05-15 17:17:26 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2017-05-24 15:56:15 +0200
commit31656a066bfb3edc106f5efd5d2be46396824930 (patch)
treeac6ef4fce9b9c709ae7c557262cc22aeecdc660a /src/platform
parent44df6d793818c62719a7efe65808beb3461a8436 (diff)
downloadNetworkManager-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.c26
-rw-r--r--src/platform/nm-platform.h2
-rw-r--r--src/platform/tests/test-common.c2
-rw-r--r--src/platform/tests/test-general.c2
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);
}
/*****************************************************************************/