The lease added callback only used to determine and announce the peer
address. Without this, the peer address is announced via D-Bus before the
peer actually ueses the address.
If the first OFFER is lost, then the difference can actually be several
seconds.
---
gdhcp/server.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/gdhcp/server.c b/gdhcp/server.c
index 8574c24c4b72..2455c5939e1b 100644
--- a/gdhcp/server.c
+++ b/gdhcp/server.c
@@ -189,7 +189,8 @@ static gint compare_expire(gconstpointer a, gconstpointer b)
}
static struct dhcp_lease *add_lease(GDHCPServer *dhcp_server, uint32_t expire,
- const uint8_t *chaddr, uint32_t yiaddr)
+ const uint8_t *chaddr, uint32_t yiaddr,
+ bool final)
{
struct dhcp_lease *lease = NULL;
int ret;
@@ -214,7 +215,7 @@ static struct dhcp_lease *add_lease(GDHCPServer
*dhcp_server, uint32_t expire,
g_hash_table_insert(dhcp_server->nip_lease_hash,
GINT_TO_POINTER((int) lease->lease_nip), lease);
- if (dhcp_server->lease_added_cb)
+ if (final && dhcp_server->lease_added_cb)
dhcp_server->lease_added_cb(lease->lease_mac, yiaddr);
return lease;
@@ -562,7 +563,7 @@ static void send_offer(GDHCPServer *dhcp_server,
}
lease = add_lease(dhcp_server, OFFER_TIME,
- packet.chaddr, packet.yiaddr);
+ packet.chaddr, packet.yiaddr, false);
if (!lease) {
debug(dhcp_server,
"Err: No free IP addresses. OFFER abandoned");
@@ -615,7 +616,7 @@ static void send_ACK(GDHCPServer *dhcp_server,
send_packet_to_client(dhcp_server, &packet);
- add_lease(dhcp_server, 0, packet.chaddr, packet.yiaddr);
+ add_lease(dhcp_server, 0, packet.chaddr, packet.yiaddr, true);
}
static void send_NAK(GDHCPServer *dhcp_server,
--
2.1.4
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman