Module Name: src
Committed By: ozaki-r
Date: Wed Jul 14 03:22:33 UTC 2021
Modified Files:
src/distrib/sets/lists/tests: mi
src/etc/mtree: NetBSD.dist.tests
src/tests/net: Makefile
Added Files:
src/tests/net/altq: Makefile t_cbq.sh
Log Message:
tests: add tests for ALTQ CBQ
To generate a diff of this commit:
cvs rdiff -u -r1.1086 -r1.1087 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.184 -r1.185 src/etc/mtree/NetBSD.dist.tests
cvs rdiff -u -r1.38 -r1.39 src/tests/net/Makefile
cvs rdiff -u -r0 -r1.1 src/tests/net/altq/Makefile \
src/tests/net/altq/t_cbq.sh
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.1086 src/distrib/sets/lists/tests/mi:1.1087
--- src/distrib/sets/lists/tests/mi:1.1086 Tue Jul 13 19:38:10 2021
+++ src/distrib/sets/lists/tests/mi Wed Jul 14 03:22:33 2021
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1086 2021/07/13 19:38:10 rillig Exp $
+# $NetBSD: mi,v 1.1087 2021/07/14 03:22:33 ozaki-r Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -4042,6 +4042,10 @@
./usr/tests/net tests-net-tests compattestfile,atf
./usr/tests/net/Atffile tests-net-tests compattestfile,atf
./usr/tests/net/Kyuafile tests-net-tests compattestfile,atf,kyua
+./usr/tests/net/altq tests-net-tests compattestfile,atf
+./usr/tests/net/altq/Atffile tests-net-tests atf,rump
+./usr/tests/net/altq/Kyuafile tests-net-tests atf,rump,kyua
+./usr/tests/net/altq/t_cbq tests-net-tests atf,rump
./usr/tests/net/arp tests-net-tests compattestfile,atf
./usr/tests/net/arp/Atffile tests-net-tests atf,rump
./usr/tests/net/arp/Kyuafile tests-net-tests atf,rump,kyua
Index: src/etc/mtree/NetBSD.dist.tests
diff -u src/etc/mtree/NetBSD.dist.tests:1.184 src/etc/mtree/NetBSD.dist.tests:1.185
--- src/etc/mtree/NetBSD.dist.tests:1.184 Mon May 17 04:07:42 2021
+++ src/etc/mtree/NetBSD.dist.tests Wed Jul 14 03:22:33 2021
@@ -1,4 +1,4 @@
-# $NetBSD: NetBSD.dist.tests,v 1.184 2021/05/17 04:07:42 yamaguchi Exp $
+# $NetBSD: NetBSD.dist.tests,v 1.185 2021/07/14 03:22:33 ozaki-r Exp $
./usr/libdata/debug/usr/tests
./usr/libdata/debug/usr/tests/atf
@@ -345,6 +345,7 @@
./usr/tests/libexec/ld.elf_so/h_helper_symver_dso2
./usr/tests/modules
./usr/tests/net
+./usr/tests/net/altq
./usr/tests/net/arp
./usr/tests/net/bpf
./usr/tests/net/bpfilter
Index: src/tests/net/Makefile
diff -u src/tests/net/Makefile:1.38 src/tests/net/Makefile:1.39
--- src/tests/net/Makefile:1.38 Mon May 17 04:07:44 2021
+++ src/tests/net/Makefile Wed Jul 14 03:22:33 2021
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.38 2021/05/17 04:07:44 yamaguchi Exp $
+# $NetBSD: Makefile,v 1.39 2021/07/14 03:22:33 ozaki-r Exp $
.include <bsd.own.mk>
@@ -6,7 +6,7 @@ TESTSDIR= ${TESTSBASE}/net
TESTS_SUBDIRS= fdpass in_cksum net sys
.if (${MKRUMP} != "no") && !defined(BSD_MK_COMPAT_FILE)
-TESTS_SUBDIRS+= arp bpf bpfilter can carp icmp if if_bridge if_gif
+TESTS_SUBDIRS+= altq arp bpf bpfilter can carp icmp if if_bridge if_gif
TESTS_SUBDIRS+= if_ipsec if_l2tp if_lagg if_loop if_pppoe if_tap
TESTS_SUBDIRS+= if_tun if_vether if_vlan if_wg ipsec mcast mpls
TESTS_SUBDIRS+= ndp npf route
Added files:
Index: src/tests/net/altq/Makefile
diff -u /dev/null src/tests/net/altq/Makefile:1.1
--- /dev/null Wed Jul 14 03:22:33 2021
+++ src/tests/net/altq/Makefile Wed Jul 14 03:22:33 2021
@@ -0,0 +1,13 @@
+# $NetBSD: Makefile,v 1.1 2021/07/14 03:22:33 ozaki-r Exp $
+#
+
+.include <bsd.own.mk>
+
+TESTSDIR= ${TESTSBASE}/net/altq
+
+.for name in cbq
+ TESTS_SH+= t_${name}
+ TESTS_SH_SRC_t_${name}= ../net_common.sh t_${name}.sh
+.endfor
+
+.include <bsd.test.mk>
Index: src/tests/net/altq/t_cbq.sh
diff -u /dev/null src/tests/net/altq/t_cbq.sh:1.1
--- /dev/null Wed Jul 14 03:22:33 2021
+++ src/tests/net/altq/t_cbq.sh Wed Jul 14 03:22:33 2021
@@ -0,0 +1,347 @@
+# $NetBSD: t_cbq.sh,v 1.1 2021/07/14 03:22:33 ozaki-r Exp $
+#
+# Copyright (c) 2021 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://altq_local
+SOCK_REMOTE=unix://altq_remote
+BUS=bus_altq
+TIMEOUT=3
+
+# rumphijack can't handle AF_LOCAL socket (/var/run/altq_quip) correctly,
+# so use the socket via the host.
+HIJACKING_ALTQ="$HIJACKING,blanket=/dev/altq/altq:/dev/altq/cbq:/etc/altq.conf:/var/run/altqd.pid"
+
+DEBUG=${DEBUG:-false}
+
+IP_LOCAL1=10.0.0.1
+IP_LOCAL2=10.0.1.1
+IP_REMOTE11=10.0.0.2
+IP_REMOTE12=10.0.0.22
+IP_REMOTE21=10.0.1.2
+IP_REMOTE22=10.0.1.22
+ALTQD_PIDFILE=./pid
+
+
+start_altqd_basic()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ $HIJACKING_ALTQ mkdir -p /rump/etc
+ $HIJACKING_ALTQ mkdir -p /rump/var/run
+
+ cat > ./altq.conf <<-EOF
+ interface shmif0 cbq
+ class cbq shmif0 root_class NULL pbandwidth 100
+ class cbq shmif0 normal_class root_class pbandwidth 50 default
+ filter shmif0 normal_class $IP_REMOTE11 0 0 0 0
+ class cbq shmif0 drop_class root_class pbandwidth 0
+ filter shmif0 drop_class $IP_REMOTE12 0 0 0 0
+ EOF
+ $DEBUG && cat ./altq.conf
+ atf_check -s exit:0 $HIJACKING_ALTQ cp ./altq.conf /rump/etc/altq.conf
+ $HIJACKING_ALTQ test -f /rump/etc/altq.conf
+
+ #atf_check -s exit:0 $HIJACKING_ALTQ altqd
+ $HIJACKING_ALTQ altqd
+
+ $HIJACKING_ALTQ test -f /var/run/altqd.pid
+ if [ $? != 0 ]; then
+ atf_check -s exit:0 $HIJACKING_ALTQ altqd -d
+ # Should abort
+ fi
+
+ $HIJACKING_ALTQ cat /var/run/altqd.pid > $ALTQD_PIDFILE
+
+ $DEBUG && $HIJACKING_ALTQ altqstat -s
+ $HIJACKING_ALTQ altqstat -c 1 >./out
+ $DEBUG && cat ./out
+ atf_check -s exit:0 \
+ -o match:"altqstat: cbq on interface shmif0" \
+ -o match:'Class 1 on Interface shmif0: root_class' \
+ -o match:'Class 2 on Interface shmif0: normal_class' \
+ -o match:'Class 3 on Interface shmif0: ctl_class' \
+ -o match:'Class 4 on Interface shmif0: drop_class' \
+ cat ./out
+ rm -f ./out
+}
+
+shutdown_altqd()
+{
+ local pid="$(cat $ALTQD_PIDFILE)"
+
+ if [ -n "$pid" ]; then
+ pgrep -x altqd | grep -q $pid
+ if [ $? = 0 ]; then
+ kill $(cat $ALTQD_PIDFILE)
+ sleep 1
+ fi
+ $DEBUG && pgrep -x altqd
+ fi
+}
+
+check_counter()
+{
+ local file=$1
+ local name=$2
+ local match="$3"
+
+ grep -A 8 ${name}_class $file > $file.$name
+ atf_check -s exit:0 -o match:"$match" cat $file.$name
+ rm -f $file.$name
+}
+
+test_altq_cbq_basic_ipv4()
+{
+ local ifconfig="atf_check -s exit:0 rump.ifconfig"
+ local ping="atf_check -s exit:0 -o ignore rump.ping"
+ local opts="-q -c 1 -w 1"
+
+ rump_server_fs_start $SOCK_LOCAL local altq
+ rump_server_start $SOCK_REMOTE
+
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+ rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ $ifconfig shmif0 inet $IP_LOCAL1/24
+ export RUMP_SERVER=$SOCK_REMOTE
+ $ifconfig shmif0 inet $IP_REMOTE11/24
+ $ifconfig shmif0 inet $IP_REMOTE12/24 alias
+ $ifconfig -w 10
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ # Invoke ARP
+ $ping $opts $IP_REMOTE11
+ $ping $opts $IP_REMOTE12
+
+ start_altqd_basic
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ $ping $opts $IP_REMOTE11
+
+ $HIJACKING_ALTQ altqstat -c 1 >./out
+ $DEBUG && cat ./out
+
+ check_counter ./out normal 'pkts: 1'
+ check_counter ./out root 'pkts: 1'
+ check_counter ./out drop 'pkts: 0'
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s not-exit:0 -o ignore -e match:"No buffer space available" \
+ rump.ping $opts $IP_REMOTE12
+
+ $HIJACKING_ALTQ altqstat -c 1 >./out
+ $DEBUG && cat ./out
+
+ check_counter ./out drop 'drops: 1'
+ check_counter ./out drop 'pkts: 0'
+ check_counter ./out normal 'pkts: 1'
+ check_counter ./out root 'pkts: 1'
+
+ rm -f ./out
+
+ shutdown_altqd
+
+ rump_server_destroy_ifaces
+}
+
+start_altqd_multi_ifaces()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ $HIJACKING_ALTQ mkdir -p /rump/etc
+ $HIJACKING_ALTQ mkdir -p /rump/var/run
+
+ cat > ./altq.conf <<-EOF
+ interface shmif0 cbq
+ class cbq shmif0 root_class NULL pbandwidth 100
+ class cbq shmif0 normal_class root_class pbandwidth 50 default
+ filter shmif0 normal_class $IP_REMOTE11 0 0 0 0
+ class cbq shmif0 drop_class root_class pbandwidth 0
+ filter shmif0 drop_class $IP_REMOTE12 0 0 0 0
+ interface shmif1 cbq
+ class cbq shmif1 root_class NULL pbandwidth 100
+ class cbq shmif1 normal_class root_class pbandwidth 50 default
+ filter shmif1 normal_class $IP_REMOTE21 0 0 0 0
+ class cbq shmif1 drop_class root_class pbandwidth 0
+ filter shmif1 drop_class $IP_REMOTE22 0 0 0 0
+ EOF
+ $DEBUG && cat ./altq.conf
+ atf_check -s exit:0 $HIJACKING_ALTQ cp ./altq.conf /rump/etc/altq.conf
+ $HIJACKING_ALTQ test -f /rump/etc/altq.conf
+
+ #atf_check -s exit:0 $HIJACKING_ALTQ altqd
+ $HIJACKING_ALTQ altqd
+
+ $HIJACKING_ALTQ test -f /var/run/altqd.pid
+ if [ $? != 0 ]; then
+ atf_check -s exit:0 $HIJACKING_ALTQ altqd -d
+ # Should abort
+ fi
+
+ $HIJACKING_ALTQ cat /var/run/altqd.pid > $ALTQD_PIDFILE
+
+ $DEBUG && $HIJACKING_ALTQ altqstat -s
+
+ $HIJACKING_ALTQ altqstat -c 1 -i shmif0 >./out
+ $DEBUG && cat ./out
+ atf_check -s exit:0 \
+ -o match:"altqstat: cbq on interface shmif0" \
+ -o match:'Class 1 on Interface shmif0: root_class' \
+ -o match:'Class 2 on Interface shmif0: normal_class' \
+ -o match:'Class 3 on Interface shmif0: ctl_class' \
+ -o match:'Class 4 on Interface shmif0: drop_class' \
+ cat ./out
+
+ $HIJACKING_ALTQ altqstat -c 1 -i shmif1 >./out
+ $DEBUG && cat ./out
+ atf_check -s exit:0 \
+ -o match:"altqstat: cbq on interface shmif1" \
+ -o match:'Class 1 on Interface shmif1: root_class' \
+ -o match:'Class 2 on Interface shmif1: normal_class' \
+ -o match:'Class 3 on Interface shmif1: ctl_class' \
+ -o match:'Class 4 on Interface shmif1: drop_class' \
+ cat ./out
+
+ rm -f ./out
+}
+
+test_altq_cbq_multi_ifaces_ipv4()
+{
+ local ifconfig="atf_check -s exit:0 rump.ifconfig"
+ local ping="atf_check -s exit:0 -o ignore rump.ping"
+ local opts="-q -c 1 -w 1"
+
+ rump_server_fs_start $SOCK_LOCAL local altq
+ rump_server_start $SOCK_REMOTE
+
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+ rump_server_add_iface $SOCK_LOCAL shmif1 $BUS
+ rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ $ifconfig shmif0 inet $IP_LOCAL1/24
+ $ifconfig shmif1 inet $IP_LOCAL2/24
+ export RUMP_SERVER=$SOCK_REMOTE
+ $ifconfig shmif0 inet $IP_REMOTE11/24
+ $ifconfig shmif0 inet $IP_REMOTE12/24 alias
+ $ifconfig shmif0 inet $IP_REMOTE21/24 alias
+ $ifconfig shmif0 inet $IP_REMOTE22/24 alias
+ $ifconfig -w 10
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ # Invoke ARP
+ $ping $opts $IP_REMOTE11
+ $ping $opts $IP_REMOTE12
+ $ping $opts $IP_REMOTE21
+ $ping $opts $IP_REMOTE22
+
+ start_altqd_multi_ifaces
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ $ping $opts $IP_REMOTE11
+
+ $HIJACKING_ALTQ altqstat -c 1 -i shmif0 >./out
+ $DEBUG && cat ./out
+
+ check_counter ./out normal 'pkts: 1'
+ check_counter ./out root 'pkts: 1'
+ check_counter ./out drop 'pkts: 0'
+
+ $ping $opts $IP_REMOTE21
+
+ $HIJACKING_ALTQ altqstat -c 1 -i shmif1 >./out
+ $DEBUG && cat ./out
+
+ check_counter ./out normal 'pkts: 1'
+ check_counter ./out root 'pkts: 1'
+ check_counter ./out drop 'pkts: 0'
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s not-exit:0 -o ignore -e match:"No buffer space available" \
+ rump.ping $opts $IP_REMOTE12
+
+ $HIJACKING_ALTQ altqstat -c 1 -i shmif0 >./out
+ $DEBUG && cat ./out
+
+ check_counter ./out drop 'drops: 1'
+ check_counter ./out drop 'pkts: 0'
+ check_counter ./out normal 'pkts: 1'
+ check_counter ./out root 'pkts: 1'
+
+ atf_check -s not-exit:0 -o ignore -e match:"No buffer space available" \
+ rump.ping $opts $IP_REMOTE22
+
+ $HIJACKING_ALTQ altqstat -c 1 -i shmif1 >./out
+ $DEBUG && cat ./out
+
+ check_counter ./out drop 'drops: 1'
+ check_counter ./out drop 'pkts: 0'
+ check_counter ./out normal 'pkts: 1'
+ check_counter ./out root 'pkts: 1'
+
+ rm -f ./out
+
+ shutdown_altqd
+
+ rump_server_destroy_ifaces
+}
+
+add_test_case()
+{
+ local algo=$1
+ local type=$2
+ local ipproto=$3
+
+ name="altq_${algo}_${type}_${ipproto}"
+ desc="Tests for ALTQ $algo (${type}) on ${ipproto}"
+
+ atf_test_case ${name} cleanup
+ eval "
+ ${name}_head() {
+ atf_set descr \"$desc\"
+ atf_set require.progs rump_server altqd altqstat
+ }
+ ${name}_body() {
+ test_altq_${algo}_${type}_${ipproto}
+ }
+ ${name}_cleanup() {
+ shutdown_altqd
+ \$DEBUG && dump
+ cleanup
+ }
+ "
+ atf_add_test_case ${name}
+}
+
+atf_init_test_cases()
+{
+
+ add_test_case cbq basic ipv4
+ add_test_case cbq multi_ifaces ipv4
+}