[PATCH v2 05/42] provider: Handle VPN configuration and association states
Jussi Laakkonen <[email protected]> Wed, 13 Aug 2025 18:01:37 +0300
| Newsgroups | dev.linux.lists.connman |
|---|---|
| Message-ID | <[email protected]> |
Set the association state when VPN is waiting for user input as an
initial state after connecting the provider. Set the configuration
state (as it is declaced to be the string to connect state in VPN)
accordingly as well. Start VPN connect timeout (starts in configuration
state) with restart option to ensure that the timeout begins from the
last known configuration (connect) state.
---
include/provider.h | 9 +++++----
src/provider.c | 9 ++++++++-
2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/include/provider.h b/include/provider.h
index 3f2e36ad..aac47527 100644
--- a/include/provider.h
+++ b/include/provider.h
@@ -44,10 +44,11 @@ enum connman_provider_type {
enum connman_provider_state {
CONNMAN_PROVIDER_STATE_UNKNOWN = 0,
CONNMAN_PROVIDER_STATE_IDLE = 1,
- CONNMAN_PROVIDER_STATE_CONNECT = 2,
- CONNMAN_PROVIDER_STATE_READY = 3,
- CONNMAN_PROVIDER_STATE_DISCONNECT = 4,
- CONNMAN_PROVIDER_STATE_FAILURE = 5,
+ CONNMAN_PROVIDER_STATE_ASSOCIATION = 2,
+ CONNMAN_PROVIDER_STATE_CONNECT = 3,
+ CONNMAN_PROVIDER_STATE_READY = 4,
+ CONNMAN_PROVIDER_STATE_DISCONNECT = 5,
+ CONNMAN_PROVIDER_STATE_FAILURE = 6,
};
enum connman_provider_error {
diff --git a/src/provider.c b/src/provider.c
index 1f0ce10d..d7218420 100644
--- a/src/provider.c
+++ b/src/provider.c
@@ -126,6 +126,9 @@ static int provider_indicate_state(struct connman_provider *provider,
{
DBG("state %d", state);
+ /* Connect timeout starts only in configuration state */
+ __connman_service_start_connect_timeout(provider->vpn_service, true);
+
__connman_service_ipconfig_indicate_state(provider->vpn_service, state,
CONNMAN_IPCONFIG_TYPE_IPV4);
@@ -291,9 +294,13 @@ int connman_provider_set_state(struct connman_provider *provider,
return -EINVAL;
case CONNMAN_PROVIDER_STATE_IDLE:
return set_connected(provider, false);
- case CONNMAN_PROVIDER_STATE_CONNECT:
+ case CONNMAN_PROVIDER_STATE_ASSOCIATION:
+ /* Connect timeout is not effective for VPNs in this state */
return provider_indicate_state(provider,
CONNMAN_SERVICE_STATE_ASSOCIATION);
+ case CONNMAN_PROVIDER_STATE_CONNECT:
+ return provider_indicate_state(provider,
+ CONNMAN_SERVICE_STATE_CONFIGURATION);
case CONNMAN_PROVIDER_STATE_READY:
return set_connected(provider, true);
case CONNMAN_PROVIDER_STATE_DISCONNECT:
--
2.39.5