From 36d35f2259cb75f04d1a3abd10a592fd8303af09 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc-Andr=C3=A9=20Lureau?= Date: Fri, 22 May 2020 11:37:14 +0200 Subject: [PATCH] sd-dhcp-server: notify callback on lease changed --- src/libsystemd-network/sd-dhcp-server.c | 9 +++++++++ src/systemd/sd-dhcp-server.h | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c index b787aa21bf5..ec20b936b80 100644 --- a/src/libsystemd-network/sd-dhcp-server.c +++ b/src/libsystemd-network/sd-dhcp-server.c @@ -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; diff --git a/src/systemd/sd-dhcp-server.h b/src/systemd/sd-dhcp-server.h index fe9ad91fe03..2e15a6b1812 100644 --- a/src/systemd/sd-dhcp-server.h +++ b/src/systemd/sd-dhcp-server.h @@ -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); -- 2.47.3