link->dhcp6_lease = sd_dhcp6_lease_unref(link->dhcp6_lease);
link->ndisc = sd_ndisc_unref(link->ndisc);
link->radv = sd_radv_unref(link->radv);
+ link->dhcp_acd = sd_ipv4acd_unref(link->dhcp_acd);
}
static Link *link_free(Link *link) {
link_dirty(link);
}
-int link_stop_clients(Link *link, bool may_keep_dhcp) {
+int link_stop_engines(Link *link, bool may_keep_dhcp) {
int r = 0, k;
assert(link);
(link->manager->restarting ||
FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP_ON_STOP));
- if (link->dhcp_client && !keep_dhcp) {
+ if (!keep_dhcp) {
k = sd_dhcp_client_stop(link->dhcp_client);
if (k < 0)
r = log_link_warning_errno(link, k, "Could not stop DHCPv4 client: %m");
}
- if (link->ipv4ll) {
- k = sd_ipv4ll_stop(link->ipv4ll);
- if (k < 0)
- r = log_link_warning_errno(link, k, "Could not stop IPv4 link-local: %m");
- }
+ k = sd_ipv4acd_stop(link->dhcp_acd);
+ if (k < 0)
+ r = log_link_warning_errno(link, k, "Could not stop IPv4 ACD client for DHCPv4: %m");
+
+ k = sd_dhcp_server_stop(link->dhcp_server);
+ if (k < 0)
+ r = log_link_warning_errno(link, k, "Could not stop DHCPv4 server: %m");
+
+ k = sd_ipv4ll_stop(link->ipv4ll);
+ if (k < 0)
+ r = log_link_warning_errno(link, k, "Could not stop IPv4 link-local: %m");
k = ipv4_dad_stop(link);
if (k < 0)
r = log_link_warning_errno(link, k, "Could not stop IPv4 ACD client: %m");
- if (link->dhcp6_client) {
- k = sd_dhcp6_client_stop(link->dhcp6_client);
- if (k < 0)
- r = log_link_warning_errno(link, k, "Could not stop DHCPv6 client: %m");
- }
+ k = sd_dhcp6_client_stop(link->dhcp6_client);
+ if (k < 0)
+ r = log_link_warning_errno(link, k, "Could not stop DHCPv6 client: %m");
k = dhcp6_pd_remove(link);
if (k < 0)
r = log_link_warning_errno(link, k, "Could not remove DHCPv6 PD addresses and routes: %m");
- if (link->ndisc) {
- k = sd_ndisc_stop(link->ndisc);
- if (k < 0)
- r = log_link_warning_errno(link, k, "Could not stop IPv6 Router Discovery: %m");
- }
+ k = sd_ndisc_stop(link->ndisc);
+ if (k < 0)
+ r = log_link_warning_errno(link, k, "Could not stop IPv6 Router Discovery: %m");
- if (link->radv) {
- k = sd_radv_stop(link->radv);
- if (k < 0)
- r = log_link_warning_errno(link, k, "Could not stop IPv6 Router Advertisement: %m");
- }
+ k = sd_radv_stop(link->radv);
+ if (k < 0)
+ r = log_link_warning_errno(link, k, "Could not stop IPv6 Router Advertisement: %m");
link_lldp_emit_stop(link);
return r;
link_set_state(link, LINK_STATE_FAILED);
- link_stop_clients(link, false);
+ (void) link_stop_engines(link, false);
link_dirty(link);
}
return 0;
link_set_state(link, LINK_STATE_CONFIGURING);
+
+ r = link_acquire_conf(link);
+ if (r < 0)
+ return r;
+
return link_set_static_configs(link);
}
if (r < 0)
log_link_warning_errno(link, r, "Cannot set IPv6 MTU for interface, ignoring: %m");
- if (link_has_carrier(link) || link->network->configure_without_carrier) {
- r = link_acquire_conf(link);
- if (r < 0)
- return r;
- }
-
return link_enter_join_netdev(link);
}
log_link_info(link, "Re-configuring with %s", network->filename);
/* Dropping old .network file */
- r = link_stop_clients(link, false);
+ r = link_stop_engines(link, false);
if (r < 0)
return r;
- if (link->dhcp_server)
- (void) sd_dhcp_server_stop(link->dhcp_server);
-
r = link_drop_config(link);
if (r < 0)
return r;
if (link->setting_mtu)
return 0;
- r = link_stop_clients(link, false);
+ r = link_stop_engines(link, false);
if (r < 0) {
link_enter_failed(link);
return r;
}
- if (link->dhcp_server)
- (void) sd_dhcp_server_stop(link->dhcp_server);
-
r = link_drop_config(link);
if (r < 0)
return r;