Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: net: Test bridge backup port when port is administratively down

Test that packets are redirected to the backup port when the primary
port is administratively down.

With the previous patch:

# ./test_bridge_backup_port.sh
[...]
TEST: swp1 administratively down [ OK ]
TEST: No forwarding out of swp1 [ OK ]
TEST: Forwarding out of vx0 [ OK ]
TEST: swp1 administratively up [ OK ]
TEST: Forwarding out of swp1 [ OK ]
TEST: No forwarding out of vx0 [ OK ]
[...]
Tests passed: 89
Tests failed: 0

Without the previous patch:

# ./test_bridge_backup_port.sh
[...]
TEST: swp1 administratively down [ OK ]
TEST: No forwarding out of swp1 [ OK ]
TEST: Forwarding out of vx0 [FAIL]
TEST: swp1 administratively up [ OK ]
TEST: Forwarding out of swp1 [ OK ]
[...]
Tests passed: 85
Tests failed: 4

Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://patch.msgid.link/20250812080213.325298-3-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Ido Schimmel and committed by
Jakub Kicinski
51ca1e67 3d05b244

+27 -4
+27 -4
tools/testing/selftests/net/test_bridge_backup_port.sh
··· 315 315 tc_check_packets $sw1 "dev vx0 egress" 101 1 316 316 log_test $? 0 "No forwarding out of vx0" 317 317 318 + # Check that packets are forwarded out of vx0 when swp1 is 319 + # administratively down and out of swp1 when it is administratively up 320 + # again. 321 + run_cmd "ip -n $sw1 link set dev swp1 down" 322 + busywait $BUSYWAIT_TIMEOUT bridge_link_check $sw1 swp1 disabled 323 + log_test $? 0 "swp1 administratively down" 324 + 325 + run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" 326 + tc_check_packets $sw1 "dev swp1 egress" 101 3 327 + log_test $? 0 "No forwarding out of swp1" 328 + tc_check_packets $sw1 "dev vx0 egress" 101 2 329 + log_test $? 0 "Forwarding out of vx0" 330 + 331 + run_cmd "ip -n $sw1 link set dev swp1 up" 332 + busywait $BUSYWAIT_TIMEOUT bridge_link_check $sw1 swp1 forwarding 333 + log_test $? 0 "swp1 administratively up" 334 + 335 + run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" 336 + tc_check_packets $sw1 "dev swp1 egress" 101 4 337 + log_test $? 0 "Forwarding out of swp1" 338 + tc_check_packets $sw1 "dev vx0 egress" 101 2 339 + log_test $? 0 "No forwarding out of vx0" 340 + 318 341 # Remove vx0 as the backup port of swp1 and check that packets are no 319 342 # longer forwarded out of vx0 when swp1 does not have a carrier. 320 343 run_cmd "bridge -n $sw1 link set dev swp1 nobackup_port" ··· 345 322 log_test $? 1 "vx0 not configured as backup port of swp1" 346 323 347 324 run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" 348 - tc_check_packets $sw1 "dev swp1 egress" 101 4 325 + tc_check_packets $sw1 "dev swp1 egress" 101 5 349 326 log_test $? 0 "Forwarding out of swp1" 350 - tc_check_packets $sw1 "dev vx0 egress" 101 1 327 + tc_check_packets $sw1 "dev vx0 egress" 101 2 351 328 log_test $? 0 "No forwarding out of vx0" 352 329 353 330 run_cmd "ip -n $sw1 link set dev swp1 carrier off" ··· 355 332 log_test $? 0 "swp1 carrier off" 356 333 357 334 run_cmd "ip netns exec $sw1 mausezahn br0.10 -a $smac -b $dmac -A 198.51.100.1 -B 198.51.100.2 -t ip -p 100 -q -c 1" 358 - tc_check_packets $sw1 "dev swp1 egress" 101 4 335 + tc_check_packets $sw1 "dev swp1 egress" 101 5 359 336 log_test $? 0 "No forwarding out of swp1" 360 - tc_check_packets $sw1 "dev vx0 egress" 101 1 337 + tc_check_packets $sw1 "dev vx0 egress" 101 2 361 338 log_test $? 0 "No forwarding out of vx0" 362 339 } 363 340