[PATCH 1/2] connection: Fix indentation.

2011-08-18 Thread Jukka Rissanen
---
 src/connection.c |8 
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index 9ceefd3..3cd89eb 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -269,8 +269,8 @@ static void set_default_gateway(struct gateway_data *data,
connman_inet_set_gateway_address(data-index,
data-ipv4_gateway-vpn_ip);
connman_inet_add_host_route(data-ipv4_gateway-vpn_phy_index,
-   data-ipv4_gateway-vpn_ip,
-   data-ipv4_gateway-vpn_phy_ip);
+   data-ipv4_gateway-vpn_ip,
+   data-ipv4_gateway-vpn_phy_ip);
data-ipv4_gateway-active = TRUE;
 
__connman_service_indicate_default(data-service);
@@ -283,8 +283,8 @@ static void set_default_gateway(struct gateway_data *data,
connman_inet_set_ipv6_gateway_address(data-index,
data-ipv6_gateway-vpn_ip);
connman_inet_add_host_route(data-ipv6_gateway-vpn_phy_index,
-   data-ipv6_gateway-vpn_ip,
-   data-ipv6_gateway-vpn_phy_ip);
+   data-ipv6_gateway-vpn_ip,
+   data-ipv6_gateway-vpn_phy_ip);
data-ipv6_gateway-active = TRUE;
 
__connman_service_indicate_default(data-service);
-- 
1.7.1

___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


[PATCH 2/2] connection: Fix IPv6 host route setting when using VPN.

