summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tethering.c20
-rw-r--r--unit/test-ippool.c2
2 files changed, 19 insertions, 3 deletions
diff --git a/src/tethering.c b/src/tethering.c
index 5c359dd4..b135b45a 100644
--- a/src/tethering.c
+++ b/src/tethering.c
@@ -327,6 +327,12 @@ static void disable_nat(const char *interface)
__connman_iptables_commit("nat");
}
+static void tethering_restart(struct connman_ippool *pool, void *user_data)
+{
+ __connman_tethering_set_disabled();
+ __connman_tethering_set_enabled();
+}
+
void __connman_tethering_set_enabled(void)
{
int index;
@@ -348,7 +354,8 @@ void __connman_tethering_set_enabled(void)
return;
index = connman_inet_ifindex(BRIDGE_NAME);
- dhcp_ippool = __connman_ippool_create(index, 1, 253, NULL, NULL);
+ dhcp_ippool = __connman_ippool_create(index, 1, 253,
+ tethering_restart, NULL);
if (dhcp_ippool == NULL) {
connman_error("Fail to create IP pool");
return;
@@ -534,6 +541,15 @@ static void owner_disconnect(DBusConnection *connection, void *user_data)
g_hash_table_remove(pn_hash, pn->path);
}
+static void ippool_disconnect(struct connman_ippool *pool, void *user_data)
+{
+ struct connman_private_network *pn = user_data;
+
+ DBG("block used externally");
+
+ g_hash_table_remove(pn_hash, pn->path);
+}
+
int __connman_private_network_request(DBusMessage *msg, const char *owner)
{
struct connman_private_network *pn;
@@ -585,7 +601,7 @@ int __connman_private_network_request(DBusMessage *msg, const char *owner)
pn->fd = fd;
pn->interface = iface;
pn->index = index;
- pn->pool = __connman_ippool_create(pn->fd, 1, 1, NULL, NULL);
+ pn->pool = __connman_ippool_create(pn->fd, 1, 1, ippool_disconnect, pn);
if (pn->pool == NULL) {
errno = -ENOMEM;
goto error;
diff --git a/unit/test-ippool.c b/unit/test-ippool.c
index de253487..0794bde9 100644
--- a/unit/test-ippool.c
+++ b/unit/test-ippool.c
@@ -183,7 +183,7 @@ static void test_ippool_collision0(void)
g_assert(flag == 0);
- __connman_ippool_newaddr(42, end_ip);
+ __connman_ippool_newaddr(42, start_ip);
g_assert(flag == 1);