1; Check if the prefetch option works properly for messages stored in the global
2; cache for non-ECS clients. The prefetch query needs to result in an ECS
3; outgoing query based on the client's IP.
4
5server:
6	trust-anchor-signaling: no
7	target-fetch-policy: "0 0 0 0 0"
8	send-client-subnet: 1.2.3.4
9	max-client-subnet-ipv4: 21
10	module-config: "subnetcache iterator"
11	verbosity: 3
12	access-control: 127.0.0.1 allow_snoop
13	qname-minimisation: no
14	minimal-responses: no
15	prefetch: yes
16
17stub-zone:
18	name: "."
19	stub-addr: 193.0.14.129 	# K.ROOT-SERVERS.NET.
20CONFIG_END
21
22SCENARIO_BEGIN Test prefetch option for global cache with ECS enabled
23
24; K.ROOT-SERVERS.NET.
25RANGE_BEGIN 0 100
26	ADDRESS 193.0.14.129
27	ENTRY_BEGIN
28		MATCH opcode qtype qname ednsdata
29		ADJUST copy_id
30		REPLY QR NOERROR
31		SECTION QUESTION
32			. IN NS
33		SECTION ANSWER
34			. IN NS	K.ROOT-SERVERS.NET.
35		SECTION ADDITIONAL
36			HEX_EDNSDATA_BEGIN
37				;; we expect to receive empty
38			HEX_EDNSDATA_END
39			K.ROOT-SERVERS.NET.	IN	A	193.0.14.129
40	ENTRY_END
41
42	ENTRY_BEGIN
43		MATCH opcode qtype qname
44		ADJUST copy_id
45		REPLY QR NOERROR
46		SECTION QUESTION
47			www.example.com. IN A
48		SECTION AUTHORITY
49			com.	IN NS	a.gtld-servers.net.
50		SECTION ADDITIONAL
51			a.gtld-servers.net.	IN 	A	192.5.6.30
52	ENTRY_END
53RANGE_END
54
55; a.gtld-servers.net.
56RANGE_BEGIN 0 100
57	ADDRESS 192.5.6.30
58	ENTRY_BEGIN
59		MATCH opcode qtype qname ednsdata
60		ADJUST copy_id
61		REPLY QR NOERROR
62		SECTION QUESTION
63			com. IN NS
64		SECTION ANSWER
65			com.    IN NS   a.gtld-servers.net.
66		SECTION ADDITIONAL
67			HEX_EDNSDATA_BEGIN
68				;; we expect to receive empty
69			HEX_EDNSDATA_END
70			a.gtld-servers.net.     IN      A       192.5.6.30
71	ENTRY_END
72
73	ENTRY_BEGIN
74		MATCH opcode qtype qname
75		ADJUST copy_id
76		REPLY QR NOERROR
77		SECTION QUESTION
78			www.example.com. IN A
79		SECTION AUTHORITY
80			example.com.	IN NS	ns.example.com.
81		SECTION ADDITIONAL
82			ns.example.com.		IN 	A	1.2.3.4
83	ENTRY_END
84RANGE_END
85
86; ns.example.com.
87RANGE_BEGIN 0 10
88	ADDRESS 1.2.3.4
89	ENTRY_BEGIN
90		MATCH opcode qtype qname
91		ADJUST copy_id
92		REPLY QR NOERROR
93		SECTION QUESTION
94			example.com. IN NS
95		SECTION ANSWER
96			example.com.    IN NS   ns.example.com.
97		SECTION ADDITIONAL
98			HEX_EDNSDATA_BEGIN
99				;; we expect to receive empty
100			HEX_EDNSDATA_END
101			ns.example.com.         IN      A       1.2.3.4
102	ENTRY_END
103
104	; response to query of interest
105	ENTRY_BEGIN
106		MATCH opcode qtype qname
107		ADJUST copy_id
108		REPLY QR NOERROR
109		SECTION QUESTION
110			www.example.com. IN A
111		SECTION ANSWER
112			www.example.com. 10 IN A	10.20.30.40
113		SECTION AUTHORITY
114			example.com.	IN NS	ns.example.com.
115		SECTION ADDITIONAL
116			ns.example.com.		IN 	A	1.2.3.4
117	ENTRY_END
118RANGE_END
119
120; ns.example.com.
121RANGE_BEGIN 11 100
122	ADDRESS 1.2.3.4
123	ENTRY_BEGIN
124		MATCH opcode qtype qname
125		ADJUST copy_id
126		REPLY QR NOERROR
127		SECTION QUESTION
128			example.com. IN NS
129		SECTION ANSWER
130			example.com.    IN NS   ns.example.com.
131		SECTION ADDITIONAL
132			HEX_EDNSDATA_BEGIN
133				;; we expect to receive empty
134			HEX_EDNSDATA_END
135			ns.example.com.         IN      A       1.2.3.4
136	ENTRY_END
137
138	; response to query of interest
139	ENTRY_BEGIN
140		MATCH opcode qtype qname ednsdata
141		ADJUST copy_id copy_ednsdata_assume_clientsubnet
142		REPLY QR NOERROR
143		SECTION QUESTION
144			www.example.com. IN A
145		SECTION ANSWER
146			www.example.com. 10 IN A	10.20.30.40
147		SECTION AUTHORITY
148			example.com.	IN NS	ns.example.com.
149		SECTION ADDITIONAL
150			HEX_EDNSDATA_BEGIN
151						; client is 127.0.0.1
152				00 08 		; OPC
153				00 07 		; option length
154				00 01 		; Family
155				15 00 		; source mask, scopemask
156				7f 00 00 	; address
157			HEX_EDNSDATA_END
158			ns.example.com.		IN 	A	1.2.3.4
159	ENTRY_END
160RANGE_END
161
162STEP 1 QUERY
163ENTRY_BEGIN
164REPLY RD
165SECTION QUESTION
166www.example.com. IN A
167ENTRY_END
168
169; This answer should be in the global cache (because no ECS from upstream)
170STEP 2 CHECK_ANSWER
171ENTRY_BEGIN
172MATCH all
173REPLY QR RD RA NOERROR
174SECTION QUESTION
175www.example.com. IN A
176SECTION ANSWER
177www.example.com. IN A	10.20.30.40
178SECTION AUTHORITY
179example.com.	IN NS	ns.example.com.
180SECTION ADDITIONAL
181ns.example.com.		IN 	A	1.2.3.4
182ENTRY_END
183
184; Try to trigger a prefetch
185STEP 3 TIME_PASSES ELAPSE 9
186
187STEP 11 QUERY
188ENTRY_BEGIN
189REPLY RD
190SECTION QUESTION
191www.example.com. IN A
192ENTRY_END
193
194; This record came from the global cache and a prefetch was triggered.
195STEP 12 CHECK_ANSWER
196ENTRY_BEGIN
197MATCH all ttl
198REPLY QR RD RA NOERROR
199SECTION QUESTION
200www.example.com. IN A
201SECTION ANSWER
202www.example.com. 1 IN A	10.20.30.40
203SECTION AUTHORITY
204example.com.	3591 IN NS	ns.example.com.
205SECTION ADDITIONAL
206ns.example.com.	3591 IN 	A	1.2.3.4
207ENTRY_END
208
209; Allow time to pass so that the global cache record is expired.
210STEP 13 TIME_PASSES ELAPSE 2
211
212; Query again to verify that the record was prefetched and stored in the ECS
213; cache.
214STEP 15 QUERY
215ENTRY_BEGIN
216REPLY RD
217SECTION QUESTION
218www.example.com. IN A
219ENTRY_END
220
221; This record came from the ECS cache.
222STEP 16 CHECK_ANSWER
223ENTRY_BEGIN
224MATCH all ttl
225REPLY QR RD RA NOERROR
226SECTION QUESTION
227www.example.com. IN A
228SECTION ANSWER
229www.example.com. 8 IN A	10.20.30.40
230SECTION AUTHORITY
231example.com.	3598 IN NS	ns.example.com.
232SECTION ADDITIONAL
233ns.example.com.	3598 IN 	A	1.2.3.4
234ENTRY_END
235
236SCENARIO_END
237