Line data Source code
1 : /* SPDX-License-Identifier: LGPL-2.1+ */
2 : #ifndef foosddhcpclienthfoo
3 : #define foosddhcpclienthfoo
4 :
5 : /***
6 : Copyright © 2013 Intel Corporation. All rights reserved.
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 :
22 : #include <inttypes.h>
23 : #include <net/ethernet.h>
24 : #include <netinet/in.h>
25 : #include <sys/types.h>
26 : #include <stdbool.h>
27 :
28 : #include "sd-dhcp-lease.h"
29 : #include "sd-event.h"
30 :
31 : #include "_sd-common.h"
32 :
33 : _SD_BEGIN_DECLARATIONS;
34 :
35 : enum {
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,
41 : SD_DHCP_CLIENT_EVENT_SELECTING = 5,
42 : };
43 :
44 : enum {
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,
62 : /* Windows 10 option to send when Anonymize=true */
63 : SD_DHCP_OPTION_ROUTER_DISCOVER = 31,
64 : SD_DHCP_OPTION_STATIC_ROUTE = 33,
65 : SD_DHCP_OPTION_NTP_SERVER = 42,
66 : SD_DHCP_OPTION_VENDOR_SPECIFIC = 43,
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,
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,
85 : SD_DHCP_OPTION_USER_CLASS = 77,
86 : SD_DHCP_OPTION_FQDN = 81,
87 : SD_DHCP_OPTION_NEW_POSIX_TIMEZONE = 100,
88 : SD_DHCP_OPTION_NEW_TZDB_TIMEZONE = 101,
89 : SD_DHCP_OPTION_DOMAIN_SEARCH_LIST = 119,
90 : SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE = 121,
91 : SD_DHCP_OPTION_PRIVATE_BASE = 224,
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,
96 : SD_DHCP_OPTION_PRIVATE_LAST = 254,
97 : SD_DHCP_OPTION_END = 255,
98 : };
99 :
100 : typedef struct sd_dhcp_client sd_dhcp_client;
101 :
102 : typedef int (*sd_dhcp_client_callback_t)(sd_dhcp_client *client, int event, void *userdata);
103 : int sd_dhcp_client_set_callback(
104 : sd_dhcp_client *client,
105 : sd_dhcp_client_callback_t cb,
106 : void *userdata);
107 :
108 : int sd_dhcp_client_set_request_option(
109 : sd_dhcp_client *client,
110 : uint8_t option);
111 : int sd_dhcp_client_set_request_address(
112 : sd_dhcp_client *client,
113 : const struct in_addr *last_address);
114 : int sd_dhcp_client_set_request_broadcast(
115 : sd_dhcp_client *client,
116 : int broadcast);
117 : int sd_dhcp_client_set_ifindex(
118 : sd_dhcp_client *client,
119 : int interface_index);
120 : int 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);
125 : int 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);
130 : int sd_dhcp_client_set_iaid_duid(
131 : sd_dhcp_client *client,
132 : bool iaid_set,
133 : uint32_t iaid,
134 : uint16_t duid_type,
135 : const void *duid,
136 : size_t duid_len);
137 : int sd_dhcp_client_set_iaid_duid_llt(
138 : sd_dhcp_client *client,
139 : bool iaid_set,
140 : uint32_t iaid,
141 : uint64_t llt_time);
142 : int sd_dhcp_client_set_duid(
143 : sd_dhcp_client *client,
144 : uint16_t duid_type,
145 : const void *duid,
146 : size_t duid_len);
147 : int sd_dhcp_client_set_duid_llt(
148 : sd_dhcp_client *client,
149 : uint64_t llt_time);
150 : int 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);
155 : int sd_dhcp_client_set_mtu(
156 : sd_dhcp_client *client,
157 : uint32_t mtu);
158 : int sd_dhcp_client_set_max_attempts(
159 : sd_dhcp_client *client,
160 : uint64_t attempt);
161 : int sd_dhcp_client_set_client_port(
162 : sd_dhcp_client *client,
163 : uint16_t port);
164 : int sd_dhcp_client_set_hostname(
165 : sd_dhcp_client *client,
166 : const char *hostname);
167 : int sd_dhcp_client_set_vendor_class_identifier(
168 : sd_dhcp_client *client,
169 : const char *vci);
170 : int sd_dhcp_client_set_user_class(
171 : sd_dhcp_client *client,
172 : const char* const *user_class);
173 : int sd_dhcp_client_get_lease(
174 : sd_dhcp_client *client,
175 : sd_dhcp_lease **ret);
176 :
177 : int sd_dhcp_client_stop(sd_dhcp_client *client);
178 : int sd_dhcp_client_start(sd_dhcp_client *client);
179 : int sd_dhcp_client_send_release(sd_dhcp_client *client);
180 :
181 : sd_dhcp_client *sd_dhcp_client_ref(sd_dhcp_client *client);
182 : sd_dhcp_client *sd_dhcp_client_unref(sd_dhcp_client *client);
183 :
184 : /* NOTE: anonymize parameter is used to initialize PRL memory with different
185 : * options when using RFC7844 Anonymity Profiles */
186 : int sd_dhcp_client_new(sd_dhcp_client **ret, int anonymize);
187 :
188 : int sd_dhcp_client_attach_event(
189 : sd_dhcp_client *client,
190 : sd_event *event,
191 : int64_t priority);
192 : int sd_dhcp_client_detach_event(sd_dhcp_client *client);
193 : sd_event *sd_dhcp_client_get_event(sd_dhcp_client *client);
194 :
195 11 : _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_dhcp_client, sd_dhcp_client_unref);
196 :
197 : _SD_END_DECLARATIONS;
198 :
199 : #endif
|