You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
2.3 KiB
48 lines
2.3 KiB
From 43b27ab2c4735e35d84e6f5c90b8a79e23c05587 Mon Sep 17 00:00:00 2001 |
|
From: Thomas Haller <thaller@redhat.com> |
|
Date: Thu, 9 Jun 2022 10:00:47 +0200 |
|
Subject: [PATCH 1/1] platform: workaround for preserving IPv6 address order |
|
|
|
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/ ## 1021 |
|
--- |
|
src/libnm-platform/nm-platform.c | 25 ++++++++++++++++++++----- |
|
1 file changed, 20 insertions(+), 5 deletions(-) |
|
|
|
diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c |
|
index f264ed7a45b2..45534dd96a46 100644 |
|
--- a/src/libnm-platform/nm-platform.c |
|
+++ b/src/libnm-platform/nm-platform.c |
|
@@ -3978,11 +3978,26 @@ nm_platform_ip_address_sync(NMPlatform *self, |
|
/* @plat_addresses for IPv6 must be sorted in decreasing priority order (highest priority addresses first). |
|
* IPv4 are probably unsorted or sorted with lowest priority first, but their order doesn't matter because |
|
* we check the "secondary" flag. */ |
|
- plat_addresses = nm_platform_lookup_clone( |
|
- self, |
|
- nmp_lookup_init_object(&lookup, NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4), ifindex), |
|
- NULL, |
|
- NULL); |
|
+ if (IS_IPv4) { |
|
+ plat_addresses = nm_platform_lookup_clone( |
|
+ self, |
|
+ nmp_lookup_init_object(&lookup, NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4), ifindex), |
|
+ NULL, |
|
+ NULL); |
|
+ } else { |
|
+ /* HACK: early 1.36 versions had a bug of not actually reordering the IPv6 addresses. |
|
+ * This was fixed by commit cd4601802de5 ('platform: fix address order in |
|
+ * nm_platform_ip_address_sync()'). |
|
+ * |
|
+ * However, also in 1.36, the actually implemented order of IPv6 addresses is not |
|
+ * the one we want ([1]). So disable the fix again, to not reorder IPv6 addresses. |
|
+ * |
|
+ * The effect is, that DHCPv6 addresses end up being preferred over SLAAC, because |
|
+ * they get added later during activation. Of course, if any address gets added |
|
+ * even later (like a new router appearing), then the order will be wrong again. |
|
+ * |
|
+ * [1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1021 */ |
|
+ } |
|
|
|
if (nm_g_ptr_array_len(plat_addresses) > 0) { |
|
/* Delete addresses that interfere with our intended order. */ |
|
-- |
|
2.36.1
|
|
|