brintos

brintos / linux-shallow public Read only

0
0
Text · 4.5 KiB · bf9bcd1 Raw
178 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4NAMESPACES=""5 6# Test that a link aggregation device (bonding, team) removes the hardware7# addresses that it adds on its underlying devices.8test_LAG_cleanup()9{10	local driver=$111	local mode=$212	local ucaddr="02:00:00:12:34:56"13	local addr6="fe80::78:9abc/64"14	local mcaddr="33:33:ff:78:9a:bc"15	local name16 17	ip link add dummy1 type dummy18	ip link add dummy2 type dummy19	if [ "$driver" = "bonding" ]; then20		name="bond1"21		ip link add "$name" up type bond mode "$mode"22		ip link set dev dummy1 master "$name"23		ip link set dev dummy2 master "$name"24	elif [ "$driver" = "team" ]; then25		name="team0"26		teamd -d -c '27			{28				"device": "'"$name"'",29				"runner": {30					"name": "'"$mode"'"31				},32				"ports": {33					"dummy1":34						{},35					"dummy2":36						{}37				}38			}39		'40		ip link set dev "$name" up41	else42		check_err 143		log_test test_LAG_cleanup ": unknown driver \"$driver\""44		return45	fi46 47	# Used to test dev->uc handling48	ip link add mv0 link "$name" up address "$ucaddr" type macvlan49	# Used to test dev->mc handling50	ip address add "$addr6" dev "$name"51 52	# Check that addresses were added as expected53	(grep_bridge_fdb "$ucaddr" bridge fdb show dev dummy1 ||54		grep_bridge_fdb "$ucaddr" bridge fdb show dev dummy2) >/dev/null55	check_err $? "macvlan unicast address not found on a slave"56 57	# mcaddr is added asynchronously by addrconf_dad_work(), use busywait58	(busywait 10000 grep_bridge_fdb "$mcaddr" bridge fdb show dev dummy1 ||59		grep_bridge_fdb "$mcaddr" bridge fdb show dev dummy2) >/dev/null60	check_err $? "IPv6 solicited-node multicast mac address not found on a slave"61 62	ip link set dev "$name" down63	ip link del "$name"64 65	not grep_bridge_fdb "$ucaddr" bridge fdb show >/dev/null66	check_err $? "macvlan unicast address still present on a slave"67 68	not grep_bridge_fdb "$mcaddr" bridge fdb show >/dev/null69	check_err $? "IPv6 solicited-node multicast mac address still present on a slave"70 71	cleanup72 73	log_test "$driver cleanup mode $mode"74}75 76# Build a generic 2 node net namespace with 2 connections77# between the namespaces78#79#  +-----------+       +-----------+80#  | node1     |       | node2     |81#  |           |       |           |82#  |           |       |           |83#  |      eth0 +-------+ eth0      |84#  |           |       |           |85#  |      eth1 +-------+ eth1      |86#  |           |       |           |87#  +-----------+       +-----------+88lag_setup2x2()89{90	local state=${1:-down}91	local namespaces="lag_node1 lag_node2"92 93	# create namespaces94	for n in ${namespaces}; do95		ip netns add ${n}96	done97 98	# wire up namespaces99	ip link add name lag1 type veth peer name lag1-end100	ip link set dev lag1 netns lag_node1 $state name eth0101	ip link set dev lag1-end netns lag_node2 $state name eth0102 103	ip link add name lag1 type veth peer name lag1-end104	ip link set dev lag1 netns lag_node1 $state name eth1105	ip link set dev lag1-end netns lag_node2 $state name eth1106 107	NAMESPACES="${namespaces}"108}109 110# cleanup all lag related namespaces111lag_cleanup()112{113	for n in ${NAMESPACES}; do114		ip netns delete ${n} >/dev/null 2>&1 || true115	done116}117 118SWITCH="lag_node1"119CLIENT="lag_node2"120CLIENTIP="172.20.2.1"121SWITCHIP="172.20.2.2"122 123lag_setup_network()124{125	lag_setup2x2 "down"126 127	# create switch128	ip netns exec ${SWITCH} ip link add br0 up type bridge129	ip netns exec ${SWITCH} ip link set eth0 master br0 up130	ip netns exec ${SWITCH} ip link set eth1 master br0 up131	ip netns exec ${SWITCH} ip addr add ${SWITCHIP}/24 dev br0132}133 134lag_reset_network()135{136	ip netns exec ${CLIENT} ip link del bond0137	ip netns exec ${SWITCH} ip link set eth0 up138	ip netns exec ${SWITCH} ip link set eth1 up139}140 141create_bond()142{143	# create client144	ip netns exec ${CLIENT} ip link set eth0 down145	ip netns exec ${CLIENT} ip link set eth1 down146 147	ip netns exec ${CLIENT} ip link add bond0 type bond $@148	ip netns exec ${CLIENT} ip link set eth0 master bond0149	ip netns exec ${CLIENT} ip link set eth1 master bond0150	ip netns exec ${CLIENT} ip link set bond0 up151	ip netns exec ${CLIENT} ip addr add ${CLIENTIP}/24 dev bond0152}153 154test_bond_recovery()155{156	RET=0157 158	create_bond $@159 160	# verify connectivity161	slowwait 2 ip netns exec ${CLIENT} ping ${SWITCHIP} -c 2 -W 0.1 &> /dev/null162	check_err $? "No connectivity"163 164	# force the links of the bond down165	ip netns exec ${SWITCH} ip link set eth0 down166	sleep 2167	ip netns exec ${SWITCH} ip link set eth0 up168	ip netns exec ${SWITCH} ip link set eth1 down169 170	# re-verify connectivity171	slowwait 2 ip netns exec ${CLIENT} ping ${SWITCHIP} -c 2 -W 0.1 &> /dev/null172 173	local rc=$?174	check_err $rc "Bond failed to recover"175	log_test "$1 ($2) bond recovery"176	lag_reset_network177}178