1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
5 Copyright © 2013 Intel Corporation. All rights reserved.
8 #include "sd-dhcp-lease.h"
9 #include "sd-dhcp-server.h"
11 #include "dhcp-client-id-internal.h"
12 #include "dhcp-option.h"
14 #include "network-common.h"
15 #include "sparse-endian.h"
17 typedef enum DHCPRawOption
{
18 DHCP_RAW_OPTION_DATA_UINT8
,
19 DHCP_RAW_OPTION_DATA_UINT16
,
20 DHCP_RAW_OPTION_DATA_UINT32
,
21 DHCP_RAW_OPTION_DATA_STRING
,
22 DHCP_RAW_OPTION_DATA_IPV4ADDRESS
,
23 DHCP_RAW_OPTION_DATA_IPV6ADDRESS
,
24 _DHCP_RAW_OPTION_DATA_MAX
,
25 _DHCP_RAW_OPTION_DATA_INVALID
,
28 typedef struct sd_dhcp_server
{
33 sd_event_source
*receive_message
;
34 sd_event_source
*receive_broadcast
;
41 bool bind_to_interface
;
50 DHCPServerData servers
[_SD_DHCP_LEASE_SERVER_TYPE_MAX
];
51 struct in_addr boot_server_address
;
52 char *boot_server_name
;
55 OrderedSet
*extra_options
;
56 OrderedSet
*vendor_options
;
59 struct in_addr router_address
;
61 Hashmap
*bound_leases_by_client_id
;
62 Hashmap
*bound_leases_by_address
;
63 Hashmap
*static_leases_by_client_id
;
64 Hashmap
*static_leases_by_address
;
66 usec_t max_lease_time
;
67 usec_t default_lease_time
;
68 usec_t ipv6_only_preferred_usec
;
71 sd_dhcp_server_callback_t callback
;
72 void *callback_userdata
;
74 struct in_addr relay_target
;
76 char *agent_circuit_id
;
77 char *agent_remote_id
;
83 typedef struct DHCPRequest
{
84 /* received message */
88 sd_dhcp_client_id client_id
;
93 const uint8_t *agent_info_option
;
95 const uint8_t *parameter_request_list
;
96 size_t parameter_request_list_len
;
98 triple_timestamp timestamp
;
101 int dhcp_server_handle_message(sd_dhcp_server
*server
, DHCPMessage
*message
,
102 size_t length
, const triple_timestamp
*timestamp
);
103 int dhcp_server_send_packet(sd_dhcp_server
*server
,
104 DHCPRequest
*req
, DHCPPacket
*packet
,
105 int type
, size_t optoffset
);
107 #define log_dhcp_server_errno(server, error, fmt, ...) \
108 log_interface_prefix_full_errno( \
110 sd_dhcp_server, server, \
111 error, fmt, ##__VA_ARGS__)
112 #define log_dhcp_server(server, fmt, ...) \
113 log_interface_prefix_full_errno_zerook( \
115 sd_dhcp_server, server, \
116 0, fmt, ##__VA_ARGS__)