]> git.ipfire.org Git - thirdparty/systemd.git/blame_incremental - src/libsystemd-network/dhcp-server-internal.h
ci: enable build/unit test jobs on ppc64le
[thirdparty/systemd.git] / src / libsystemd-network / dhcp-server-internal.h
... / ...
CommitLineData
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2#pragma once
3
4/***
5 Copyright © 2013 Intel Corporation. All rights reserved.
6***/
7
8#include "sd-dhcp-lease.h"
9#include "sd-dhcp-server.h"
10
11#include "dhcp-client-id-internal.h"
12#include "dhcp-option.h"
13#include "forward.h"
14#include "network-common.h"
15#include "sparse-endian.h"
16
17typedef 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,
26} DHCPRawOption;
27
28typedef struct sd_dhcp_server {
29 unsigned n_ref;
30
31 sd_event *event;
32 int event_priority;
33 sd_event_source *receive_message;
34 sd_event_source *receive_broadcast;
35 int fd;
36 int fd_raw;
37 int fd_broadcast;
38
39 int ifindex;
40 char *ifname;
41 bool bind_to_interface;
42 be32_t address;
43 be32_t netmask;
44 be32_t subnet;
45 uint32_t pool_offset;
46 uint32_t pool_size;
47
48 char *timezone;
49
50 DHCPServerData servers[_SD_DHCP_LEASE_SERVER_TYPE_MAX];
51 struct in_addr boot_server_address;
52 char *boot_server_name;
53 char *boot_filename;
54
55 OrderedSet *extra_options;
56 OrderedSet *vendor_options;
57
58 bool emit_router;
59 struct in_addr router_address;
60
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;
65
66 usec_t max_lease_time;
67 usec_t default_lease_time;
68 usec_t ipv6_only_preferred_usec;
69 bool rapid_commit;
70
71 sd_dhcp_server_callback_t callback;
72 void *callback_userdata;
73
74 struct in_addr relay_target;
75
76 char *agent_circuit_id;
77 char *agent_remote_id;
78
79 int lease_dir_fd;
80 char *lease_file;
81} sd_dhcp_server;
82
83typedef struct DHCPRequest {
84 /* received message */
85 DHCPMessage *message;
86
87 /* options */
88 sd_dhcp_client_id client_id;
89 size_t max_optlen;
90 be32_t server_id;
91 be32_t requested_ip;
92 usec_t lifetime;
93 const uint8_t *agent_info_option;
94 char *hostname;
95 const uint8_t *parameter_request_list;
96 size_t parameter_request_list_len;
97 bool rapid_commit;
98 triple_timestamp timestamp;
99} DHCPRequest;
100
101int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
102 size_t length, const triple_timestamp *timestamp);
103int dhcp_server_send_packet(sd_dhcp_server *server,
104 DHCPRequest *req, DHCPPacket *packet,
105 int type, size_t optoffset);
106
107#define log_dhcp_server_errno(server, error, fmt, ...) \
108 log_interface_prefix_full_errno( \
109 "DHCPv4 server: ", \
110 sd_dhcp_server, server, \
111 error, fmt, ##__VA_ARGS__)
112#define log_dhcp_server(server, fmt, ...) \
113 log_interface_prefix_full_errno_zerook( \
114 "DHCPv4 server: ", \
115 sd_dhcp_server, server, \
116 0, fmt, ##__VA_ARGS__)