git: 04d0dc4c0c65 - main - tests: gif(4): Add regression tests for setup with EtherIP

From: Zhenlei Huang <zlei_at_FreeBSD.org>
Date: Fri, 08 Aug 2025 10:19:20 UTC
The branch main has been updated by zlei:

URL: https://cgit.FreeBSD.org/src/commit/?id=04d0dc4c0c65592a21225cff43f25e0a0da64eb9

commit 04d0dc4c0c65592a21225cff43f25e0a0da64eb9
Author:     Zhenlei Huang <zlei@FreeBSD.org>
AuthorDate: 2025-08-08 10:17:51 +0000
Commit:     Zhenlei Huang <zlei@FreeBSD.org>
CommitDate: 2025-08-08 10:17:51 +0000

    tests: gif(4): Add regression tests for setup with EtherIP
    
    Tunnel IPv[46] traffic over IPv[46] should still function when the
    gif(4) interface is member of a if_bridge(4) interface, aka the
    EtherIP setup.
    
    PR:             227450
    Reviewed by:    kp
    MFC after:      2 weeks
    Differential Revision:  https://reviews.freebsd.org/D51682
---
 tests/sys/net/if_gif.sh | 154 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 154 insertions(+)

diff --git a/tests/sys/net/if_gif.sh b/tests/sys/net/if_gif.sh
index 5c7278d17e8f..bff88f9e75b6 100644
--- a/tests/sys/net/if_gif.sh
+++ b/tests/sys/net/if_gif.sh
@@ -202,10 +202,164 @@ atf_test_case "6in6" "cleanup"
 	vnet_cleanup
 }
 