2011-08-18 Thread Jukka Rissanen
---
 src/connection.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index 3cd89eb..5ea3c9b 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -282,7 +282,8 @@ static void set_default_gateway(struct gateway_data *data,
data-ipv6_gateway-vpn == TRUE) {
connman_inet_set_ipv6_gateway_address(data-index,
data-ipv6_gateway-vpn_ip);
-   connman_inet_add_host_route(data-ipv6_gateway-vpn_phy_index,
+   connman_inet_add_ipv6_host_route(
+   data-ipv6_gateway-vpn_phy_index,
data-ipv6_gateway-vpn_ip,
data-ipv6_gateway-vpn_phy_ip);
data-ipv6_gateway-active = TRUE;
-- 
1.7.1

___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


Re: [PATCH 2/2] connection: Fix IPv6 host route setting when using VPN.

2011-08-18 Thread Patrik Flykt
On Thu, 2011-08-18 at 10:07 +0300, Jukka Rissanen wrote:
 - connman_inet_add_host_route(data-ipv6_gateway-vpn_phy_index,
 + connman_inet_add_ipv6_host_route(
 + data-ipv6_gateway-vpn_phy_index,

Good catch!

Patrik


___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


Re: vpnc troubles

2011-08-18 Thread Patrik Flykt

Hi,

Thanks for taking time debugging vpnc and sending the crash logs. Maybe
you could file a bug for those crashes, even if they are not
reproducible so the information won't get lost?

Unfortunately I'm slightly busy trying to figure out a bunch of bugs at
the moment...

On Tue, 2011-08-16 at 12:25 +0200, Johannes Schauer wrote:
 
 I also (kinda) figured out why vpnc quits after 60 seconds by enabling
 VPNC.Debug and commenting out G_SPAWN_STDERR_TO_DEV_NULL as described
 above. vpnc quits after the message:
 
 /usr/sbin/vpnc: no response from target
 
 I'd like to be more clear in my reports but as I said: it's all not
 reproducible even after I do a reboot stuff happens randomly.

This sounds to me that routes are not correct. I'd check routes and
ifconfig before, during and after attempting to connect with vpnc,
especially when it fails.

Cheers,

Patrik


___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


[PATCH service move 1/6] service: Ignore ipconfig that is not active when moving service.

2011-08-18 Thread Jukka Rissanen
---
 src/service.c |   49 +
 1 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/src/service.c b/src/service.c
index 7cd21b5..4cb90fb 100644
--- a/src/service.c
+++ b/src/service.c
@@ -2920,6 +2920,8 @@ static DBusMessage *move_service(DBusConnection *conn,
struct connman_service *target;
const char *path;
GSequenceIter *src, *dst;
+   enum connman_ipconfig_method target4, target6;
+   enum connman_ipconfig_method service4, service6;
 
DBG(service %p, service);
 
@@ -2933,11 +2935,50 @@ static DBusMessage *move_service(DBusConnection *conn,
if (target == NULL || target-favorite == FALSE || target == service)
return __connman_error_invalid_service(msg);
 
-   DBG(target %s, target-identifier);
+   target4 = __connman_ipconfig_get_method(target-ipconfig_ipv4);
+   target6 = __connman_ipconfig_get_method(target-ipconfig_ipv6);
+   service4 = __connman_ipconfig_get_method(service-ipconfig_ipv4);
+   service6 = __connman_ipconfig_get_method(service-ipconfig_ipv6);
 
-   if (target-state_ipv4 != service-state_ipv4 
-   target-state_ipv6 != service-state_ipv6)
-   return __connman_error_invalid_service(msg);
+   DBG(target %s method %d/%d state %d/%d, target-identifier,
+   target4, target6,
+   target-state_ipv4, target-state_ipv6);
+
+   DBG(service %s method %d/%d state %d/%d, service-identifier,
+   service4, service6,
+   service-state_ipv4, service-state_ipv6);
+
+   /*
+* If method is OFF, then we do not need to check the corresponding
+* ipconfig state.
+*/
+   if (target4 == CONNMAN_IPCONFIG_METHOD_OFF) {
+   if (service6 != CONNMAN_IPCONFIG_METHOD_OFF) {
+   if (target-state_ipv6 != service-state_ipv6)
+   return __connman_error_invalid_service(msg);
+   }
+   }
+
+   if (target6 == CONNMAN_IPCONFIG_METHOD_OFF) {
+   if (service4 != CONNMAN_IPCONFIG_METHOD_OFF) {
+   if (target-state_ipv4 != service-state_ipv4)
+   return __connman_error_invalid_service(msg);
+   }
+   }
+
+   if (service4 == CONNMAN_IPCONFIG_METHOD_OFF) {
+   if (target6 != CONNMAN_IPCONFIG_METHOD_OFF) {
+   if (target-state_ipv6 != service-state_ipv6)
+   return __connman_error_invalid_service(msg);
+   }
+   }
+
+   if (service6 == CONNMAN_IPCONFIG_METHOD_OFF) {
+   if (target4 != CONNMAN_IPCONFIG_METHOD_OFF) {
+   if (target-state_ipv4 != service-state_ipv4)
+   return __connman_error_invalid_service(msg);
+   }
+   }
 
g_get_current_time(service-modified);
__connman_storage_save_service(service);
-- 
1.7.1

___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


[PATCH service move 2/6] service: Allow ready service to be moved before online one.

2011-08-18 Thread Jukka Rissanen
---
 src/service.c |   28 
 1 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/service.c b/src/service.c
index 4cb90fb..5f7242d 100644
--- a/src/service.c
+++ b/src/service.c
@@ -2912,6 +2912,22 @@ static DBusMessage *remove_service(DBusConnection *conn,
return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
 }
 
+static gboolean check_suitable_state(enum connman_service_state a,
+   enum connman_service_state b)
+{
+   /*
+* Special check so that ready service can be moved before
+* online one.
+*/
+   if ((a == CONNMAN_SERVICE_STATE_ONLINE 
+   b == CONNMAN_SERVICE_STATE_READY) ||
+   (b == CONNMAN_SERVICE_STATE_ONLINE 
+   a == CONNMAN_SERVICE_STATE_READY))
+   return TRUE;
+
+   return a == b;
+}
+
 static DBusMessage *move_service(DBusConnection *conn,
DBusMessage *msg, void *user_data,
gboolean before)
@@ -2954,28 +2970,32 @@ static DBusMessage *move_service(DBusConnection *conn,
 */
if (target4 == CONNMAN_IPCONFIG_METHOD_OFF) {
if (service6 != CONNMAN_IPCONFIG_METHOD_OFF) {
-   if (target-state_ipv6 != service-state_ipv6)
+   if (check_suitable_state(target-state_ipv6,
+   service-state_ipv6) == FALSE)
return __connman_error_invalid_service(msg);
}
}
 
if (target6 == CONNMAN_IPCONFIG_METHOD_OFF) {
if (service4 != CONNMAN_IPCONFIG_METHOD_OFF) {
-   if (target-state_ipv4 != service-state_ipv4)
+   if (check_suitable_state(target-state_ipv4,
+   service-state_ipv4) == FALSE)
return __connman_error_invalid_service(msg);
}
}
 
if (service4 == CONNMAN_IPCONFIG_METHOD_OFF) {
if (target6 != CONNMAN_IPCONFIG_METHOD_OFF) {
-   if (target-state_ipv6 != service-state_ipv6)
+   if (check_suitable_state(target-state_ipv6,
+   service-state_ipv6) == FALSE)
return __connman_error_invalid_service(msg);
}
}
 
if (service6 == CONNMAN_IPCONFIG_METHOD_OFF) {
if (target4 != CONNMAN_IPCONFIG_METHOD_OFF) {
-   if (target-state_ipv4 != service-state_ipv4)
+   if (check_suitable_state(target-state_ipv4,
+   service-state_ipv4) == FALSE)
return __connman_error_invalid_service(msg);
}
}
-- 
1.7.1

___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


[PATCH service move 3/6] service: Allow state downgrade from online to ready.

2011-08-18 Thread Jukka Rissanen
---
 src/connman.h |1 +
 src/service.c |   19 +++
 2 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/src/connman.h b/src/connman.h
index 6e68c99..3d9f459 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -559,6 +559,7 @@ void __connman_service_notify(struct connman_service 
*service,
 
 int __connman_service_counter_register(const char *counter);
 void __connman_service_counter_unregister(const char *counter);
+void __connman_service_downgrade_state(struct connman_service *service);
 
 struct connman_session;
 struct service_entry;
diff --git a/src/service.c b/src/service.c
index 5f7242d..e92412e 100644
--- a/src/service.c
+++ b/src/service.c
@@ -5145,6 +5145,25 @@ __connman_service_create_from_provider(struct 
connman_provider *provider)
return service;
 }
 
+void __connman_service_downgrade_state(struct connman_service *service)
+{
+   if (service == NULL)
+   return;
+
+   DBG(service %p state4 %d state6 %d, service, service-state_ipv4,
+   service-state_ipv6);
+
+   if (service-state_ipv4 == CONNMAN_SERVICE_STATE_ONLINE)
+   __connman_service_ipconfig_indicate_state(service,
+   CONNMAN_SERVICE_STATE_READY,
+   CONNMAN_IPCONFIG_TYPE_IPV4);
+
+   if (service-state_ipv6 == CONNMAN_SERVICE_STATE_ONLINE)
+   __connman_service_ipconfig_indicate_state(service,
+   CONNMAN_SERVICE_STATE_READY,
+   CONNMAN_IPCONFIG_TYPE_IPV6);
+}
+
 static int service_load(struct connman_service *service)
 {
const char *ident = service-profile;
-- 
1.7.1

___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


[PATCH service move 4/6] service: Prefer online state over ready when comparing services.

2011-08-18 Thread Jukka Rissanen
---
 src/service.c |   16 ++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/service.c b/src/service.c
index e92412e..1382705 100644
--- a/src/service.c
+++ b/src/service.c
@@ -3297,9 +3297,21 @@ static gint service_compare(gconstpointer a, 
gconstpointer b,
state_b = service_b-state;
 
if (state_a != state_b) {
-   if (is_connected(service_a) == TRUE)
+   gboolean a_connected = is_connected(service_a),
+   b_connected = is_connected(service_b);
+
+   if (a_connected == TRUE  b_connected == TRUE) {
+   /* We prefer online over ready state */
+   if (state_a == CONNMAN_SERVICE_STATE_ONLINE)
+   return -1;
+
+   if (state_b == CONNMAN_SERVICE_STATE_ONLINE)
+   return 1;
+   }
+
+   if (a_connected == TRUE)
return -1;
-   if (is_connected(service_b) == TRUE)
+   if (b_connected == TRUE)
return 1;
 
if (is_connecting(service_a) == TRUE)
-- 
1.7.1

___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


[PATCH service move 6/6] connection: Default gateway is changed when reorganizing services.

2011-08-18 Thread Jukka Rissanen
Fixes BMC#22540
---
 src/connection.c |   93 -
 1 files changed, 91 insertions(+), 2 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index 84e3ab4..ef39ff2 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -326,6 +326,70 @@ done:
__connman_service_indicate_default(data-service);
 }
 
+static void unset_default_gateway(struct gateway_data *data,
+   enum connman_ipconfig_type type)
+{
+   int index;
+   int status4 = 0, status6 = 0;
+   int do_ipv4 = FALSE, do_ipv6 = FALSE;
+
+   if (type == CONNMAN_IPCONFIG_TYPE_IPV4)
+   do_ipv4 = TRUE;
+   else if (type == CONNMAN_IPCONFIG_TYPE_IPV6)
+   do_ipv6 = TRUE;
+   else
+   do_ipv4 = do_ipv6 = TRUE;
+
+   DBG(type %d gateway ipv4 %p ipv6 %p, type, data-ipv4_gateway,
+   data-ipv6_gateway);
+
+   if (do_ipv4 == TRUE  data-ipv4_gateway != NULL 
+   data-ipv4_gateway-vpn == TRUE) {
+   connman_inet_del_host_route(data-index,
+   data-ipv4_gateway-vpn_ip);
+   connman_inet_clear_gateway_address(data-index,
+   data-ipv4_gateway-vpn_ip);
+   data-ipv4_gateway-active = FALSE;
+
+   return;
+   }
+
+   if (do_ipv6 == TRUE  data-ipv6_gateway != NULL 
+   data-ipv6_gateway-vpn == TRUE) {
+   connman_inet_del_ipv6_host_route(data-index,
+   data-ipv6_gateway-vpn_ip);
+   connman_inet_clear_ipv6_gateway_address(data-index,
+   data-ipv6_gateway-vpn_ip);
+   data-ipv6_gateway-active = FALSE;
+
+   return;
+   }
+
+   index = __connman_service_get_index(data-service);
+
+   if (do_ipv4 == TRUE  data-ipv4_gateway != NULL 
+   g_strcmp0(data-ipv4_gateway-gateway,
+   0.0.0.0) == 0) {
+   connman_inet_clear_gateway_interface(index);
+   return;
+   }
+
+   if (do_ipv6 == TRUE  data-ipv6_gateway != NULL 
+   g_strcmp0(data-ipv6_gateway-gateway,
+   ::) == 0) {
+   connman_inet_clear_ipv6_gateway_interface(index);
+   return;
+   }
+
+   if (do_ipv6 == TRUE  data-ipv6_gateway != NULL)
+   status6 = connman_inet_clear_ipv6_gateway_address(index,
+   data-ipv6_gateway-gateway);
+
+   if (do_ipv4 == TRUE  data-ipv4_gateway != NULL)
+   status4 = connman_inet_clear_gateway_address(index,
+   data-ipv4_gateway-gateway);
+}
+
 static struct gateway_data *find_default_gateway(void)
 {
struct gateway_data *found = NULL;
@@ -684,14 +748,39 @@ gboolean __connman_connection_update_gateway(void)
if (gateway_hash == NULL)
return updated;
 
+   active_gateway = find_active_gateway();
+
update_order();
 
-   active_gateway = find_active_gateway();
default_gateway = find_default_gateway();
 
-   if (active_gateway  active_gateway != default_gateway)
+   if (active_gateway  active_gateway != default_gateway) {
updated = TRUE;
 
+   if (active_gateway) {
+   if (active_gateway-ipv4_gateway)
+   unset_default_gateway(active_gateway,
+   CONNMAN_IPCONFIG_TYPE_IPV4);
+
+   if (active_gateway-ipv6_gateway)
+   unset_default_gateway(active_gateway,
+   CONNMAN_IPCONFIG_TYPE_IPV6);
+
+   __connman_service_downgrade_state(
+   active_gateway-service);
+   }
+
+   if (default_gateway) {
+   if (default_gateway-ipv4_gateway)
+   set_default_gateway(default_gateway,
+   CONNMAN_IPCONFIG_TYPE_IPV4);
+
+   if (default_gateway-ipv6_gateway)
+   set_default_gateway(default_gateway,
+   CONNMAN_IPCONFIG_TYPE_IPV6);
+   }
+   }
+
return updated;
 }
 
-- 
1.7.1

___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman