]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/libsystemd-network/dhcp-server-internal.h
pkgconfig: define variables relative to ${prefix}/${rootprefix}/${sysconfdir}
[thirdparty/systemd.git] / src / libsystemd-network / dhcp-server-internal.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 #pragma once
3
4 /***
5 Copyright © 2013 Intel Corporation. All rights reserved.
6 ***/
7
8 #include "sd-dhcp-server.h"
9 #include "sd-event.h"
10
11 #include "dhcp-internal.h"
12 #include "hashmap.h"
13 #include "log.h"
14 #include "util.h"
15
16 typedef struct DHCPClientId {
17 size_t length;
18 void *data;
19 } DHCPClientId;
20
21 typedef struct DHCPLease {
22 DHCPClientId client_id;
23
24 be32_t address;
25 be32_t gateway;
26 uint8_t chaddr[16];
27 usec_t expiration;
28 } DHCPLease;
29
30 struct sd_dhcp_server {
31 unsigned n_ref;
32
33 sd_event *event;
34 int event_priority;
35 sd_event_source *receive_message;
36 int fd;
37 int fd_raw;
38
39 int ifindex;
40 be32_t address;
41 be32_t netmask;
42 be32_t subnet;
43 uint32_t pool_offset;
44 uint32_t pool_size;
45
46 char *timezone;
47
48 struct in_addr *ntp, *dns;
49 unsigned n_ntp, n_dns;
50
51 bool emit_router;
52
53 Hashmap *leases_by_client_id;
54 DHCPLease **bound_leases;
55 DHCPLease invalid_lease;
56
57 uint32_t max_lease_time, default_lease_time;
58 };
59
60 typedef struct DHCPRequest {
61 /* received message */
62 DHCPMessage *message;
63
64 /* options */
65 DHCPClientId client_id;
66 size_t max_optlen;
67 be32_t server_id;
68 be32_t requested_ip;
69 uint32_t lifetime;
70 } DHCPRequest;
71
72 #define log_dhcp_server(client, fmt, ...) log_internal(LOG_DEBUG, 0, __FILE__, __LINE__, __func__, "DHCP SERVER: " fmt, ##__VA_ARGS__)
73 #define log_dhcp_server_errno(client, error, fmt, ...) log_internal(LOG_DEBUG, error, __FILE__, __LINE__, __func__, "DHCP SERVER: " fmt, ##__VA_ARGS__)
74
75 int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
76 size_t length);
77 int dhcp_server_send_packet(sd_dhcp_server *server,
78 DHCPRequest *req, DHCPPacket *packet,
79 int type, size_t optoffset);
80
81 void client_id_hash_func(const void *p, struct siphash *state);
82 int client_id_compare_func(const void *_a, const void *_b);