]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-dhcp-client.h
Merge pull request #12230 from poettering/varlink-minimal
[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,
3e3d8f78
PF
41};
42
22805d92
BG
43enum {
44 SD_DHCP_OPTION_PAD = 0,
45 SD_DHCP_OPTION_SUBNET_MASK = 1,
46 SD_DHCP_OPTION_TIME_OFFSET = 2,
47 SD_DHCP_OPTION_ROUTER = 3,
48 SD_DHCP_OPTION_DOMAIN_NAME_SERVER = 6,
49 SD_DHCP_OPTION_HOST_NAME = 12,
50 SD_DHCP_OPTION_BOOT_FILE_SIZE = 13,
51 SD_DHCP_OPTION_DOMAIN_NAME = 15,
52 SD_DHCP_OPTION_ROOT_PATH = 17,
53 SD_DHCP_OPTION_ENABLE_IP_FORWARDING = 19,
54 SD_DHCP_OPTION_ENABLE_IP_FORWARDING_NL = 20,
55 SD_DHCP_OPTION_POLICY_FILTER = 21,
56 SD_DHCP_OPTION_INTERFACE_MDR = 22,
57 SD_DHCP_OPTION_INTERFACE_TTL = 23,
58 SD_DHCP_OPTION_INTERFACE_MTU_AGING_TIMEOUT = 24,
59 SD_DHCP_OPTION_INTERFACE_MTU = 26,
60 SD_DHCP_OPTION_BROADCAST = 28,
19b8398f 61 /* Windows 10 option to send when Anonymize=true */
62 SD_DHCP_OPTION_ROUTER_DISCOVER = 31,
22805d92
BG
63 SD_DHCP_OPTION_STATIC_ROUTE = 33,
64 SD_DHCP_OPTION_NTP_SERVER = 42,
65 SD_DHCP_OPTION_VENDOR_SPECIFIC = 43,
19b8398f 66 /* Windows 10 option to send when Anonymize=true */
67 SD_DHCP_OPTION_NETBIOS_NAMESERVER = 44,
68 /* Windows 10 option to send when Anonymize=true */
69 SD_DHCP_OPTION_NETBIOS_NODETYPE = 46,
70 /* Windows 10 option to send when Anonymize=true */
71 SD_DHCP_OPTION_NETBIOS_SCOPE = 47,
22805d92
BG
72 SD_DHCP_OPTION_REQUESTED_IP_ADDRESS = 50,
73 SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME = 51,
74 SD_DHCP_OPTION_OVERLOAD = 52,
75 SD_DHCP_OPTION_MESSAGE_TYPE = 53,
76 SD_DHCP_OPTION_SERVER_IDENTIFIER = 54,
77 SD_DHCP_OPTION_PARAMETER_REQUEST_LIST = 55,
78 SD_DHCP_OPTION_ERROR_MESSAGE = 56,
79 SD_DHCP_OPTION_MAXIMUM_MESSAGE_SIZE = 57,
80 SD_DHCP_OPTION_RENEWAL_T1_TIME = 58,
81 SD_DHCP_OPTION_REBINDING_T2_TIME = 59,
82 SD_DHCP_OPTION_VENDOR_CLASS_IDENTIFIER = 60,
83 SD_DHCP_OPTION_CLIENT_IDENTIFIER = 61,
af1c0de0 84 SD_DHCP_OPTION_USER_CLASS = 77,
22805d92
BG
85 SD_DHCP_OPTION_FQDN = 81,
86 SD_DHCP_OPTION_NEW_POSIX_TIMEZONE = 100,
87 SD_DHCP_OPTION_NEW_TZDB_TIMEZONE = 101,
b85bc551 88 SD_DHCP_OPTION_DOMAIN_SEARCH_LIST = 119,
22805d92
BG
89 SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE = 121,
90 SD_DHCP_OPTION_PRIVATE_BASE = 224,
19b8398f 91 /* Windows 10 option to send when Anonymize=true */
92 SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE = 249,
93 /* Windows 10 option to send when Anonymize=true */
94 SD_DHCP_OPTION_PRIVATE_PROXY_AUTODISCOVERY = 252,
22805d92
BG
95 SD_DHCP_OPTION_PRIVATE_LAST = 254,
96 SD_DHCP_OPTION_END = 255,
97};
98
011feef8
PF
99typedef struct sd_dhcp_client sd_dhcp_client;
100
4b558378
ZJS
101typedef void (*sd_dhcp_client_callback_t)(sd_dhcp_client *client, int event, void *userdata);
102int sd_dhcp_client_set_callback(
103 sd_dhcp_client *client,
104 sd_dhcp_client_callback_t cb,
105 void *userdata);
106
107int sd_dhcp_client_set_request_option(
108 sd_dhcp_client *client,
109 uint8_t option);
110int sd_dhcp_client_set_request_address(
111 sd_dhcp_client *client,
112 const struct in_addr *last_address);
113int sd_dhcp_client_set_request_broadcast(
114 sd_dhcp_client *client,
115 int broadcast);
2f8e7633 116int sd_dhcp_client_set_ifindex(
4b558378
ZJS
117 sd_dhcp_client *client,
118 int interface_index);
119int sd_dhcp_client_set_mac(
120 sd_dhcp_client *client,
121 const uint8_t *addr,
122 size_t addr_len,
123 uint16_t arp_type);
124int sd_dhcp_client_set_client_id(
125 sd_dhcp_client *client,
126 uint8_t type,
127 const uint8_t *data,
128 size_t data_len);
129int sd_dhcp_client_set_iaid_duid(
130 sd_dhcp_client *client,
8217ed5e 131 bool iaid_set,
4b558378
ZJS
132 uint32_t iaid,
133 uint16_t duid_type,
f7a92d1a 134 const void *duid,
4b558378 135 size_t duid_len);
7e90a499
YW
136int sd_dhcp_client_set_iaid_duid_llt(
137 sd_dhcp_client *client,
8217ed5e 138 bool iaid_set,
7e90a499
YW
139 uint32_t iaid,
140 uint64_t llt_time);
dace710c
YW
141int sd_dhcp_client_set_duid(
142 sd_dhcp_client *client,
143 uint16_t duid_type,
144 const void *duid,
145 size_t duid_len);
7e90a499
YW
146int sd_dhcp_client_set_duid_llt(
147 sd_dhcp_client *client,
148 uint64_t llt_time);
4b558378
ZJS
149int sd_dhcp_client_get_client_id(
150 sd_dhcp_client *client,
151 uint8_t *type,
152 const uint8_t **data,
153 size_t *data_len);
154int sd_dhcp_client_set_mtu(
155 sd_dhcp_client *client,
156 uint32_t mtu);
715cedfb
SS
157int sd_dhcp_client_set_max_attempts(
158 sd_dhcp_client *client,
159 uint64_t attempt);
9faed222
SS
160int sd_dhcp_client_set_client_port(
161 sd_dhcp_client *client,
162 uint16_t port);
4b558378
ZJS
163int sd_dhcp_client_set_hostname(
164 sd_dhcp_client *client,
165 const char *hostname);
166int sd_dhcp_client_set_vendor_class_identifier(
167 sd_dhcp_client *client,
168 const char *vci);
af1c0de0
SS
169int sd_dhcp_client_set_user_class(
170 sd_dhcp_client *client,
171 const char* const *user_class);
4b558378
ZJS
172int sd_dhcp_client_get_lease(
173 sd_dhcp_client *client,
174 sd_dhcp_lease **ret);
a6cc569e 175
bbdf06d9 176int sd_dhcp_client_stop(sd_dhcp_client *client);
46a66b79 177int sd_dhcp_client_start(sd_dhcp_client *client);
e5b04c8d
PF
178
179sd_dhcp_client *sd_dhcp_client_ref(sd_dhcp_client *client);
180sd_dhcp_client *sd_dhcp_client_unref(sd_dhcp_client *client);
181
db3d2358 182/* NOTE: anonymize parameter is used to initialize PRL memory with different
183 * options when using RFC7844 Anonymity Profiles */
184int sd_dhcp_client_new(sd_dhcp_client **ret, int anonymize);
b25ef18b 185
4b558378
ZJS
186int sd_dhcp_client_attach_event(
187 sd_dhcp_client *client,
188 sd_event *event,
189 int64_t priority);
b25ef18b
TG
190int sd_dhcp_client_detach_event(sd_dhcp_client *client);
191sd_event *sd_dhcp_client_get_event(sd_dhcp_client *client);
011feef8 192
4afd3348
LP
193_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_dhcp_client, sd_dhcp_client_unref);
194
04c01369
LP
195_SD_END_DECLARATIONS;
196
011feef8 197#endif