diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-12-07 13:34:39 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-07 13:34:39 +0900 |
commit | bf9afd7b310b1f4d27685be1b44f683847f4fc65 (patch) | |
tree | 32b1b0d9b03509acff112974db985d33c1862afd | |
parent | 94799c305acad138ce62e562318fbe7936a50dce (diff) | |
parent | 23b6bf274fc1a46d8778bfc979d3c803d61a1f5c (diff) | |
download | systemd-bf9afd7b310b1f4d27685be1b44f683847f4fc65.tar.gz |
Merge pull request #25628 from zhangjian3032/dev/fix-set-bond-mac-failed
network: Fix set bond device MAC address failed
-rw-r--r-- | src/network/networkd-setlink.c | 23 | ||||
-rw-r--r-- | src/network/networkd-setlink.h | 1 | ||||
-rw-r--r-- | test/test-network/conf/23-bond199.network | 3 | ||||
-rwxr-xr-x | test/test-network/systemd-networkd-tests.py | 1 |
4 files changed, 28 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; diff --git a/src/network/networkd-setlink.h b/src/network/networkd-setlink.h index 7e5ba32ef1..841e5eeb9c 100644 --- a/src/network/networkd-setlink.h +++ b/src/network/networkd-setlink.h @@ -25,4 +25,5 @@ int link_request_to_activate(Link *link); int link_request_to_bring_up_or_down(Link *link, bool up); int link_down_now(Link *link); +int link_down_slave_links(Link *link); int link_remove(Link *link); diff --git a/test/test-network/conf/23-bond199.network b/test/test-network/conf/23-bond199.network index 9f4879ff24..6a1f9a1bc7 100644 --- a/test/test-network/conf/23-bond199.network +++ b/test/test-network/conf/23-bond199.network @@ -4,3 +4,6 @@ Name=bond199 [Network] IPv6AcceptRA=no + +[Link] +MACAddress=00:11:22:33:44:55 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index e4e92d5a37..398ece8297 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -3881,6 +3881,7 @@ class NetworkdBondTests(unittest.TestCase, Utilities): output = check_output('ip -d link show bond199') print(output) self.assertRegex(output, 'primary dummy98') + self.assertIn('link/ether 00:11:22:33:44:55', output) def test_bond_operstate(self): copy_network_unit('25-bond.netdev', '11-dummy.netdev', '12-dummy.netdev', |