connman.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH] network: Keep failure state after disconnection
@ 2023-02-27 17:00 VAUTRIN Emmanuel (Canal Plus Prestataire)
  2023-02-27 17:13 ` VAUTRIN Emmanuel (Canal Plus Prestataire)
  0 siblings, 1 reply; 4+ messages in thread
From: VAUTRIN Emmanuel (Canal Plus Prestataire) @ 2023-02-27 17:00 UTC (permalink / raw)
  To: connman

[-- 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


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* RE: [PATCH] network: Keep failure state after disconnection
  2023-02-27 17:00 [PATCH] network: Keep failure state after disconnection VAUTRIN Emmanuel (Canal Plus Prestataire)
@ 2023-02-27 17:13 ` VAUTRIN Emmanuel (Canal Plus Prestataire)
  2023-03-22 14:14   ` VAUTRIN Emmanuel (Canal Plus Prestataire)
  2023-04-11  7:20   ` Daniel Wagner
  0 siblings, 2 replies; 4+ messages in thread
From: VAUTRIN Emmanuel (Canal Plus Prestataire) @ 2023-02-27 17:13 UTC (permalink / raw)
  To: connman


[-- Attachment #1.1: Type: text/plain, Size: 4010 bytes --]

With the right attachment (wording deconnection -> disconnection).

B.R.

Emmanuel
________________________________
De : VAUTRIN Emmanuel (Canal Plus Prestataire) <Emmanuel.VAUTRIN@cpexterne.org>
Envoyé : lundi 27 février 2023 18:00
À : connman@lists.linux.dev <connman@lists.linux.dev>
Objet : [PATCH] network: Keep failure state after disconnection

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

[-- Attachment #1.2: Type: text/html, Size: 10035 bytes --]

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-network-Keep-failure-state-after-disconnection.patch --]
[-- Type: text/x-patch; name="0001-network-Keep-failure-state-after-disconnection.patch", Size: 2994 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 disconnection

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


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* RE: [PATCH] network: Keep failure state after disconnection
  2023-02-27 17:13 ` VAUTRIN Emmanuel (Canal Plus Prestataire)
@ 2023-03-22 14:14   ` VAUTRIN Emmanuel (Canal Plus Prestataire)
  2023-04-11  7:20   ` Daniel Wagner
  1 sibling, 0 replies; 4+ messages in thread
From: VAUTRIN Emmanuel (Canal Plus Prestataire) @ 2023-03-22 14:14 UTC (permalink / raw)
  To: connman

Hello everyone.

Has anyone been able to check this patch?


Best Regards,

Emmanuel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] network: Keep failure state after disconnection
  2023-02-27 17:13 ` VAUTRIN Emmanuel (Canal Plus Prestataire)
  2023-03-22 14:14   ` VAUTRIN Emmanuel (Canal Plus Prestataire)
@ 2023-04-11  7:20   ` Daniel Wagner
  1 sibling, 0 replies; 4+ messages in thread
From: Daniel Wagner @ 2023-04-11  7:20 UTC (permalink / raw)
  To: VAUTRIN Emmanuel (Canal Plus Prestataire); +Cc: connman

Hi Emmanuel,

I've applied the patch. Let's see what it breaks this time.

Thanks,
Daniel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-04-11  7:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-27 17:00 [PATCH] network: Keep failure state after disconnection VAUTRIN Emmanuel (Canal Plus Prestataire)
2023-02-27 17:13 ` VAUTRIN Emmanuel (Canal Plus Prestataire)
2023-03-22 14:14   ` VAUTRIN Emmanuel (Canal Plus Prestataire)
2023-04-11  7:20   ` Daniel Wagner

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 NNTP newsgroup(s).