Branch data 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 [ + + ]: 44 : _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_dhcp_client, sd_dhcp_client_unref);
196 : :
197 : : _SD_END_DECLARATIONS;
198 : :
199 : : #endif
|