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