device: commit the l3cd changes via l3cfg during cleanup

After the first time committing, the routes and addresses are removed
directly by bypassing the l3cfg in `nm_device_cleanup()`, then when
committing the second time, the l3cfg think that some addresses are
still configured but they are actually already disappeared from the
kernel already.

To fix it, commit the l3cd changes through l3cfg instead of removing
the addresses/routes directly.

https://bugzilla.redhat.com/show_bug.cgi?id=2043514
Fixes-test: @nmcli_general_activate_static_connection_carrier_not_ignored
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1115

(cherry picked from commit 9f6114afe8)
This commit is contained in:
Wen Liang
2022-02-15 14:00:18 -05:00
parent 355f7c63de
commit 58496e5f82

View File

@@ -15076,8 +15076,7 @@ nm_device_cleanup(NMDevice *self, NMDeviceStateReason reason, CleanupType cleanu
if (ifindex > 0) {
NMPlatform *platform = nm_device_get_platform(self);
nm_platform_ip_route_flush(platform, AF_UNSPEC, ifindex);
nm_platform_ip_address_flush(platform, AF_UNSPEC, ifindex);
nm_device_l3cfg_commit(self, NM_L3_CFG_COMMIT_TYPE_REAPPLY, TRUE);
if (nm_device_get_applied_setting(self, NM_TYPE_SETTING_TC_CONFIG)) {
nm_platform_tc_sync(platform, ifindex, NULL, NULL);