Commit cdaa7a73 authored by David S. Miller's avatar David S. Miller
Browse files

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: default avatarDavid S. Miller <davem@davemloft.net>
parents 9d3b2d3e 6374a560
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -8647,7 +8647,7 @@ int dev_get_port_parent_id(struct net_device *dev,
		if (!first.id_len)
			first = *ppid;
		else if (memcmp(&first, ppid, sizeof(*ppid)))
			return -ENODATA;
			return -EOPNOTSUPP;
	}

	return err;
+47 −0
Original line number Diff line number Diff line
@@ -1175,6 +1175,51 @@ kci_test_neigh_get()
	echo "PASS: neigh get"
}

kci_test_bridge_parent_id()
{
	local ret=0
	sysfsnet=/sys/bus/netdevsim/devices/netdevsim
	probed=false

	if [ ! -w /sys/bus/netdevsim/new_device ] ; then
		modprobe -q netdevsim
		check_err $?
		if [ $ret -ne 0 ]; then
			echo "SKIP: bridge_parent_id can't load netdevsim"
			return $ksft_skip
		fi
		probed=true
	fi

	echo "10 1" > /sys/bus/netdevsim/new_device
	while [ ! -d ${sysfsnet}10 ] ; do :; done
	echo "20 1" > /sys/bus/netdevsim/new_device
	while [ ! -d ${sysfsnet}20 ] ; do :; done
	udevadm settle
	dev10=`ls ${sysfsnet}10/net/`
	dev20=`ls ${sysfsnet}20/net/`

	ip link add name test-bond0 type bond mode 802.3ad
	ip link set dev $dev10 master test-bond0
	ip link set dev $dev20 master test-bond0
	ip link add name test-br0 type bridge
	ip link set dev test-bond0 master test-br0
	check_err $?

	# clean up any leftovers
	ip link del dev test-br0
	ip link del dev test-bond0
	echo 20 > /sys/bus/netdevsim/del_device
	echo 10 > /sys/bus/netdevsim/del_device
	$probed && rmmod netdevsim

	if [ $ret -ne 0 ]; then
		echo "FAIL: bridge_parent_id"
		return 1
	fi
	echo "PASS: bridge_parent_id"
}

kci_test_rtnl()
{
	local ret=0
@@ -1224,6 +1269,8 @@ kci_test_rtnl()
	check_err $?
	kci_test_neigh_get
	check_err $?
	kci_test_bridge_parent_id
	check_err $?

	kci_del_dummy
	return $ret