diff options
-rw-r--r-- | src/provider.c | 17 |
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); |