]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp-server: notify callback on lease changed
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Fri, 22 May 2020 09:37:14 +0000 (11:37 +0200)
committerMarc-André Lureau <marcandre.lureau@redhat.com>
Thu, 4 Jun 2020 09:16:15 +0000 (11:16 +0200)
src/libsystemd-network/sd-dhcp-server.c
src/systemd/sd-dhcp-server.h

index b787aa21bf5eea6d227c6ae64fb84d4c85243886..ec20b936b80ef48fded618a6e4af8dd8c39e78db 100644 (file)
@@ -98,6 +98,9 @@ int sd_dhcp_server_configure_pool(
 
                 /* Drop any leases associated with the old address range */
                 hashmap_clear(server->leases_by_client_id);
+
+                if (server->callback)
+                        server->callback(server, SD_DHCP_SERVER_EVENT_LEASE_CHANGED, server->callback_userdata);
         }
 
         return 0;
@@ -899,6 +902,9 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
                                 hashmap_put(server->leases_by_client_id,
                                             &lease->client_id, lease);
 
+                                if (server->callback)
+                                        server->callback(server, SD_DHCP_SERVER_EVENT_LEASE_CHANGED, server->callback_userdata);
+
                                 return DHCP_ACK;
                         }
 
@@ -935,6 +941,9 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
                         server->bound_leases[pool_offset] = NULL;
                         hashmap_remove(server->leases_by_client_id, existing_lease);
                         dhcp_lease_free(existing_lease);
+
+                        if (server->callback)
+                                server->callback(server, SD_DHCP_SERVER_EVENT_LEASE_CHANGED, server->callback_userdata);
                 }
 
                 return 0;
index fe9ad91fe03ee578862a98f3c2460f9de72366c9..2e15a6b1812108568859a116c8075c783a26d4f5 100644 (file)
@@ -31,6 +31,10 @@ _SD_BEGIN_DECLARATIONS;
 
 typedef struct sd_dhcp_server sd_dhcp_server;
 
+enum {
+        SD_DHCP_SERVER_EVENT_LEASE_CHANGED                      = 1 << 0,
+};
+
 int sd_dhcp_server_new(sd_dhcp_server **ret, int ifindex);
 
 sd_dhcp_server *sd_dhcp_server_ref(sd_dhcp_server *server);