network: introduce link_reconfigure()
Will be used in later commits.
This commit is contained in:
parent
1a6bb31fae
commit
ad932b156c
|
@ -2855,6 +2855,78 @@ static int link_configure_duid(Link *link) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int link_reconfigure(Link *link) {
|
||||
Network *network;
|
||||
int r;
|
||||
|
||||
if (IN_SET(link->state, LINK_STATE_PENDING, LINK_STATE_LINGER))
|
||||
return 0;
|
||||
|
||||
r = network_get(link->manager, link->sd_device, link->ifname,
|
||||
&link->mac, &network);
|
||||
if (r == -ENOENT) {
|
||||
link_enter_unmanaged(link);
|
||||
return 0;
|
||||
} else if (r == 0 && network->unmanaged) {
|
||||
link_enter_unmanaged(link);
|
||||
return 0;
|
||||
} else if (r < 0)
|
||||
return r;
|
||||
|
||||
if (link->network == network)
|
||||
return 0;
|
||||
|
||||
log_link_info(link, "Re-configuring with %s", network->filename);
|
||||
|
||||
/* Dropping old .network file */
|
||||
r = link_stop_clients(link, false);
|
||||
if (r < 0) {
|
||||
link_enter_failed(link);
|
||||
return r;
|
||||
}
|
||||
|
||||
if (link_dhcp4_server_enabled(link))
|
||||
(void) sd_dhcp_server_stop(link->dhcp_server);
|
||||
|
||||
r = link_drop_config(link);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (!IN_SET(link->state, LINK_STATE_UNMANAGED, LINK_STATE_PENDING)) {
|
||||
log_link_debug(link, "State is %s, dropping config", link_state_to_string(link->state));
|
||||
r = link_drop_foreign_config(link);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
link_free_carrier_maps(link);
|
||||
link_free_engines(link);
|
||||
link->network = network_unref(link->network);
|
||||
|
||||
/* Then, apply new .network file */
|
||||
r = network_apply(network, link);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = link_new_carrier_maps(link);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
link_set_state(link, LINK_STATE_INITIALIZED);
|
||||
|
||||
/* link_configure_duid() returns 0 if it requests product UUID. In that case,
|
||||
* link_configure() is called later asynchronously. */
|
||||
r = link_configure_duid(link);
|
||||
if (r <= 0)
|
||||
return r;
|
||||
|
||||
r = link_configure(link);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int link_initialized_and_synced(Link *link) {
|
||||
Network *network;
|
||||
int r;
|
||||
|
|
|
@ -204,6 +204,8 @@ uint32_t link_get_ipv6_accept_ra_route_table(Link *link);
|
|||
int link_request_set_routes(Link *link);
|
||||
int link_request_set_nexthop(Link *link);
|
||||
|
||||
int link_reconfigure(Link *link);
|
||||
|
||||
#define ADDRESS_FMT_VAL(address) \
|
||||
be32toh((address).s_addr) >> 24, \
|
||||
(be32toh((address).s_addr) >> 16) & 0xFFu, \
|
||||
|
|
Loading…
Reference in New Issue