No effective functional change. Just refactoring.
ASSERT_NOT_NULL(e);
_cleanup_(sd_dhcp_client_unrefp) sd_dhcp_client *client = NULL;
- ASSERT_OK(sd_dhcp_client_new(&client, /* anonymize= */ false));
+ ASSERT_OK(sd_dhcp_client_new(&client));
ASSERT_NOT_NULL(client);
ASSERT_OK(sd_dhcp_client_attach_event(client, e, /* priority= */ 0));
SD_DHCP_OPTION_DOMAIN_NAME_SERVER,
};
-/* RFC7844 section 3:
- MAY contain the Parameter Request List option.
- RFC7844 section 3.6:
- The client intending to protect its privacy SHOULD only request a
- minimal number of options in the PRL and SHOULD also randomly shuffle
- the ordering of option codes in the PRL. If this random ordering
- cannot be implemented, the client MAY order the option codes in the
- PRL by option code number (lowest to highest).
-*/
-/* NOTE: using PRL options that Windows 10 RFC7844 implementation uses */
-static const uint8_t default_req_opts_anonymize[] = {
- SD_DHCP_OPTION_SUBNET_MASK, /* 1 */
- SD_DHCP_OPTION_ROUTER, /* 3 */
- SD_DHCP_OPTION_DOMAIN_NAME_SERVER, /* 6 */
- SD_DHCP_OPTION_DOMAIN_NAME, /* 15 */
- SD_DHCP_OPTION_ROUTER_DISCOVERY, /* 31 */
- SD_DHCP_OPTION_STATIC_ROUTE, /* 33 */
- SD_DHCP_OPTION_VENDOR_SPECIFIC_INFORMATION, /* 43 */
- SD_DHCP_OPTION_NETBIOS_NAME_SERVER, /* 44 */
- SD_DHCP_OPTION_NETBIOS_NODE_TYPE, /* 46 */
- SD_DHCP_OPTION_NETBIOS_SCOPE, /* 47 */
- SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE, /* 121 */
- SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE, /* 249 */
- SD_DHCP_OPTION_PRIVATE_PROXY_AUTODISCOVERY, /* 252 */
-};
-
static void client_stop(sd_dhcp_client *client, int error);
static int client_restart(sd_dhcp_client *client);
return 0;
}
+int sd_dhcp_client_set_anonymize(sd_dhcp_client *client, int b) {
+ assert_return(client, -EINVAL);
+ assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
+
+ client->anonymize = !!b;
+ return 0;
+}
+
int sd_dhcp_client_set_request_broadcast(sd_dhcp_client *client, int broadcast) {
assert_return(client, -EINVAL);
assert_return(!sd_dhcp_client_is_running(client), -EBUSY);
DEFINE_TRIVIAL_REF_UNREF_FUNC(sd_dhcp_client, sd_dhcp_client, dhcp_client_free);
-int sd_dhcp_client_new(sd_dhcp_client **ret, int anonymize) {
- const uint8_t *opts;
- size_t n_opts;
+int sd_dhcp_client_new(sd_dhcp_client **ret) {
int r;
assert_return(ret, -EINVAL);
.ifindex = -1,
.port = DHCP_PORT_CLIENT,
.server_port = DHCP_PORT_SERVER,
- .anonymize = !!anonymize,
.max_discover_attempts = UINT64_MAX,
.ip_service_type = -1,
};
- /* NOTE: this could be moved to a function. */
- if (anonymize) {
- n_opts = ELEMENTSOF(default_req_opts_anonymize);
- opts = default_req_opts_anonymize;
- } else {
- n_opts = ELEMENTSOF(default_req_opts);
- opts = default_req_opts;
- }
- for (size_t i = 0; i < n_opts; i++) {
- r = sd_dhcp_client_set_request_option(client, opts[i]);
+ FOREACH_ELEMENT(opt, default_req_opts) {
+ r = sd_dhcp_client_set_request_option(client, *opt);
if (r < 0)
return r;
}
TEST(dhcp_client_setters) {
/* Initialize client without Anonymize settings. */
_cleanup_(sd_dhcp_client_unrefp) sd_dhcp_client *client = NULL;
- ASSERT_OK(sd_dhcp_client_new(&client, /* anonymize= */ false));
+ ASSERT_OK(sd_dhcp_client_new(&client));
ASSERT_NOT_NULL(client);
ASSERT_RETURN_EXPECTED_SE(sd_dhcp_client_set_request_option(NULL, 0) == -EINVAL);
ASSERT_OK_ZERO(sd_dhcp_client_set_request_option(client, 17));
}
-TEST(dhcp_client_anonymize) {
+TEST(dhcp_client_set_anonymize) {
/* Initialize client with Anonymize settings. */
_cleanup_(sd_dhcp_client_unrefp) sd_dhcp_client *client = NULL;
- ASSERT_OK(sd_dhcp_client_new(&client, /* anonymize= */ true));
+ ASSERT_OK(sd_dhcp_client_new(&client));
+ ASSERT_OK(sd_dhcp_client_set_anonymize(client, true));
ASSERT_NOT_NULL(client);
- ASSERT_OK_ZERO(sd_dhcp_client_set_request_option(client, SD_DHCP_OPTION_NETBIOS_NAME_SERVER));
- /* This PRL option is not set when using Anonymize */
- ASSERT_OK_POSITIVE(sd_dhcp_client_set_request_option(client, SD_DHCP_OPTION_HOST_NAME));
+ ASSERT_OK_POSITIVE(sd_dhcp_client_set_request_option(client, SD_DHCP_OPTION_NETBIOS_NAME_SERVER));
+ ASSERT_OK_ZERO(sd_dhcp_client_set_request_option(client, SD_DHCP_OPTION_HOST_NAME));
ASSERT_ERROR(sd_dhcp_client_set_request_option(client, SD_DHCP_OPTION_PARAMETER_REQUEST_LIST), EINVAL);
/* RFC7844: option 101 (SD_DHCP_OPTION_NEW_TZDB_TIMEZONE) is not set in the
ASSERT_NOT_NULL(e);
_cleanup_(sd_dhcp_client_unrefp) sd_dhcp_client *client = NULL;
- ASSERT_OK(sd_dhcp_client_new(&client, /* anonymize= */ false));
+ ASSERT_OK(sd_dhcp_client_new(&client));
ASSERT_NOT_NULL(client);
ASSERT_OK(sd_dhcp_client_attach_event(client, e, /* priority= */ 0));
ASSERT_NOT_NULL(e);
_cleanup_(sd_dhcp_client_unrefp) sd_dhcp_client *client = NULL;
- ASSERT_OK(sd_dhcp_client_new(&client, /* anonymize= */ false));
+ ASSERT_OK(sd_dhcp_client_new(&client));
ASSERT_NOT_NULL(client);
ASSERT_OK(sd_dhcp_client_attach_event(client, e, /* priority= */ 0));
ASSERT_NOT_NULL(e);
_cleanup_(sd_dhcp_client_unrefp) sd_dhcp_client *client = NULL;
- ASSERT_OK(sd_dhcp_client_new(&client, /* anonymize= */ false));
+ ASSERT_OK(sd_dhcp_client_new(&client));
ASSERT_NOT_NULL(client);
ASSERT_OK(sd_dhcp_client_attach_event(client, e, /* priority= */ 0));
if (link->dhcp_client)
return log_link_debug_errno(link, SYNTHETIC_ERRNO(EBUSY), "DHCPv4 client is already configured.");
- r = sd_dhcp_client_new(&link->dhcp_client, link->network->dhcp_anonymize);
+ r = sd_dhcp_client_new(&link->dhcp_client);
if (r < 0)
return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to allocate DHCPv4 client: %m");
+ r = sd_dhcp_client_set_anonymize(link->dhcp_client, link->network->dhcp_anonymize);
+ if (r < 0)
+ return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to anonymize requests: %m");
+
r = sd_dhcp_client_set_bootp(link->dhcp_client, link->network->dhcp_use_bootp);
if (r < 0)
return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to %s BOOTP: %m",
sd_dhcp_client *client,
sd_dhcp_client_callback_t cb,
void *userdata);
-
+int sd_dhcp_client_set_anonymize(sd_dhcp_client *client, int b);
int sd_dhcp_client_set_request_option(
sd_dhcp_client *client,
uint8_t option);
_SD_DECLARE_TRIVIAL_REF_UNREF_FUNC(sd_dhcp_client);
-/* NOTE: anonymize parameter is used to initialize PRL memory with different
- * options when using RFC7844 Anonymity Profiles */
-int sd_dhcp_client_new(sd_dhcp_client **ret, int anonymize);
+int sd_dhcp_client_new(sd_dhcp_client **ret);
int sd_dhcp_client_attach_event(
sd_dhcp_client *client,