Skip to content

Commit cdaa7a7

Browse files
committed
Merge branch 'net-Fix-bridge-enslavement-failure'
Ido Schimmel says: ==================== net: Fix bridge enslavement failure Patch #1 fixes an issue in which an upper netdev cannot be enslaved to a bridge when it has multiple netdevs with different parent identifiers beneath it. Patch #2 adds a test case using two netdevsim instances. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 9d3b2d3 + 6374a56 commit cdaa7a7

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

net/core/dev.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -8647,7 +8647,7 @@ int dev_get_port_parent_id(struct net_device *dev,
86478647
if (!first.id_len)
86488648
first = *ppid;
86498649
else if (memcmp(&first, ppid, sizeof(*ppid)))
8650-
return -ENODATA;
8650+
return -EOPNOTSUPP;
86518651
}
86528652

86538653
return err;

tools/testing/selftests/net/rtnetlink.sh

+47
Original file line numberDiff line numberDiff line change
@@ -1175,6 +1175,51 @@ kci_test_neigh_get()
11751175
echo "PASS: neigh get"
11761176
}
11771177

1178+
kci_test_bridge_parent_id()
1179+
{
1180+
local ret=0
1181+
sysfsnet=/sys/bus/netdevsim/devices/netdevsim
1182+
probed=false
1183+
1184+
if [ ! -w /sys/bus/netdevsim/new_device ] ; then
1185+
modprobe -q netdevsim
1186+
check_err $?
1187+
if [ $ret -ne 0 ]; then
1188+
echo "SKIP: bridge_parent_id can't load netdevsim"
1189+
return $ksft_skip
1190+
fi
1191+
probed=true
1192+
fi
1193+
1194+
echo "10 1" > /sys/bus/netdevsim/new_device
1195+
while [ ! -d ${sysfsnet}10 ] ; do :; done
1196+
echo "20 1" > /sys/bus/netdevsim/new_device
1197+
while [ ! -d ${sysfsnet}20 ] ; do :; done
1198+
udevadm settle
1199+
dev10=`ls ${sysfsnet}10/net/`
1200+
dev20=`ls ${sysfsnet}20/net/`
1201+
1202+
ip link add name test-bond0 type bond mode 802.3ad
1203+
ip link set dev $dev10 master test-bond0
1204+
ip link set dev $dev20 master test-bond0
1205+
ip link add name test-br0 type bridge
1206+
ip link set dev test-bond0 master test-br0
1207+
check_err $?
1208+
1209+
# clean up any leftovers
1210+
ip link del dev test-br0
1211+
ip link del dev test-bond0
1212+
echo 20 > /sys/bus/netdevsim/del_device
1213+
echo 10 > /sys/bus/netdevsim/del_device
1214+
$probed && rmmod netdevsim
1215+
1216+
if [ $ret -ne 0 ]; then
1217+
echo "FAIL: bridge_parent_id"
1218+
return 1
1219+
fi
1220+
echo "PASS: bridge_parent_id"
1221+
}
1222+
11781223
kci_test_rtnl()
11791224
{
11801225
local ret=0
@@ -1224,6 +1269,8 @@ kci_test_rtnl()
12241269
check_err $?
12251270
kci_test_neigh_get
12261271
check_err $?
1272+
kci_test_bridge_parent_id
1273+
check_err $?
12271274

12281275
kci_del_dummy
12291276
return $ret

0 commit comments

Comments
 (0)