nmstate/SOURCES/BZ_2149048-ip-Preserve-the-...

65 lines
2.3 KiB
Diff

From 2d0cfd5ad8e049f30cad10d977a5fae8bc4e6b64 Mon Sep 17 00:00:00 2001
From: Gris Ge <fge@redhat.com>
Date: Thu, 10 Nov 2022 15:51:25 +0800
Subject: [PATCH] ip: Preserve the IP address order when applying
When applying the IP address, we should preserve the order for use case
whether user is expecting non-first ones been set with `secondary` flag.
In RHEL/CentOS 8, NetworkManager is using reverted IPv6 address
according to
https://bugzilla.redhat.com/show_bug.cgi?id=2139443
Hence downstream nmstate will ship additional patch to fix it.
The upstream nmstate will not revert the IPv6 address list before
sending to NM.
The downstream build of RHEL 8 has different behaviour than copr build
from git main branch. It is hard to tell whether we are using downstream
build or git build at runtime, hence we ship the
`test_preserve_ipv6_addresses_order` test in RHEL 8.
Integration test case included.
Signed-off-by: Gris Ge <fge@redhat.com>
---
libnmstate/ifaces/base_iface.py | 4 +-
tests/integration/static_ip_address_test.py | 67 ++++++++++++++++++++-
tests/integration/testlib/env.py | 5 ++
tests/integration/testlib/iproutelib.py | 14 +++++
tests/lib/ifaces/ip_state_test.py | 2 +
5 files changed, 89 insertions(+), 3 deletions(-)
diff --git a/libnmstate/ifaces/base_iface.py b/libnmstate/ifaces/base_iface.py
index fb2b7bb6..f29f9ac9 100644
--- a/libnmstate/ifaces/base_iface.py
+++ b/libnmstate/ifaces/base_iface.py
@@ -47,7 +47,6 @@ class IPState:
self._family = family
self._info = info
self._remove_stack_if_disabled()
- self._sort_addresses()
self._canonicalize_ip_addr()
self._canonicalize_dynamic()
@@ -71,7 +70,7 @@ class IPState:
addr[InterfaceIP.ADDRESS_IP]
)
- def _sort_addresses(self):
+ def sort_addresses(self):
self.addresses.sort(key=itemgetter(InterfaceIP.ADDRESS_IP))
def _remove_stack_if_disabled(self):
@@ -431,6 +430,7 @@ class BaseIface:
self.sort_port()
for family in (Interface.IPV4, Interface.IPV6):
ip_state = self.ip_state(family)
+ ip_state.sort_addresses()
ip_state.remove_link_local_address()
self._info[family] = ip_state.to_dict()
state = self.to_dict()
--
2.38.1