diff --git a/.NetworkManager.metadata b/.NetworkManager.metadata index e98f47c..c158ea3 100644 --- a/.NetworkManager.metadata +++ b/.NetworkManager.metadata @@ -1 +1 @@ -78682cdbe2de3f01e358d0bcb2fefabae82e4b35 SOURCES/NetworkManager-1.22.0.tar.xz +93b74524dbd01bf62f6885f2cdae6ff15c5bfd7e SOURCES/NetworkManager-1.22.8.tar.xz diff --git a/.gitignore b/.gitignore index eaa4bf0..9796ed6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/NetworkManager-1.22.0.tar.xz +SOURCES/NetworkManager-1.22.8.tar.xz diff --git a/SOURCES/0001-cloud-setup-systemd-unit-rh1791758.patch b/SOURCES/0001-cloud-setup-systemd-unit-rh1791758.patch new file mode 100644 index 0000000..b356d93 --- /dev/null +++ b/SOURCES/0001-cloud-setup-systemd-unit-rh1791758.patch @@ -0,0 +1,37 @@ +From 04ad92e259cd81fb0a492bc0e2284877ccb297ea Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Thu, 16 Jan 2020 13:40:26 +0100 +Subject: [PATCH 1/1] cloud-setup: avoid unsupported systemd settings in + nm-cloud-setup.service init for rhel-8.2 + +https://bugzilla.redhat.com/show_bug.cgi?id=1791758 +--- + clients/cloud-setup/nm-cloud-setup.service.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/clients/cloud-setup/nm-cloud-setup.service.in b/clients/cloud-setup/nm-cloud-setup.service.in +index 69a1a29ccba1..92e427beb8a1 100644 +--- a/clients/cloud-setup/nm-cloud-setup.service.in ++++ b/clients/cloud-setup/nm-cloud-setup.service.in +@@ -21,15 +21,15 @@ PrivateDevices=yes + PrivateTmp=yes + ProtectControlGroups=yes + ProtectHome=yes +-ProtectHostname=yes +-ProtectKernelLogs=yes ++#ProtectHostname=yes ++#ProtectKernelLogs=yes + ProtectKernelModules=yes + ProtectKernelTunables=yes + ProtectSystem=strict + RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 + RestrictNamespaces=yes + RestrictRealtime=yes +-RestrictSUIDSGID=yes ++#RestrictSUIDSGID=yes + SystemCallFilter=@system-service + + [Install] +-- +2.24.1 + diff --git a/SOURCES/1000-dhcp-nettools-search-domains-fix-rh1783981.patch b/SOURCES/1000-dhcp-nettools-search-domains-fix-rh1783981.patch deleted file mode 100644 index 7d86df4..0000000 --- a/SOURCES/1000-dhcp-nettools-search-domains-fix-rh1783981.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 43922e1ffa2442486afe60bdca3f91fe619d5980 Mon Sep 17 00:00:00 2001 -From: Beniamino Galvani -Date: Tue, 17 Dec 2019 14:23:33 +0100 -Subject: [PATCH 1/1] dhcp: nettools: fix parsing of search domains option - -'first' was never modified and so the dot was never added. - -Fixes: 6adade6f21d5 ('dhcp: add nettools dhcp4 client') - -https://bugzilla.redhat.com/show_bug.cgi?id=1783981 -(cherry picked from commit 9aa00a8a14cb64f851234d025498ff2f9ec18e94) -(cherry picked from commit ea22135384edaf57a41293bd517ff1445b8c88a8) ---- - src/dhcp/nm-dhcp-nettools.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/dhcp/nm-dhcp-nettools.c b/src/dhcp/nm-dhcp-nettools.c -index e557c0048750..a537ee8272bc 100644 ---- a/src/dhcp/nm-dhcp-nettools.c -+++ b/src/dhcp/nm-dhcp-nettools.c -@@ -246,10 +246,10 @@ lease_option_print_domain_name (GString *str, uint8_t *cache, size_t *n_cachep, - return TRUE; - } - -- if (!first) { -+ if (!first) - g_string_append_c(str, '.'); -+ else - first = FALSE; -- } - - if (!lease_option_print_label (str, n_label, domainp, n_domainp)) - return FALSE; --- -2.23.0 - diff --git a/SOURCES/1000-ifcfg-fix-writer-rh1804167.patch b/SOURCES/1000-ifcfg-fix-writer-rh1804167.patch new file mode 100644 index 0000000..9c6bffb --- /dev/null +++ b/SOURCES/1000-ifcfg-fix-writer-rh1804167.patch @@ -0,0 +1,50 @@ +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 new file mode 100644 index 0000000..9762320 --- /dev/null +++ b/SOURCES/1001-Revert-core-create-virtual-device-on-settings-change-rh1804350.patch @@ -0,0 +1,131 @@ +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 new file mode 100644 index 0000000..d61808c --- /dev/null +++ b/SOURCES/1002-device-allow-setting-arp_validate-with-supported-bon-rh1789437.patch @@ -0,0 +1,52 @@ +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 new file mode 100644 index 0000000..35400f5 --- /dev/null +++ b/SOURCES/1003-dhcp-keep-trying-after-send-failure-rh1806516.patch @@ -0,0 +1,136 @@ +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 new file mode 100644 index 0000000..e5a5469 --- /dev/null +++ b/SOURCES/1004-ovs-fail-enslavement-if-no-bridge-rh1797696.patch @@ -0,0 +1,86 @@ +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 new file mode 100644 index 0000000..779f364 --- /dev/null +++ b/SOURCES/1005-fix-leak-device-state-files-rh1810153.patch @@ -0,0 +1,391 @@ +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 new file mode 100644 index 0000000..786e672 --- /dev/null +++ b/SOURCES/1006-dhcp-nettools-clear-source-rh1810188.patch @@ -0,0 +1,78 @@ +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 2bf3732..fc80b07 100644 --- a/SOURCES/9999-fix-pregen-doc.patch +++ b/SOURCES/9999-fix-pregen-doc.patch @@ -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 97287e90fe06..d8369008a47e 100644 +index 04672d9bd998..8486881f2cb3 100644 --- a/docs/api/html/NetworkManager.conf.html +++ b/docs/api/html/NetworkManager.conf.html -@@ -569,7 +569,7 @@ unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth +@@ -572,7 +572,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 97287e90fe06..d8369008a47e 100644 diff --git a/man/NetworkManager.conf.5 b/man/NetworkManager.conf.5 -index 6b1a3081a7a4..77ce8668cf4b 100644 +index b2984e0aacce..bc0aa552db99 100644 --- a/man/NetworkManager.conf.5 +++ b/man/NetworkManager.conf.5 -@@ -590,7 +590,7 @@ INFO\&. +@@ -596,7 +596,7 @@ INFO\&. .PP \fIbackend\fR .RS 4 diff --git a/SPECS/NetworkManager.spec b/SPECS/NetworkManager.spec index c564a55..292ace9 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.0 -%global real_version 1.22.0 -%global release_version 2 +%global rpm_version 1.22.8 +%global real_version 1.22.8 +%global release_version 4 %global snapshot %{nil} %global git_sha %{nil} @@ -141,10 +141,17 @@ Source6: 70-nm-connectivity.conf # RHEL downstream patches that change behavior from upstream. # These are not bugfixes, hence they are also relevant after # the next rebase of the source tarball. -#Patch1: 0001-some-downstream-difference.patch +Patch1: 0001-cloud-setup-systemd-unit-rh1791758.patch # Bugfixes that are only relevant until next rebase of the package. -Patch1000: 1000-dhcp-nettools-search-domains-fix-rh1783981.patch +#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. @@ -1068,6 +1075,43 @@ fi %changelog +* 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) + +* Mon Feb 24 2020 Beniamino Galvani - 1:1.22.8-3 +- dhcp: keep trying after a send failure (rh #1806516) +- ovs: fail port enslavement when the bridge is not found (rh #1797696) + +* Wed Feb 19 2020 Thomas Haller - 1:1.22.8-2 +- bond: fix setting arp_validate option for other bonding modes (rh #1789437) + +* Tue Feb 18 2020 Antonio Cardace - 1:1.22.8-1 +- Update to 1.22.8 +- Added configuration option to customize IPv6 RA timeout (rh #1801158) +- Removed length limitation for OVS Bridge, Patches and Interfaces (only Patch types) names (rh #1788432) +- Reworked asynchronous deactivation of OVS interfaces (rh #1787989, rh #1782701) +- Fixed failure when creating team interfaces (rh #1798947) +- ifcfg-rh: fix clearing ovs slave type from ifcfg-rh file (rh #1804167) +- Fixed bug causing virtual devices to not be available after AddConnection()/Update() (rh #1804350) + +* Fri Jan 31 2020 Antonio Cardace - 1:1.22.6-1 +- Update to 1.22.6 +- nm-device: add new pending action to keep the device busy when in between states (rh #1759956) +- cloud-setup: avoid unsupported settings in systemd service unit (rh #1791758) +- do not create virtual device if master is not present (rh #1795919) +- allow IPv6 RA timeout to be set to a value higher than 120 seconds (rh #1795957) +- fix behaviour when 'ipv4.dhcp-timeout' option is set to 'infinity' (rh #1791378) + +* Fri Jan 10 2020 Beniamino Galvani - 1:1.22.4-1 +- Update to 1.22.4 +- dhcp: fix behavior of internal DHCP client when the server sends a NAK (rh #1787219) + +* Sat Dec 28 2019 Thomas Haller - 1:1.22.2-1 +- Update to 1.22.2 +- core,libnm: expose capability for OVS support (rh #1785147) +- dhcp: various bugfixes for nettools n-dhcp4 plugin + * Tue Dec 17 2019 Thomas Haller - 1:1.22.0-2 - dhcp: fix parsing of DNS search domain with nettools plugin (rh #1783981)