mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-23 21:57:46 +03:00
Merge pull request #17356 from yuwata/sd-xxx-stop
network: about sd_xxx_stop()
This commit is contained in:
commit
69f30d4321
@ -2135,9 +2135,10 @@ int sd_dhcp_client_send_decline(sd_dhcp_client *client) {
|
||||
}
|
||||
|
||||
int sd_dhcp_client_stop(sd_dhcp_client *client) {
|
||||
DHCP_CLIENT_DONT_DESTROY(client);
|
||||
if (!client)
|
||||
return 0;
|
||||
|
||||
assert_return(client, -EINVAL);
|
||||
DHCP_CLIENT_DONT_DESTROY(client);
|
||||
|
||||
client_stop(client, SD_DHCP_CLIENT_EVENT_STOP);
|
||||
client->state = DHCP_STATE_STOPPED;
|
||||
|
@ -225,7 +225,8 @@ sd_event *sd_dhcp_server_get_event(sd_dhcp_server *server) {
|
||||
}
|
||||
|
||||
int sd_dhcp_server_stop(sd_dhcp_server *server) {
|
||||
assert_return(server, -EINVAL);
|
||||
if (!server)
|
||||
return 0;
|
||||
|
||||
server->receive_message =
|
||||
sd_event_source_unref(server->receive_message);
|
||||
|
@ -1676,7 +1676,8 @@ static int client_start(sd_dhcp6_client *client, enum DHCP6State state) {
|
||||
}
|
||||
|
||||
int sd_dhcp6_client_stop(sd_dhcp6_client *client) {
|
||||
assert_return(client, -EINVAL);
|
||||
if (!client)
|
||||
return 0;
|
||||
|
||||
client_stop(client, SD_DHCP6_CLIENT_EVENT_STOP);
|
||||
|
||||
|
@ -144,7 +144,8 @@ static void ipv4acd_client_notify(sd_ipv4acd *acd, int event) {
|
||||
int sd_ipv4acd_stop(sd_ipv4acd *acd) {
|
||||
IPv4ACDState old_state;
|
||||
|
||||
assert_return(acd, -EINVAL);
|
||||
if (!acd)
|
||||
return 0;
|
||||
|
||||
old_state = acd->state;
|
||||
|
||||
|
@ -89,7 +89,8 @@ int sd_ipv4ll_new(sd_ipv4ll **ret) {
|
||||
}
|
||||
|
||||
int sd_ipv4ll_stop(sd_ipv4ll *ll) {
|
||||
assert_return(ll, -EINVAL);
|
||||
if (!ll)
|
||||
return 0;
|
||||
|
||||
return sd_ipv4acd_stop(ll->acd);
|
||||
}
|
||||
|
@ -276,7 +276,8 @@ fail:
|
||||
}
|
||||
|
||||
_public_ int sd_lldp_stop(sd_lldp *lldp) {
|
||||
assert_return(lldp, -EINVAL);
|
||||
if (!lldp)
|
||||
return 0;
|
||||
|
||||
if (lldp->fd < 0)
|
||||
return 0;
|
||||
|
@ -321,7 +321,8 @@ static int ndisc_timeout_no_ra(sd_event_source *s, uint64_t usec, void *userdata
|
||||
}
|
||||
|
||||
_public_ int sd_ndisc_stop(sd_ndisc *nd) {
|
||||
assert_return(nd, -EINVAL);
|
||||
if (!nd)
|
||||
return 0;
|
||||
|
||||
if (nd->fd < 0)
|
||||
return 0;
|
||||
|
@ -353,7 +353,8 @@ fail:
|
||||
_public_ int sd_radv_stop(sd_radv *ra) {
|
||||
int r;
|
||||
|
||||
assert_return(ra, -EINVAL);
|
||||
if (!ra)
|
||||
return 0;
|
||||
|
||||
if (ra->state == SD_RADV_STATE_IDLE)
|
||||
return 0;
|
||||
|
@ -1341,7 +1341,7 @@ static void static_address_on_acd(sd_ipv4acd *acd, int event, void *userdata) {
|
||||
assert_not_reached("Invalid IPv4ACD event.");
|
||||
}
|
||||
|
||||
sd_ipv4acd_stop(acd);
|
||||
(void) sd_ipv4acd_stop(acd);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1402,11 +1402,9 @@ static int ipv4_dad_update_mac_one(Address *address) {
|
||||
|
||||
running = sd_ipv4acd_is_running(address->acd);
|
||||
|
||||
if (running) {
|
||||
r = sd_ipv4acd_stop(address->acd);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
r = sd_ipv4acd_stop(address->acd);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_ipv4acd_set_mac(address->acd, &address->link->mac);
|
||||
if (r < 0)
|
||||
@ -1443,9 +1441,6 @@ int ipv4_dad_stop(Link *link) {
|
||||
assert(link);
|
||||
|
||||
SET_FOREACH(address, link->addresses) {
|
||||
if (!address->acd)
|
||||
continue;
|
||||
|
||||
k = sd_ipv4acd_stop(address->acd);
|
||||
if (k < 0 && r >= 0)
|
||||
r = k;
|
||||
@ -1454,6 +1449,15 @@ int ipv4_dad_stop(Link *link) {
|
||||
return r;
|
||||
}
|
||||
|
||||
void ipv4_dad_unref(Link *link) {
|
||||
Address *address;
|
||||
|
||||
assert(link);
|
||||
|
||||
SET_FOREACH(address, link->addresses)
|
||||
address->acd = sd_ipv4acd_unref(address->acd);
|
||||
}
|
||||
|
||||
int config_parse_broadcast(
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
|
@ -65,6 +65,7 @@ int link_drop_foreign_addresses(Link *link);
|
||||
int link_serialize_addresses(Link *link, FILE *f);
|
||||
int link_deserialize_addresses(Link *link, const char *addresses);
|
||||
|
||||
void ipv4_dad_unref(Link *link);
|
||||
int ipv4_dad_stop(Link *link);
|
||||
int ipv4_dad_update_mac(Link *link);
|
||||
|
||||
|
@ -570,8 +570,7 @@ static int dhcp_lease_lost(Link *link) {
|
||||
link->dhcp_lease = sd_dhcp_lease_unref(link->dhcp_lease);
|
||||
link_dirty(link);
|
||||
|
||||
if (link->dhcp_acd)
|
||||
(void) sd_ipv4acd_stop(link->dhcp_acd);
|
||||
(void) sd_ipv4acd_stop(link->dhcp_acd);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
@ -207,11 +207,9 @@ int ipv4ll_update_mac(Link *link) {
|
||||
|
||||
restart = sd_ipv4ll_is_running(link->ipv4ll) > 0;
|
||||
|
||||
if (restart) {
|
||||
r = sd_ipv4ll_stop(link->ipv4ll);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
r = sd_ipv4ll_stop(link->ipv4ll);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_ipv4ll_set_mac(link->ipv4ll, &link->mac);
|
||||
if (r < 0)
|
||||
|
@ -493,8 +493,10 @@ static void link_free_engines(Link *link) {
|
||||
link->dhcp_server = sd_dhcp_server_unref(link->dhcp_server);
|
||||
link->dhcp_client = sd_dhcp_client_unref(link->dhcp_client);
|
||||
link->dhcp_lease = sd_dhcp_lease_unref(link->dhcp_lease);
|
||||
link->dhcp_acd = sd_ipv4acd_unref(link->dhcp_acd);
|
||||
|
||||
link->lldp = sd_lldp_unref(link->lldp);
|
||||
link_lldp_emit_stop(link);
|
||||
|
||||
ndisc_flush(link);
|
||||
|
||||
@ -503,7 +505,8 @@ static void link_free_engines(Link *link) {
|
||||
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);
|
||||
|
||||
ipv4_dad_unref(link);
|
||||
}
|
||||
|
||||
static Link *link_free(Link *link) {
|
||||
@ -538,7 +541,6 @@ static Link *link_free(Link *link) {
|
||||
link->dhcp6_pd_addresses_old = set_free(link->dhcp6_pd_addresses_old);
|
||||
link->ndisc_addresses = set_free(link->ndisc_addresses);
|
||||
|
||||
link_lldp_emit_stop(link);
|
||||
link_free_engines(link);
|
||||
free(link->lease_file);
|
||||
free(link->lldp_file);
|
||||
@ -605,7 +607,7 @@ static void link_enter_unmanaged(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);
|
||||
@ -617,49 +619,47 @@ int link_stop_clients(Link *link, bool may_keep_dhcp) {
|
||||
(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->dhcp_acd) {
|
||||
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_ipv4acd_stop(link->dhcp_acd);
|
||||
if (k < 0)
|
||||
r = log_link_warning_errno(link, k, "Could not stop IPv4 ACD client for DHCPv4: %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_dhcp_server_stop(link->dhcp_server);
|
||||
if (k < 0)
|
||||
r = log_link_warning_errno(link, k, "Could not stop DHCPv4 server: %m");
|
||||
|
||||
k = sd_lldp_stop(link->lldp);
|
||||
if (k < 0)
|
||||
r = log_link_warning_errno(link, k, "Could not stop LLDP: %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;
|
||||
@ -675,7 +675,7 @@ void link_enter_failed(Link *link) {
|
||||
|
||||
link_set_state(link, LINK_STATE_FAILED);
|
||||
|
||||
(void) link_stop_clients(link, false);
|
||||
(void) link_stop_engines(link, false);
|
||||
|
||||
link_dirty(link);
|
||||
}
|
||||
@ -2090,13 +2090,10 @@ static int link_reconfigure_internal(Link *link, sd_netlink_message *m, bool for
|
||||
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;
|
||||
@ -2541,15 +2538,12 @@ static int link_carrier_lost(Link *link) {
|
||||
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;
|
||||
|
@ -231,7 +231,7 @@ int link_set_mtu(Link *link, uint32_t mtu);
|
||||
|
||||
bool link_ipv4ll_enabled(Link *link, AddressFamily mask);
|
||||
|
||||
int link_stop_clients(Link *link, bool may_keep_dhcp);
|
||||
int link_stop_engines(Link *link, bool may_keep_dhcp);
|
||||
|
||||
const char* link_state_to_string(LinkState s) _const_;
|
||||
LinkState link_state_from_string(const char *s) _pure_;
|
||||
|
@ -864,7 +864,7 @@ void manager_free(Manager *m) {
|
||||
free(m->state_file);
|
||||
|
||||
HASHMAP_FOREACH(link, m->links)
|
||||
(void) link_stop_clients(link, true);
|
||||
(void) link_stop_engines(link, true);
|
||||
|
||||
m->dhcp6_prefixes = hashmap_free_with_destructor(m->dhcp6_prefixes, dhcp6_pd_free);
|
||||
m->dhcp6_pd_prefixes = set_free_with_destructor(m->dhcp6_pd_prefixes, dhcp6_pd_free);
|
||||
|
@ -697,11 +697,9 @@ int radv_update_mac(Link *link) {
|
||||
|
||||
restart = sd_radv_is_running(link->radv);
|
||||
|
||||
if (restart) {
|
||||
r = sd_radv_stop(link->radv);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
r = sd_radv_stop(link->radv);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_radv_set_mac(link->radv, &link->mac);
|
||||
if (r < 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user