ConnMan network manager
 help / color / mirror / Atom feed
From: "VAUTRIN Emmanuel (Canal Plus Prestataire)" <Emmanuel.VAUTRIN@cpexterne.org>
To: "connman@lists.linux.dev" <connman@lists.linux.dev>
Subject: [PATCH] network: Keep failure state after disconnection
Date: Mon, 27 Feb 2023 17:00:58 +0000	[thread overview]
Message-ID: <MRZP264MB15448014A6E161ADFD0A280793AF9@MRZP264MB1544.FRAP264.PROD.OUTLOOK.COM> (raw)

[-- Attachment #1: Type: text/plain, Size: 2907 bytes --]

set_disconnected() function shall not prevent the service to process errors
by replacing failure state by idle.

For example, when a connection fails with a wrong passphrase, the user still
needs to be informed, via the agent. However, in this case, the associated
service is automatically disconnected, canceling the pending agent requests.
The invalid key error shall be reported, instead of a cancel error.
---
 src/network.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/network.c b/src/network.c
index 2090e7fe944e..06df023b076e 100644
--- a/src/network.c
+++ b/src/network.c
@@ -940,7 +940,7 @@ static void set_disconnected(struct connman_network *network)
 {
 	struct connman_ipconfig *ipconfig_ipv4, *ipconfig_ipv6;
 	enum connman_ipconfig_method ipv4_method, ipv6_method;
-	enum connman_service_state state;
+	enum connman_service_state state_ipv4, state_ipv6;
 	struct connman_service *service;
 
 	service = connman_service_lookup_from_network(network);
@@ -1006,18 +1006,18 @@ static void set_disconnected(struct connman_network *network)
 	 * or in failure. It does not make sense to go to disconnect
 	 * state if we were not connected.
 	 */
-	state = __connman_service_ipconfig_get_state(service,
+	state_ipv4 = __connman_service_ipconfig_get_state(service,
 						CONNMAN_IPCONFIG_TYPE_IPV4);
-	if (state != CONNMAN_SERVICE_STATE_IDLE &&
-			state != CONNMAN_SERVICE_STATE_FAILURE)
+	if (state_ipv4 != CONNMAN_SERVICE_STATE_IDLE &&
+				state_ipv4 != CONNMAN_SERVICE_STATE_FAILURE)
 		__connman_service_ipconfig_indicate_state(service,
 					CONNMAN_SERVICE_STATE_DISCONNECT,
 					CONNMAN_IPCONFIG_TYPE_IPV4);
 
-	state = __connman_service_ipconfig_get_state(service,
+	state_ipv6 = __connman_service_ipconfig_get_state(service,
 						CONNMAN_IPCONFIG_TYPE_IPV6);
-	if (state != CONNMAN_SERVICE_STATE_IDLE &&
-				state != CONNMAN_SERVICE_STATE_FAILURE)
+	if (state_ipv6 != CONNMAN_SERVICE_STATE_IDLE &&
+				state_ipv6 != CONNMAN_SERVICE_STATE_FAILURE)
 		__connman_service_ipconfig_indicate_state(service,
 					CONNMAN_SERVICE_STATE_DISCONNECT,
 					CONNMAN_IPCONFIG_TYPE_IPV6);
@@ -1041,10 +1041,14 @@ static void set_disconnected(struct connman_network *network)
 		}
 	}
 
-	__connman_service_ipconfig_indicate_state(service,
+	if (state_ipv4 != CONNMAN_SERVICE_STATE_IDLE &&
+				state_ipv4 != CONNMAN_SERVICE_STATE_FAILURE)
+		__connman_service_ipconfig_indicate_state(service,
 						CONNMAN_SERVICE_STATE_IDLE,
 						CONNMAN_IPCONFIG_TYPE_IPV4);
 
+	if (state_ipv6 != CONNMAN_SERVICE_STATE_IDLE &&
+				state_ipv6 != CONNMAN_SERVICE_STATE_FAILURE)
 	__connman_service_ipconfig_indicate_state(service,
 						CONNMAN_SERVICE_STATE_IDLE,
 						CONNMAN_IPCONFIG_TYPE_IPV6);
-- 
2.25.1

Hello,

Please find the right formatted patch in attachment.


Emmanuel

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-network-Keep-failure-state-after-deconnection.patch --]
[-- Type: text/x-patch; name="0001-network-Keep-failure-state-after-deconnection.patch", Size: 2993 bytes --]

From 1af88784f90fe4216b9173664c5c55351f89a639 Mon Sep 17 00:00:00 2001
From: Emmanuel VAUTRIN <Emmanuel.VAUTRIN@cpexterne.org>
Date: Mon, 27 Feb 2023 09:48:35 +0100
Subject: [PATCH] network: Keep failure state after deconnection

set_disconnected() function shall not prevent the service to process errors
by replacing failure state by idle.

For example, when a connection fails with a wrong passphrase, the user still
needs to be informed, via the agent. However, in this case, the associated
service is automatically disconnected, canceling the pending agent requests.
The invalid key error shall be reported, instead of a cancel error.
---
 src/network.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/network.c b/src/network.c
index 2090e7fe944e..06df023b076e 100644
--- a/src/network.c
+++ b/src/network.c
@@ -940,7 +940,7 @@ static void set_disconnected(struct connman_network *network)
 {
 	struct connman_ipconfig *ipconfig_ipv4, *ipconfig_ipv6;
 	enum connman_ipconfig_method ipv4_method, ipv6_method;
-	enum connman_service_state state;
+	enum connman_service_state state_ipv4, state_ipv6;
 	struct connman_service *service;
 
 	service = connman_service_lookup_from_network(network);
@@ -1006,18 +1006,18 @@ static void set_disconnected(struct connman_network *network)
 	 * or in failure. It does not make sense to go to disconnect
 	 * state if we were not connected.
 	 */
-	state = __connman_service_ipconfig_get_state(service,
+	state_ipv4 = __connman_service_ipconfig_get_state(service,
 						CONNMAN_IPCONFIG_TYPE_IPV4);
-	if (state != CONNMAN_SERVICE_STATE_IDLE &&
-			state != CONNMAN_SERVICE_STATE_FAILURE)
+	if (state_ipv4 != CONNMAN_SERVICE_STATE_IDLE &&
+				state_ipv4 != CONNMAN_SERVICE_STATE_FAILURE)
 		__connman_service_ipconfig_indicate_state(service,
 					CONNMAN_SERVICE_STATE_DISCONNECT,
 					CONNMAN_IPCONFIG_TYPE_IPV4);
 
-	state = __connman_service_ipconfig_get_state(service,
+	state_ipv6 = __connman_service_ipconfig_get_state(service,
 						CONNMAN_IPCONFIG_TYPE_IPV6);
-	if (state != CONNMAN_SERVICE_STATE_IDLE &&
-				state != CONNMAN_SERVICE_STATE_FAILURE)
+	if (state_ipv6 != CONNMAN_SERVICE_STATE_IDLE &&
+				state_ipv6 != CONNMAN_SERVICE_STATE_FAILURE)
 		__connman_service_ipconfig_indicate_state(service,
 					CONNMAN_SERVICE_STATE_DISCONNECT,
 					CONNMAN_IPCONFIG_TYPE_IPV6);
@@ -1041,10 +1041,14 @@ static void set_disconnected(struct connman_network *network)
 		}
 	}
 
-	__connman_service_ipconfig_indicate_state(service,
+	if (state_ipv4 != CONNMAN_SERVICE_STATE_IDLE &&
+				state_ipv4 != CONNMAN_SERVICE_STATE_FAILURE)
+		__connman_service_ipconfig_indicate_state(service,
 						CONNMAN_SERVICE_STATE_IDLE,
 						CONNMAN_IPCONFIG_TYPE_IPV4);
 
+	if (state_ipv6 != CONNMAN_SERVICE_STATE_IDLE &&
+				state_ipv6 != CONNMAN_SERVICE_STATE_FAILURE)
 	__connman_service_ipconfig_indicate_state(service,
 						CONNMAN_SERVICE_STATE_IDLE,
 						CONNMAN_IPCONFIG_TYPE_IPV6);
-- 
2.25.1


             reply	other threads:[~2023-02-27 17:01 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-27 17:00 VAUTRIN Emmanuel (Canal Plus Prestataire) [this message]
2023-02-27 17:13 ` [PATCH] network: Keep failure state after disconnection VAUTRIN Emmanuel (Canal Plus Prestataire)
2023-03-22 14:14   ` VAUTRIN Emmanuel (Canal Plus Prestataire)
2023-04-11  7:20   ` Daniel Wagner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MRZP264MB15448014A6E161ADFD0A280793AF9@MRZP264MB1544.FRAP264.PROD.OUTLOOK.COM \
    --to=emmanuel.vautrin@cpexterne.org \
    --cc=connman@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).