Display IPv4/IPv6 gateway in PropertyChanged signal
authorleena.gunda@wipro.com <leena.gunda@wipro.com>
Wed, 6 Oct 2010 13:31:12 +0000 (19:01 +0530)
committerSamuel Ortiz <sameo@linux.intel.com>
Thu, 7 Oct 2010 18:41:56 +0000 (20:41 +0200)
ConnMan should emit the IP PropertyChanged signal when the IP is set but
also when a route for the device is set.

Fixes BMC#7895

src/ipconfig.c

index 0a7eb8b..2b60e2d 100644 (file)
@@ -707,6 +707,7 @@ void __connman_ipconfig_newroute(int index, int family, unsigned char scope,
 
        if (scope == 0 && g_strcmp0(dst, "0.0.0.0") == 0) {
                GSList *list;
+               GList *config_list;
 
                if (family == AF_INET6) {
                        g_free(ipdevice->ipv6_gateway);
@@ -728,6 +729,20 @@ void __connman_ipconfig_newroute(int index, int family, unsigned char scope,
                        g_free(ipaddress->gateway);
                        ipaddress->gateway = g_strdup(gateway);
                }
+
+               for (config_list = g_list_first(ipconfig_list); config_list;
+                                       config_list = g_list_next(config_list)) {
+                       struct connman_ipconfig *ipconfig = config_list->data;
+
+                       if (index != ipconfig->index)
+                               continue;
+
+                       if (ipconfig->ops == NULL)
+                               continue;
+
+                       if (ipconfig->ops->ip_bound)
+                               ipconfig->ops->ip_bound(ipconfig);
+               }
        }
 
        connman_info("%s {add} route %s gw %s scope %u <%s>",
@@ -748,6 +763,7 @@ void __connman_ipconfig_delroute(int index, int family, unsigned char scope,
 
        if (scope == 0 && g_strcmp0(dst, "0.0.0.0") == 0) {
                GSList *list;
+               GList *config_list;
 
                if (family == AF_INET6) {
                        g_free(ipdevice->ipv6_gateway);
@@ -769,6 +785,20 @@ void __connman_ipconfig_delroute(int index, int family, unsigned char scope,
                        g_free(ipaddress->gateway);
                        ipaddress->gateway = NULL;
                }
+
+               for (config_list = g_list_first(ipconfig_list); config_list;
+                                       config_list = g_list_next(config_list)) {
+                       struct connman_ipconfig *ipconfig = config_list->data;
+
+                       if (index != ipconfig->index)
+                               continue;
+
+                       if (ipconfig->ops == NULL)
+                               continue;
+
+                       if (ipconfig->ops->ip_release)
+                               ipconfig->ops->ip_release(ipconfig);
+               }
        }
 
        connman_info("%s {del} route %s gw %s scope %u <%s>",