network: introduce link_deserialize_dhcp4()
This commit is contained in:
parent
bbe694f91f
commit
571eeba909
|
@ -1241,6 +1241,25 @@ int dhcp4_set_client_identifier(Link *link) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dhcp4_init(Link *link) {
|
||||
int r;
|
||||
|
||||
assert(link);
|
||||
|
||||
if (link->dhcp_client)
|
||||
return 0;
|
||||
|
||||
r = sd_dhcp_client_new(&link->dhcp_client, link->network->dhcp_anonymize);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_dhcp_client_attach_event(link->dhcp_client, link->manager->event, 0);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dhcp4_configure(Link *link) {
|
||||
sd_dhcp_option *send_option;
|
||||
void *request_options;
|
||||
|
@ -1250,17 +1269,9 @@ int dhcp4_configure(Link *link) {
|
|||
assert(link->network);
|
||||
assert(link->network->dhcp & ADDRESS_FAMILY_IPV4);
|
||||
|
||||
if (!link->dhcp_client) {
|
||||
r = sd_dhcp_client_new(&link->dhcp_client, link->network->dhcp_anonymize);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to create DHCP4 client: %m");
|
||||
|
||||
r = sd_dhcp_client_attach_event(link->dhcp_client, NULL, 0);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to attach event: %m");
|
||||
}
|
||||
r = dhcp4_init(link);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to initialize DHCP4 client: %m");
|
||||
|
||||
r = sd_dhcp_client_set_mac(link->dhcp_client,
|
||||
(const uint8_t *) &link->mac,
|
||||
|
@ -1420,6 +1431,30 @@ int dhcp4_configure(Link *link) {
|
|||
return dhcp4_set_client_identifier(link);
|
||||
}
|
||||
|
||||
int link_deserialize_dhcp4(Link *link, const char *dhcp4_address) {
|
||||
union in_addr_union address;
|
||||
int r;
|
||||
|
||||
assert(link);
|
||||
|
||||
if (isempty(dhcp4_address))
|
||||
return 0;
|
||||
|
||||
r = in_addr_from_string(AF_INET, dhcp4_address, &address);
|
||||
if (r < 0)
|
||||
return log_link_debug_errno(link, r, "Failed to parse DHCPv4 address: %s", dhcp4_address);
|
||||
|
||||
r = dhcp4_init(link);
|
||||
if (r < 0)
|
||||
return log_link_debug_errno(link, r, "Failed to initialize DHCPv4 client: %m");
|
||||
|
||||
r = sd_dhcp_client_set_request_address(link->dhcp_client, &address.in);
|
||||
if (r < 0)
|
||||
return log_link_debug_errno(link, r, "Failed to set initial DHCPv4 address %s: %m", dhcp4_address);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_dhcp_max_attempts(
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
|
|
|
@ -21,6 +21,8 @@ int dhcp4_configure(Link *link);
|
|||
int dhcp4_set_client_identifier(Link *link);
|
||||
int dhcp4_set_promote_secondaries(Link *link);
|
||||
|
||||
int link_deserialize_dhcp4(Link *link, const char *dhcp4_address);
|
||||
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_client_identifier);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_acl_ip_address);
|
||||
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_max_attempts);
|
||||
|
|
|
@ -2726,27 +2726,9 @@ network_file_fail:
|
|||
if (r < 0)
|
||||
log_link_warning_errno(link, r, "Failed to load routes from %s, ignoring: %m", link->state_file);
|
||||
|
||||
if (dhcp4_address) {
|
||||
r = in_addr_from_string(AF_INET, dhcp4_address, &address);
|
||||
if (r < 0) {
|
||||
log_link_debug_errno(link, r, "Failed to parse DHCPv4 address %s: %m", dhcp4_address);
|
||||
goto dhcp4_address_fail;
|
||||
}
|
||||
|
||||
r = sd_dhcp_client_new(&link->dhcp_client, link->network ? link->network->dhcp_anonymize : 0);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Failed to create DHCPv4 client: %m");
|
||||
|
||||
r = sd_dhcp_client_attach_event(link->dhcp_client, NULL, 0);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Failed to attach DHCPv4 event: %m");
|
||||
|
||||
r = sd_dhcp_client_set_request_address(link->dhcp_client, &address.in);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Failed to set initial DHCPv4 address %s: %m", dhcp4_address);
|
||||
}
|
||||
|
||||
dhcp4_address_fail:
|
||||
r = link_deserialize_dhcp4(link, dhcp4_address);
|
||||
if (r < 0)
|
||||
log_link_warning_errno(link, r, "Failed to load DHCPv4 address from %s, ignoring: %m", link->state_file);
|
||||
|
||||
if (ipv4ll_address) {
|
||||
r = in_addr_from_string(AF_INET, ipv4ll_address, &address);
|
||||
|
|
Loading…
Reference in New Issue