Module Name:    src
Committed By:   ozaki-r
Date:           Tue Mar 18 07:58:09 UTC 2025

Modified Files:
        src/tests/net/if_vlan: t_vlan.sh

Log Message:
tests, vlan: add a test case for link state sync

A vlan interface synchronizes its link state with its parent's one.


To generate a diff of this commit:
cvs rdiff -u -r1.26 -r1.27 src/tests/net/if_vlan/t_vlan.sh

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/if_vlan/t_vlan.sh
diff -u src/tests/net/if_vlan/t_vlan.sh:1.26 src/tests/net/if_vlan/t_vlan.sh:1.27
--- src/tests/net/if_vlan/t_vlan.sh:1.26	Tue Mar 18 07:57:34 2025
+++ src/tests/net/if_vlan/t_vlan.sh	Tue Mar 18 07:58:09 2025
@@ -1,4 +1,4 @@
-#	$NetBSD: t_vlan.sh,v 1.26 2025/03/18 07:57:34 ozaki-r Exp $
+#	$NetBSD: t_vlan.sh,v 1.27 2025/03/18 07:58:09 ozaki-r Exp $
 #
 # Copyright (c) 2016 Internet Initiative Japan Inc.
 # All rights reserved.
@@ -918,6 +918,93 @@ test_l2tp6()
 	vlan_l2tp_body_common "inet6"
 }
 
+check_link_state()
+{
+	local ifname=$1
+	local state=$2
+
+	atf_check -s exit:0 -o match:"linkstate: $state" $HIJACKING rump.ifconfig -v $ifname
+}
+
+create_interfaces()
+{
+
+	atf_check -s exit:0 rump.ifconfig vlan0 create
+	atf_check -s exit:0 rump.ifconfig shmif0 create
+}
+
+destroy_interfaces()
+{
+
+	atf_check -s exit:0 rump.ifconfig vlan0 destroy
+	atf_check -s exit:0 rump.ifconfig shmif0 destroy
+}
+
+test_link_state_sync()
+{
+	local ifconfig="atf_check -s exit:0 rump.ifconfig"
+
+	rump_server_start $SOCK_LOCAL vlan
+
+	export RUMP_SERVER=${SOCK_LOCAL}
+
+	## Alone
+	$ifconfig        vlan0 create
+	# The default state is "down"
+	check_link_state vlan0 down
+	$ifconfig        vlan0 up
+	check_link_state vlan0 down
+	$ifconfig        vlan0 down
+	check_link_state vlan0 down
+	$ifconfig        vlan0 destroy
+
+	## "unknown" parent
+	create_interfaces
+	# shmif0 is "unknown" until ifconfig linkstr
+	check_link_state shmif0 unknown
+	$ifconfig        vlan0 vlan 1 vlanif shmif0
+	# vlan0 syncs with the parent
+	check_link_state vlan0 unknown
+	$ifconfig        vlan0 up
+	check_link_state vlan0 unknown
+	$ifconfig        vlan0 -vlanif
+	# Back to the default
+	check_link_state vlan0 down
+	destroy_interfaces
+
+	## "up" parent
+	create_interfaces
+	$ifconfig        shmif0 linkstr $BUS
+	check_link_state shmif0 up
+	$ifconfig        vlan0 vlan 1 vlanif shmif0
+	# vlan0 syncs with the parent
+	check_link_state vlan0 up
+	$ifconfig        vlan0 -vlanif
+	# Back to the default
+	check_link_state vlan0 down
+	destroy_interfaces
+
+	## Change parent's link state to "up", "down", then "up"
+	create_interfaces
+	$ifconfig        shmif0 linkstr $BUS
+	check_link_state shmif0 up
+	$ifconfig        vlan0 vlan 1 vlanif shmif0
+	check_link_state vlan0 up
+	# Down the parent
+	$ifconfig        shmif0 media none
+	check_link_state shmif0 down
+	# vlan0 syncs with the parent
+	check_link_state vlan0 down
+	# Up the parent again
+	$ifconfig        shmif0 media auto
+	# vlan0 syncs with the parent
+	check_link_state vlan0 up
+	$ifconfig        vlan0 -vlanif
+	# Back to the default
+	check_link_state vlan0 down
+	destroy_interfaces
+}
+
 add_test()
 {
 	local name=$1
@@ -960,4 +1047,5 @@ atf_init_test_cases()
 	add_test l2tp6            "tests of vlan(IPv6) over l2tp(IPv4)"
 
 	add_test promisc          "tests of IFF_PROMISC of vlan"
+	add_test link_state_sync  "tests of link state sync with its parent"
 }

Reply via email to