import patches from rhel-7.4
Let's keep rhel-7.4 and Fedora package in sync, so Fedora benefits from bugfixes during rhel-7.4 development and RHEL benefits from additional testing by the community. These are all upstream patches originally cherry-picked from nm-1-8 branch.
This commit is contained in:
parent
085f84674b
commit
5ac481bbc0
@ -1,4 +1,4 @@
|
||||
From bf2a90588410a7d81ff86a6dcf09521316f23ffb Mon Sep 17 00:00:00 2001
|
||||
From 1ea56b82121d3f024859da41337cf2406e7f2e61 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Wed, 10 May 2017 15:31:15 +0200
|
||||
Subject: [PATCH 1/1] utils: fix maybe-uninitialized in "nm-udev-utils.c"
|
140
0003-fix-device-run-state-unknown-rh1440171.patch
Normal file
140
0003-fix-device-run-state-unknown-rh1440171.patch
Normal file
@ -0,0 +1,140 @@
|
||||
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
|
||||
|
65
0004-proxy-crash-rh1450459.patch
Normal file
65
0004-proxy-crash-rh1450459.patch
Normal file
@ -0,0 +1,65 @@
|
||||
From 4bf6a4dd5b73fcea36fcfa4a97091665b233bc15 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Thu, 11 May 2017 12:09:45 +0200
|
||||
Subject: [PATCH 1/2] proxy: fix refcount handing for DestroyProxyConfiguration
|
||||
operation
|
||||
|
||||
Fixes: e895beb0da38fc87ce93fe7403a6b50e92f0dd82
|
||||
(cherry picked from commit df137fdf9a7077c20d8923f068568c22fb479e5a)
|
||||
(cherry picked from commit 10373de9072f0318ea1150c85fd7b7ebfa5a9655)
|
||||
---
|
||||
src/nm-pacrunner-manager.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/nm-pacrunner-manager.c b/src/nm-pacrunner-manager.c
|
||||
index cfc028c..fd3d1f8 100644
|
||||
--- a/src/nm-pacrunner-manager.c
|
||||
+++ b/src/nm-pacrunner-manager.c
|
||||
@@ -250,6 +250,7 @@ pacrunner_send_done (GDBusProxy *proxy, GAsyncResult *res, gpointer user_data)
|
||||
_LOG2D (config, "sent");
|
||||
|
||||
if (config->removed) {
|
||||
+ config_ref (config);
|
||||
g_dbus_proxy_call (priv->pacrunner,
|
||||
"DestroyProxyConfiguration",
|
||||
g_variant_new ("(o)", config->path),
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From 617aa8fd2fccbd8a8cb76fbf9bce3e74eac78f8c Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Thu, 11 May 2017 12:32:22 +0200
|
||||
Subject: [PATCH 2/2] proxy: fix passing cancellable to async D-Bus operations
|
||||
|
||||
We must not cancel pacrunner_cancellable when the D-Bus proxy is
|
||||
created. Instead, keep it around and use it later for the asynchronous
|
||||
D-Bus operations.
|
||||
|
||||
This doesn't really matter at the moment, because the pacrunner manager
|
||||
is only destroyed when NetworkManager is about to terminated. That is
|
||||
the only time when we actually cancel the asynchronous request. Also,
|
||||
at that time we no longer iterate the mainloop, so the pending requests
|
||||
are never completed anyway.
|
||||
|
||||
(cherry picked from commit a08540d967812457af192ebd34497412da5d143e)
|
||||
(cherry picked from commit 6cfd9279625366c24808d86e1c3b04a18a036eb6)
|
||||
---
|
||||
src/nm-pacrunner-manager.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/src/nm-pacrunner-manager.c b/src/nm-pacrunner-manager.c
|
||||
index fd3d1f8..87e0a36 100644
|
||||
--- a/src/nm-pacrunner-manager.c
|
||||
+++ b/src/nm-pacrunner-manager.c
|
||||
@@ -330,7 +330,6 @@ pacrunner_proxy_cb (GObject *source, GAsyncResult *res, gpointer user_data)
|
||||
priv = NM_PACRUNNER_MANAGER_GET_PRIVATE (self);
|
||||
|
||||
priv->pacrunner = proxy;
|
||||
- nm_clear_g_cancellable (&priv->pacrunner_cancellable);
|
||||
|
||||
g_signal_connect (priv->pacrunner, "notify::g-name-owner",
|
||||
G_CALLBACK (name_owner_changed_cb), self);
|
||||
--
|
||||
2.9.3
|
||||
|
586
0005-device-fix-wait-carrier-rh1450444.patch
Normal file
586
0005-device-fix-wait-carrier-rh1450444.patch
Normal file
@ -0,0 +1,586 @@
|
||||
From fde61a81ee3ff70c85aed230bcfda79f2fb70ea8 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Fri, 12 May 2017 16:17:18 +0200
|
||||
Subject: [PATCH 1/7] device: don't call virtual function carrier_changed()
|
||||
directly
|
||||
|
||||
Don't give the subclass the ability to override the parents
|
||||
behavior. The parent implementation is not intended to allow
|
||||
for that. Instead, restrict the flexibility of how the virtual
|
||||
function integrates with the larger picture. That means, the
|
||||
virtual function is only called at one place, and there is only
|
||||
one implementation in NMDeviceEthernet (and it doesn't really
|
||||
matter whether the implementation chains up the parent implementation
|
||||
or not).
|
||||
|
||||
(cherry picked from commit 5a7374d8be33086a5c00a450a472069595ba1734)
|
||||
(cherry picked from commit e9aa3cc3575b8456eb712c0e06dc815940b49cbc)
|
||||
---
|
||||
src/devices/nm-device-ethernet.c | 7 +++----
|
||||
src/devices/nm-device.c | 17 ++++++++++++-----
|
||||
src/devices/nm-device.h | 2 +-
|
||||
3 files changed, 16 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c
|
||||
index 4c5aeb5..8a04d40 100644
|
||||
--- a/src/devices/nm-device-ethernet.c
|
||||
+++ b/src/devices/nm-device-ethernet.c
|
||||
@@ -1597,12 +1597,11 @@ get_link_speed (NMDevice *device)
|
||||
}
|
||||
|
||||
static void
|
||||
-carrier_changed (NMDevice *device, gboolean carrier)
|
||||
+carrier_changed_notify (NMDevice *device, gboolean carrier)
|
||||
{
|
||||
if (carrier)
|
||||
get_link_speed (device);
|
||||
-
|
||||
- NM_DEVICE_CLASS (nm_device_ethernet_parent_class)->carrier_changed (device, carrier);
|
||||
+ NM_DEVICE_CLASS (nm_device_ethernet_parent_class)->carrier_changed_notify (device, carrier);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1764,7 +1763,7 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass)
|
||||
parent_class->deactivate = deactivate;
|
||||
parent_class->get_s390_subchannels = get_s390_subchannels;
|
||||
parent_class->update_connection = update_connection;
|
||||
- parent_class->carrier_changed = carrier_changed;
|
||||
+ parent_class->carrier_changed_notify = carrier_changed_notify;
|
||||
parent_class->link_changed = link_changed;
|
||||
parent_class->is_available = is_available;
|
||||
parent_class->can_reapply_change = can_reapply_change;
|
||||
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
|
||||
index 9c30790..652bede 100644
|
||||
--- a/src/devices/nm-device.c
|
||||
+++ b/src/devices/nm-device.c
|
||||
@@ -2168,10 +2168,18 @@ nm_device_update_dynamic_ip_setup (NMDevice *self)
|
||||
}
|
||||
|
||||
static void
|
||||
+carrier_changed_notify (NMDevice *self, gboolean carrier)
|
||||
+{
|
||||
+ /* stub */
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
carrier_changed (NMDevice *self, gboolean carrier)
|
||||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
|
||||
+ NM_DEVICE_GET_CLASS (self)->carrier_changed_notify (self, carrier);
|
||||
+
|
||||
if (priv->state <= NM_DEVICE_STATE_UNMANAGED)
|
||||
return;
|
||||
|
||||
@@ -2245,7 +2253,7 @@ link_disconnect_action_cb (gpointer user_data)
|
||||
|
||||
priv->carrier_defer_id = 0;
|
||||
|
||||
- NM_DEVICE_GET_CLASS (self)->carrier_changed (self, FALSE);
|
||||
+ carrier_changed (self, FALSE);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@@ -2266,7 +2274,6 @@ void
|
||||
nm_device_set_carrier (NMDevice *self, gboolean carrier)
|
||||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
- NMDeviceClass *klass = NM_DEVICE_GET_CLASS (self);
|
||||
NMDeviceState state = nm_device_get_state (self);
|
||||
|
||||
if (priv->carrier == carrier)
|
||||
@@ -2278,7 +2285,7 @@ nm_device_set_carrier (NMDevice *self, gboolean carrier)
|
||||
if (priv->carrier) {
|
||||
_LOGI (LOGD_DEVICE, "link connected");
|
||||
link_disconnect_action_cancel (self);
|
||||
- klass->carrier_changed (self, TRUE);
|
||||
+ carrier_changed (self, TRUE);
|
||||
|
||||
if (nm_clear_g_source (&priv->carrier_wait_id)) {
|
||||
nm_device_remove_pending_action (self, NM_PENDING_ACTION_CARRIER_WAIT, TRUE);
|
||||
@@ -2287,7 +2294,7 @@ nm_device_set_carrier (NMDevice *self, gboolean carrier)
|
||||
} else if ( state <= NM_DEVICE_STATE_DISCONNECTED
|
||||
&& !priv->queued_act_request) {
|
||||
_LOGD (LOGD_DEVICE, "link disconnected");
|
||||
- klass->carrier_changed (self, FALSE);
|
||||
+ carrier_changed (self, FALSE);
|
||||
} else {
|
||||
priv->carrier_defer_id = g_timeout_add_seconds (LINK_DISCONNECT_DELAY,
|
||||
link_disconnect_action_cb, self);
|
||||
@@ -14162,7 +14169,7 @@ nm_device_class_init (NMDeviceClass *klass)
|
||||
klass->can_unmanaged_external_down = can_unmanaged_external_down;
|
||||
klass->realize_start_notify = realize_start_notify;
|
||||
klass->unrealize_notify = unrealize_notify;
|
||||
- klass->carrier_changed = carrier_changed;
|
||||
+ klass->carrier_changed_notify = carrier_changed_notify;
|
||||
klass->get_ip_iface_identifier = get_ip_iface_identifier;
|
||||
klass->unmanaged_on_quit = unmanaged_on_quit;
|
||||
klass->deactivate_reset_hw_addr = deactivate_reset_hw_addr;
|
||||
diff --git a/src/devices/nm-device.h b/src/devices/nm-device.h
|
||||
index be328eb..5e6abb4 100644
|
||||
--- a/src/devices/nm-device.h
|
||||
+++ b/src/devices/nm-device.h
|
||||
@@ -261,7 +261,7 @@ typedef struct {
|
||||
gboolean (*can_unmanaged_external_down) (NMDevice *self);
|
||||
|
||||
/* Carrier state (IFF_LOWER_UP) */
|
||||
- void (*carrier_changed) (NMDevice *, gboolean carrier);
|
||||
+ void (*carrier_changed_notify) (NMDevice *, gboolean carrier);
|
||||
|
||||
gboolean (* get_ip_iface_identifier) (NMDevice *self, NMUtilsIPv6IfaceId *out_iid);
|
||||
|
||||
--
|
||||
2.9.4
|
||||
|
||||
|
||||
From 02daf0bdd66115456c6d9ccbf99909996013239d Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Fri, 12 May 2017 16:21:55 +0200
|
||||
Subject: [PATCH 2/7] device/trivial: rename functions related to "carrier"
|
||||
|
||||
(cherry picked from commit a07c6255a02e098dae934ee0e6765e1ce5b927ae)
|
||||
(cherry picked from commit 0ed6b5bfff4d8a915e69866d15027d26e3785271)
|
||||
---
|
||||
src/devices/nm-device.c | 14 +++++++++-----
|
||||
1 file changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
|
||||
index 652bede..e615f32 100644
|
||||
--- a/src/devices/nm-device.c
|
||||
+++ b/src/devices/nm-device.c
|
||||
@@ -2167,6 +2167,8 @@ nm_device_update_dynamic_ip_setup (NMDevice *self)
|
||||
}
|
||||
}
|
||||
|
||||
+/*****************************************************************************/
|
||||
+
|
||||
static void
|
||||
carrier_changed_notify (NMDevice *self, gboolean carrier)
|
||||
{
|
||||
@@ -2244,7 +2246,7 @@ carrier_changed (NMDevice *self, gboolean carrier)
|
||||
#define LINK_DISCONNECT_DELAY 4
|
||||
|
||||
static gboolean
|
||||
-link_disconnect_action_cb (gpointer user_data)
|
||||
+carrier_disconnected_action_cb (gpointer user_data)
|
||||
{
|
||||
NMDevice *self = NM_DEVICE (user_data);
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
@@ -2259,7 +2261,7 @@ link_disconnect_action_cb (gpointer user_data)
|
||||
}
|
||||
|
||||
static void
|
||||
-link_disconnect_action_cancel (NMDevice *self)
|
||||
+carrier_disconnected_action_cancel (NMDevice *self)
|
||||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
|
||||
@@ -2284,7 +2286,7 @@ nm_device_set_carrier (NMDevice *self, gboolean carrier)
|
||||
|
||||
if (priv->carrier) {
|
||||
_LOGI (LOGD_DEVICE, "link connected");
|
||||
- link_disconnect_action_cancel (self);
|
||||
+ carrier_disconnected_action_cancel (self);
|
||||
carrier_changed (self, TRUE);
|
||||
|
||||
if (nm_clear_g_source (&priv->carrier_wait_id)) {
|
||||
@@ -2297,12 +2299,14 @@ nm_device_set_carrier (NMDevice *self, gboolean carrier)
|
||||
carrier_changed (self, FALSE);
|
||||
} else {
|
||||
priv->carrier_defer_id = g_timeout_add_seconds (LINK_DISCONNECT_DELAY,
|
||||
- link_disconnect_action_cb, self);
|
||||
+ carrier_disconnected_action_cb, self);
|
||||
_LOGD (LOGD_DEVICE, "link disconnected (deferring action for %d seconds) (id=%u)",
|
||||
LINK_DISCONNECT_DELAY, priv->carrier_defer_id);
|
||||
}
|
||||
}
|
||||
|
||||
+/*****************************************************************************/
|
||||
+
|
||||
static void
|
||||
device_recheck_slave_status (NMDevice *self, const NMPlatformLink *plink)
|
||||
{
|
||||
@@ -13775,7 +13779,7 @@ dispose (GObject *object)
|
||||
|
||||
nm_clear_g_source (&priv->stats.timeout_id);
|
||||
|
||||
- link_disconnect_action_cancel (self);
|
||||
+ carrier_disconnected_action_cancel (self);
|
||||
|
||||
if (priv->ifindex > 0) {
|
||||
priv->ifindex = 0;
|
||||
--
|
||||
2.9.4
|
||||
|
||||
|
||||
From 5385cb00a8686c55e84f1924038ec20102939ac9 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Fri, 12 May 2017 16:22:47 +0200
|
||||
Subject: [PATCH 3/7] device: minor cleanup of
|
||||
carrier_disconnected_action_cancel()
|
||||
|
||||
(cherry picked from commit 6c5d883a4bd9ef167ee4fe8ec2b0187c7bc77142)
|
||||
(cherry picked from commit 62f1875766a181528c36596b7bd16a78663879cc)
|
||||
---
|
||||
src/devices/nm-device.c | 10 ++++------
|
||||
1 file changed, 4 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
|
||||
index e615f32..dabe87e 100644
|
||||
--- a/src/devices/nm-device.c
|
||||
+++ b/src/devices/nm-device.c
|
||||
@@ -2254,9 +2254,7 @@ carrier_disconnected_action_cb (gpointer user_data)
|
||||
_LOGD (LOGD_DEVICE, "link disconnected (calling deferred action) (id=%u)", priv->carrier_defer_id);
|
||||
|
||||
priv->carrier_defer_id = 0;
|
||||
-
|
||||
carrier_changed (self, FALSE);
|
||||
-
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -2264,11 +2262,11 @@ static void
|
||||
carrier_disconnected_action_cancel (NMDevice *self)
|
||||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
+ guint id = priv->carrier_defer_id;
|
||||
|
||||
- if (priv->carrier_defer_id) {
|
||||
- g_source_remove (priv->carrier_defer_id);
|
||||
- _LOGD (LOGD_DEVICE, "link disconnected (canceling deferred action) (id=%u)", priv->carrier_defer_id);
|
||||
- priv->carrier_defer_id = 0;
|
||||
+ if (nm_clear_g_source (&priv->carrier_defer_id)) {
|
||||
+ _LOGD (LOGD_DEVICE, "link disconnected (canceling deferred action) (id=%u)",
|
||||
+ id);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.9.4
|
||||
|
||||
|
||||
From 68703df31190d899d881490ce3f0742890a3f5d2 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Fri, 12 May 2017 16:48:57 +0200
|
||||
Subject: [PATCH 4/7] device: downgrade logging messages about (non) pending
|
||||
action
|
||||
|
||||
Adding/Removing a pending action with assert_not_yet_pending/
|
||||
assert_is_pending means that we expect that no action is taken.
|
||||
|
||||
Downgrade the logging level in those cases to <trace>.
|
||||
|
||||
(cherry picked from commit eaba285375248a691aaa896fecdd991ad695c1b1)
|
||||
(cherry picked from commit f4600c7fa5afd960fb3657ca6d694e56f5dc5dac)
|
||||
---
|
||||
src/devices/nm-device.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
|
||||
index dabe87e..d58c50d 100644
|
||||
--- a/src/devices/nm-device.c
|
||||
+++ b/src/devices/nm-device.c
|
||||
@@ -11821,7 +11821,7 @@ nm_device_add_pending_action (NMDevice *self, const char *action, gboolean asser
|
||||
count + g_slist_length (iter), action);
|
||||
g_return_val_if_reached (FALSE);
|
||||
} else {
|
||||
- _LOGD (LOGD_DEVICE, "add_pending_action (%d): '%s' already pending (expected)",
|
||||
+ _LOGT (LOGD_DEVICE, "add_pending_action (%d): '%s' already pending (expected)",
|
||||
count + g_slist_length (iter), action);
|
||||
}
|
||||
return FALSE;
|
||||
@@ -11882,7 +11882,7 @@ nm_device_remove_pending_action (NMDevice *self, const char *action, gboolean as
|
||||
_LOGW (LOGD_DEVICE, "remove_pending_action (%d): '%s' not pending", count, action);
|
||||
g_return_val_if_reached (FALSE);
|
||||
} else
|
||||
- _LOGD (LOGD_DEVICE, "remove_pending_action (%d): '%s' not pending (expected)", count, action);
|
||||
+ _LOGT (LOGD_DEVICE, "remove_pending_action (%d): '%s' not pending (expected)", count, action);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
--
|
||||
2.9.4
|
||||
|
||||
|
||||
From 8615608b36b72f8c47ae813583bad31ae7f7ec0c Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Sun, 14 May 2017 22:08:26 +0200
|
||||
Subject: [PATCH 5/7] device: rename and minor refactoring of check_carrier()
|
||||
|
||||
The name should mirror what we already have: nm_device_set_carrier().
|
||||
Also, move the code closer to nm_device_set_carrier() and refactor
|
||||
it a bit.
|
||||
|
||||
(cherry picked from commit 7e472b4eb36347684e81e1c3a2bd7348e19eb628)
|
||||
(cherry picked from commit 83c2243d800fb20a651f787b65e6c5586a6f970d)
|
||||
---
|
||||
src/devices/nm-device.c | 23 ++++++++++++-----------
|
||||
1 file changed, 12 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
|
||||
index d58c50d..4a330d0 100644
|
||||
--- a/src/devices/nm-device.c
|
||||
+++ b/src/devices/nm-device.c
|
||||
@@ -2303,6 +2303,16 @@ nm_device_set_carrier (NMDevice *self, gboolean carrier)
|
||||
}
|
||||
}
|
||||
|
||||
+static void
|
||||
+nm_device_set_carrier_from_platform (NMDevice *self)
|
||||
+{
|
||||
+ if (!nm_device_has_capability (self, NM_DEVICE_CAP_NONSTANDARD_CARRIER)) {
|
||||
+ nm_device_set_carrier (self,
|
||||
+ nm_platform_link_is_connected (nm_device_get_platform (self),
|
||||
+ nm_device_get_ip_ifindex (self)));
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
@@ -2881,15 +2891,6 @@ config_changed (NMConfig *config,
|
||||
}
|
||||
|
||||
static void
|
||||
-check_carrier (NMDevice *self)
|
||||
-{
|
||||
- int ifindex = nm_device_get_ip_ifindex (self);
|
||||
-
|
||||
- if (!nm_device_has_capability (self, NM_DEVICE_CAP_NONSTANDARD_CARRIER))
|
||||
- nm_device_set_carrier (self, nm_platform_link_is_connected (nm_device_get_platform (self), ifindex));
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
realize_start_notify (NMDevice *self,
|
||||
const NMPlatformLink *pllink)
|
||||
{
|
||||
@@ -3020,7 +3021,7 @@ realize_start_setup (NMDevice *self,
|
||||
}
|
||||
|
||||
if (nm_device_has_capability (self, NM_DEVICE_CAP_CARRIER_DETECT)) {
|
||||
- check_carrier (self);
|
||||
+ nm_device_set_carrier_from_platform (self);
|
||||
_LOGD (LOGD_PLATFORM,
|
||||
"carrier is %s%s",
|
||||
priv->carrier ? "ON" : "OFF",
|
||||
@@ -10343,7 +10344,7 @@ nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware)
|
||||
|
||||
/* Store carrier immediately. */
|
||||
if (nm_device_has_capability (self, NM_DEVICE_CAP_CARRIER_DETECT))
|
||||
- check_carrier (self);
|
||||
+ nm_device_set_carrier_from_platform (self);
|
||||
|
||||
device_is_up = nm_device_is_up (self);
|
||||
if (block && !device_is_up) {
|
||||
--
|
||||
2.9.4
|
||||
|
||||
|
||||
From 1520c770db02577c54bf25736adba5d344378568 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Mon, 15 May 2017 11:35:41 +0200
|
||||
Subject: [PATCH 6/7] device: cleanup nm_device_set_carrier_from_platform()
|
||||
|
||||
nm_device_set_carrier_from_platform() is only called from two places.
|
||||
|
||||
- both check for NM_DEVICE_CAP_CARRIER_DETECT, so move that check
|
||||
inside the function.
|
||||
- drop the logging in realize_start_setup(). nm_device_set_carrier() already
|
||||
does logging.
|
||||
- always set the fake carrier in nm_device_set_carrier_from_platform().
|
||||
For the fake carrer, we anyway expect it to be already TRUE in most
|
||||
case, so usually this should have no effect.
|
||||
Also emit a property changed signal. That is necessary to refresh the
|
||||
D-Bus property.
|
||||
|
||||
(cherry picked from commit 02bb4ce7eb518bf955ed802511f1efde921bc919)
|
||||
(cherry picked from commit 3786e17c0f86561e23779490ec5032b432aa7178)
|
||||
---
|
||||
src/devices/nm-device.c | 32 ++++++++++++++++----------------
|
||||
1 file changed, 16 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
|
||||
index 4a330d0..851e0a3 100644
|
||||
--- a/src/devices/nm-device.c
|
||||
+++ b/src/devices/nm-device.c
|
||||
@@ -2306,10 +2306,20 @@ nm_device_set_carrier (NMDevice *self, gboolean carrier)
|
||||
static void
|
||||
nm_device_set_carrier_from_platform (NMDevice *self)
|
||||
{
|
||||
- if (!nm_device_has_capability (self, NM_DEVICE_CAP_NONSTANDARD_CARRIER)) {
|
||||
- nm_device_set_carrier (self,
|
||||
- nm_platform_link_is_connected (nm_device_get_platform (self),
|
||||
- nm_device_get_ip_ifindex (self)));
|
||||
+ if (nm_device_has_capability (self, NM_DEVICE_CAP_CARRIER_DETECT)) {
|
||||
+ if (!nm_device_has_capability (self, NM_DEVICE_CAP_NONSTANDARD_CARRIER)) {
|
||||
+ nm_device_set_carrier (self,
|
||||
+ nm_platform_link_is_connected (nm_device_get_platform (self),
|
||||
+ nm_device_get_ip_ifindex (self)));
|
||||
+ }
|
||||
+ } else {
|
||||
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
+
|
||||
+ /* Fake online link when carrier detection is not available. */
|
||||
+ if (!priv->carrier) {
|
||||
+ priv->carrier = TRUE;
|
||||
+ _notify (self, PROP_CARRIER);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3020,16 +3030,7 @@ realize_start_setup (NMDevice *self,
|
||||
self);
|
||||
}
|
||||
|
||||
- if (nm_device_has_capability (self, NM_DEVICE_CAP_CARRIER_DETECT)) {
|
||||
- nm_device_set_carrier_from_platform (self);
|
||||
- _LOGD (LOGD_PLATFORM,
|
||||
- "carrier is %s%s",
|
||||
- priv->carrier ? "ON" : "OFF",
|
||||
- priv->ignore_carrier ? " (but ignored)" : "");
|
||||
- } else {
|
||||
- /* Fake online link when carrier detection is not available. */
|
||||
- priv->carrier = TRUE;
|
||||
- }
|
||||
+ nm_device_set_carrier_from_platform (self);
|
||||
|
||||
device_init_sriov_num_vfs (self);
|
||||
|
||||
@@ -10343,8 +10344,7 @@ nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware)
|
||||
}
|
||||
|
||||
/* Store carrier immediately. */
|
||||
- if (nm_device_has_capability (self, NM_DEVICE_CAP_CARRIER_DETECT))
|
||||
- nm_device_set_carrier_from_platform (self);
|
||||
+ nm_device_set_carrier_from_platform (self);
|
||||
|
||||
device_is_up = nm_device_is_up (self);
|
||||
if (block && !device_is_up) {
|
||||
--
|
||||
2.9.4
|
||||
|
||||
|
||||
From 15bb8709410d829c63b502ac845b93a8c95c3f15 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Fri, 12 May 2017 16:32:15 +0200
|
||||
Subject: [PATCH 7/7] device: fix delaying startup complete waiting for carrier
|
||||
|
||||
platform: signal: link changed: 2: eth0 <DOWN;broadcast,multicast> mtu ...
|
||||
...
|
||||
device[0x7f90c29c64d0] (eth0): bringing up device
|
||||
...
|
||||
platform: signal: link changed: 2: eth0 <UP,LOWER_UP;broadcast,multicast,up,running,lowerup> mtu ...
|
||||
...
|
||||
device (eth0): link connected
|
||||
...
|
||||
device[0x7f90c29c64d0] (eth0): add_pending_action (2): 'carrier wait'
|
||||
|
||||
Note how we schedule the pending action 'carrier-wait', although the device
|
||||
already has carrier. That means, the pending action will not be removed
|
||||
until timeout, 5 seconds later.
|
||||
|
||||
Avoid scheduling 'carrier-wait' if we already have carrier.
|
||||
|
||||
However, don't just add the pending action 'carrier-wait' only during
|
||||
nm_device_bring_up(). Instead, always schedule the carrier_wait timeout.
|
||||
This gives a grace period during which we keep setting 'carrier-wait' whenever
|
||||
we have no carrier. This should prevent two cases:
|
||||
- during nm_device_bring_up() the platform state might not yet have
|
||||
caught up. If we don't add the pending action there, we will add
|
||||
it a moment later when carrier goes away.
|
||||
- bringing the interface up might cause carrier to get lost for a
|
||||
moment (flapping). If that happens within the timeout, also add the
|
||||
pending action.
|
||||
|
||||
(cherry picked from commit 9f874d166d260bb4b9af32cb8d12d287341a9a8b)
|
||||
(cherry picked from commit 51a1fc3cd9f281f1348cf0ec1ea17d4d03ecd0b7)
|
||||
---
|
||||
src/devices/nm-device.c | 47 +++++++++++++++++++++++++++++------------------
|
||||
1 file changed, 29 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
|
||||
index 851e0a3..8540b4c 100644
|
||||
--- a/src/devices/nm-device.c
|
||||
+++ b/src/devices/nm-device.c
|
||||
@@ -2287,19 +2287,23 @@ nm_device_set_carrier (NMDevice *self, gboolean carrier)
|
||||
carrier_disconnected_action_cancel (self);
|
||||
carrier_changed (self, TRUE);
|
||||
|
||||
- if (nm_clear_g_source (&priv->carrier_wait_id)) {
|
||||
- nm_device_remove_pending_action (self, NM_PENDING_ACTION_CARRIER_WAIT, TRUE);
|
||||
+ if (priv->carrier_wait_id) {
|
||||
+ nm_device_remove_pending_action (self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE);
|
||||
_carrier_wait_check_queued_act_request (self);
|
||||
}
|
||||
- } else if ( state <= NM_DEVICE_STATE_DISCONNECTED
|
||||
- && !priv->queued_act_request) {
|
||||
- _LOGD (LOGD_DEVICE, "link disconnected");
|
||||
- carrier_changed (self, FALSE);
|
||||
} else {
|
||||
- priv->carrier_defer_id = g_timeout_add_seconds (LINK_DISCONNECT_DELAY,
|
||||
- carrier_disconnected_action_cb, self);
|
||||
- _LOGD (LOGD_DEVICE, "link disconnected (deferring action for %d seconds) (id=%u)",
|
||||
- LINK_DISCONNECT_DELAY, priv->carrier_defer_id);
|
||||
+ if (priv->carrier_wait_id)
|
||||
+ nm_device_add_pending_action (self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE);
|
||||
+ if ( state <= NM_DEVICE_STATE_DISCONNECTED
|
||||
+ && !priv->queued_act_request) {
|
||||
+ _LOGD (LOGD_DEVICE, "link disconnected");
|
||||
+ carrier_changed (self, FALSE);
|
||||
+ } else {
|
||||
+ priv->carrier_defer_id = g_timeout_add_seconds (LINK_DISCONNECT_DELAY,
|
||||
+ carrier_disconnected_action_cb, self);
|
||||
+ _LOGD (LOGD_DEVICE, "link disconnected (deferring action for %d seconds) (id=%u)",
|
||||
+ LINK_DISCONNECT_DELAY, priv->carrier_defer_id);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10297,12 +10301,12 @@ static gboolean
|
||||
carrier_wait_timeout (gpointer user_data)
|
||||
{
|
||||
NMDevice *self = NM_DEVICE (user_data);
|
||||
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
|
||||
- NM_DEVICE_GET_PRIVATE (self)->carrier_wait_id = 0;
|
||||
- nm_device_remove_pending_action (self, NM_PENDING_ACTION_CARRIER_WAIT, TRUE);
|
||||
-
|
||||
- _carrier_wait_check_queued_act_request (self);
|
||||
-
|
||||
+ priv->carrier_wait_id = 0;
|
||||
+ nm_device_remove_pending_action (self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE);
|
||||
+ if (!priv->carrier)
|
||||
+ _carrier_wait_check_queued_act_request (self);
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
@@ -10379,8 +10383,14 @@ nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware)
|
||||
* a timeout is reached.
|
||||
*/
|
||||
if (nm_device_has_capability (self, NM_DEVICE_CAP_CARRIER_DETECT)) {
|
||||
- if (!nm_clear_g_source (&priv->carrier_wait_id))
|
||||
- nm_device_add_pending_action (self, NM_PENDING_ACTION_CARRIER_WAIT, TRUE);
|
||||
+ /* we start a grace period of 5 seconds during which we will schedule
|
||||
+ * a pending action whenever we have no carrier.
|
||||
+ *
|
||||
+ * If during that time carrier goes away, we declare the interface
|
||||
+ * as not ready. */
|
||||
+ nm_clear_g_source (&priv->carrier_wait_id);
|
||||
+ if (!priv->carrier)
|
||||
+ nm_device_add_pending_action (self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE);
|
||||
priv->carrier_wait_id = g_timeout_add_seconds (5, carrier_wait_timeout, self);
|
||||
}
|
||||
|
||||
@@ -13793,7 +13803,8 @@ dispose (GObject *object)
|
||||
|
||||
available_connections_del_all (self);
|
||||
|
||||
- nm_clear_g_source (&priv->carrier_wait_id);
|
||||
+ if (nm_clear_g_source (&priv->carrier_wait_id))
|
||||
+ nm_device_remove_pending_action (self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE);
|
||||
|
||||
_clear_queued_act_request (priv);
|
||||
|
||||
--
|
||||
2.9.4
|
||||
|
85
0006-dhcp-don-t-add-route-to-DHCP4-server-rh1448987.patch
Normal file
85
0006-dhcp-don-t-add-route-to-DHCP4-server-rh1448987.patch
Normal file
@ -0,0 +1,85 @@
|
||||
From bed605f5bd8524779b3cf3d3e02baf06a76f4054 Mon Sep 17 00:00:00 2001
|
||||
From: Beniamino Galvani <bgalvani@redhat.com>
|
||||
Date: Wed, 10 May 2017 16:17:48 +0200
|
||||
Subject: [PATCH] dhcp: don't add route to DHCP4 server
|
||||
|
||||
This basically reverts commit 31fe84e46773 "core: Add host route for
|
||||
DHCP4 server if outside assigned subnet (bgo #721767)" because the
|
||||
additional route added by NM does more harm than good.
|
||||
|
||||
First, the code does not consider routes pushed by the server and thus
|
||||
it can add a route conflicting with the ones from the network
|
||||
administrator.
|
||||
|
||||
Second, there is no specification on what a DHCP client should do when
|
||||
the server is not reachable via unicast, and adding arbitrary logic
|
||||
into the client is likely to break things in specific cases. If
|
||||
network administrators want to make the DHCP server reachable from a
|
||||
client in a different subnet, they should push proper routes with the
|
||||
lease.
|
||||
|
||||
In any case, if the DHCP server is not reachable through unicast,
|
||||
before the lease expiration (after timeout T2) the client will resort
|
||||
to broadcast and so there won't be any network disruption; the renewal
|
||||
will only happen at a later time.
|
||||
|
||||
Fixes: 31fe84e467732463eabc8f70c2a419008e7a227c
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1448987
|
||||
(cherry picked from commit 36e97f5d7beba7ab5446c2b7c6c22523b1bca476)
|
||||
(cherry picked from commit cbf5a776f72d1895405b71f45a74cf4fe9046dae)
|
||||
---
|
||||
src/dhcp/nm-dhcp-utils.c | 37 -------------------------------------
|
||||
1 file changed, 37 deletions(-)
|
||||
|
||||
diff --git a/src/dhcp/nm-dhcp-utils.c b/src/dhcp/nm-dhcp-utils.c
|
||||
index e020ca3..e55a21b 100644
|
||||
--- a/src/dhcp/nm-dhcp-utils.c
|
||||
+++ b/src/dhcp/nm-dhcp-utils.c
|
||||
@@ -450,43 +450,6 @@ nm_dhcp_utils_ip4_config_from_options (int ifindex,
|
||||
}
|
||||
}
|
||||
|
||||
- /*
|
||||
- * RFC 2132, section 9.7
|
||||
- * DHCP clients use the contents of the 'server identifier' field
|
||||
- * as the destination address for any DHCP messages unicast to
|
||||
- * the DHCP server.
|
||||
- *
|
||||
- * Some ISP's provide leases from central servers that are on
|
||||
- * different subnets that the address offered. If the host
|
||||
- * does not configure the interface as the default route, the
|
||||
- * dhcp server may not be reachable via unicast, and a host
|
||||
- * specific route is needed.
|
||||
- **/
|
||||
- str = g_hash_table_lookup (options, "dhcp_server_identifier");
|
||||
- if (str) {
|
||||
- if (inet_pton (AF_INET, str, &tmp_addr) > 0) {
|
||||
-
|
||||
- _LOG2I (LOGD_DHCP4, iface, " server identifier %s", str);
|
||||
- if ( nm_utils_ip4_address_clear_host_address(tmp_addr, address.plen) != nm_utils_ip4_address_clear_host_address(address.address, address.plen)
|
||||
- && !nm_ip4_config_get_direct_route_for_host (ip4_config, tmp_addr)) {
|
||||
- /* DHCP server not on assigned subnet and the no direct route was returned. Add route */
|
||||
- NMPlatformIP4Route route = { 0 };
|
||||
-
|
||||
- route.network = tmp_addr;
|
||||
- route.plen = 32;
|
||||
- /* this will be a device route if gwaddr is 0 */
|
||||
- route.gateway = gwaddr;
|
||||
- route.rt_source = NM_IP_CONFIG_SOURCE_DHCP;
|
||||
- route.metric = priority;
|
||||
- nm_ip4_config_add_route (ip4_config, &route);
|
||||
- _LOG2D (LOGD_IP, iface, "adding route for server identifier: %s",
|
||||
- nm_platform_ip4_route_to_string (&route, NULL, 0));
|
||||
- }
|
||||
- }
|
||||
- else
|
||||
- _LOG2W (LOGD_DHCP4, iface, "ignoring invalid server identifier '%s'", str);
|
||||
- }
|
||||
-
|
||||
str = g_hash_table_lookup (options, "dhcp_lease_time");
|
||||
if (str) {
|
||||
address.lifetime = address.preferred = strtoul (str, NULL, 10);
|
||||
--
|
||||
2.9.3
|
||||
|
108
0007-device-update-ext-conf-before-commit-rh1449873.patch
Normal file
108
0007-device-update-ext-conf-before-commit-rh1449873.patch
Normal file
@ -0,0 +1,108 @@
|
||||
From b870115d83ddb2f7091e7b5e1f65b64261c53557 Mon Sep 17 00:00:00 2001
|
||||
From: Beniamino Galvani <bgalvani@redhat.com>
|
||||
Date: Fri, 12 May 2017 12:00:20 +0200
|
||||
Subject: [PATCH 1/2] device: update external configuration before commit
|
||||
|
||||
If the platform signaled that the external configuration changed (and
|
||||
thus update_ipX_config() is scheduled) and we are doing a commit of
|
||||
the new configuration, update priv->ext_ipX_config. Without this, the
|
||||
commit will remove addresses added externally but not yet captured in
|
||||
the external configuration.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1449873
|
||||
(cherry picked from commit a21b8882cc9defc43248afc94bf59ca0f84f0d27)
|
||||
(cherry picked from commit bf5407992f54440b586e1d0b3792f93eb2c464f3)
|
||||
---
|
||||
src/devices/nm-device.c | 21 +++++++++++++++++++--
|
||||
1 file changed, 19 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
|
||||
index 8540b4c..87cd296 100644
|
||||
--- a/src/devices/nm-device.c
|
||||
+++ b/src/devices/nm-device.c
|
||||
@@ -5487,8 +5487,15 @@ ip4_config_merge_and_apply (NMDevice *self,
|
||||
composite = nm_ip4_config_new (nm_device_get_ip_ifindex (self));
|
||||
init_ip4_config_dns_priority (self, composite);
|
||||
|
||||
- if (commit)
|
||||
+ if (commit) {
|
||||
ensure_con_ip4_config (self);
|
||||
+ if (priv->queued_ip4_config_id) {
|
||||
+ g_clear_object (&priv->ext_ip4_config);
|
||||
+ priv->ext_ip4_config = nm_ip4_config_capture (nm_device_get_platform (self),
|
||||
+ nm_device_get_ifindex (self),
|
||||
+ FALSE);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
if (priv->dev_ip4_config) {
|
||||
nm_ip4_config_merge (composite, priv->dev_ip4_config,
|
||||
@@ -6223,8 +6230,18 @@ ip6_config_merge_and_apply (NMDevice *self,
|
||||
NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
|
||||
init_ip6_config_dns_priority (self, composite);
|
||||
|
||||
- if (commit)
|
||||
+ if (commit) {
|
||||
ensure_con_ip6_config (self);
|
||||
+ if (priv->queued_ip6_config_id) {
|
||||
+ g_clear_object (&priv->ext_ip6_config);
|
||||
+ g_clear_object (&priv->ext_ip6_config_captured);
|
||||
+ priv->ext_ip6_config_captured = nm_ip6_config_capture (nm_device_get_platform (self),
|
||||
+ nm_device_get_ifindex (self),
|
||||
+ FALSE,
|
||||
+ NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
|
||||
+ priv->ext_ip6_config = nm_ip6_config_new_cloned (priv->ext_ip6_config_captured);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
/* Merge all the IP configs into the composite config */
|
||||
if (priv->ac_ip6_config) {
|
||||
--
|
||||
2.9.3
|
||||
|
||||
From 2d0d1643e59f4ac935e2288a02da8774b6b237dc Mon Sep 17 00:00:00 2001
|
||||
From: Beniamino Galvani <bgalvani@redhat.com>
|
||||
Date: Wed, 17 May 2017 09:46:22 +0200
|
||||
Subject: [PATCH 2/2] device: fix crash in ip6_config_merge_and_apply()
|
||||
|
||||
nm_ip6_config_capture() returns NULL for slaves. Fixes the following:
|
||||
|
||||
nm_ip6_config_new_cloned: assertion 'NM_IS_IP6_CONFIG (src)' failed
|
||||
|
||||
#0 g_logv () at /lib64/libglib-2.0.so.0
|
||||
#1 g_log () at /lib64/libglib-2.0.so.0
|
||||
#2 nm_ip6_config_new_cloned (src=0x0) at src/nm-ip6-config.c:2272
|
||||
#3 ip6_config_merge_and_apply (self=self@entry=0x200d8f0, commit=commit@entry=1) at src/devices/nm-device.c:6192
|
||||
#4 nm_device_bring_up (self=self@entry=0x200d8f0, block=block@entry=1, no_firmware=no_firmware@entry=0x0) at src/devices/nm-device.c:10369
|
||||
#5 _hw_addr_set (self=self@entry=0x200d8f0, addr=addr@entry=0x2095ea0 "6A:1C:00:2A:68:7C", operation=operation@entry=0x64f8ba "set", detail=detail@entry=0x67369d "restore") at src/devices/nm-device.c:13225
|
||||
#6 nm_device_hw_addr_set (self=self@entry=0x200d8f0, addr=addr@entry=0x2095ea0 "6A:1C:00:2A:68:7C", detail=detail@entry=0x67369d "restore", set_permanent=set_permanent@entry=0) at src/devices/nm-device.c:13255
|
||||
#7 release_slave (device=0x200d8f0, slave=0x1ef2990, configure=<optimized out>) at src/devices/nm-device-bond.c:463
|
||||
#8 nm_device_master_release_one_slave (self=self@entry=0x200d8f0, slave=slave@entry=0x1ef2990, configure=1, reason=reason@entry=NM_DEVICE_STATE_REASON_CONNECTION_REMOVED) at src/devices/nm-device.c:2041
|
||||
#9 slave_state_changed (slave=0x1ef2990, slave_new_state=NM_DEVICE_STATE_DEACTIVATING, slave_old_state=NM_DEVICE_STATE_ACTIVATED, reason=NM_DEVICE_STATE_REASON_CONNECTION_REMOVED, self=0x200d8f0)
|
||||
at src/devices/nm-device.c:3366
|
||||
...
|
||||
|
||||
Fixes: a21b8882cc9defc43248afc94bf59ca0f84f0d27
|
||||
(cherry picked from commit 1e78f50b8e5e24d13547b478165170117c1ac8ae)
|
||||
(cherry picked from commit bf28e0845fa38cdd3556fb61a7e725ac42a7d50a)
|
||||
---
|
||||
src/devices/nm-device.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
|
||||
index 87cd296..b14dc49 100644
|
||||
--- a/src/devices/nm-device.c
|
||||
+++ b/src/devices/nm-device.c
|
||||
@@ -6239,7 +6239,8 @@ ip6_config_merge_and_apply (NMDevice *self,
|
||||
nm_device_get_ifindex (self),
|
||||
FALSE,
|
||||
NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
|
||||
- priv->ext_ip6_config = nm_ip6_config_new_cloned (priv->ext_ip6_config_captured);
|
||||
+ if (priv->ext_ip6_config_captured)
|
||||
+ priv->ext_ip6_config = nm_ip6_config_new_cloned (priv->ext_ip6_config_captured);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.9.3
|
||||
|
1803
0008-utf8safe-fixes-rh1443114.patch
Normal file
1803
0008-utf8safe-fixes-rh1443114.patch
Normal file
File diff suppressed because it is too large
Load Diff
140
0009-ifcfg-rh-fix-null-next-hop.patch
Normal file
140
0009-ifcfg-rh-fix-null-next-hop.patch
Normal file
@ -0,0 +1,140 @@
|
||||
From a3d2153b90f3f56f1548d01be674a0ab5e82e6b7 Mon Sep 17 00:00:00 2001
|
||||
From: Beniamino Galvani <bgalvani@redhat.com>
|
||||
Date: Fri, 19 May 2017 16:18:55 +0200
|
||||
Subject: [PATCH] ifcfg-rh: omit empty next hop for routes in legacy format
|
||||
|
||||
Don't add "via (null)" if the next hop is missing.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1452648
|
||||
(cherry picked from commit af8aac9b544cb64df3b77a413dfded23e976d1b0)
|
||||
(cherry picked from commit cb5ba08f00691b18d272bfb08e4929d00fa246bb)
|
||||
---
|
||||
.../plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 77 ++++++++++------------
|
||||
1 file changed, 36 insertions(+), 41 deletions(-)
|
||||
|
||||
diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
|
||||
index d6f33c4..400e9bd 100644
|
||||
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
|
||||
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
|
||||
@@ -1926,12 +1926,8 @@ get_route_attributes_string (NMIPRoute *route, int family)
|
||||
static gboolean
|
||||
write_route_file_legacy (const char *filename, NMSettingIPConfig *s_ip4, GError **error)
|
||||
{
|
||||
- const char *dest, *next_hop;
|
||||
- char **route_items;
|
||||
- gs_free char *route_contents = NULL;
|
||||
+ nm_auto_free_gstring GString *contents = NULL;
|
||||
NMIPRoute *route;
|
||||
- guint32 prefix;
|
||||
- gint64 metric;
|
||||
guint32 i, num;
|
||||
|
||||
g_return_val_if_fail (filename != NULL, FALSE);
|
||||
@@ -1945,36 +1941,34 @@ write_route_file_legacy (const char *filename, NMSettingIPConfig *s_ip4, GError
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- route_items = g_malloc0 (sizeof (char *) * (num + 1));
|
||||
+ contents = g_string_new ("");
|
||||
+
|
||||
for (i = 0; i < num; i++) {
|
||||
+ const char *next_hop;
|
||||
gs_free char *options = NULL;
|
||||
+ gint64 metric;
|
||||
|
||||
route = nm_setting_ip_config_get_route (s_ip4, i);
|
||||
-
|
||||
- dest = nm_ip_route_get_dest (route);
|
||||
- prefix = nm_ip_route_get_prefix (route);
|
||||
next_hop = nm_ip_route_get_next_hop (route);
|
||||
metric = nm_ip_route_get_metric (route);
|
||||
-
|
||||
options = get_route_attributes_string (route, AF_INET);
|
||||
|
||||
- if (metric == -1) {
|
||||
- route_items[i] = g_strdup_printf ("%s/%u via %s%s%s\n",
|
||||
- dest, prefix, next_hop,
|
||||
- options ? " " : "",
|
||||
- options ?: "");
|
||||
- } else {
|
||||
- route_items[i] = g_strdup_printf ("%s/%u via %s metric %u%s%s\n",
|
||||
- dest, prefix, next_hop, (guint32) metric,
|
||||
- options ? " " : "",
|
||||
- options ?: "");
|
||||
+ g_string_append_printf (contents, "%s/%u",
|
||||
+ nm_ip_route_get_dest (route),
|
||||
+ nm_ip_route_get_prefix (route));
|
||||
+ if (next_hop)
|
||||
+ g_string_append_printf (contents, " via %s", next_hop);
|
||||
+ if (metric >= 0)
|
||||
+ g_string_append_printf (contents, " metric %u", (guint) metric);
|
||||
+ if (options) {
|
||||
+ g_string_append_c (contents, ' ');
|
||||
+ g_string_append (contents, options);
|
||||
}
|
||||
+
|
||||
+ g_string_append_c (contents, '\n');
|
||||
}
|
||||
- route_items[num] = NULL;
|
||||
- route_contents = g_strjoinv (NULL, route_items);
|
||||
- g_strfreev (route_items);
|
||||
|
||||
- if (!g_file_set_contents (filename, route_contents, -1, NULL)) {
|
||||
+ if (!g_file_set_contents (filename, contents->str, contents->len, NULL)) {
|
||||
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
|
||||
"Writing route file '%s' failed", filename);
|
||||
return FALSE;
|
||||
@@ -2492,32 +2486,33 @@ write_route6_file (const char *filename, NMSettingIPConfig *s_ip6, GError **erro
|
||||
}
|
||||
|
||||
contents = g_string_new ("");
|
||||
+
|
||||
for (i = 0; i < num; i++) {
|
||||
gs_free char *options = NULL;
|
||||
+ const char *next_hop;
|
||||
+ gint64 metric;
|
||||
|
||||
route = nm_setting_ip_config_get_route (s_ip6, i);
|
||||
+ next_hop = nm_ip_route_get_next_hop (route);
|
||||
+ metric = nm_ip_route_get_metric (route);
|
||||
options = get_route_attributes_string (route, AF_INET6);
|
||||
|
||||
- if (nm_ip_route_get_metric (route) == -1) {
|
||||
- g_string_append_printf (contents, "%s/%u via %s%s%s",
|
||||
- nm_ip_route_get_dest (route),
|
||||
- nm_ip_route_get_prefix (route),
|
||||
- nm_ip_route_get_next_hop (route),
|
||||
- options ? " " : "",
|
||||
- options ?: "");
|
||||
- } else {
|
||||
- g_string_append_printf (contents, "%s/%u via %s metric %u%s%s",
|
||||
- nm_ip_route_get_dest (route),
|
||||
- nm_ip_route_get_prefix (route),
|
||||
- nm_ip_route_get_next_hop (route),
|
||||
- (unsigned) nm_ip_route_get_metric (route),
|
||||
- options ? " " : "",
|
||||
- options ?: "");
|
||||
+ g_string_append_printf (contents, "%s/%u",
|
||||
+ nm_ip_route_get_dest (route),
|
||||
+ nm_ip_route_get_prefix (route));
|
||||
+ if (next_hop)
|
||||
+ g_string_append_printf (contents, " via %s", next_hop);
|
||||
+ if (metric >= 0)
|
||||
+ g_string_append_printf (contents, " metric %u", (guint) metric);
|
||||
+ if (options) {
|
||||
+ g_string_append_c (contents, ' ');
|
||||
+ g_string_append (contents, options);
|
||||
}
|
||||
- g_string_append (contents, "\n");
|
||||
+
|
||||
+ g_string_append_c (contents, '\n');
|
||||
}
|
||||
|
||||
- if (!g_file_set_contents (filename, contents->str, -1, NULL)) {
|
||||
+ if (!g_file_set_contents (filename, contents->str, contents->len, NULL)) {
|
||||
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
|
||||
"Writing route6 file '%s' failed", filename);
|
||||
return FALSE;
|
||||
--
|
||||
2.9.3
|
||||
|
@ -10,7 +10,7 @@
|
||||
%global epoch_version 1
|
||||
%global rpm_version 1.8.0
|
||||
%global real_version 1.8.0
|
||||
%global release_version 1
|
||||
%global release_version 2
|
||||
%global snapshot %{nil}
|
||||
%global git_sha %{nil}
|
||||
|
||||
@ -76,7 +76,14 @@ Source1: NetworkManager.conf
|
||||
Source2: 00-server.conf
|
||||
Source3: 20-connectivity-fedora.conf
|
||||
|
||||
Patch1: 0001-utils-fix-maybe-uninitialized-in-nm-udev-utils.c.patch
|
||||
Patch2: 0002-utils-fix-maybe-uninitialized-in-nm-udev-utils.c.patch
|
||||
Patch3: 0003-fix-device-run-state-unknown-rh1440171.patch
|
||||
Patch4: 0004-proxy-crash-rh1450459.patch
|
||||
Patch5: 0005-device-fix-wait-carrier-rh1450444.patch
|
||||
Patch6: 0006-dhcp-don-t-add-route-to-DHCP4-server-rh1448987.patch
|
||||
Patch7: 0007-device-update-ext-conf-before-commit-rh1449873.patch
|
||||
Patch8: 0008-utf8safe-fixes-rh1443114.patch
|
||||
Patch9: 0009-ifcfg-rh-fix-null-next-hop.patch
|
||||
|
||||
Requires(post): systemd
|
||||
Requires(preun): systemd
|
||||
@ -332,7 +339,14 @@ by nm-connection-editor and nm-applet in a non-graphical environment.
|
||||
%prep
|
||||
%setup -q -n NetworkManager-%{real_version}
|
||||
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
|
||||
%build
|
||||
%if %{with regen_docs}
|
||||
@ -635,6 +649,17 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Sat May 20 2017 Thomas Haller <thaller@redhat.com> - 1:1.8.0-2
|
||||
- dhcp: don't add route to DHCP4 server (rh #1448987)
|
||||
- device: update external configuration before commit (rh #1449873)
|
||||
- libnm: fix NUL termination of device's description (rh #1443114)
|
||||
- libnm, core: ensure valid UTF-8 in device properties (rh #1443114)
|
||||
- core: fix device's UDI property on D-Bus (rh #1443114)
|
||||
- ifcfg-rh: omit empty next hop for routes in legacy format (rh #1452648)
|
||||
- core: fix persisting managed state of device (rh #1440171)
|
||||
- proxy: fix use-after-free (rh #1450459)
|
||||
- device: don't wrongly delay startup complete waiting for carrier (rh #1450444)
|
||||
|
||||
* Wed May 10 2017 Thomas Haller <thaller@redhat.com> - 1:1.8.0-1
|
||||
- Update to 1.8.0 release
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user