]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libsystemd-network/dhcp-server-internal.h
ssh-generator: generate /etc/issue.d/ with VSOCK ssh info data (#37819)
[thirdparty/systemd.git] / src / libsystemd-network / dhcp-server-internal.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
0ef6f454
LP
2#pragma once
3
b44cd882 4/***
810adae9 5 Copyright © 2013 Intel Corporation. All rights reserved.
b44cd882
TG
6***/
7
5cdf13c7 8#include "sd-dhcp-lease.h"
b44cd882
TG
9#include "sd-dhcp-server.h"
10
95c48613 11#include "dhcp-client-id-internal.h"
8664ded7 12#include "dhcp-option.h"
5cdf13c7 13#include "forward.h"
5977b71f 14#include "network-common.h"
5cdf13c7 15#include "sparse-endian.h"
be077570 16
564ca984
SS
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,
e7d5fe17 23 DHCP_RAW_OPTION_DATA_IPV6ADDRESS,
564ca984
SS
24 _DHCP_RAW_OPTION_DATA_MAX,
25 _DHCP_RAW_OPTION_DATA_INVALID,
26} DHCPRawOption;
27
5cdf13c7 28typedef struct sd_dhcp_server {
3733eec3 29 unsigned n_ref;
b44cd882
TG
30
31 sd_event *event;
32 int event_priority;
ff734080 33 sd_event_source *receive_message;
21b6b87e 34 sd_event_source *receive_broadcast;
ff734080 35 int fd;
8de4a226 36 int fd_raw;
21b6b87e 37 int fd_broadcast;
3a864fe4 38
b3ec603c 39 int ifindex;
61a9fa8f 40 char *ifname;
21b6b87e 41 bool bind_to_interface;
20af7091 42 be32_t address;
59b8f6b6 43 be32_t netmask;
99634696
TG
44 be32_t subnet;
45 uint32_t pool_offset;
46 uint32_t pool_size;
b44cd882 47
8eb9058d
LP
48 char *timezone;
49
ddb82ec2 50 DHCPServerData servers[_SD_DHCP_LEASE_SERVER_TYPE_MAX];
6278e428
YW
51 struct in_addr boot_server_address;
52 char *boot_server_name;
53 char *boot_filename;
1a04db0f 54
ebffea2a
SS
55 OrderedSet *extra_options;
56 OrderedSet *vendor_options;
564ca984 57
77ff6022 58 bool emit_router;
59aa6220 59 struct in_addr router_address;
77ff6022 60
b713a99b
YW
61 Hashmap *bound_leases_by_client_id;
62 Hashmap *bound_leases_by_address;
65a0ef23 63 Hashmap *static_leases_by_client_id;
b713a99b 64 Hashmap *static_leases_by_address;
586ac6f7 65
a0007611
YW
66 usec_t max_lease_time;
67 usec_t default_lease_time;
14bd102e 68 usec_t ipv6_only_preferred_usec;
538ff0a6 69 bool rapid_commit;
5b03043a
MAL
70
71 sd_dhcp_server_callback_t callback;
72 void *callback_userdata;
11c38d3e
YA
73
74 struct in_addr relay_target;
75
76 char *agent_circuit_id;
77 char *agent_remote_id;
033f1197 78
11b88419 79 int lease_dir_fd;
033f1197 80 char *lease_file;
5cdf13c7 81} sd_dhcp_server;
816e2e7a
TG
82
83typedef struct DHCPRequest {
84 /* received message */
85 DHCPMessage *message;
86
87 /* options */
95c48613 88 sd_dhcp_client_id client_id;
816e2e7a
TG
89 size_t max_optlen;
90 be32_t server_id;
2dead812 91 be32_t requested_ip;
a0007611 92 usec_t lifetime;
11c38d3e 93 const uint8_t *agent_info_option;
930133d5 94 char *hostname;
14bd102e
SS
95 const uint8_t *parameter_request_list;
96 size_t parameter_request_list_len;
538ff0a6 97 bool rapid_commit;
905d0ea7 98 triple_timestamp timestamp;
816e2e7a
TG
99} DHCPRequest;
100
be077570 101int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
905d0ea7 102 size_t length, const triple_timestamp *timestamp);
969b009d
TG
103int dhcp_server_send_packet(sd_dhcp_server *server,
104 DHCPRequest *req, DHCPPacket *packet,
105 int type, size_t optoffset);
87322b3a 106
a0c2541b 107#define log_dhcp_server_errno(server, error, fmt, ...) \
00dd6d77 108 log_interface_prefix_full_errno( \
a0c2541b 109 "DHCPv4 server: ", \
5977b71f 110 sd_dhcp_server, server, \
a0c2541b 111 error, fmt, ##__VA_ARGS__)
35388783 112#define log_dhcp_server(server, fmt, ...) \
00dd6d77
ZJS
113 log_interface_prefix_full_errno_zerook( \
114 "DHCPv4 server: ", \
5977b71f 115 sd_dhcp_server, server, \
00dd6d77 116 0, fmt, ##__VA_ARGS__)