]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-dhcp-client.h
networkd: Add support for blacklisting servers
[thirdparty/systemd.git] / src / systemd / sd-dhcp-client.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
011feef8
PF
2#ifndef foosddhcpclienthfoo
3#define foosddhcpclienthfoo
4
5/***
810adae9 6 Copyright © 2013 Intel Corporation. All rights reserved.
011feef8
PF
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
04c01369 22#include <inttypes.h>
46a66b79 23#include <net/ethernet.h>
04c01369
LP
24#include <netinet/in.h>
25#include <sys/types.h>
8217ed5e 26#include <stdbool.h>
011feef8 27
fe8db0c5 28#include "sd-dhcp-lease.h"
71d35b6b 29#include "sd-event.h"
d3d8ac2f 30
04c01369
LP
31#include "_sd-common.h"
32
33_SD_BEGIN_DECLARATIONS;
34
3e3d8f78 35enum {
03748142
DH
36 SD_DHCP_CLIENT_EVENT_STOP = 0,
37 SD_DHCP_CLIENT_EVENT_IP_ACQUIRE = 1,
38 SD_DHCP_CLIENT_EVENT_IP_CHANGE = 2,
39 SD_DHCP_CLIENT_EVENT_EXPIRED = 3,
40 SD_DHCP_CLIENT_EVENT_RENEW = 4,
727b5734 41 SD_DHCP_CLIENT_EVENT_SELECTING = 5,
3e3d8f78
PF
42};
43
22805d92
BG
44enum {
45 SD_DHCP_OPTION_PAD = 0,
46 SD_DHCP_OPTION_SUBNET_MASK = 1,
47 SD_DHCP_OPTION_TIME_OFFSET = 2,
48 SD_DHCP_OPTION_ROUTER = 3,
49 SD_DHCP_OPTION_DOMAIN_NAME_SERVER = 6,
50 SD_DHCP_OPTION_HOST_NAME = 12,
51 SD_DHCP_OPTION_BOOT_FILE_SIZE = 13,
52 SD_DHCP_OPTION_DOMAIN_NAME = 15,
53 SD_DHCP_OPTION_ROOT_PATH = 17,
54 SD_DHCP_OPTION_ENABLE_IP_FORWARDING = 19,
55 SD_DHCP_OPTION_ENABLE_IP_FORWARDING_NL = 20,
56 SD_DHCP_OPTION_POLICY_FILTER = 21,
57 SD_DHCP_OPTION_INTERFACE_MDR = 22,
58 SD_DHCP_OPTION_INTERFACE_TTL = 23,
59 SD_DHCP_OPTION_INTERFACE_MTU_AGING_TIMEOUT = 24,
60 SD_DHCP_OPTION_INTERFACE_MTU = 26,
61 SD_DHCP_OPTION_BROADCAST = 28,
19b8398f 62 /* Windows 10 option to send when Anonymize=true */
63 SD_DHCP_OPTION_ROUTER_DISCOVER = 31,
22805d92
BG
64 SD_DHCP_OPTION_STATIC_ROUTE = 33,
65 SD_DHCP_OPTION_NTP_SERVER = 42,
66 SD_DHCP_OPTION_VENDOR_SPECIFIC = 43,
19b8398f 67 /* Windows 10 option to send when Anonymize=true */
68 SD_DHCP_OPTION_NETBIOS_NAMESERVER = 44,
69 /* Windows 10 option to send when Anonymize=true */
70 SD_DHCP_OPTION_NETBIOS_NODETYPE = 46,
71 /* Windows 10 option to send when Anonymize=true */
72 SD_DHCP_OPTION_NETBIOS_SCOPE = 47,
22805d92
BG
73 SD_DHCP_OPTION_REQUESTED_IP_ADDRESS = 50,
74 SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME = 51,
75 SD_DHCP_OPTION_OVERLOAD = 52,
76 SD_DHCP_OPTION_MESSAGE_TYPE = 53,
77 SD_DHCP_OPTION_SERVER_IDENTIFIER = 54,
78 SD_DHCP_OPTION_PARAMETER_REQUEST_LIST = 55,
79 SD_DHCP_OPTION_ERROR_MESSAGE = 56,
80 SD_DHCP_OPTION_MAXIMUM_MESSAGE_SIZE = 57,
81 SD_DHCP_OPTION_RENEWAL_T1_TIME = 58,
82 SD_DHCP_OPTION_REBINDING_T2_TIME = 59,
83 SD_DHCP_OPTION_VENDOR_CLASS_IDENTIFIER = 60,
84 SD_DHCP_OPTION_CLIENT_IDENTIFIER = 61,
af1c0de0 85 SD_DHCP_OPTION_USER_CLASS = 77,
22805d92
BG
86 SD_DHCP_OPTION_FQDN = 81,
87 SD_DHCP_OPTION_NEW_POSIX_TIMEZONE = 100,
88 SD_DHCP_OPTION_NEW_TZDB_TIMEZONE = 101,
b85bc551 89 SD_DHCP_OPTION_DOMAIN_SEARCH_LIST = 119,
22805d92
BG
90 SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE = 121,
91 SD_DHCP_OPTION_PRIVATE_BASE = 224,
19b8398f 92 /* Windows 10 option to send when Anonymize=true */
93 SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE = 249,
94 /* Windows 10 option to send when Anonymize=true */
95 SD_DHCP_OPTION_PRIVATE_PROXY_AUTODISCOVERY = 252,
22805d92
BG
96 SD_DHCP_OPTION_PRIVATE_LAST = 254,
97 SD_DHCP_OPTION_END = 255,
98};
99
011feef8
PF
100typedef struct sd_dhcp_client sd_dhcp_client;
101
727b5734 102typedef int (*sd_dhcp_client_callback_t)(sd_dhcp_client *client, int event, void *userdata);
4b558378
ZJS
103int sd_dhcp_client_set_callback(
104 sd_dhcp_client *client,
105 sd_dhcp_client_callback_t cb,
106 void *userdata);
107
108int sd_dhcp_client_set_request_option(
109 sd_dhcp_client *client,
110 uint8_t option);
111int sd_dhcp_client_set_request_address(
112 sd_dhcp_client *client,
113 const struct in_addr *last_address);
114int sd_dhcp_client_set_request_broadcast(
115 sd_dhcp_client *client,
116 int broadcast);
2f8e7633 117int sd_dhcp_client_set_ifindex(
4b558378
ZJS
118 sd_dhcp_client *client,
119 int interface_index);
120int sd_dhcp_client_set_mac(
121 sd_dhcp_client *client,
122 const uint8_t *addr,
123 size_t addr_len,
124 uint16_t arp_type);
125int sd_dhcp_client_set_client_id(
126 sd_dhcp_client *client,
127 uint8_t type,
128 const uint8_t *data,
129 size_t data_len);
130int sd_dhcp_client_set_iaid_duid(
131 sd_dhcp_client *client,
8217ed5e 132 bool iaid_set,
4b558378
ZJS
133 uint32_t iaid,
134 uint16_t duid_type,
f7a92d1a 135 const void *duid,
4b558378 136 size_t duid_len);
7e90a499
YW
137int sd_dhcp_client_set_iaid_duid_llt(
138 sd_dhcp_client *client,
8217ed5e 139 bool iaid_set,
7e90a499
YW
140 uint32_t iaid,
141 uint64_t llt_time);
dace710c
YW
142int sd_dhcp_client_set_duid(
143 sd_dhcp_client *client,
144 uint16_t duid_type,
145 const void *duid,
146 size_t duid_len);
7e90a499
YW
147int sd_dhcp_client_set_duid_llt(
148 sd_dhcp_client *client,
149 uint64_t llt_time);
4b558378
ZJS
150int sd_dhcp_client_get_client_id(
151 sd_dhcp_client *client,
152 uint8_t *type,
153 const uint8_t **data,
154 size_t *data_len);
155int sd_dhcp_client_set_mtu(
156 sd_dhcp_client *client,
157 uint32_t mtu);
715cedfb
SS
158int sd_dhcp_client_set_max_attempts(
159 sd_dhcp_client *client,
160 uint64_t attempt);
9faed222
SS
161int sd_dhcp_client_set_client_port(
162 sd_dhcp_client *client,
163 uint16_t port);
4b558378
ZJS
164int sd_dhcp_client_set_hostname(
165 sd_dhcp_client *client,
166 const char *hostname);
167int sd_dhcp_client_set_vendor_class_identifier(
168 sd_dhcp_client *client,
169 const char *vci);
af1c0de0
SS
170int sd_dhcp_client_set_user_class(
171 sd_dhcp_client *client,
172 const char* const *user_class);
4b558378
ZJS
173int sd_dhcp_client_get_lease(
174 sd_dhcp_client *client,
175 sd_dhcp_lease **ret);
a6cc569e 176
bbdf06d9 177int sd_dhcp_client_stop(sd_dhcp_client *client);
46a66b79 178int sd_dhcp_client_start(sd_dhcp_client *client);
e5b04c8d
PF
179
180sd_dhcp_client *sd_dhcp_client_ref(sd_dhcp_client *client);
181sd_dhcp_client *sd_dhcp_client_unref(sd_dhcp_client *client);
182
db3d2358 183/* NOTE: anonymize parameter is used to initialize PRL memory with different
184 * options when using RFC7844 Anonymity Profiles */
185int sd_dhcp_client_new(sd_dhcp_client **ret, int anonymize);
b25ef18b 186
4b558378
ZJS
187int sd_dhcp_client_attach_event(
188 sd_dhcp_client *client,
189 sd_event *event,
190 int64_t priority);
b25ef18b
TG
191int sd_dhcp_client_detach_event(sd_dhcp_client *client);
192sd_event *sd_dhcp_client_get_event(sd_dhcp_client *client);
011feef8 193
4afd3348
LP
194_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_dhcp_client, sd_dhcp_client_unref);
195
04c01369
LP
196_SD_END_DECLARATIONS;
197
011feef8 198#endif