a2ab3fed9e
- device: don't change MTU unless explicitly configured (rh #1460760) - core: don't remove external IPv4 addresses (rh #1459813) - cli: fix output of iface in overview output (rh#1460219) - ppp: unexport NMPPPManager instance on dispose (rh#1459579) - cli: remove spurious device names from wifi subcommands output (rh#1460527)
52 lines
1.9 KiB
Diff
52 lines
1.9 KiB
Diff
From 59aa2a26b4a712131b38e155d3c1d70a74183636 Mon Sep 17 00:00:00 2001
|
|
From: Beniamino Galvani <bgalvani@redhat.com>
|
|
Date: Tue, 13 Jun 2017 14:44:22 +0200
|
|
Subject: [PATCH] core: sort addresses in captured IPv4 configuration
|
|
|
|
When IPv4 addresses are synchronized to platform, the order of IPv4
|
|
addresses matters because the first address is considered the primary
|
|
one. Thus, nm_ip4_config_capture() should put the primary address as
|
|
first, otherwise during synchronization addresses will be removed and
|
|
added back with a different primary/secondary role.
|
|
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=1459813
|
|
(cherry picked from commit b6fa87a4c07c968614d123750be47a74de62f04d)
|
|
(cherry picked from commit 9819ffe7d42f08bb082ae2d9e125a7dd3bfe6420)
|
|
---
|
|
src/nm-ip4-config.c | 12 ++++++++++++
|
|
1 file changed, 12 insertions(+)
|
|
|
|
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
|
|
index 20532e8..ae6af9c 100644
|
|
--- a/src/nm-ip4-config.c
|
|
+++ b/src/nm-ip4-config.c
|
|
@@ -248,6 +248,16 @@ notify_addresses (NMIP4Config *self)
|
|
_notify (self, PROP_ADDRESSES);
|
|
}
|
|
|
|
+static gint
|
|
+sort_captured_addresses (gconstpointer a, gconstpointer b)
|
|
+{
|
|
+ const NMPlatformIP4Address *addr_a = a, *addr_b = b;
|
|
+
|
|
+ /* Primary addresses first */
|
|
+ return NM_FLAGS_HAS (addr_a->n_ifa_flags, IFA_F_SECONDARY) -
|
|
+ NM_FLAGS_HAS (addr_b->n_ifa_flags, IFA_F_SECONDARY);
|
|
+}
|
|
+
|
|
NMIP4Config *
|
|
nm_ip4_config_capture (NMPlatform *platform, int ifindex, gboolean capture_resolv_conf)
|
|
{
|
|
@@ -269,6 +279,8 @@ nm_ip4_config_capture (NMPlatform *platform, int ifindex, gboolean capture_resol
|
|
g_array_unref (priv->routes);
|
|
|
|
priv->addresses = nm_platform_ip4_address_get_all (platform, ifindex);
|
|
+ g_array_sort (priv->addresses, sort_captured_addresses);
|
|
+
|
|
priv->routes = nm_platform_ip4_route_get_all (platform, ifindex, NM_PLATFORM_GET_ROUTE_FLAGS_WITH_DEFAULT | NM_PLATFORM_GET_ROUTE_FLAGS_WITH_NON_DEFAULT);
|
|
|
|
/* Extract gateway from default route */
|
|
--
|
|
2.9.3
|
|
|