1f08c3bdfSopenharmony_ci#!/bin/sh
2f08c3bdfSopenharmony_ci# Copyright (c) 2015-2017 Oracle and/or its affiliates. All Rights Reserved.
3f08c3bdfSopenharmony_ci# Copyright (c) International Business Machines  Corp., 2005
4f08c3bdfSopenharmony_ci#
5f08c3bdfSopenharmony_ci# This program is free software; you can redistribute it and/or
6f08c3bdfSopenharmony_ci# modify it under the terms of the GNU General Public License as
7f08c3bdfSopenharmony_ci# published by the Free Software Foundation; either version 2 of
8f08c3bdfSopenharmony_ci# the License, or (at your option) any later version.
9f08c3bdfSopenharmony_ci#
10f08c3bdfSopenharmony_ci# This program is distributed in the hope that it would be useful,
11f08c3bdfSopenharmony_ci# but WITHOUT ANY WARRANTY; without even the implied warranty of
12f08c3bdfSopenharmony_ci# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13f08c3bdfSopenharmony_ci# GNU General Public License for more details.
14f08c3bdfSopenharmony_ci#
15f08c3bdfSopenharmony_ci# You should have received a copy of the GNU General Public License
16f08c3bdfSopenharmony_ci# along with this program; if not, write the Free Software Foundation,
17f08c3bdfSopenharmony_ci# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18f08c3bdfSopenharmony_ci#
19f08c3bdfSopenharmony_ci# Author: Mitsuru Chinen <mitch@jp.ibm.com>
20f08c3bdfSopenharmony_ci
21f08c3bdfSopenharmony_ciTCID=dns-stress
22f08c3bdfSopenharmony_ciTST_TOTAL=2
23f08c3bdfSopenharmony_ciTST_CLEANUP="cleanup"
24f08c3bdfSopenharmony_ci
25f08c3bdfSopenharmony_ciTST_USE_LEGACY_API=1
26f08c3bdfSopenharmony_ci
27f08c3bdfSopenharmony_ci# Minimum host ID in the zone file.
28f08c3bdfSopenharmony_ci# The ID is used as the host portion of the address
29f08c3bdfSopenharmony_ciMIN_ID=2
30f08c3bdfSopenharmony_ci# Maximum host ID in the zone file.
31f08c3bdfSopenharmony_ciMAX_ID=254
32f08c3bdfSopenharmony_ci# Domain name for testing
33f08c3bdfSopenharmony_ciDOMAIN="ltp-ns.org"
34f08c3bdfSopenharmony_ci
35f08c3bdfSopenharmony_cicleanup()
36f08c3bdfSopenharmony_ci{
37f08c3bdfSopenharmony_ci	# Stop the dns daemon
38f08c3bdfSopenharmony_ci	test -s named.pid && kill -9 $(cat named.pid) > /dev/null
39f08c3bdfSopenharmony_ci	tst_rmdir
40f08c3bdfSopenharmony_ci}
41f08c3bdfSopenharmony_ci
42f08c3bdfSopenharmony_cicommon_setup()
43f08c3bdfSopenharmony_ci{
44f08c3bdfSopenharmony_ci	tst_require_root
45f08c3bdfSopenharmony_ci	tst_require_cmds named dig
46f08c3bdfSopenharmony_ci
47f08c3bdfSopenharmony_ci	if [ "$TST_IPV6" ]; then
48f08c3bdfSopenharmony_ci		record="AAAA"
49f08c3bdfSopenharmony_ci		net="fd00:cafe"
50f08c3bdfSopenharmony_ci		net_rev="0.0.0.0.0.0.0.0.e.f.a.c.0.0.d.f"
51f08c3bdfSopenharmony_ci	else
52f08c3bdfSopenharmony_ci		record="A"
53f08c3bdfSopenharmony_ci		net="10.23.0"
54f08c3bdfSopenharmony_ci		net_rev="0.23.10"
55f08c3bdfSopenharmony_ci	fi
56f08c3bdfSopenharmony_ci
57f08c3bdfSopenharmony_ci	trap "tst_brkm TBROK 'test interrupted'" INT
58f08c3bdfSopenharmony_ci
59f08c3bdfSopenharmony_ci	tst_tmpdir
60f08c3bdfSopenharmony_ci
61f08c3bdfSopenharmony_ci	ip6_opt=
62f08c3bdfSopenharmony_ci	[ "$TST_IPV6" ] && ip6_opt="listen-on-v6 { any; };"
63f08c3bdfSopenharmony_ci
64f08c3bdfSopenharmony_ci	ip_zone_opt="in-addr"
65f08c3bdfSopenharmony_ci	[ "$TST_IPV6" ] && ip_zone_opt="ip6"
66f08c3bdfSopenharmony_ci
67f08c3bdfSopenharmony_ci	cat << EOD > named.conf
68f08c3bdfSopenharmony_ci	options {
69f08c3bdfSopenharmony_ci		directory "$(pwd)";
70f08c3bdfSopenharmony_ci		pid-file "named.pid";
71f08c3bdfSopenharmony_ci		recursion no;
72f08c3bdfSopenharmony_ci		$ip6_opt
73f08c3bdfSopenharmony_ci	};
74f08c3bdfSopenharmony_ci
75f08c3bdfSopenharmony_ci	zone "$DOMAIN" {
76f08c3bdfSopenharmony_ci		type master;
77f08c3bdfSopenharmony_ci		file "ltp-ns.zone";
78f08c3bdfSopenharmony_ci	};
79f08c3bdfSopenharmony_ci
80f08c3bdfSopenharmony_ci	zone "$net_rev.$ip_zone_opt.arpa" {
81f08c3bdfSopenharmony_ci		type master;
82f08c3bdfSopenharmony_ci		file "ltp-ns.rev";
83f08c3bdfSopenharmony_ci	};
84f08c3bdfSopenharmony_ciEOD
85f08c3bdfSopenharmony_ci
86f08c3bdfSopenharmony_ci	# zone file
87f08c3bdfSopenharmony_ci	cat << EOD > ltp-ns.zone
88f08c3bdfSopenharmony_ci\$TTL 10
89f08c3bdfSopenharmony_ci@	IN	SOA dns.$DOMAIN. root.$DOMAIN. (
90f08c3bdfSopenharmony_ci	2005092701 ; serial
91f08c3bdfSopenharmony_ci	3600       ; dummy value
92f08c3bdfSopenharmony_ci	900        ; dummy value
93f08c3bdfSopenharmony_ci	604800     ; dummy value
94f08c3bdfSopenharmony_ci	86400      ; dummy value
95f08c3bdfSopenharmony_ci)
96f08c3bdfSopenharmony_ci	IN	NS	dns.$DOMAIN.
97f08c3bdfSopenharmony_ciEOD
98f08c3bdfSopenharmony_ci}
99f08c3bdfSopenharmony_ci
100f08c3bdfSopenharmony_cisetup_4()
101f08c3bdfSopenharmony_ci{
102f08c3bdfSopenharmony_ci	printf "dns\tIN\tA\t$net.1\n" >> ltp-ns.zone
103f08c3bdfSopenharmony_ci	local id=$MIN_ID
104f08c3bdfSopenharmony_ci	while [ $id -le $MAX_ID ]; do
105f08c3bdfSopenharmony_ci		printf "node$id\tIN\tA\t$net.$id\n" >> ltp-ns.zone
106f08c3bdfSopenharmony_ci		id=$(($id + 1))
107f08c3bdfSopenharmony_ci	done
108f08c3bdfSopenharmony_ci
109f08c3bdfSopenharmony_ci	# reverse zone file
110f08c3bdfSopenharmony_ci	cat << EOD > ltp-ns.rev
111f08c3bdfSopenharmony_ci\$TTL 10
112f08c3bdfSopenharmony_ci@	IN	SOA $DOMAIN. root.$DOMAIN. (
113f08c3bdfSopenharmony_ci	2005092701 ; serial
114f08c3bdfSopenharmony_ci	3600       ; dummy value
115f08c3bdfSopenharmony_ci	900        ; dummy value
116f08c3bdfSopenharmony_ci	604800     ; dummy value
117f08c3bdfSopenharmony_ci	86400      ; dummy value
118f08c3bdfSopenharmony_ci)
119f08c3bdfSopenharmony_ci        IN      NS      dns.$DOMAIN.
120f08c3bdfSopenharmony_ciEOD
121f08c3bdfSopenharmony_ci
122f08c3bdfSopenharmony_ci	id=$MIN_ID
123f08c3bdfSopenharmony_ci	while [ $id -le $MAX_ID ]; do
124f08c3bdfSopenharmony_ci		printf "$id\tIN\tPTR\tnode$id.$DOMAIN.\n" >> ltp-ns.rev
125f08c3bdfSopenharmony_ci		id=$(($id + 1))
126f08c3bdfSopenharmony_ci	done
127f08c3bdfSopenharmony_ci}
128f08c3bdfSopenharmony_ci
129f08c3bdfSopenharmony_cisetup_6()
130f08c3bdfSopenharmony_ci{
131f08c3bdfSopenharmony_ci	printf "dns\tIN\tAAAA\t$net::1\n" >> ltp-ns.zone
132f08c3bdfSopenharmony_ci	local id=$MIN_ID
133f08c3bdfSopenharmony_ci	while [ $id -le $MAX_ID ]; do
134f08c3bdfSopenharmony_ci		printf "node$id\tIN\tAAAA\t$net::%x\n" $id >> ltp-ns.zone
135f08c3bdfSopenharmony_ci		id=$(($id + 1))
136f08c3bdfSopenharmony_ci	done
137f08c3bdfSopenharmony_ci
138f08c3bdfSopenharmony_ci	# reverse zone file
139f08c3bdfSopenharmony_ci	cat << EOD > ltp-ns.rev
140f08c3bdfSopenharmony_ci\$TTL 10
141f08c3bdfSopenharmony_ci@	IN	SOA $DOMAIN. root.$DOMAIN. (
142f08c3bdfSopenharmony_ci	2005092701 ; serial
143f08c3bdfSopenharmony_ci	3600       ; dummy value
144f08c3bdfSopenharmony_ci	900        ; dummy value
145f08c3bdfSopenharmony_ci	604800     ; dummy value
146f08c3bdfSopenharmony_ci	86400      ; dummy value
147f08c3bdfSopenharmony_ci)
148f08c3bdfSopenharmony_ci        IN      NS      dns.$DOMAIN.
149f08c3bdfSopenharmony_ciEOD
150f08c3bdfSopenharmony_ci
151f08c3bdfSopenharmony_ci	id=$MIN_ID
152f08c3bdfSopenharmony_ci	local rev_ip="0.0.0.0.0.0.0.0.0.0.0.0.0.0"
153f08c3bdfSopenharmony_ci	while [ $id -le $MAX_ID ]; do
154f08c3bdfSopenharmony_ci		printf "%x.%x.$rev_ip\tIN\tPTR\tnode$id.$DOMAIN.\n" \
155f08c3bdfSopenharmony_ci			$(($id % 16)) $(($id / 16)) >> ltp-ns.rev
156f08c3bdfSopenharmony_ci		id=$(($id + 1))
157f08c3bdfSopenharmony_ci	done
158f08c3bdfSopenharmony_ci}
159f08c3bdfSopenharmony_ci
160f08c3bdfSopenharmony_cistart_named()
161f08c3bdfSopenharmony_ci{
162f08c3bdfSopenharmony_ci	chmod 770 .
163f08c3bdfSopenharmony_ci	chmod 660 ./*
164f08c3bdfSopenharmony_ci
165f08c3bdfSopenharmony_ci	port=$(tst_get_unused_port ipv${TST_IPVER} dgram)
166f08c3bdfSopenharmony_ci
167f08c3bdfSopenharmony_ci	tst_resm TINFO "Start named daemon, port $port"
168f08c3bdfSopenharmony_ci	named -$TST_IPVER -c named.conf -p $port || \
169f08c3bdfSopenharmony_ci		tst_brkm TBROK "Failed to run named daemon"
170f08c3bdfSopenharmony_ci
171f08c3bdfSopenharmony_ci	# Make sure named.pid is created.
172f08c3bdfSopenharmony_ci	while true ; do
173f08c3bdfSopenharmony_ci		test -s named.pid && break
174f08c3bdfSopenharmony_ci		tst_sleep 100ms
175f08c3bdfSopenharmony_ci	done
176f08c3bdfSopenharmony_ci}
177f08c3bdfSopenharmony_ci
178f08c3bdfSopenharmony_citest01()
179f08c3bdfSopenharmony_ci{
180f08c3bdfSopenharmony_ci	tst_resm TINFO "Handling name lookup queries '$NS_TIMES' times"
181f08c3bdfSopenharmony_ci
182f08c3bdfSopenharmony_ci	tst_rhost_run -s -c "dns-stress01-rmt.sh $TST_IPVER $(tst_ipaddr) $port \
183f08c3bdfSopenharmony_ci		$DOMAIN $MIN_ID $MAX_ID $NS_TIMES"
184f08c3bdfSopenharmony_ci
185f08c3bdfSopenharmony_ci	tst_resm TPASS "Test is finished successfully"
186f08c3bdfSopenharmony_ci}
187f08c3bdfSopenharmony_ci
188f08c3bdfSopenharmony_citest02()
189f08c3bdfSopenharmony_ci{
190f08c3bdfSopenharmony_ci	tst_resm TINFO "Handling reverse lookup queries '$NS_TIMES' times"
191f08c3bdfSopenharmony_ci
192f08c3bdfSopenharmony_ci	tst_rhost_run -s -c "dns-stress02-rmt.sh $TST_IPVER $(tst_ipaddr) $port $net \
193f08c3bdfSopenharmony_ci		$MIN_ID $MAX_ID $NS_TIMES"
194f08c3bdfSopenharmony_ci
195f08c3bdfSopenharmony_ci	tst_resm TPASS "Test is finished successfully"
196f08c3bdfSopenharmony_ci}
197f08c3bdfSopenharmony_ci
198f08c3bdfSopenharmony_ci. tst_net.sh
199f08c3bdfSopenharmony_cicommon_setup
200f08c3bdfSopenharmony_cisetup_$TST_IPVER
201f08c3bdfSopenharmony_cistart_named
202f08c3bdfSopenharmony_citest01
203f08c3bdfSopenharmony_citest02
204f08c3bdfSopenharmony_citst_exit
205