Once a lease is offered, tell about its IP/MAC through a callback. This
will be useful in peer.c to know about distant peer's IP when our local
one ends up as the dhcp server.
---
 gdhcp/gdhcp.h  |  5 +++++
 gdhcp/server.c | 13 +++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/gdhcp/gdhcp.h b/gdhcp/gdhcp.h
index ac24454..7525eb2 100644
--- a/gdhcp/gdhcp.h
+++ b/gdhcp/gdhcp.h
@@ -201,6 +201,9 @@ typedef enum {
 
 typedef void (*GDHCPSaveLeaseFunc) (unsigned char *mac,
                        unsigned int nip, unsigned int expire);
+
+typedef void (*GDHCPLeaseAddedCb) (unsigned char *mac, uint32_t ip);
+
 struct _GDHCPServer;
 
 typedef struct _GDHCPServer GDHCPServer;
@@ -223,6 +226,8 @@ void g_dhcp_server_set_lease_time(GDHCPServer *dhcp_server,
                                                unsigned int lease_time);
 void g_dhcp_server_set_save_lease(GDHCPServer *dhcp_server,
                                GDHCPSaveLeaseFunc func, gpointer user_data);
+void g_dhcp_server_set_lease_added_cb(GDHCPServer *dhcp_server,
+                                                       GDHCPLeaseAddedCb cb);
 
 int dhcp_get_random(uint64_t *val);
 void dhcp_cleanup_random(void);
diff --git a/gdhcp/server.c b/gdhcp/server.c
index aa40488..8561dd3 100644
--- a/gdhcp/server.c
+++ b/gdhcp/server.c
@@ -65,6 +65,7 @@ struct _GDHCPServer {
        GHashTable *nip_lease_hash;
        GHashTable *option_hash; /* Options send to client */
        GDHCPSaveLeaseFunc save_lease_func;
+       GDHCPLeaseAddedCb lease_added_cb;
        GDHCPDebugFunc debug_func;
        gpointer debug_data;
 };
@@ -213,6 +214,9 @@ 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)
+               dhcp_server->lease_added_cb(lease->lease_mac, yiaddr);
+
        return lease;
 }
 
@@ -814,6 +818,15 @@ void g_dhcp_server_set_save_lease(GDHCPServer *dhcp_server,
        dhcp_server->save_lease_func = func;
 }
 
+void g_dhcp_server_set_lease_added_cb(GDHCPServer *dhcp_server,
+                                                       GDHCPLeaseAddedCb cb)
+{
+       if (!dhcp_server)
+               return;
+
+       dhcp_server->lease_added_cb = cb;
+}
+
 GDHCPServer *g_dhcp_server_ref(GDHCPServer *dhcp_server)
 {
        if (!dhcp_server)
-- 
2.0.4

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to