1fcd69db2SKristof Provost# $FreeBSD$ 2fcd69db2SKristof Provost 3fcd69db2SKristof Provost. $(atf_get_srcdir)/../common/vnet.subr 4fcd69db2SKristof Provost 5fcd69db2SKristof Provostatf_test_case "basic" "cleanup" 6fcd69db2SKristof Provostbasic_head() 7fcd69db2SKristof Provost{ 8fcd69db2SKristof Provost atf_set descr 'Basic VLAN test' 9fcd69db2SKristof Provost atf_set require.user root 10fcd69db2SKristof Provost} 11fcd69db2SKristof Provost 12fcd69db2SKristof Provostbasic_body() 13fcd69db2SKristof Provost{ 14fcd69db2SKristof Provost vnet_init 15fcd69db2SKristof Provost 16fcd69db2SKristof Provost epair_vlan=$(vnet_mkepair) 17fcd69db2SKristof Provost 18fcd69db2SKristof Provost vnet_mkjail alcatraz ${epair_vlan}a 19fcd69db2SKristof Provost vnet_mkjail singsing ${epair_vlan}b 20fcd69db2SKristof Provost 21fcd69db2SKristof Provost vlan0=$(jexec alcatraz ifconfig vlan create vlandev ${epair_vlan}a \ 22fcd69db2SKristof Provost vlan 42) 23fcd69db2SKristof Provost jexec alcatraz ifconfig ${epair_vlan}a up 24fcd69db2SKristof Provost jexec alcatraz ifconfig ${vlan0} 10.0.0.1/24 up 25fcd69db2SKristof Provost 26fcd69db2SKristof Provost vlan1=$(jexec singsing ifconfig vlan create vlandev ${epair_vlan}b \ 27fcd69db2SKristof Provost vlan 42) 28fcd69db2SKristof Provost jexec singsing ifconfig ${epair_vlan}b up 29fcd69db2SKristof Provost jexec singsing ifconfig ${vlan1} 10.0.0.2/24 up 30fcd69db2SKristof Provost 31fcd69db2SKristof Provost atf_check -s exit:0 -o ignore jexec singsing ping -c 1 10.0.0.1 32fcd69db2SKristof Provost} 33fcd69db2SKristof Provost 34fcd69db2SKristof Provostbasic_cleanup() 35fcd69db2SKristof Provost{ 36fcd69db2SKristof Provost vnet_cleanup 37fcd69db2SKristof Provost} 38fcd69db2SKristof Provost 39c7cffd65SAlexander V. Chernikov# Simple Q-in-Q (802.1Q over 802.1ad) 40c7cffd65SAlexander V. Chernikov 41c7cffd65SAlexander V. Chernikovatf_test_case "qinq_simple" "cleanup" 42c7cffd65SAlexander V. Chernikovqinq_simple_head() 43c7cffd65SAlexander V. Chernikov{ 44c7cffd65SAlexander V. Chernikov atf_set descr 'Simple Q-in-Q test (802.1Q over 802.1ad)' 45c7cffd65SAlexander V. Chernikov atf_set require.user root 46c7cffd65SAlexander V. Chernikov} 47c7cffd65SAlexander V. Chernikov 48c7cffd65SAlexander V. Chernikovqinq_simple_body() 49c7cffd65SAlexander V. Chernikov{ 50c7cffd65SAlexander V. Chernikov vnet_init 51c7cffd65SAlexander V. Chernikov 52c7cffd65SAlexander V. Chernikov epair_qinq=$(vnet_mkepair) 53c7cffd65SAlexander V. Chernikov 54c7cffd65SAlexander V. Chernikov vnet_mkjail jqinq0 ${epair_qinq}a 55c7cffd65SAlexander V. Chernikov vnet_mkjail jqinq1 ${epair_qinq}b 56c7cffd65SAlexander V. Chernikov 57c7cffd65SAlexander V. Chernikov vlan5a=$(jexec jqinq0 ifconfig vlan create \ 58c7cffd65SAlexander V. Chernikov vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad) 59c7cffd65SAlexander V. Chernikov vlan42a=$(jexec jqinq0 ifconfig vlan create \ 60c7cffd65SAlexander V. Chernikov vlandev ${vlan5a} vlan 42 vlanproto 802.1q) 61c7cffd65SAlexander V. Chernikov jexec jqinq0 ifconfig ${epair_qinq}a up 62c7cffd65SAlexander V. Chernikov jexec jqinq0 ifconfig ${vlan5a} up 63c7cffd65SAlexander V. Chernikov jexec jqinq0 ifconfig ${vlan42a} 10.5.42.1/24 up 64c7cffd65SAlexander V. Chernikov 65c7cffd65SAlexander V. Chernikov vlan5b=$(jexec jqinq1 ifconfig vlan create \ 66c7cffd65SAlexander V. Chernikov vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad) 67c7cffd65SAlexander V. Chernikov vlan42b=$(jexec jqinq1 ifconfig vlan create \ 68c7cffd65SAlexander V. Chernikov vlandev ${vlan5b} vlan 42 vlanproto 802.1q) 69c7cffd65SAlexander V. Chernikov jexec jqinq1 ifconfig ${epair_qinq}b up 70c7cffd65SAlexander V. Chernikov jexec jqinq1 ifconfig ${vlan5b} up 71c7cffd65SAlexander V. Chernikov jexec jqinq1 ifconfig ${vlan42b} 10.5.42.2/24 up 72c7cffd65SAlexander V. Chernikov 73c7cffd65SAlexander V. Chernikov atf_check -s exit:0 -o ignore jexec jqinq1 ping -c 1 10.5.42.1 74c7cffd65SAlexander V. Chernikov} 75c7cffd65SAlexander V. Chernikov 76c7cffd65SAlexander V. Chernikovqinq_simple_cleanup() 77c7cffd65SAlexander V. Chernikov{ 78c7cffd65SAlexander V. Chernikov vnet_cleanup 79c7cffd65SAlexander V. Chernikov} 80c7cffd65SAlexander V. Chernikov 81c7cffd65SAlexander V. Chernikov# Deep Q-in-Q (802.1Q over 802.1ad over 802.1ad) 82c7cffd65SAlexander V. Chernikov 83c7cffd65SAlexander V. Chernikovatf_test_case "qinq_deep" "cleanup" 84c7cffd65SAlexander V. Chernikovqinq_deep_head() 85c7cffd65SAlexander V. Chernikov{ 86c7cffd65SAlexander V. Chernikov atf_set descr 'Deep Q-in-Q test (802.1Q over 802.1ad over 802.1ad)' 87c7cffd65SAlexander V. Chernikov atf_set require.user root 88c7cffd65SAlexander V. Chernikov} 89c7cffd65SAlexander V. Chernikov 90c7cffd65SAlexander V. Chernikovqinq_deep_body() 91c7cffd65SAlexander V. Chernikov{ 92c7cffd65SAlexander V. Chernikov vnet_init 93c7cffd65SAlexander V. Chernikov 94c7cffd65SAlexander V. Chernikov epair_qinq=$(vnet_mkepair) 95c7cffd65SAlexander V. Chernikov 96c7cffd65SAlexander V. Chernikov vnet_mkjail jqinq2 ${epair_qinq}a 97c7cffd65SAlexander V. Chernikov vnet_mkjail jqinq3 ${epair_qinq}b 98c7cffd65SAlexander V. Chernikov 99c7cffd65SAlexander V. Chernikov vlan5a=$(jexec jqinq2 ifconfig vlan create \ 100c7cffd65SAlexander V. Chernikov vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad) 101c7cffd65SAlexander V. Chernikov vlan6a=$(jexec jqinq2 ifconfig vlan create \ 102c7cffd65SAlexander V. Chernikov vlandev ${vlan5a} vlan 6 vlanproto 802.1ad) 103c7cffd65SAlexander V. Chernikov vlan42a=$(jexec jqinq2 ifconfig vlan create \ 104c7cffd65SAlexander V. Chernikov vlandev ${vlan6a} vlan 42 vlanproto 802.1q) 105c7cffd65SAlexander V. Chernikov jexec jqinq2 ifconfig ${epair_qinq}a up 106c7cffd65SAlexander V. Chernikov jexec jqinq2 ifconfig ${vlan5a} up 107c7cffd65SAlexander V. Chernikov jexec jqinq2 ifconfig ${vlan6a} up 108c7cffd65SAlexander V. Chernikov jexec jqinq2 ifconfig ${vlan42a} 10.6.42.1/24 up 109c7cffd65SAlexander V. Chernikov 110c7cffd65SAlexander V. Chernikov vlan5b=$(jexec jqinq3 ifconfig vlan create \ 111c7cffd65SAlexander V. Chernikov vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad) 112c7cffd65SAlexander V. Chernikov vlan6b=$(jexec jqinq3 ifconfig vlan create \ 113c7cffd65SAlexander V. Chernikov vlandev ${vlan5b} vlan 6 vlanproto 802.1ad) 114c7cffd65SAlexander V. Chernikov vlan42b=$(jexec jqinq3 ifconfig vlan create \ 115c7cffd65SAlexander V. Chernikov vlandev ${vlan6b} vlan 42 vlanproto 802.1q) 116c7cffd65SAlexander V. Chernikov jexec jqinq3 ifconfig ${epair_qinq}b up 117c7cffd65SAlexander V. Chernikov jexec jqinq3 ifconfig ${vlan5b} up 118c7cffd65SAlexander V. Chernikov jexec jqinq3 ifconfig ${vlan6b} up 119c7cffd65SAlexander V. Chernikov jexec jqinq3 ifconfig ${vlan42b} 10.6.42.2/24 up 120c7cffd65SAlexander V. Chernikov 121c7cffd65SAlexander V. Chernikov atf_check -s exit:0 -o ignore jexec jqinq3 ping -c 1 10.6.42.1 122c7cffd65SAlexander V. Chernikov} 123c7cffd65SAlexander V. Chernikov 124c7cffd65SAlexander V. Chernikovqinq_deep_cleanup() 125c7cffd65SAlexander V. Chernikov{ 126c7cffd65SAlexander V. Chernikov vnet_cleanup 127c7cffd65SAlexander V. Chernikov} 128c7cffd65SAlexander V. Chernikov 129c7cffd65SAlexander V. Chernikov# Legacy Q-in-Q (802.1Q over 802.1Q) 130c7cffd65SAlexander V. Chernikov 131c7cffd65SAlexander V. Chernikovatf_test_case "qinq_legacy" "cleanup" 132c7cffd65SAlexander V. Chernikovqinq_legacy_head() 133c7cffd65SAlexander V. Chernikov{ 134c7cffd65SAlexander V. Chernikov atf_set descr 'Legacy Q-in-Q test (802.1Q over 802.1Q)' 135c7cffd65SAlexander V. Chernikov atf_set require.user root 136c7cffd65SAlexander V. Chernikov} 137c7cffd65SAlexander V. Chernikov 138c7cffd65SAlexander V. Chernikovqinq_legacy_body() 139c7cffd65SAlexander V. Chernikov{ 140c7cffd65SAlexander V. Chernikov vnet_init 141c7cffd65SAlexander V. Chernikov 142c7cffd65SAlexander V. Chernikov epair_qinq=$(vnet_mkepair) 143c7cffd65SAlexander V. Chernikov 144c7cffd65SAlexander V. Chernikov vnet_mkjail jqinq4 ${epair_qinq}a 145c7cffd65SAlexander V. Chernikov vnet_mkjail jqinq5 ${epair_qinq}b 146c7cffd65SAlexander V. Chernikov 147c7cffd65SAlexander V. Chernikov vlan5a=$(jexec jqinq4 ifconfig vlan create \ 148c7cffd65SAlexander V. Chernikov vlandev ${epair_qinq}a vlan 5) 149c7cffd65SAlexander V. Chernikov vlan42a=$(jexec jqinq4 ifconfig vlan create \ 150c7cffd65SAlexander V. Chernikov vlandev ${vlan5a} vlan 42) 151c7cffd65SAlexander V. Chernikov jexec jqinq4 ifconfig ${epair_qinq}a up 152c7cffd65SAlexander V. Chernikov jexec jqinq4 ifconfig ${vlan5a} up 153c7cffd65SAlexander V. Chernikov jexec jqinq4 ifconfig ${vlan42a} 10.5.42.1/24 up 154c7cffd65SAlexander V. Chernikov 155c7cffd65SAlexander V. Chernikov vlan5b=$(jexec jqinq5 ifconfig vlan create \ 156c7cffd65SAlexander V. Chernikov vlandev ${epair_qinq}b vlan 5) 157c7cffd65SAlexander V. Chernikov vlan42b=$(jexec jqinq5 ifconfig vlan create \ 158c7cffd65SAlexander V. Chernikov vlandev ${vlan5b} vlan 42) 159c7cffd65SAlexander V. Chernikov jexec jqinq5 ifconfig ${epair_qinq}b up 160c7cffd65SAlexander V. Chernikov jexec jqinq5 ifconfig ${vlan5b} up 161c7cffd65SAlexander V. Chernikov jexec jqinq5 ifconfig ${vlan42b} 10.5.42.2/24 up 162c7cffd65SAlexander V. Chernikov 163c7cffd65SAlexander V. Chernikov atf_check -s exit:0 -o ignore jexec jqinq5 ping -c 1 10.5.42.1 164c7cffd65SAlexander V. Chernikov} 165c7cffd65SAlexander V. Chernikov 166c7cffd65SAlexander V. Chernikovqinq_legacy_cleanup() 167c7cffd65SAlexander V. Chernikov{ 168c7cffd65SAlexander V. Chernikov vnet_cleanup 169c7cffd65SAlexander V. Chernikov} 170c7cffd65SAlexander V. Chernikov 171c7cffd65SAlexander V. Chernikov# Simple Q-in-Q with dot notation 172c7cffd65SAlexander V. Chernikov 173c7cffd65SAlexander V. Chernikovatf_test_case "qinq_dot" "cleanup" 174c7cffd65SAlexander V. Chernikovqinq_dot_head() 175c7cffd65SAlexander V. Chernikov{ 176c7cffd65SAlexander V. Chernikov atf_set descr 'Simple Q-in-Q test with dot notation' 177c7cffd65SAlexander V. Chernikov atf_set require.user root 178c7cffd65SAlexander V. Chernikov} 179c7cffd65SAlexander V. Chernikov 180c7cffd65SAlexander V. Chernikovqinq_dot_body() 181c7cffd65SAlexander V. Chernikov{ 182c7cffd65SAlexander V. Chernikov vnet_init 183c7cffd65SAlexander V. Chernikov 184c7cffd65SAlexander V. Chernikov epair_qinq=$(vnet_mkepair) 185c7cffd65SAlexander V. Chernikov 186c7cffd65SAlexander V. Chernikov vnet_mkjail jqinq6 ${epair_qinq}a 187c7cffd65SAlexander V. Chernikov vnet_mkjail jqinq7 ${epair_qinq}b 188c7cffd65SAlexander V. Chernikov 189c7cffd65SAlexander V. Chernikov jexec jqinq6 ifconfig vlan5 create \ 190c7cffd65SAlexander V. Chernikov vlandev ${epair_qinq}a vlan 5 vlanproto 802.1ad 191c7cffd65SAlexander V. Chernikov jexec jqinq6 ifconfig vlan5.42 create \ 192c7cffd65SAlexander V. Chernikov vlanproto 802.1q 193c7cffd65SAlexander V. Chernikov jexec jqinq6 ifconfig ${epair_qinq}a up 194c7cffd65SAlexander V. Chernikov jexec jqinq6 ifconfig vlan5 up 195c7cffd65SAlexander V. Chernikov jexec jqinq6 ifconfig vlan5.42 10.5.42.1/24 up 196c7cffd65SAlexander V. Chernikov 197c7cffd65SAlexander V. Chernikov vlan5b=$(jexec jqinq7 ifconfig vlan create \ 198c7cffd65SAlexander V. Chernikov vlandev ${epair_qinq}b vlan 5 vlanproto 802.1ad) 199c7cffd65SAlexander V. Chernikov vlan42b=$(jexec jqinq7 ifconfig vlan create \ 200c7cffd65SAlexander V. Chernikov vlandev ${vlan5b} vlan 42 vlanproto 802.1q) 201c7cffd65SAlexander V. Chernikov jexec jqinq7 ifconfig ${epair_qinq}b up 202c7cffd65SAlexander V. Chernikov jexec jqinq7 ifconfig ${vlan5b} up 203c7cffd65SAlexander V. Chernikov jexec jqinq7 ifconfig ${vlan42b} 10.5.42.2/24 up 204c7cffd65SAlexander V. Chernikov 205c7cffd65SAlexander V. Chernikov atf_check -s exit:0 -o ignore jexec jqinq7 ping -c 1 10.5.42.1 206c7cffd65SAlexander V. Chernikov} 207c7cffd65SAlexander V. Chernikov 208c7cffd65SAlexander V. Chernikovqinq_dot_cleanup() 209c7cffd65SAlexander V. Chernikov{ 210c7cffd65SAlexander V. Chernikov vnet_cleanup 211c7cffd65SAlexander V. Chernikov} 212c7cffd65SAlexander V. Chernikov 213*3e87f800SKristof Provostatf_test_case "bpf_pcp" "cleanup" 214*3e87f800SKristof Provostbpf_pcp_head() 215*3e87f800SKristof Provost{ 216*3e87f800SKristof Provost atf_set descr 'Set VLAN PCP through BPF' 217*3e87f800SKristof Provost atf_set require.config 'allow_sysctl_side_effects' 218*3e87f800SKristof Provost atf_set require.user root 219*3e87f800SKristof Provost atf_set require.progs scapy 220*3e87f800SKristof Provost} 221*3e87f800SKristof Provost 222*3e87f800SKristof Provostbpf_pcp_body() 223*3e87f800SKristof Provost{ 224*3e87f800SKristof Provost vnet_init 225*3e87f800SKristof Provost 226*3e87f800SKristof Provost epair=$(vnet_mkepair) 227*3e87f800SKristof Provost 228*3e87f800SKristof Provost ifconfig ${epair}a up 229*3e87f800SKristof Provost 230*3e87f800SKristof Provost vnet_mkjail alcatraz ${epair}b 231*3e87f800SKristof Provost vlan=$(jexec alcatraz ifconfig vlan create) 232*3e87f800SKristof Provost jexec alcatraz ifconfig ${vlan} vlan 42 vlandev ${epair}b 233*3e87f800SKristof Provost jexec alcatraz ifconfig ${vlan} up 234*3e87f800SKristof Provost jexec alcatraz ifconfig ${epair}b up 235*3e87f800SKristof Provost 236*3e87f800SKristof Provost sysctl net.link.vlan.mtag_pcp=1 237*3e87f800SKristof Provost 238*3e87f800SKristof Provost jexec alcatraz dhclient ${vlan} & 239*3e87f800SKristof Provost atf_check -s exit:1 -o ignore -e ignore $(atf_get_srcdir)/pcp.py \ 240*3e87f800SKristof Provost --expect-pcp 6 \ 241*3e87f800SKristof Provost --recvif ${epair}a 242*3e87f800SKristof Provost 243*3e87f800SKristof Provost jexec alcatraz killall dhclient 244*3e87f800SKristof Provost sleep 1 245*3e87f800SKristof Provost 246*3e87f800SKristof Provost jexec alcatraz dhclient -c $(atf_get_srcdir)/dhclient_pcp.conf ${vlan} & 247*3e87f800SKristof Provost atf_check -s exit:0 -o ignore -e ignore $(atf_get_srcdir)/pcp.py \ 248*3e87f800SKristof Provost --expect-pcp 6 \ 249*3e87f800SKristof Provost --recvif ${epair}a 250*3e87f800SKristof Provost} 251*3e87f800SKristof Provost 252*3e87f800SKristof Provostbpf_pcp_cleanup() 253*3e87f800SKristof Provost{ 254*3e87f800SKristof Provost sysctl net.link.vlan.mtag_pcp=0 255*3e87f800SKristof Provost jexec alcatraz killall dhclient 256*3e87f800SKristof Provost vnet_cleanup 257*3e87f800SKristof Provost} 258*3e87f800SKristof Provost 259fcd69db2SKristof Provostatf_init_test_cases() 260fcd69db2SKristof Provost{ 261fcd69db2SKristof Provost atf_add_test_case "basic" 262c7cffd65SAlexander V. Chernikov atf_add_test_case "qinq_simple" 263c7cffd65SAlexander V. Chernikov atf_add_test_case "qinq_deep" 264c7cffd65SAlexander V. Chernikov atf_add_test_case "qinq_legacy" 265c7cffd65SAlexander V. Chernikov atf_add_test_case "qinq_dot" 266*3e87f800SKristof Provost atf_add_test_case "bpf_pcp" 267fcd69db2SKristof Provost} 268