diff options
Diffstat (limited to 'src/network/networkd-setlink.c')
-rw-r--r-- | src/network/networkd-setlink.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c index b6aaa1e9db..541c4b8a72 100644 --- a/src/network/networkd-setlink.c +++ b/src/network/networkd-setlink.c @@ -502,6 +502,14 @@ static int link_is_ready_to_set_link(Link *link, Request *req) { r = link_down_now(link); if (r < 0) return r; + + /* If the kind of the link is "bond", we need + * set the slave link down as well. */ + if (streq_ptr(link->kind, "bond")) { + r = link_down_slave_links(link); + if (r < 0) + return r; + } } break; @@ -1226,6 +1234,21 @@ int link_down_now(Link *link) { return 0; } +int link_down_slave_links(Link *link) { + Link *slave; + int r; + + assert(link); + + SET_FOREACH(slave, link->slaves) { + r = link_down_now(slave); + if (r < 0) + return r; + } + + return 0; +} + static int link_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) { int r; |