tests/carp: Rework unicast_v4

For unicast tests, it is sufficient to use wait_for_carp() to verify
the setup is sane. Additional sanity checks are not necessarily
required but can serve purpose for redundancy.

For some unclear reason routed(8) is advertising route to carp BACKUP.
That makes the test flaky. Also routed(8) is marked deprecated and may
be removed from base in the future. Let's just add static route entry
manually for additional sanity checks.

Other noticeable changes:
  1. Add atf_check to configuration steps to prevent potential failure
on setup. That helps diagnosing on failure.
  2. Shorten the names of jails to improve readability.
  3. Prefer `[ifconfig|route|sysctl] -j` over `jexec [ifconfig|route|sysctl]`
to make the lines shorter.

PR:		294817
Reviewed by:	glebius (previous version), pouria, markj
Fixes:		93fbdef51a tests: carp: Update test case unicast_v4 to catch PR 284872
MFC after:	3 days
Differential Revision:	https://reviews.freebsd.org/D56761
This commit is contained in:
Zhenlei Huang
2026-05-03 19:02:15 +08:00
parent 5a6d9479ae
commit 9137c66c2e
+44 -36
View File
@@ -169,58 +169,66 @@ unicast_v4_body()
epair_one=$(vnet_mkepair)
epair_two=$(vnet_mkepair)
vnet_mkjail carp_uni_v4_one ${epair_one}a ${epair_two}a
vnet_mkjail carp_uni_v4_two ${epair_one}b
vnet_mkjail carp_uni_v4_three ${epair_two}b
j="carp_uni_v4_"
jexec carp_uni_v4_one sysctl net.inet.ip.forwarding=1
jexec carp_uni_v4_one ifconfig ${epair_one}a inet 198.51.100.1/25
jexec carp_uni_v4_one ifconfig ${epair_two}a inet 198.51.100.129/25
# The router
vnet_mkjail ${j}one ${epair_one}a ${epair_two}a
# The hosts
vnet_mkjail ${j}two ${epair_one}b
vnet_mkjail ${j}three ${epair_two}b
jexec carp_uni_v4_two sysctl net.inet.ip.forwarding=1
jexec carp_uni_v4_two ifconfig ${epair_one}b 198.51.100.2/25 up
jexec carp_uni_v4_two route add 198.51.100.224 198.51.100.1
# A peer address x.x.x.224 to catch PR 284872
jexec carp_uni_v4_two ifconfig ${epair_one}b add vhid 1 \
peer 198.51.100.224 192.0.2.1/32
atf_check -o ignore sysctl -j ${j}one net.inet.ip.forwarding=1
atf_check ifconfig -j ${j}one ${epair_one}a inet 198.51.100.1/25
atf_check ifconfig -j ${j}one ${epair_two}a inet 198.51.100.129/25
sleep 0.2
jexec carp_uni_v4_three sysctl net.inet.ip.forwarding=1
jexec carp_uni_v4_three ifconfig ${epair_two}b 198.51.100.224/25 up
jexec carp_uni_v4_three route add 198.51.100.2 198.51.100.129
jexec carp_uni_v4_three ifconfig ${epair_two}b add vhid 1 \
peer 198.51.100.2 192.0.2.1/32
atf_check ifconfig -j ${j}two ${epair_one}b 198.51.100.2/25 up
atf_check -o ignore route -j ${j}two -n add default 198.51.100.1
atf_check ifconfig -j ${j}three ${epair_two}b 198.51.100.224/25 up
atf_check -o ignore route -j ${j}three -n add default 198.51.100.129
sleep 0.1
# Sanity check
atf_check -s exit:0 -o ignore jexec carp_uni_v4_two \
atf_check -o ignore jexec ${j}one \
ping -c 1 198.51.100.2
atf_check -o ignore jexec ${j}one \
ping -c 1 198.51.100.224
atf_check -o ignore jexec ${j}two \
ping -c 1 198.51.100.224
wait_for_carp carp_uni_v4_two ${epair_one}b \
carp_uni_v4_three ${epair_two}b
# A peer address x.x.x.224 to catch PR 284872
atf_check ifconfig -j ${j}two ${epair_one}b add vhid 1 \
peer 198.51.100.224 192.0.2.1/32
sleep 0.2
atf_check ifconfig -j ${j}three ${epair_two}b add vhid 1 \
peer 198.51.100.2 192.0.2.1/32
# Setup RIPv2 route daemon
jexec carp_uni_v4_two routed -s -Pripv2
jexec carp_uni_v4_three routed -s -Pripv2
jexec carp_uni_v4_one routed -Pripv2
wait_for_carp ${j}two ${epair_one}b \
${j}three ${epair_two}b
# XXX Wait for route propagation
sleep 3
if is_master ${j}two ${epair_one}b ; then
atf_check -o ignore \
route -j ${j}one -n add 192.0.2.1 198.51.100.2
fi
atf_check -s exit:0 -o ignore jexec carp_uni_v4_one \
ping -c 3 192.0.2.1
if is_master ${j}three ${epair_two}b ; then
atf_check -o ignore \
route -j ${j}one -n add 192.0.2.1 198.51.100.224
fi
# Not necessarily required, but just in case
atf_check -o ignore jexec ${j}one \
ping -c 1 192.0.2.1
# Check that we remain in unicast when tweaking settings
atf_check -s exit:0 -o ignore \
jexec carp_uni_v4_two ifconfig ${epair_one}b vhid 1 advskew 2
atf_check -s exit:0 -o match:"peer 198.51.100.224" \
jexec carp_uni_v4_two ifconfig ${epair_one}b
atf_check -o ignore \
ifconfig -j ${j}two ${epair_one}b vhid 1 advskew 2
atf_check -o match:"peer 198.51.100.224" \
ifconfig -j ${j}two ${epair_one}b
}
unicast_v4_cleanup()
{
jexec carp_uni_v4_one killall routed
jexec carp_uni_v4_two killall routed
jexec carp_uni_v4_three killall routed
vnet_cleanup
}