NetworkManager/0003-fix-device-run-state-u...

141 lines
5.7 KiB
Diff

From f2d099c8c534ee426dbc31a3a61fcf27c18b92d8 Mon Sep 17 00:00:00 2001
From: Thomas Haller <thaller@redhat.com>
Date: Thu, 11 May 2017 19:26:28 +0200
Subject: [PATCH 1/2] core: cleanup logging reading device-state
- print string value instead of numerical "managed"
- for missing state, print the same format. After all,
some defaults apply and it is interesting to know what
they are.
(cherry picked from commit 81008c90ac9832ade1c9783078823fdd45221225)
(cherry picked from commit 8da225283b9977554a6b78e73dc03d22b8703027)
---
src/nm-config.c | 30 +++++++++++++-----------------
1 file changed, 13 insertions(+), 17 deletions(-)
diff --git a/src/nm-config.c b/src/nm-config.c
index 2cdf855..954cad7 100644
--- a/src/nm-config.c
+++ b/src/nm-config.c
@@ -1873,6 +1873,13 @@ _nm_config_state_set (NMConfig *self,
#define DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_PERM_HW_ADDR_FAKE "perm-hw-addr-fake"
#define DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_CONNECTION_UUID "connection-uuid"
+NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_device_state_managed_type_to_str, NMConfigDeviceStateManagedType,
+ NM_UTILS_LOOKUP_DEFAULT_NM_ASSERT ("unknown"),
+ NM_UTILS_LOOKUP_STR_ITEM (NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNKNOWN, "unknown"),
+ NM_UTILS_LOOKUP_STR_ITEM (NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNMANAGED, "unmanaged"),
+ NM_UTILS_LOOKUP_STR_ITEM (NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED, "managed"),
+);
+
static NMConfigDeviceStateData *
_config_device_state_data_new (int ifindex, GKeyFile *kf)
{
@@ -1968,27 +1975,16 @@ nm_config_device_state_load (int ifindex)
device_state = _config_device_state_data_new (ifindex, kf);
- if (kf) {
- _LOGT ("device-state: read #%d (%s); managed=%d%s%s%s%s%s%s",
- ifindex, path,
- device_state->managed,
- NM_PRINT_FMT_QUOTED (device_state->connection_uuid, ", connection-uuid=", device_state->connection_uuid, "", ""),
- NM_PRINT_FMT_QUOTED (device_state->perm_hw_addr_fake, ", perm-hw-addr-fake=", device_state->perm_hw_addr_fake, "", ""));
- } else {
- _LOGT ("device-state: read #%d (%s); no persistent state",
- ifindex, path);
- }
+ _LOGT ("device-state: %s #%d (%s); managed=%s%s%s%s%s%s%s",
+ kf ? "read" : "miss",
+ ifindex, path,
+ _device_state_managed_type_to_str (device_state->managed),
+ NM_PRINT_FMT_QUOTED (device_state->connection_uuid, ", connection-uuid=", device_state->connection_uuid, "", ""),
+ NM_PRINT_FMT_QUOTED (device_state->perm_hw_addr_fake, ", perm-hw-addr-fake=", device_state->perm_hw_addr_fake, "", ""));
return device_state;
}
-NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_device_state_managed_type_to_str, NMConfigDeviceStateManagedType,
- NM_UTILS_LOOKUP_DEFAULT_NM_ASSERT ("unknown"),
- NM_UTILS_LOOKUP_STR_ITEM (NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNKNOWN, "unknown"),
- NM_UTILS_LOOKUP_STR_ITEM (NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNMANAGED, "unmanaged"),
- NM_UTILS_LOOKUP_STR_ITEM (NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED, "managed"),
-);
-
gboolean
nm_config_device_state_write (int ifindex,
NMConfigDeviceStateManagedType managed,
--
2.9.3
From 41ff1247a2dcfd6c781cbce2fac12ab6ae657727 Mon Sep 17 00:00:00 2001
From: Thomas Haller <thaller@redhat.com>
Date: Thu, 11 May 2017 19:40:55 +0200
Subject: [PATCH 2/2] core: fix reading device state file
For manged=unknown, we don't write the value to the
device state keyfile. The results in an empty file,
or at least, a keyfile that doesn't have device.managed
set.
On read, we must treat a missing device.managed flag as
unknown, and not as unmanaged. Otherwise, on restart
a device becomes marked as explicitly unmanaged.
This was broken by commit 142ebb1 "core: only persist explicit managed
state in device's state file", where we started conditionally
to no longer write the managed state.
Reported-by: Michael Biebl <mbiebl@debian.org>
Fixes: 142ebb10376ec592593f15b0359f38be89c97620
(cherry picked from commit 348ffdec183ee198499dad1365906e8d16ff4122)
(cherry picked from commit 33d3ec3b3e5d2e737afc8db6c64850e67db5c12d)
---
src/nm-config.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/src/nm-config.c b/src/nm-config.c
index 954cad7..54ccf9a 100644
--- a/src/nm-config.c
+++ b/src/nm-config.c
@@ -1894,21 +1894,23 @@ _config_device_state_data_new (int ifindex, GKeyFile *kf)
nm_assert (ifindex > 0);
if (kf) {
- gboolean managed;
-
- managed = nm_config_keyfile_get_boolean (kf,
- DEVICE_RUN_STATE_KEYFILE_GROUP_DEVICE,
- DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_MANAGED,
- FALSE);
- managed_type = managed
- ? NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED
- : NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNMANAGED;
-
- if (managed) {
+ switch (nm_config_keyfile_get_boolean (kf,
+ DEVICE_RUN_STATE_KEYFILE_GROUP_DEVICE,
+ DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_MANAGED,
+ -1)) {
+ case TRUE:
+ managed_type = NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED;
connection_uuid = nm_config_keyfile_get_value (kf,
DEVICE_RUN_STATE_KEYFILE_GROUP_DEVICE,
DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_CONNECTION_UUID,
NM_CONFIG_GET_VALUE_STRIP | NM_CONFIG_GET_VALUE_NO_EMPTY);
+ break;
+ case FALSE:
+ managed_type = NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNMANAGED;
+ break;
+ case -1:
+ /* missing property in keyfile. */
+ break;
}
perm_hw_addr_fake = nm_config_keyfile_get_value (kf,
--
2.9.3