From 7424b9c348472264f530eecaba04c8312a6a75b6 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: May 14 2020 22:33:06 +0000 Subject: import NetworkManager-1.25.1-1.el8 --- diff --git a/.NetworkManager.metadata b/.NetworkManager.metadata index c158ea3..0c0ea0a 100644 --- a/.NetworkManager.metadata +++ b/.NetworkManager.metadata @@ -1 +1 @@ -93b74524dbd01bf62f6885f2cdae6ff15c5bfd7e SOURCES/NetworkManager-1.22.8.tar.xz +b1bf81a9c8ff1372757f33e2573ac0bc0462197c SOURCES/NetworkManager-1.25.1.tar.xz diff --git a/.gitignore b/.gitignore index 9796ed6..1fc1a2a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/NetworkManager-1.22.8.tar.xz +SOURCES/NetworkManager-1.25.1.tar.xz diff --git a/SOURCES/1000-ifcfg-fix-writer-rh1804167.patch b/SOURCES/1000-ifcfg-fix-writer-rh1804167.patch deleted file mode 100644 index 9c6bffb..0000000 --- a/SOURCES/1000-ifcfg-fix-writer-rh1804167.patch +++ /dev/null @@ -1,50 +0,0 @@ -From ff9c477f3238aeca9b8ca2e0805d419a449ea4d9 Mon Sep 17 00:00:00 2001 -From: Thomas Haller -Date: Tue, 18 Feb 2020 18:30:19 +0100 -Subject: [PATCH] ifcfg: fix writer when changing OVS slave to clear previous - settings - -We need to reset the OVS_PORT and OVS_PORT_UUID variables. -Otherwise, clearing the slave type doesn't work. - -On master this is solved differently, by automatically clearing all -variables that are not explicitly set. - -Reproducer: - - nmcli con del t-eth1 - nmcli con add type ethernet autoconnect no ifname eth1 master port0 con-name t-eth1 slave-type ovs-port - echo " - remove ovs-interface - remove connection.master - remove connection.slave-type - print - save - quit - " | nmcli c edit t-eth1 - nmcli con show t-eth1 | grep 'ovs\|slave-type' - -Fixes: 1440fe6a8804 ('ifcfg: don't forget master of ovs interfaces') - -https://bugzilla.redhat.com/show_bug.cgi?id=1804167 -(cherry picked from commit 0c8046574e782ca926d265348d10866f1653aef1) ---- - src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 2 ++ - 1 file changed, 2 insertions(+) - -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 f328cc8f0..90a1a2b8f 100644 ---- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c -+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c -@@ -1923,6 +1923,8 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg) - svSetValueStr (ifcfg, "BRIDGE", NULL); - svSetValueStr (ifcfg, "TEAM_MASTER_UUID", NULL); - svSetValueStr (ifcfg, "TEAM_MASTER", NULL); -+ svSetValueStr (ifcfg, "OVS_PORT_UUID", NULL); -+ svSetValueStr (ifcfg, "OVS_PORT", NULL); - - master = nm_setting_connection_get_master (s_con); - if (master) { --- -2.24.1 - diff --git a/SOURCES/1001-Revert-core-create-virtual-device-on-settings-change-rh1804350.patch b/SOURCES/1001-Revert-core-create-virtual-device-on-settings-change-rh1804350.patch deleted file mode 100644 index 9762320..0000000 --- a/SOURCES/1001-Revert-core-create-virtual-device-on-settings-change-rh1804350.patch +++ /dev/null @@ -1,131 +0,0 @@ -From c6e479eb14779e42bc7eafdcd913cbdf7bd6c312 Mon Sep 17 00:00:00 2001 -From: Beniamino Galvani -Date: Tue, 18 Feb 2020 19:09:18 +0100 -Subject: [PATCH] Revert "core: create virtual device on settings changes in - idle handler" - -When AddConnection() or Update() terminate, the (unrealized) virtual -device should be already be available, otherwise an activation attempt -of that connection can fail. - -https://bugzilla.redhat.com/show_bug.cgi?id=1804350 - -This reverts commit c163207b077a0e66e344b2352ccbe392c76e63ed. - -(cherry picked from commit efc04b1285674ba2aea459039f4143b3307b4bcf) ---- - src/nm-manager.c | 51 ++---------------------------------------------- - 1 file changed, 2 insertions(+), 49 deletions(-) - -diff --git a/src/nm-manager.c b/src/nm-manager.c -index 6d3a5ddbf..7f6657fd7 100644 ---- a/src/nm-manager.c -+++ b/src/nm-manager.c -@@ -168,9 +168,6 @@ typedef struct { - - NMSettings *settings; - -- CList connection_changed_on_idle_lst; -- guint connection_changed_on_idle_id; -- - RadioState radio_states[RFKILL_TYPE_MAX]; - NMVpnManager *vpn_manager; - -@@ -2098,7 +2095,6 @@ static void - connection_changed (NMManager *self, - NMSettingsConnection *sett_conn) - { -- NMManagerPrivate *priv; - NMConnection *connection; - NMDevice *device; - -@@ -2106,11 +2102,6 @@ connection_changed (NMManager *self, - NM_SETTINGS_CONNECTION_INT_FLAGS_VOLATILE)) - return; - -- priv = NM_MANAGER_GET_PRIVATE (self); -- -- if (!nm_settings_has_connection (priv->settings, sett_conn)) -- return; -- - connection = nm_settings_connection_get_connection (sett_conn); - - if (!nm_connection_is_virtual (connection)) -@@ -2126,46 +2117,12 @@ connection_changed (NMManager *self, - retry_connections_for_parent_device (self, device); - } - --static gboolean --connection_changed_on_idle_cb (gpointer user_data) --{ -- NMManager *self = user_data; -- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); -- NMCListElem *elem; -- -- priv->connection_changed_on_idle_id = 0; -- -- while ((elem = c_list_first_entry (&priv->connection_changed_on_idle_lst, NMCListElem, lst))) { -- gs_unref_object NMSettingsConnection *sett_conn = NULL; -- -- sett_conn = nm_c_list_elem_free_steal (elem); -- connection_changed (self, sett_conn); -- } -- -- return G_SOURCE_REMOVE; --} -- --static void --connection_changed_on_idle (NMManager *self, -- NMSettingsConnection *sett_conn) --{ -- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); -- -- if (priv->connection_changed_on_idle_id == 0) -- priv->connection_changed_on_idle_id = g_idle_add (connection_changed_on_idle_cb, self); -- -- if (!nm_c_list_elem_find_first_ptr (&priv->connection_changed_on_idle_lst, sett_conn)) { -- c_list_link_tail (&priv->connection_changed_on_idle_lst, -- &nm_c_list_elem_new_stale (g_object_ref (sett_conn))->lst); -- } --} -- - static void - connection_added_cb (NMSettings *settings, - NMSettingsConnection *sett_conn, - NMManager *self) - { -- connection_changed_on_idle (self, sett_conn); -+ connection_changed (self, sett_conn); - } - - static void -@@ -2174,7 +2131,7 @@ connection_updated_cb (NMSettings *settings, - guint update_reason_u, - NMManager *self) - { -- connection_changed_on_idle (self, sett_conn); -+ connection_changed (self, sett_conn); - } - - /*****************************************************************************/ -@@ -7511,7 +7468,6 @@ nm_manager_init (NMManager *self) - c_list_init (&priv->active_connections_lst_head); - c_list_init (&priv->async_op_lst_head); - c_list_init (&priv->delete_volatile_connection_lst_head); -- c_list_init (&priv->connection_changed_on_idle_lst); - - priv->platform = g_object_ref (NM_PLATFORM_GET); - -@@ -7817,9 +7773,6 @@ dispose (GObject *object) - g_clear_object (&priv->policy); - } - -- nm_clear_g_source (&priv->connection_changed_on_idle_id); -- nm_c_list_elem_free_all (&priv->connection_changed_on_idle_lst, g_object_unref); -- - if (priv->settings) { - g_signal_handlers_disconnect_by_func (priv->settings, settings_startup_complete_changed, self); - g_signal_handlers_disconnect_by_func (priv->settings, system_unmanaged_devices_changed_cb, self); --- -2.24.1 - diff --git a/SOURCES/1002-device-allow-setting-arp_validate-with-supported-bon-rh1789437.patch b/SOURCES/1002-device-allow-setting-arp_validate-with-supported-bon-rh1789437.patch deleted file mode 100644 index d61808c..0000000 --- a/SOURCES/1002-device-allow-setting-arp_validate-with-supported-bon-rh1789437.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 517099b8bf6ee6ef801ef7ca9a3d32e80935b71a Mon Sep 17 00:00:00 2001 -From: Thomas Haller -Date: Wed, 19 Feb 2020 10:10:27 +0100 -Subject: [PATCH 1/1] device: allow setting "arp_validate" with supported bond - modes - -arp_validate is allowed for several bonding modes, at least since commit [1]. - -The validation was too strict. Just use set_bond_attr() directly, that -already correctly encodes whether to set the value or not. - -[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=13ac34a8866e31b31db6237c73aa558aff84d765 - -(cherry picked from commit d9d51dd42d288501bb1af5ef69736dd8f1687e3b) -(cherry picked from commit 02ba767496302f516492357a3bd4dc6cee3bd343) ---- - src/devices/nm-device-bond.c | 11 ++--------- - 1 file changed, 2 insertions(+), 9 deletions(-) - -diff --git a/src/devices/nm-device-bond.c b/src/devices/nm-device-bond.c -index c6ecb2e85fb8..36d003283977 100644 ---- a/src/devices/nm-device-bond.c -+++ b/src/devices/nm-device-bond.c -@@ -214,7 +214,7 @@ apply_bonding_config (NMDeviceBond *self) - * - * arp_interval conflicts miimon > 0 - * arp_interval conflicts [ alb, tlb ] -- * arp_validate needs [ active-backup ] -+ * arp_validate does not work with [ BOND_MODE_8023AD, BOND_MODE_TLB, BOND_MODE_ALB ] - * downdelay needs miimon - * updelay needs miimon - * primary needs [ active-backup, tlb, alb ] -@@ -266,15 +266,8 @@ apply_bonding_config (NMDeviceBond *self) - */ - } - -- /* ARP validate: value > 0 only valid in active-backup mode */ - value = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_ARP_VALIDATE); -- if ( value -- && !nm_streq (value, "0") -- && !nm_streq (value, "none") -- && mode == NM_BOND_MODE_ACTIVEBACKUP) -- set_bond_attr (device, mode, NM_SETTING_BOND_OPTION_ARP_VALIDATE, value); -- else -- set_bond_attr (device, mode, NM_SETTING_BOND_OPTION_ARP_VALIDATE, "0"); -+ set_bond_attr (device, mode, NM_SETTING_BOND_OPTION_ARP_VALIDATE, value ?: "0"); - - /* Primary */ - value = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_PRIMARY); --- -2.24.1 - diff --git a/SOURCES/1003-dhcp-keep-trying-after-send-failure-rh1806516.patch b/SOURCES/1003-dhcp-keep-trying-after-send-failure-rh1806516.patch deleted file mode 100644 index 35400f5..0000000 --- a/SOURCES/1003-dhcp-keep-trying-after-send-failure-rh1806516.patch +++ /dev/null @@ -1,136 +0,0 @@ -From 95c67b5117499c3a31cdb52b81f1cc9bdb091d88 Mon Sep 17 00:00:00 2001 -From: Beniamino Galvani -Date: Tue, 18 Feb 2020 17:04:37 +0100 -Subject: [PATCH 1/2] n-dhcp4: fix logging macro - -The level can be a complex expression, don't use it directly in the -macro. - -(cherry picked from commit 910267cf5f0f163a038ec983bec237c8a8cb1abf) -(cherry picked from commit 84c4920f5d97cc79ca349d035c719ffac3dd5fc3) ---- - shared/n-dhcp4/src/n-dhcp4-private.h | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/shared/n-dhcp4/src/n-dhcp4-private.h b/shared/n-dhcp4/src/n-dhcp4-private.h -index 436ee8065..f647cb5e2 100644 ---- a/shared/n-dhcp4/src/n-dhcp4-private.h -+++ b/shared/n-dhcp4/src/n-dhcp4-private.h -@@ -702,10 +702,11 @@ static inline uint64_t n_dhcp4_gettime(clockid_t clock) { - #define n_dhcp4_c_log(_config, _level, ...) \ - do { \ - const NDhcp4ClientConfig *__config = _config; \ -+ int __level = _level; \ - \ -- if (_level <= __config->log.level && __config->log.func) { \ -+ if (__level <= __config->log.level && __config->log.func) { \ - if (1) { \ -- _config->log.func(_level, \ -+ _config->log.func(__level, \ - __config->log.data, \ - __VA_ARGS__); \ - } else { \ --- -2.24.1 - -From 539bb87ca200faaba7d1ccb96aae5eaf15349173 Mon Sep 17 00:00:00 2001 -From: Beniamino Galvani -Date: Mon, 24 Feb 2020 09:55:13 +0100 -Subject: [PATCH 2/2] n-dhcp4: keep trying after a failure in send() - -Currently if an error is encountered during a send() of a message, the -client fails and there is no possibility of recover, since no timers -are armed after a failed event dispatch. An easy way to reproduce a -failure is to add a firewall rule like: - - iptables -A OUTPUT -p udp --dport 67 -j REJECT - -which makes the send() fail with EPERM during the renew. In such case, -the client should continue (failing) until it reaches the rebind phase -at T2, when it will be able to renew the lease using the packet -socket. - -In general, a failure to send a packet should not cause the failure of -the client. - -https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/419 -https://bugzilla.redhat.com/show_bug.cgi?id=1806516 -(cherry picked from commit 5a7b83ea0a2eb3cb0bb39c8219490c704024b5f5) -(cherry picked from commit 932b4538aee7da9a1fe75d115358bb943872e3fd) ---- - shared/n-dhcp4/src/n-dhcp4-c-connection.c | 25 ++++++++++++----------- - 1 file changed, 13 insertions(+), 12 deletions(-) - -diff --git a/shared/n-dhcp4/src/n-dhcp4-c-connection.c b/shared/n-dhcp4/src/n-dhcp4-c-connection.c -index d4354467d..a5c8ea66f 100644 ---- a/shared/n-dhcp4/src/n-dhcp4-c-connection.c -+++ b/shared/n-dhcp4/src/n-dhcp4-c-connection.c -@@ -1006,6 +1006,7 @@ static int n_dhcp4_c_connection_send_request(NDhcp4CConnection *connection, - uint64_t timestamp) { - char server_addr[INET_ADDRSTRLEN]; - char client_addr[INET_ADDRSTRLEN]; -+ char error_msg[128]; - int r; - bool broadcast = false; - -@@ -1045,45 +1046,45 @@ static int n_dhcp4_c_connection_send_request(NDhcp4CConnection *connection, - case N_DHCP4_C_MESSAGE_REBIND: - broadcast = true; - r = n_dhcp4_c_connection_packet_broadcast(connection, request); -- if (r) -- return r; - break; - case N_DHCP4_C_MESSAGE_INFORM: - broadcast = true; - r = n_dhcp4_c_connection_udp_broadcast(connection, request); -- if (r) -- return r; -- - break; - case N_DHCP4_C_MESSAGE_RENEW: - case N_DHCP4_C_MESSAGE_RELEASE: - r = n_dhcp4_c_connection_udp_send(connection, request); -- if (r) -- return r; -- - break; - default: - c_assert(0); - } - -+ if (r) { -+ snprintf(error_msg, sizeof(error_msg), ": error %d", r); -+ } else { -+ error_msg[0] = '\0'; -+ } -+ - if (request->userdata.client_addr == INADDR_ANY) { - n_dhcp4_c_log(connection->client_config, LOG_INFO, -- "sent %s to %s", -+ "send %s to %s%s", - message_type_to_str(request->userdata.message_type), - broadcast ? - "255.255.255.255" : - inet_ntop(AF_INET, &connection->server_ip, -- server_addr, sizeof(server_addr))); -+ server_addr, sizeof(server_addr)), -+ error_msg); - } else { - n_dhcp4_c_log(connection->client_config, LOG_INFO, -- "sent %s of %s to %s", -+ "send %s of %s to %s%s", - message_type_to_str(request->userdata.message_type), - inet_ntop(AF_INET, &request->userdata.client_addr, - client_addr, sizeof(client_addr)), - broadcast ? - "255.255.255.255" : - inet_ntop(AF_INET, &connection->server_ip, -- server_addr, sizeof(server_addr))); -+ server_addr, sizeof(server_addr)), -+ error_msg); - } - - ++request->userdata.n_send; --- -2.24.1 - diff --git a/SOURCES/1004-ovs-fail-enslavement-if-no-bridge-rh1797696.patch b/SOURCES/1004-ovs-fail-enslavement-if-no-bridge-rh1797696.patch deleted file mode 100644 index e5a5469..0000000 --- a/SOURCES/1004-ovs-fail-enslavement-if-no-bridge-rh1797696.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 717915c1e292953ababf7519b9e34a90a3aaacab Mon Sep 17 00:00:00 2001 -From: Beniamino Galvani -Date: Thu, 20 Feb 2020 14:38:30 +0100 -Subject: [PATCH 1/2] ovs: fail port enslavement when the bridge AC is not - found - -The previous code tried to get the bridge active connection and it -used the port active connection instead in case of failure. This -doesn't seem right, as in nm-ovsdb.c the bridge AC is used to get the -bridge settings (including the uuid, interface name, and cloned mac). - -In case of failure getting the bridge AC we should just fail. - -Fixes: 830a5a14cb29 ('device: add support for OpenVSwitch devices') -(cherry picked from commit c8b5a3f91a1be7c595be4bc176a75d5beb57047a) -(cherry picked from commit d8fb95d22b0aaf006eeb6f071a319eb8e2a50ae1) ---- - src/devices/ovs/nm-device-ovs-port.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/devices/ovs/nm-device-ovs-port.c b/src/devices/ovs/nm-device-ovs-port.c -index 0955e8a92..66a610530 100644 ---- a/src/devices/ovs/nm-device-ovs-port.c -+++ b/src/devices/ovs/nm-device-ovs-port.c -@@ -86,6 +86,7 @@ add_iface_cb (GError *error, gpointer user_data) - static gboolean - enslave_slave (NMDevice *device, NMDevice *slave, NMConnection *connection, gboolean configure) - { -+ NMDeviceOvsPort *self = NM_DEVICE_OVS_PORT (device); - NMActiveConnection *ac_port = NULL; - NMActiveConnection *ac_bridge = NULL; - NMDevice *bridge_device; -@@ -95,8 +96,11 @@ enslave_slave (NMDevice *device, NMDevice *slave, NMConnection *connection, gboo - - ac_port = NM_ACTIVE_CONNECTION (nm_device_get_act_request (device)); - ac_bridge = nm_active_connection_get_master (ac_port); -- if (!ac_bridge) -- ac_bridge = ac_port; -+ if (!ac_bridge) { -+ _LOGW (LOGD_DEVICE, "can't enslave %s: bridge active-connection not found", -+ nm_device_get_iface (slave)); -+ return FALSE; -+ } - - bridge_device = nm_active_connection_get_device (ac_bridge); - --- -2.24.1 - -From fb4fbb7bc7569540871b96f930f01b15a6687abd Mon Sep 17 00:00:00 2001 -From: Beniamino Galvani -Date: Thu, 20 Feb 2020 14:44:58 +0100 -Subject: [PATCH 2/2] ovs: fail port enslavement when the bridge device is not - found - -Fail the enslavement of the ovs port if the bridge device is not -found, instead of generating assertions and potentially crash later. - -https://bugzilla.redhat.com/show_bug.cgi?id=1797696 - -Fixes: 101e65d2bb19 ('ovs: allow changing mac address of bridges and interfaces') -(cherry picked from commit c5c49995b10baf043fa57a96c9d8ddf2e99267b4) -(cherry picked from commit 7494a2e37ab0114d1d3ef93b0dbe47005d3f8741) ---- - src/devices/ovs/nm-device-ovs-port.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/devices/ovs/nm-device-ovs-port.c b/src/devices/ovs/nm-device-ovs-port.c -index 66a610530..e02163777 100644 ---- a/src/devices/ovs/nm-device-ovs-port.c -+++ b/src/devices/ovs/nm-device-ovs-port.c -@@ -103,6 +103,11 @@ enslave_slave (NMDevice *device, NMDevice *slave, NMConnection *connection, gboo - } - - bridge_device = nm_active_connection_get_device (ac_bridge); -+ if (!bridge_device) { -+ _LOGW (LOGD_DEVICE, "can't enslave %s: bridge device not found", -+ nm_device_get_iface (slave)); -+ return FALSE; -+ } - - nm_ovsdb_add_interface (nm_ovsdb_get (), - nm_active_connection_get_applied_connection (ac_bridge), --- -2.24.1 - diff --git a/SOURCES/1005-fix-leak-device-state-files-rh1810153.patch b/SOURCES/1005-fix-leak-device-state-files-rh1810153.patch deleted file mode 100644 index 779f364..0000000 --- a/SOURCES/1005-fix-leak-device-state-files-rh1810153.patch +++ /dev/null @@ -1,391 +0,0 @@ -From 457fae22aea770e2bf6553630caba645b6e1796d Mon Sep 17 00:00:00 2001 -From: Thomas Haller -Date: Wed, 4 Mar 2020 13:21:48 +0100 -Subject: [PATCH 1/4] core: cleanup nm_config_device_state_prune_unseen() and - accept NMPlatform for skipping pruning - -(cherry picked from commit ad9e7488167ab25a5915040e813e76a5b669257b) -(cherry picked from commit 0b4ebda859a3dc1c8ec4d8c887383d04bcd249f9) ---- - src/nm-config.c | 36 +++++++++++++++++++++++------------- - src/nm-config.h | 3 ++- - src/nm-manager.c | 8 ++++---- - 3 files changed, 29 insertions(+), 18 deletions(-) - -diff --git a/src/nm-config.c b/src/nm-config.c -index a0995cf932b8..0fccca4e22dc 100644 ---- a/src/nm-config.c -+++ b/src/nm-config.c -@@ -2298,6 +2298,8 @@ _config_device_state_data_new (int ifindex, GKeyFile *kf) - return device_state; - } - -+#define DEVICE_STATE_FILENAME_LEN_MAX 60 -+ - /** - * nm_config_device_state_load: - * @ifindex: the ifindex for which the state is to load -@@ -2309,7 +2311,7 @@ NMConfigDeviceStateData * - nm_config_device_state_load (int ifindex) - { - NMConfigDeviceStateData *device_state; -- char path[NM_STRLEN (NM_CONFIG_DEVICE_STATE_DIR) + 60]; -+ char path[NM_STRLEN (NM_CONFIG_DEVICE_STATE_DIR"/") + DEVICE_STATE_FILENAME_LEN_MAX + 1]; - gs_unref_keyfile GKeyFile *kf = NULL; - const char *nm_owned_str; - -@@ -2393,7 +2395,7 @@ nm_config_device_state_write (int ifindex, - const char *next_server, - const char *root_path) - { -- char path[NM_STRLEN (NM_CONFIG_DEVICE_STATE_DIR) + 60]; -+ char path[NM_STRLEN (NM_CONFIG_DEVICE_STATE_DIR"/") + DEVICE_STATE_FILENAME_LEN_MAX + 1]; - GError *local = NULL; - gs_unref_keyfile GKeyFile *kf = NULL; - -@@ -2476,35 +2478,43 @@ nm_config_device_state_write (int ifindex, - } - - void --nm_config_device_state_prune_unseen (GHashTable *seen_ifindexes) -+nm_config_device_state_prune_unseen (GHashTable *preserve_ifindexes, -+ NMPlatform *preserve_in_platform) - { - GDir *dir; - const char *fn; -- int ifindex; -- gsize fn_len; -- char buf[NM_STRLEN (NM_CONFIG_DEVICE_STATE_DIR"/") + 30 + 3] = NM_CONFIG_DEVICE_STATE_DIR"/"; -+ char buf[NM_STRLEN (NM_CONFIG_DEVICE_STATE_DIR"/") + DEVICE_STATE_FILENAME_LEN_MAX + 1] = NM_CONFIG_DEVICE_STATE_DIR"/"; - char *buf_p = &buf[NM_STRLEN (NM_CONFIG_DEVICE_STATE_DIR"/")]; - -- g_return_if_fail (seen_ifindexes); -- - dir = g_dir_open (NM_CONFIG_DEVICE_STATE_DIR, 0, NULL); - if (!dir) - return; - - while ((fn = g_dir_read_name (dir))) { -+ int ifindex; -+ gsize fn_len; -+ - ifindex = _device_state_parse_filename (fn); - if (ifindex <= 0) - continue; -- if (g_hash_table_contains (seen_ifindexes, GINT_TO_POINTER (ifindex))) -+ -+ if ( preserve_ifindexes -+ && g_hash_table_contains (preserve_ifindexes, GINT_TO_POINTER (ifindex))) -+ continue; -+ -+ if ( preserve_in_platform -+ && nm_platform_link_get (preserve_in_platform, ifindex)) - continue; - -- fn_len = strlen (fn) + 1; -+ fn_len = strlen (fn); -+ nm_assert (fn_len > 0); - nm_assert (&buf_p[fn_len] < &buf[G_N_ELEMENTS (buf)]); -- memcpy (buf_p, fn, fn_len); -+ memcpy (buf_p, fn, fn_len + 1u); - nm_assert (({ - char bb[30]; -- nm_sprintf_buf (bb, "%d", ifindex); -- nm_streq0 (bb, buf_p); -+ -+ nm_streq0 (nm_sprintf_buf (bb, "%d", ifindex), -+ buf_p); - })); - _LOGT ("device-state: prune #%d (%s)", ifindex, buf); - (void) unlink (buf); -diff --git a/src/nm-config.h b/src/nm-config.h -index d9460ebb46e3..048d64f41f47 100644 ---- a/src/nm-config.h -+++ b/src/nm-config.h -@@ -258,7 +258,8 @@ gboolean nm_config_device_state_write (int ifindex, - const char *next_server, - const char *root_path); - --void nm_config_device_state_prune_unseen (GHashTable *seen_ifindexes); -+void nm_config_device_state_prune_unseen (GHashTable *preserve_ifindexes, -+ NMPlatform *preserve_in_platform); - - const GHashTable *nm_config_device_state_get_all (NMConfig *self); - const NMConfigDeviceStateData *nm_config_device_state_get (NMConfig *self, -diff --git a/src/nm-manager.c b/src/nm-manager.c -index 7f6657fd70e2..35127fa6cd25 100644 ---- a/src/nm-manager.c -+++ b/src/nm-manager.c -@@ -6585,19 +6585,19 @@ void - nm_manager_write_device_state_all (NMManager *self) - { - NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); -- gs_unref_hashtable GHashTable *seen_ifindexes = NULL; -+ gs_unref_hashtable GHashTable *preserve_ifindexes = NULL; - NMDevice *device; - -- seen_ifindexes = g_hash_table_new (nm_direct_hash, NULL); -+ preserve_ifindexes = g_hash_table_new (nm_direct_hash, NULL); - - c_list_for_each_entry (device, &priv->devices_lst_head, devices_lst) { - if (nm_manager_write_device_state (self, device)) { -- g_hash_table_add (seen_ifindexes, -+ g_hash_table_add (preserve_ifindexes, - GINT_TO_POINTER (nm_device_get_ip_ifindex (device))); - } - } - -- nm_config_device_state_prune_unseen (seen_ifindexes); -+ nm_config_device_state_prune_unseen (preserve_ifindexes, NULL); - } - - static gboolean --- -2.24.1 - - -From af10b35dabc0b542eba8117bb32b3fee3ff207f9 Mon Sep 17 00:00:00 2001 -From: Thomas Haller -Date: Wed, 4 Mar 2020 16:52:57 +0100 -Subject: [PATCH 2/4] core/trivial: rename - nm_config_device_state_prune_unseen() to nm_config_device_state_prune_stale() - -It's just a more fitting name after the previous change. - -(cherry picked from commit ecb0210e7a225f2b73149229cc96ac84f93404d1) -(cherry picked from commit 7fa1e825450ce4b69670b5bfd5a9c705d9c05920) ---- - src/nm-config.c | 4 ++-- - src/nm-config.h | 4 ++-- - src/nm-manager.c | 2 +- - 3 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/nm-config.c b/src/nm-config.c -index 0fccca4e22dc..0a6082d71a63 100644 ---- a/src/nm-config.c -+++ b/src/nm-config.c -@@ -2478,8 +2478,8 @@ nm_config_device_state_write (int ifindex, - } - - void --nm_config_device_state_prune_unseen (GHashTable *preserve_ifindexes, -- NMPlatform *preserve_in_platform) -+nm_config_device_state_prune_stale (GHashTable *preserve_ifindexes, -+ NMPlatform *preserve_in_platform) - { - GDir *dir; - const char *fn; -diff --git a/src/nm-config.h b/src/nm-config.h -index 048d64f41f47..b4478ceb04af 100644 ---- a/src/nm-config.h -+++ b/src/nm-config.h -@@ -258,8 +258,8 @@ gboolean nm_config_device_state_write (int ifindex, - const char *next_server, - const char *root_path); - --void nm_config_device_state_prune_unseen (GHashTable *preserve_ifindexes, -- NMPlatform *preserve_in_platform); -+void nm_config_device_state_prune_stale (GHashTable *preserve_ifindexes, -+ NMPlatform *preserve_in_platform); - - const GHashTable *nm_config_device_state_get_all (NMConfig *self); - const NMConfigDeviceStateData *nm_config_device_state_get (NMConfig *self, -diff --git a/src/nm-manager.c b/src/nm-manager.c -index 35127fa6cd25..c9ef20a526d2 100644 ---- a/src/nm-manager.c -+++ b/src/nm-manager.c -@@ -6597,7 +6597,7 @@ nm_manager_write_device_state_all (NMManager *self) - } - } - -- nm_config_device_state_prune_unseen (preserve_ifindexes, NULL); -+ nm_config_device_state_prune_stale (preserve_ifindexes, NULL); - } - - static gboolean --- -2.24.1 - - -From 509b555a45b170f843242e3d92b229936457ba75 Mon Sep 17 00:00:00 2001 -From: Thomas Haller -Date: Wed, 4 Mar 2020 13:38:49 +0100 -Subject: [PATCH 3/4] core: return ifindex from nm_manager_write_device_state() - -nm_manager_write_device_state() writes the device state to a file. The ifindex -is here important, because that is the identifier for the device and is also -used as file name. Return the ifindex that was used, instead of letting the -caller reimplement the knowledge which ifindex was used. - -(cherry picked from commit 5477847eed9654727df5b70767a2a6498da1cb67) -(cherry picked from commit fb6e14cf3f602a840bee66c27dfcb754872f1525) ---- - src/nm-manager.c | 34 +++++++++++++++++++++------------- - src/nm-manager.h | 2 +- - 2 files changed, 22 insertions(+), 14 deletions(-) - -diff --git a/src/nm-manager.c b/src/nm-manager.c -index c9ef20a526d2..74776a24acf2 100644 ---- a/src/nm-manager.c -+++ b/src/nm-manager.c -@@ -1515,7 +1515,7 @@ manager_device_state_changed (NMDevice *device, - NM_DEVICE_STATE_UNMANAGED, - NM_DEVICE_STATE_DISCONNECTED, - NM_DEVICE_STATE_ACTIVATED)) -- nm_manager_write_device_state (self, device); -+ nm_manager_write_device_state (self, device, NULL); - - if (NM_IN_SET (new_state, - NM_DEVICE_STATE_UNAVAILABLE, -@@ -6514,7 +6514,7 @@ start_factory (NMDeviceFactory *factory, gpointer user_data) - } - - gboolean --nm_manager_write_device_state (NMManager *self, NMDevice *device) -+nm_manager_write_device_state (NMManager *self, NMDevice *device, int *out_ifindex) - { - NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); - int ifindex; -@@ -6530,6 +6530,8 @@ nm_manager_write_device_state (NMManager *self, NMDevice *device) - const char *next_server = NULL; - const char *root_path = NULL; - -+ NM_SET_OUT (out_ifindex, 0); -+ - ifindex = nm_device_get_ip_ifindex (device); - if (ifindex <= 0) - return FALSE; -@@ -6570,15 +6572,19 @@ nm_manager_write_device_state (NMManager *self, NMDevice *device) - next_server = nm_dhcp4_config_get_option (dhcp4_config, "next_server"); - } - -- return nm_config_device_state_write (ifindex, -- managed_type, -- perm_hw_addr_fake, -- uuid, -- nm_owned, -- route_metric_default_aspired, -- route_metric_default_effective, -- next_server, -- root_path); -+ if (!nm_config_device_state_write (ifindex, -+ managed_type, -+ perm_hw_addr_fake, -+ uuid, -+ nm_owned, -+ route_metric_default_aspired, -+ route_metric_default_effective, -+ next_server, -+ root_path)) -+ return FALSE; -+ -+ NM_SET_OUT (out_ifindex, ifindex); -+ return TRUE; - } - - void -@@ -6591,9 +6597,11 @@ nm_manager_write_device_state_all (NMManager *self) - preserve_ifindexes = g_hash_table_new (nm_direct_hash, NULL); - - c_list_for_each_entry (device, &priv->devices_lst_head, devices_lst) { -- if (nm_manager_write_device_state (self, device)) { -+ int ifindex; -+ -+ if (nm_manager_write_device_state (self, device, &ifindex)) { - g_hash_table_add (preserve_ifindexes, -- GINT_TO_POINTER (nm_device_get_ip_ifindex (device))); -+ GINT_TO_POINTER (ifindex)); - } - } - -diff --git a/src/nm-manager.h b/src/nm-manager.h -index ad06e318f4dc..5873abd24b8e 100644 ---- a/src/nm-manager.h -+++ b/src/nm-manager.h -@@ -103,7 +103,7 @@ NMSettingsConnection **nm_manager_get_activatable_connections (NMManager *manage - guint *out_len); - - void nm_manager_write_device_state_all (NMManager *manager); --gboolean nm_manager_write_device_state (NMManager *manager, NMDevice *device); -+gboolean nm_manager_write_device_state (NMManager *manager, NMDevice *device, int *out_ifindex); - - /* Device handling */ - --- -2.24.1 - - -From d60b888a07d69e155a7bea9dead1376df1a21bfb Mon Sep 17 00:00:00 2001 -From: Thomas Haller -Date: Wed, 4 Mar 2020 15:44:53 +0100 -Subject: [PATCH 4/4] core: periodically cleanup unused device state files from - /run - -Otherwise, we only prune unused files when the service terminates. -Usually, NetworkManager service doesn't get restarted before shutdown -of the system (nor should it be). That means, if you create (and -destroy) a large number of software devices, the state files pile -up. - -From time to time, go through the files on disk and delete those that -are no longer relevant. - -In this case, "from time to time" means after we write/update state -files 100 times. - -(cherry picked from commit 332df7a58e86ce08cfd9331897d8b928ae6d267e) -(cherry picked from commit d65b5c2e81f69ddc9217159a16f49d23d965da1c) ---- - src/nm-manager.c | 20 +++++++++++++++++++- - 1 file changed, 19 insertions(+), 1 deletion(-) - -diff --git a/src/nm-manager.c b/src/nm-manager.c -index 74776a24acf2..931d1068f160 100644 ---- a/src/nm-manager.c -+++ b/src/nm-manager.c -@@ -50,6 +50,8 @@ - #include "nm-dispatcher.h" - #include "NetworkManagerUtils.h" - -+#define DEVICE_STATE_PRUNE_RATELIMIT_MAX 100u -+ - /*****************************************************************************/ - - typedef struct { -@@ -191,6 +193,8 @@ typedef struct { - - NMConnectivityState connectivity_state; - -+ guint8 device_state_prune_ratelimit_count; -+ - bool startup:1; - bool devices_inited:1; - -@@ -1514,9 +1518,23 @@ manager_device_state_changed (NMDevice *device, - if (NM_IN_SET (new_state, - NM_DEVICE_STATE_UNMANAGED, - NM_DEVICE_STATE_DISCONNECTED, -- NM_DEVICE_STATE_ACTIVATED)) -+ NM_DEVICE_STATE_ACTIVATED)) { - nm_manager_write_device_state (self, device, NULL); - -+ G_STATIC_ASSERT_EXPR (DEVICE_STATE_PRUNE_RATELIMIT_MAX < G_MAXUINT8); -+ if (priv->device_state_prune_ratelimit_count++ > DEVICE_STATE_PRUNE_RATELIMIT_MAX) { -+ /* We write the device state to /run. The state files are named after the -+ * ifindex (which is assumed to be unique and not repeat -- in practice -+ * it may repeat). So from time to time, we prune device state files -+ * for interfaces that no longer exist. -+ * -+ * Otherwise, the files might pile up if you create (and destroy) a large -+ * number of software devices. */ -+ priv->device_state_prune_ratelimit_count = 0; -+ nm_config_device_state_prune_stale (NULL, priv->platform); -+ } -+ } -+ - if (NM_IN_SET (new_state, - NM_DEVICE_STATE_UNAVAILABLE, - NM_DEVICE_STATE_DISCONNECTED)) --- -2.24.1 - diff --git a/SOURCES/1006-dhcp-nettools-clear-source-rh1810188.patch b/SOURCES/1006-dhcp-nettools-clear-source-rh1810188.patch deleted file mode 100644 index 786e672..0000000 --- a/SOURCES/1006-dhcp-nettools-clear-source-rh1810188.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 6347e939e6210c8f6bc40f8b43f41acec27ea6b8 Mon Sep 17 00:00:00 2001 -From: Beniamino Galvani -Date: Sat, 29 Feb 2020 19:14:10 +0100 -Subject: [PATCH 1/2] dhcp: clean source on dispatch failure - -Fix the following warning: - - NetworkManager[1524461]: Source ID 3844 was not found when attempting to remove it - - g_logv (log_domain=0x7f2816fa676e "GLib", log_level=G_LOG_LEVEL_CRITICAL, format=, args=args@entry=0x7ffe697374d0) at gmessages.c:1391 - g_log (log_domain=log_domain@entry=0x7f2816fa676e "GLib", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7f2816fae240 "Source ID %u was not found when attempting to remove it") at gmessages.c:1432 - g_source_remove (tag=519) at gmain.c:2352 - nm_clear_g_source (id=) at ./shared/nm-glib-aux/nm-macros-internal.h:1198 - dispose (object=0x55f7289b1ca0) at src/dhcp/nm-dhcp-nettools.c:1433 - g_object_unref (_object=) at gobject.c:3303 - g_object_unref (_object=0x55f7289b1ca0) at gobject.c:3232 - dhcp4_cleanup (self=self@entry=0x55f728af3b20, cleanup_type=cleanup_type@entry=CLEANUP_TYPE_DECONFIGURE, release=release@entry=0) at src/devices/nm-device.c:7565 - ... - -Fixes: 45521b1b3872 ('dhcp: nettools: move to failed state if event dispatch fails') -(cherry picked from commit 843d696e46d96eb30642d872ba6c1a46c900ca14) -(cherry picked from commit 7a004ef0bb49717606acbf47326a4c6c753cb09b) ---- - src/dhcp/nm-dhcp-nettools.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/dhcp/nm-dhcp-nettools.c b/src/dhcp/nm-dhcp-nettools.c -index 45ff46f53fbd..2af73cdc3c3c 100644 ---- a/src/dhcp/nm-dhcp-nettools.c -+++ b/src/dhcp/nm-dhcp-nettools.c -@@ -1074,6 +1074,7 @@ dhcp4_event_cb (GIOChannel *source, - */ - _LOGE ("error %d dispatching events", r); - nm_dhcp_client_set_state (NM_DHCP_CLIENT (self), NM_DHCP_STATE_FAIL, NULL, NULL); -+ priv->event_id = 0; - return G_SOURCE_REMOVE; - } - --- -2.24.1 - - -From b978458c375e06722ae16b332d26b9678c0da455 Mon Sep 17 00:00:00 2001 -From: Thomas Haller -Date: Tue, 3 Mar 2020 09:50:43 +0100 -Subject: [PATCH 2/2] dhcp/nettools: first clear source before emitting event - in dhcp4_event_cb() - -A similar patch was done on master, but here the situation is different. - -I feel we should not allow for the possibility where we invoke an event -that might mess with the source id. In practice there was no problem. -But it feels cleaner to clear it first. - -Fixes: 843d696e46d9 ('dhcp: clean source on dispatch failure') -(cherry picked from commit 0549351111ccfde9d6a404952c43234612028d13) -(cherry picked from commit beeb067c71b4b67778badb6eed6ee2dd00a5218f) ---- - src/dhcp/nm-dhcp-nettools.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/dhcp/nm-dhcp-nettools.c b/src/dhcp/nm-dhcp-nettools.c -index 2af73cdc3c3c..622251a31c27 100644 ---- a/src/dhcp/nm-dhcp-nettools.c -+++ b/src/dhcp/nm-dhcp-nettools.c -@@ -1073,8 +1073,8 @@ dhcp4_event_cb (GIOChannel *source, - * a predefined number of times (possibly infinite). - */ - _LOGE ("error %d dispatching events", r); -- nm_dhcp_client_set_state (NM_DHCP_CLIENT (self), NM_DHCP_STATE_FAIL, NULL, NULL); - priv->event_id = 0; -+ nm_dhcp_client_set_state (NM_DHCP_CLIENT (self), NM_DHCP_STATE_FAIL, NULL, NULL); - return G_SOURCE_REMOVE; - } - --- -2.24.1 - diff --git a/SOURCES/9999-fix-pregen-doc.patch b/SOURCES/9999-fix-pregen-doc.patch index fc80b07..369c69b 100644 --- a/SOURCES/9999-fix-pregen-doc.patch +++ b/SOURCES/9999-fix-pregen-doc.patch @@ -1,7 +1,7 @@ -From a70e59b64daa78e5f7e801ec3dba99bc34ace51f Mon Sep 17 00:00:00 2001 +From 45d1bf8caf2d75c5728688c5cc0ac738b0078917 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 27 Aug 2019 15:47:32 +0200 -Subject: [PATCH] patch documentation with the proper default values +Subject: [PATCH 1/1] patch documentation with the proper default values We don't regenerate the documentation for RHEL builds, but the docs from the tarball are generated with a certain set @@ -14,10 +14,10 @@ Patch the man pages with the proper values. 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api/html/NetworkManager.conf.html b/docs/api/html/NetworkManager.conf.html -index 04672d9bd998..8486881f2cb3 100644 +index 2778de44e660..fdb772c5d355 100644 --- a/docs/api/html/NetworkManager.conf.html +++ b/docs/api/html/NetworkManager.conf.html -@@ -572,7 +572,7 @@ unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth +@@ -574,7 +574,7 @@ unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth are "syslog" and "journal". When NetworkManager is started with "--debug" in addition all messages will be printed to stderr. @@ -27,10 +27,10 @@ index 04672d9bd998..8486881f2cb3 100644 diff --git a/man/NetworkManager.conf.5 b/man/NetworkManager.conf.5 -index b2984e0aacce..bc0aa552db99 100644 +index 7f8b20abb0f3..d42437ec0f8e 100644 --- a/man/NetworkManager.conf.5 +++ b/man/NetworkManager.conf.5 -@@ -596,7 +596,7 @@ INFO\&. +@@ -598,7 +598,7 @@ INFO\&. .PP \fIbackend\fR .RS 4 @@ -40,5 +40,5 @@ index b2984e0aacce..bc0aa552db99 100644 .PP \fIaudit\fR -- -2.23.0 +2.26.2 diff --git a/SPECS/NetworkManager.spec b/SPECS/NetworkManager.spec index 292ace9..b2efad0 100644 --- a/SPECS/NetworkManager.spec +++ b/SPECS/NetworkManager.spec @@ -5,9 +5,9 @@ %global glib2_version %(pkg-config --modversion glib-2.0 2>/dev/null || echo bad) %global epoch_version 1 -%global rpm_version 1.22.8 -%global real_version 1.22.8 -%global release_version 4 +%global rpm_version 1.25.1 +%global real_version 1.25.1 +%global release_version 1 %global snapshot %{nil} %global git_sha %{nil} @@ -21,10 +21,10 @@ %global _hardened_build 1 -%if "x%{?snapshot}" != x +%if "x%{?snapshot}" != "x" %global snapshot_dot .%{snapshot} %endif -%if "x%{?git_sha}" != x +%if "x%{?git_sha}" != "x" %global git_sha_dot .%{git_sha} %endif @@ -115,9 +115,9 @@ # bpf(BPF_MAP_CREATE, ...) randomly fails with EPERM. That might # be related to `ulimit -l`. Anyway, this is not usable at the # moment. -%global ebpf_enabled no +%global ebpf_enabled "no" %else -%global ebpf_enabled no +%global ebpf_enabled "no" %endif ############################################################################### @@ -145,13 +145,6 @@ Patch1: 0001-cloud-setup-systemd-unit-rh1791758.patch # Bugfixes that are only relevant until next rebase of the package. #Patch1000: 1000-some-patch.patch -Patch1000: 1000-ifcfg-fix-writer-rh1804167.patch -Patch1001: 1001-Revert-core-create-virtual-device-on-settings-change-rh1804350.patch -Patch1002: 1002-device-allow-setting-arp_validate-with-supported-bon-rh1789437.patch -Patch1003: 1003-dhcp-keep-trying-after-send-failure-rh1806516.patch -Patch1004: 1004-ovs-fail-enslavement-if-no-bridge-rh1797696.patch -Patch1005: 1005-fix-leak-device-state-files-rh1810153.patch -Patch1006: 1006-dhcp-nettools-clear-source-rh1810188.patch # The pregenerated docs contain default values and paths that depend # on the configure options when creating the source tarball. @@ -599,7 +592,6 @@ This tool is still experimental. -Dselinux=true \ -Dpolkit=true \ -Dconfig_auth_polkit_default=true \ - -Dpolkit_agent=true \ -Dmodify_system=true \ -Dconcheck=true \ %if 0%{?fedora} @@ -607,7 +599,7 @@ This tool is still experimental. %else -Dlibpsl=false \ %endif -%if %{ebpf_enabled} != yes +%if %{ebpf_enabled} != "yes" -Debpf=false \ %else -Debpf=true \ @@ -730,7 +722,6 @@ intltoolize --automake --copy --force %endif --with-selinux=yes \ --enable-polkit=yes \ - --enable-polkit-agent \ --enable-modify-system=yes \ --enable-concheck \ %if 0%{?fedora} @@ -1075,6 +1066,23 @@ fi %changelog +* Fri May 8 2020 Thomas Haller - 1:1.25.1-1 +- update to 1.25.1 (development) +- improve documentation (rh #1651594, rh #1819259) +- vrf: add support (rh #1773908) +- bond: improve setting default options for miimon and updelay (rh #1805184, rh #1806549) +- bluetooth: fix crash handling DUN modem (rh #1826635) +- core: fix potential infinite loop with prefix delegation (rh #1488030) +- initrd: fixes for running NetworkManager in initrd (rh #1627820, #1710935, #1744935, #1771792) +- core: prevent multiple attempts to create default wired connection (rh #1687937) +- bridge: support more options (rh #1755768) +- libnm,dbus: expose HwAddress for all device types (rh #1786937) +- core: fix route priority for IPv6 (rh #1814557) +- core: fix crash during reapply (rh #1816067) +- core: clear IP address from bridge slave (rh #1816517) +- ovs: support changing MTU of OVS interfaces (rh #1820052) +- nm-online: support setting timeout for NetworkManager-wait-online (rh #1828458) + * Fri Mar 6 2020 Thomas Haller - 1:1.22.8-4 - core: fix leaking device state files in /run (rh #1810153) - dhcp: fix crash in nettools client when leaking GSource (rh #1810188)