mirror of
https://github.com/systemd/systemd.git
synced 2024-10-30 06:25:37 +03:00
network: do not free bound_by carrier map on reconfigure
Otherwise, if a link enters unmanaged state, then its carrier state does not propagated to other interfaces.
This commit is contained in:
parent
b69bfa4305
commit
3cf58ef316
@ -894,24 +894,6 @@ static int link_new_bound_to_list(Link *link) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int link_new_carrier_maps(Link *link) {
|
|
||||||
int r;
|
|
||||||
|
|
||||||
r = link_new_bound_by_list(link);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = link_handle_bound_by_list(link);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = link_new_bound_to_list(link);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
return link_handle_bound_to_list(link);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void link_free_bound_to_list(Link *link) {
|
static void link_free_bound_to_list(Link *link) {
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
Link *bound_to;
|
Link *bound_to;
|
||||||
@ -1119,6 +1101,10 @@ static int link_configure(Link *link) {
|
|||||||
|
|
||||||
link_set_state(link, LINK_STATE_CONFIGURING);
|
link_set_state(link, LINK_STATE_CONFIGURING);
|
||||||
|
|
||||||
|
r = link_new_bound_to_list(link);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
r = link_configure_traffic_control(link);
|
r = link_configure_traffic_control(link);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
@ -1325,7 +1311,12 @@ static int link_reconfigure_impl(Link *link, bool force) {
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
link_free_carrier_maps(link);
|
/* The bound_to map depends on .network file, hence it needs to be freed. But, do not free the
|
||||||
|
* bound_by map. Otherwise, if a link enters unmanaged state below, then its carrier state will
|
||||||
|
* not propagated to other interfaces anymore. Moreover, it is not necessary to recreate the
|
||||||
|
* map here, as it depends on .network files assigned to other links. */
|
||||||
|
link_free_bound_to_list(link);
|
||||||
|
|
||||||
link_free_engines(link);
|
link_free_engines(link);
|
||||||
link->network = network_unref(link->network);
|
link->network = network_unref(link->network);
|
||||||
|
|
||||||
@ -1339,10 +1330,6 @@ static int link_reconfigure_impl(Link *link, bool force) {
|
|||||||
link_update_operstate(link, true);
|
link_update_operstate(link, true);
|
||||||
link_dirty(link);
|
link_dirty(link);
|
||||||
|
|
||||||
r = link_new_carrier_maps(link);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
link_set_state(link, LINK_STATE_INITIALIZED);
|
link_set_state(link, LINK_STATE_INITIALIZED);
|
||||||
link->activated = false;
|
link->activated = false;
|
||||||
|
|
||||||
@ -1496,10 +1483,6 @@ static int link_initialized_and_synced(Link *link) {
|
|||||||
link_dirty(link);
|
link_dirty(link);
|
||||||
}
|
}
|
||||||
|
|
||||||
r = link_new_bound_to_list(link);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
return link_configure(link);
|
return link_configure(link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user