Blame SOURCES/1003-dhcp-keep-trying-after-send-failure-rh1806516.patch

245932
From 95c67b5117499c3a31cdb52b81f1cc9bdb091d88 Mon Sep 17 00:00:00 2001
245932
From: Beniamino Galvani <bgalvani@redhat.com>
245932
Date: Tue, 18 Feb 2020 17:04:37 +0100
245932
Subject: [PATCH 1/2] n-dhcp4: fix logging macro
245932
245932
The level can be a complex expression, don't use it directly in the
245932
macro.
245932
245932
(cherry picked from commit 910267cf5f0f163a038ec983bec237c8a8cb1abf)
245932
(cherry picked from commit 84c4920f5d97cc79ca349d035c719ffac3dd5fc3)
245932
---
245932
 shared/n-dhcp4/src/n-dhcp4-private.h | 5 +++--
245932
 1 file changed, 3 insertions(+), 2 deletions(-)
245932
245932
diff --git a/shared/n-dhcp4/src/n-dhcp4-private.h b/shared/n-dhcp4/src/n-dhcp4-private.h
245932
index 436ee8065..f647cb5e2 100644
245932
--- a/shared/n-dhcp4/src/n-dhcp4-private.h
245932
+++ b/shared/n-dhcp4/src/n-dhcp4-private.h
245932
@@ -702,10 +702,11 @@ static inline uint64_t n_dhcp4_gettime(clockid_t clock) {
245932
 #define n_dhcp4_c_log(_config, _level, ...)                                    \
245932
         do {                                                                   \
245932
                 const NDhcp4ClientConfig *__config = _config;                  \
245932
+                int __level = _level;                                          \
245932
                                                                                \
245932
-                if (_level <= __config->log.level && __config->log.func) {     \
245932
+                if (__level <= __config->log.level && __config->log.func) {    \
245932
                         if (1) {                                               \
245932
-                                _config->log.func(_level,                      \
245932
+                                _config->log.func(__level,                     \
245932
                                                   __config->log.data,          \
245932
                                                   __VA_ARGS__);                \
245932
                         } else {                                               \
245932
-- 
245932
2.24.1
245932
245932
From 539bb87ca200faaba7d1ccb96aae5eaf15349173 Mon Sep 17 00:00:00 2001
245932
From: Beniamino Galvani <bgalvani@redhat.com>
245932
Date: Mon, 24 Feb 2020 09:55:13 +0100
245932
Subject: [PATCH 2/2] n-dhcp4: keep trying after a failure in send()
245932
245932
Currently if an error is encountered during a send() of a message, the
245932
client fails and there is no possibility of recover, since no timers
245932
are armed after a failed event dispatch. An easy way to reproduce a
245932
failure is to add a firewall rule like:
245932
245932
  iptables -A OUTPUT -p udp --dport 67 -j REJECT
245932
245932
which makes the send() fail with EPERM during the renew. In such case,
245932
the client should continue (failing) until it reaches the rebind phase
245932
at T2, when it will be able to renew the lease using the packet
245932
socket.
245932
245932
In general, a failure to send a packet should not cause the failure of
245932
the client.
245932
245932
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/419
245932
https://bugzilla.redhat.com/show_bug.cgi?id=1806516
245932
(cherry picked from commit 5a7b83ea0a2eb3cb0bb39c8219490c704024b5f5)
245932
(cherry picked from commit 932b4538aee7da9a1fe75d115358bb943872e3fd)
245932
---
245932
 shared/n-dhcp4/src/n-dhcp4-c-connection.c | 25 ++++++++++++-----------
245932
 1 file changed, 13 insertions(+), 12 deletions(-)
245932
245932
diff --git a/shared/n-dhcp4/src/n-dhcp4-c-connection.c b/shared/n-dhcp4/src/n-dhcp4-c-connection.c
245932
index d4354467d..a5c8ea66f 100644
245932
--- a/shared/n-dhcp4/src/n-dhcp4-c-connection.c
245932
+++ b/shared/n-dhcp4/src/n-dhcp4-c-connection.c
245932
@@ -1006,6 +1006,7 @@ static int n_dhcp4_c_connection_send_request(NDhcp4CConnection *connection,
245932
                                              uint64_t timestamp) {
245932
         char server_addr[INET_ADDRSTRLEN];
245932
         char client_addr[INET_ADDRSTRLEN];
245932
+        char error_msg[128];
245932
         int r;
245932
         bool broadcast = false;
245932
 
245932
@@ -1045,45 +1046,45 @@ static int n_dhcp4_c_connection_send_request(NDhcp4CConnection *connection,
245932
         case N_DHCP4_C_MESSAGE_REBIND:
245932
                 broadcast = true;
245932
                 r = n_dhcp4_c_connection_packet_broadcast(connection, request);
245932
-                if (r)
245932
-                        return r;
245932
                 break;
245932
         case N_DHCP4_C_MESSAGE_INFORM:
245932
                 broadcast = true;
245932
                 r = n_dhcp4_c_connection_udp_broadcast(connection, request);
245932
-                if (r)
245932
-                        return r;
245932
-
245932
                 break;
245932
         case N_DHCP4_C_MESSAGE_RENEW:
245932
         case N_DHCP4_C_MESSAGE_RELEASE:
245932
                 r = n_dhcp4_c_connection_udp_send(connection, request);
245932
-                if (r)
245932
-                        return r;
245932
-
245932
                 break;
245932
         default:
245932
                 c_assert(0);
245932
         }
245932
 
245932
+        if (r) {
245932
+                snprintf(error_msg, sizeof(error_msg), ": error %d", r);
245932
+        } else {
245932
+                error_msg[0] = '\0';
245932
+        }
245932
+
245932
         if (request->userdata.client_addr == INADDR_ANY) {
245932
                 n_dhcp4_c_log(connection->client_config, LOG_INFO,
245932
-                              "sent %s to %s",
245932
+                              "send %s to %s%s",
245932
                               message_type_to_str(request->userdata.message_type),
245932
                               broadcast ?
245932
                               "255.255.255.255" :
245932
                               inet_ntop(AF_INET, &connection->server_ip,
245932
-                                        server_addr, sizeof(server_addr)));
245932
+                                        server_addr, sizeof(server_addr)),
245932
+                              error_msg);
245932
         } else {
245932
                 n_dhcp4_c_log(connection->client_config, LOG_INFO,
245932
-                              "sent %s of %s to %s",
245932
+                              "send %s of %s to %s%s",
245932
                               message_type_to_str(request->userdata.message_type),
245932
                               inet_ntop(AF_INET, &request->userdata.client_addr,
245932
                                         client_addr, sizeof(client_addr)),
245932
                               broadcast ?
245932
                               "255.255.255.255" :
245932
                               inet_ntop(AF_INET, &connection->server_ip,
245932
-                                        server_addr, sizeof(server_addr)));
245932
+                                        server_addr, sizeof(server_addr)),
245932
+                              error_msg);
245932
         }
245932
 
245932
         ++request->userdata.n_send;
245932
-- 
245932
2.24.1
245932