---
 src/ipconfig.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/src/ipconfig.c b/src/ipconfig.c
index aa8274c..f025956 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -55,6 +55,8 @@ struct connman_ipconfig {
 
        int ipv6_privacy_config;
        char *last_dhcp_address;
+
+       struct connman_ippool *pool;
 };
 
 struct connman_ipdevice {
@@ -1061,11 +1063,22 @@ const char *__connman_ipconfig_get_local(struct 
connman_ipconfig *ipconfig)
 
 void __connman_ipconfig_set_local(struct connman_ipconfig *ipconfig, const 
char *address)
 {
+       int err = 0;
+
        if (ipconfig->address == NULL)
                return;
 
        g_free(ipconfig->address->local);
        ipconfig->address->local = g_strdup(address);
+
+       if (address == NULL && ipconfig->pool != NULL) {
+               __connman_ippool_remove(ipconfig->pool);
+               return;
+       }
+
+       ipconfig->pool = __connman_ippool_notify(NULL, address, &err);
+       if (ipconfig->pool == NULL && err < 0)
+               connman_error("Notification failed with error %d", err);
 }
 
 const char *__connman_ipconfig_get_peer(struct connman_ipconfig *ipconfig)
@@ -1285,6 +1298,9 @@ void connman_ipconfig_unref(struct connman_ipconfig 
*ipconfig)
                        ipconfig->origin = NULL;
                }
 
+               if (ipconfig->pool != NULL)
+                       __connman_ippool_remove(ipconfig->pool);
+
                connman_ipaddress_free(ipconfig->system);
                connman_ipaddress_free(ipconfig->address);
                g_free(ipconfig->last_dhcp_address);
-- 
1.7.1

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to