Commit 3722a987 authored by Jakub Kicinski's avatar Jakub Kicinski

Merge branch 'rtnetlink-allow-to-enslave-with-one-msg-an-up-interface'

Nicolas Dichtel says:

====================
rtnetlink: allow to enslave with one msg an up interface

The first patch fixes a regression, introduced in linux v6.1, by reverting
a patch. The second patch adds a test to verify this API.
====================

Link: https://lore.kernel.org/r/20240108094103.2001224-1-nicolas.dichtel@6wind.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 87220143 a159cbe8
...@@ -2899,13 +2899,6 @@ static int do_setlink(const struct sk_buff *skb, ...@@ -2899,13 +2899,6 @@ static int do_setlink(const struct sk_buff *skb,
call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
} }
if (tb[IFLA_MASTER]) {
err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]), extack);
if (err)
goto errout;
status |= DO_SETLINK_MODIFIED;
}
if (ifm->ifi_flags || ifm->ifi_change) { if (ifm->ifi_flags || ifm->ifi_change) {
err = dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm), err = dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm),
extack); extack);
...@@ -2913,6 +2906,13 @@ static int do_setlink(const struct sk_buff *skb, ...@@ -2913,6 +2906,13 @@ static int do_setlink(const struct sk_buff *skb,
goto errout; goto errout;
} }
if (tb[IFLA_MASTER]) {
err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]), extack);
if (err)
goto errout;
status |= DO_SETLINK_MODIFIED;
}
if (tb[IFLA_CARRIER]) { if (tb[IFLA_CARRIER]) {
err = dev_change_carrier(dev, nla_get_u8(tb[IFLA_CARRIER])); err = dev_change_carrier(dev, nla_get_u8(tb[IFLA_CARRIER]));
if (err) if (err)
......
...@@ -28,6 +28,7 @@ ALL_TESTS=" ...@@ -28,6 +28,7 @@ ALL_TESTS="
kci_test_neigh_get kci_test_neigh_get
kci_test_bridge_parent_id kci_test_bridge_parent_id
kci_test_address_proto kci_test_address_proto
kci_test_enslave_bonding
" "
devdummy="test-dummy0" devdummy="test-dummy0"
...@@ -1241,6 +1242,33 @@ kci_test_address_proto() ...@@ -1241,6 +1242,33 @@ kci_test_address_proto()
return $ret return $ret
} }
kci_test_enslave_bonding()
{
local testns="testns"
local bond="bond123"
local dummy="dummy123"
local ret=0
run_cmd ip netns add "$testns"
if [ $ret -ne 0 ]; then
end_test "SKIP bonding tests: cannot add net namespace $testns"
return $ksft_skip
fi
run_cmd ip -netns $testns link add dev $bond type bond mode balance-rr
run_cmd ip -netns $testns link add dev $dummy type dummy
run_cmd ip -netns $testns link set dev $dummy up
run_cmd ip -netns $testns link set dev $dummy master $bond down
if [ $ret -ne 0 ]; then
end_test "FAIL: initially up interface added to a bond and set down"
ip netns del "$testns"
return 1
fi
end_test "PASS: enslave interface in a bond"
ip netns del "$testns"
}
kci_test_rtnl() kci_test_rtnl()
{ {
local current_test local current_test
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment