X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Fdhcp-server-internal.h;h=7fe7253fdb083caac113bf5d4c474f7c71f49070;hb=5e56b378b40dc4dc5557e653487b608fd91fcc26;hp=58a98772babaf7ff1666f0e065dabf78b6ace912;hpb=20af7091de0cdf92bf299addfc3f96c3ef805bd8;p=elogind.git diff --git a/src/libsystemd-network/dhcp-server-internal.h b/src/libsystemd-network/dhcp-server-internal.h index 58a98772b..7fe7253fd 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; @@ -40,12 +53,13 @@ struct sd_dhcp_server { int index; 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 */ @@ -55,6 +69,8 @@ typedef struct DHCPRequest { DHCPClientId client_id; size_t max_optlen; be32_t server_id; + be32_t requested_ip; + int lifetime; } DHCPRequest; DEFINE_TRIVIAL_CLEANUP_FUNC(sd_dhcp_server*, sd_dhcp_server_unref); @@ -64,3 +80,9 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(sd_dhcp_server*, sd_dhcp_server_unref); int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message, size_t length); +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);