+atf_test_case "etherip" "cleanup"
+etherip_head()
+{
+	atf_set descr 'EtherIP regression'
+	atf_set require.user root
+}
+
+etherip_body()
+{
+	vnet_init
+	vnet_init_bridge
+
+	if ! kldstat -q -m if_gif; then
+		atf_skip "This test requires if_gif"
+	fi
+
+	epair=$(vnet_mkepair)
+
+	vnet_mkjail one ${epair}a
+	gone=$(jexec one ifconfig gif create)
+	jexec one ifconfig ${epair}a 192.0.2.1/24 up
+	jexec one ifconfig $gone tunnel 192.0.2.1 192.0.2.2
+	jexec one ifconfig $gone 198.51.100.1/24 198.51.100.2 up
+	jexec one ifconfig $gone inet6 no_dad 2001:db8:1::1/64
+
+	bone=$(jexec one ifconfig bridge create)
+	jexec one ifconfig $bone addm $gone
+	jexec one ifconfig $bone 192.168.169.253/24 up
+	jexec one ifconfig $bone inet6 no_dad 2001:db8:2::1/64
+
+	vnet_mkjail two ${epair}b
+	gtwo=$(jexec two ifconfig gif create)
+	jexec two ifconfig ${epair}b 192.0.2.2/24 up
+	jexec two ifconfig $gtwo tunnel 192.0.2.2 192.0.2.1
+	jexec two ifconfig $gtwo 198.51.100.2/24 198.51.100.1 up
+	jexec two ifconfig $gtwo inet6 no_dad 2001:db8:1::2/64
+
+	btwo=$(jexec two ifconfig bridge create)
+	jexec two ifconfig $btwo addm $gtwo
+	jexec two ifconfig $btwo 192.168.169.254/24 up
+	jexec two ifconfig $btwo inet6 no_dad 2001:db8:2::2/64
+
+	# Sanity check
+	atf_check -s exit:0 -o ignore \
+	    jexec one ping -c 1 192.0.2.2
+
+	# EtherIP tunnel test
+	atf_check -s exit:0 -o ignore \
+	    jexec one ping -c 1 192.168.169.254
+	atf_check -s exit:0 -o ignore \
+	    jexec one ping -6 -c 1 2001:db8:2::2
+	atf_check -s exit:0 -o ignore \
+	    jexec two ping -c 1 192.168.169.253
+	atf_check -s exit:0 -o ignore \
+	    jexec two ping -6 -c 1 2001:db8:2::1
+
+	# EtherIP should not affect normal IPv[46] over IPv4 tunnel
+	# See bugzilla PR 227450
+	# IPv4 in IPv4 Tunnel test
+	atf_check -s exit:0 -o ignore \
+	    jexec one ping -c 1 198.51.100.2
+	atf_check -s exit:0 -o ignore \
+	    jexec two ping -c 1 198.51.100.1
+
+	# IPv6 in IPv4 tunnel test
+	atf_check -s exit:0 -o ignore \
+	    jexec one ping -6 -c 1 2001:db8:1::2
+	atf_check -s exit:0 -o ignore \
+	    jexec two ping -6 -c 1 2001:db8:1::1
+}
+
+etherip_cleanup()
+{
+	vnet_cleanup
+}
+
+atf_test_case "etherip6" "cleanup"
+etherip6_head()
+{
+	atf_set descr 'EtherIP over IPv6 regression'
+	atf_set require.user root
+}
+
+etherip6_body()
+{
+	vnet_init
+	vnet_init_bridge
+
+	if ! kldstat -q -m if_gif; then
+		atf_skip "This test requires if_gif"
+	fi
+
+	epair=$(vnet_mkepair)
+
+	vnet_mkjail one ${epair}a
+	gone=$(jexec one ifconfig gif create)
+	jexec one ifconfig ${epair}a inet6 no_dad 2001:db8::1/64 up
+	jexec one ifconfig $gone inet6 tunnel 2001:db8::1 2001:db8::2
+	jexec one ifconfig $gone 198.51.100.1/24 198.51.100.2 up
+	jexec one ifconfig $gone inet6 no_dad 2001:db8:1::1/64
+
+	bone=$(jexec one ifconfig bridge create)
+	jexec one ifconfig $bone addm $gone
+	jexec one ifconfig $bone 192.168.169.253/24 up
+	jexec one ifconfig $bone inet6 no_dad 2001:db8:2::1/64
+
+	vnet_mkjail two ${epair}b
+	gtwo=$(jexec two ifconfig gif create)
+	jexec two ifconfig ${epair}b inet6 no_dad 2001:db8::2/64 up
+	jexec two ifconfig $gtwo inet6 tunnel 2001:db8::2 2001:db8::1
+	jexec two ifconfig $gtwo 198.51.100.2/24 198.51.100.1 up
+	jexec two ifconfig $gtwo inet6 no_dad 2001:db8:1::2/64
+
+	btwo=$(jexec two ifconfig bridge create)
+	jexec two ifconfig $btwo addm $gtwo
+	jexec two ifconfig $btwo 192.168.169.254/24 up
+	jexec two ifconfig $btwo inet6 no_dad 2001:db8:2::2/64
+
+	# Sanity check
+	atf_check -s exit:0 -o ignore \
+	    jexec one ping -6 -c 1 2001:db8::2
+
+	# EtherIP tunnel test
+	atf_check -s exit:0 -o ignore \
+	    jexec one ping -c 1 192.168.169.254
+	atf_check -s exit:0 -o ignore \
+	    jexec one ping -6 -c 1 2001:db8:2::2
+	atf_check -s exit:0 -o ignore \
+	    jexec two ping -c 1 192.168.169.253
+	atf_check -s exit:0 -o ignore \
+	    jexec two ping -6 -c 1 2001:db8:2::1
+
+	# EtherIP should not affect normal IPv[46] over IPv6 tunnel
+	# See bugzilla PR 227450
+	# IPv4 in IPv6 Tunnel test
+	atf_check -s exit:0 -o ignore \
+	    jexec one ping -c 1 198.51.100.2
+	atf_check -s exit:0 -o ignore \
+	    jexec two ping -c 1 198.51.100.1
+
+	# IPv6 in IPv6 tunnel test
+	atf_check -s exit:0 -o ignore \
+	    jexec one ping -6 -c 1 2001:db8:1::2
+	atf_check -s exit:0 -o ignore \
+	    jexec two ping -6 -c 1 2001:db8:1::1
+}
+
+etherip6_cleanup()
+{
+	vnet_cleanup
+}
+
 atf_init_test_cases()
 {
 	atf_add_test_case "4in4"
 	atf_add_test_case "6in4"
 	atf_add_test_case "4in6"
 	atf_add_test_case "6in6"
+	atf_add_test_case "etherip"
+	atf_add_test_case "etherip6"
 }