summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/provider.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/provider.c b/src/provider.c
index 3f4bb1cc..ebc70557 100644
--- a/src/provider.c
+++ b/src/provider.c
@@ -700,8 +700,21 @@ static struct connman_provider *provider_create_from_keyfile(GKeyFile *keyfile,
static int provider_create_service(struct connman_provider *provider)
{
- if (provider->vpn_service != NULL)
- return -EALREADY;
+ if (provider->vpn_service != NULL) {
+ connman_bool_t connected;
+
+ connected = __connman_service_is_connected_state(
+ provider->vpn_service, CONNMAN_IPCONFIG_TYPE_IPV4);
+ if (connected == TRUE)
+ return -EALREADY;
+
+ connected = __connman_service_is_connected_state(
+ provider->vpn_service, CONNMAN_IPCONFIG_TYPE_IPV6);
+ if (connected == TRUE)
+ return -EALREADY;
+
+ return 0;
+ }
provider->vpn_service =
__connman_service_create_from_provider(provider);