From 87322b3aee0dc649ff1ae7a403dcc9d7305baba2 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sun, 25 May 2014 22:07:53 +0200 Subject: sd-dhcp-server: track bound leases Make sure we don't hand out the same IP twice. We still don't handle lease expiry. --- src/libsystemd-network/dhcp-server-internal.h | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'src/libsystemd-network/dhcp-server-internal.h') diff --git a/src/libsystemd-network/dhcp-server-internal.h b/src/libsystemd-network/dhcp-server-internal.h index ce2e260945..7fe7253fdb 100644 --- a/src/libsystemd-network/dhcp-server-internal.h +++ b/src/libsystemd-network/dhcp-server-internal.h @@ -23,12 +23,25 @@ #include "sd-event.h" #include "sd-dhcp-server.h" +#include "hashmap.h" #include "refcnt.h" #include "util.h" #include "log.h" #include "dhcp-internal.h" +typedef struct DHCPClientId { + size_t length; + uint8_t *data; +} DHCPClientId; + +typedef struct DHCPLease { + DHCPClientId client_id; + + be32_t address; + usec_t expiration; +} DHCPLease; + struct sd_dhcp_server { RefCount n_ref; @@ -42,12 +55,11 @@ struct sd_dhcp_server { be32_t address; be32_t pool_start; size_t pool_size; -}; + size_t next_offer; -typedef struct DHCPClientId { - size_t length; - uint8_t *data; -} DHCPClientId; + Hashmap *leases_by_client_id; + DHCPLease **bound_leases; +}; typedef struct DHCPRequest { /* received message */ @@ -71,3 +83,6 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message, int dhcp_server_send_packet(sd_dhcp_server *server, DHCPRequest *req, DHCPPacket *packet, int type, size_t optoffset); + +unsigned long client_id_hash_func(const void *p, const uint8_t hash_key[HASH_KEY_SIZE]); +int client_id_compare_func(const void *_a, const void *_b); -- cgit v1.2.3-54-g00ecf