# config
server:
	send-client-subnet: 1.2.3.4
	max-client-subnet-ipv4: 17
	module-config: "subnetcache iterator"
	qname-minimisation: no
	minimal-responses: yes
	target-fetch-policy: "0 0 0 0 0"

stub-zone:
	name: "."
	stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
CONFIG_END

SCENARIO_BEGIN Test subnet with no edns subnet from server multiple times
; Multiple queries are sent to a server that does not reply with the
; edns-subnet option.

; K.ROOT-SERVERS.NET.
RANGE_BEGIN 0 100
	ADDRESS 193.0.14.129
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR NOERROR
SECTION QUESTION
. IN NS
SECTION ANSWER
. IN NS K.ROOT-SERVERS.NET.
SECTION ADDITIONAL
K.ROOT-SERVERS.NET. IN A 193.0.14.129
ENTRY_END

ENTRY_BEGIN
MATCH opcode subdomain
ADJUST copy_id copy_query
REPLY QR NOERROR
SECTION QUESTION
com. IN NS
SECTION AUTHORITY
com. IN NS a.gtld-servers.net.
SECTION ADDITIONAL
a.gtld-servers.net. IN A 192.5.6.30
ENTRY_END
RANGE_END

; a.gtld-servers.net.
RANGE_BEGIN 0 100
	ADDRESS 192.5.6.30

ENTRY_BEGIN
MATCH opcode subdomain
ADJUST copy_id copy_query
REPLY QR NOERROR
SECTION QUESTION
example.com. IN NS
SECTION AUTHORITY
example.com. IN NS ns.example.com.
SECTION ADDITIONAL
ns.example.com. IN A 1.2.3.4
ENTRY_END
RANGE_END

; ns.example.com.
RANGE_BEGIN 50 52
	ADDRESS 1.2.3.4

ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR AA NOERROR
SECTION QUESTION
example.com. IN NS
SECTION ANSWER
example.com. IN NS ns.example.com.
ENTRY_END

ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR AA NOERROR
SECTION QUESTION
ns.example.com. IN A
SECTION ANSWER
ns.example.com. IN A 1.2.3.4
ENTRY_END

ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR AA NOERROR
SECTION QUESTION
ns.example.com. IN AAAA
SECTION ANSWER
SECTION AUTHORITY
example.com. IN SOA ns.example.com. host.example.com. 4 86400 3600 86400 3600
ENTRY_END

ENTRY_BEGIN
MATCH opcode qtype qname ednsdata
ADJUST copy_id
REPLY QR AA NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
SECTION ADDITIONAL
	; Match this subnet option
	HEX_EDNSDATA_BEGIN
				; client is 127.0.0.1
		00 08		; OPC
		00 07		; option length
		00 01		; Family
		11 00		; source mask, scopemask
		7f 00 00	; address
	HEX_EDNSDATA_END
	; This is the response, without the subnet option
	HEX_ANSWER_BEGIN;
		00 00 84 00 00 01 00 01	 ; ID 0 QR AA NOERROR
		00 00 00 01 03 77 77 77	 ; www.example.com A (DO)
		07 65 78 61 6d 70 6c 65
		03 63 6f 6d 00 00 01 00
		01 
		C0 0C 00 01 00 01 00 00 0E 10 ; www.example.com. A IN 3600
		00 04 0A 14 1E 2C	 ; rdata 10.20.30.44
		00 00 29 10 00 00 00
		80 00 00 00
	HEX_ANSWER_END
ENTRY_END

ENTRY_BEGIN
MATCH opcode qtype qname ednsdata
ADJUST copy_id
REPLY QR AA NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
SECTION ADDITIONAL
	; Match this subnet option
	HEX_EDNSDATA_BEGIN
				; client is 127.2.0.1
		00 08		; OPC
		00 07		; option length
		00 01		; Family
		11 00		; source mask, scopemask
		7f 02 00	; address
	HEX_EDNSDATA_END
	; This is the response, without the subnet option
	HEX_ANSWER_BEGIN;
		00 00 84 00 00 01 00 01	 ; ID 0 QR AA NOERROR
		00 00 00 01 03 77 77 77	 ; www.example.com A (DO)
		07 65 78 61 6d 70 6c 65
		03 63 6f 6d 00 00 01 00
		01 
		C0 0C 00 01 00 01 00 00 0E 10 ; www.example.com. A IN 3600
		00 04 0A 14 1E 2C	 ; rdata 10.20.30.44
		00 00 29 10 00 00 00
		80 00 00 00
	HEX_ANSWER_END
ENTRY_END

ENTRY_BEGIN
MATCH opcode qtype qname ednsdata
ADJUST copy_id
REPLY QR AA NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
SECTION ADDITIONAL
	; Match this subnet option
	HEX_EDNSDATA_BEGIN
				; client is 127.3.0.1
		00 08		; OPC
		00 07		; option length
		00 01		; Family
		11 00		; source mask, scopemask
		7f 03 00	; address
	HEX_EDNSDATA_END
	; This is the response, without the subnet option
	HEX_ANSWER_BEGIN;
		00 00 84 00 00 01 00 01	 ; ID 0 QR AA NOERROR
		00 00 00 01 03 77 77 77	 ; www.example.com A (DO)
		07 65 78 61 6d 70 6c 65
		03 63 6f 6d 00 00 01 00
		01 
		C0 0C 00 01 00 01 00 00 0E 10 ; www.example.com. A IN 3600
		00 04 0A 14 1E 2C	 ; rdata 10.20.30.44
		00 00 29 10 00 00 00
		80 00 00 00
	HEX_ANSWER_END
ENTRY_END

; The answer for a query without subnet
;ENTRY_BEGIN
;MATCH opcode qtype qname
;ADJUST copy_id
;REPLY QR AA NOERROR
;SECTION QUESTION
;www.example.com. IN A
;SECTION ANSWER
;www.example.com. IN A 10.20.30.40
;ENTRY_END
RANGE_END

; ns.example.com.
RANGE_BEGIN 53 57
	ADDRESS 1.2.3.4
; The answer for a query without subnet
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
REPLY QR AA NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
www.example.com. IN A 10.20.30.40
ENTRY_END
RANGE_END

STEP 10 QUERY
ENTRY_BEGIN
	HEX_ANSWER_BEGIN;
		00 00 01 00 00 01 00 00	 ; ID 0
		00 00 00 01 03 77 77 77	 ; www.example.com A? (DO)
		07 65 78 61 6d 70 6c 65
		03 63 6f 6d 00 00 01 00
		01 00 00 29 10 00 00 00
		80 00 00 0b

		00 08 00 07		; OPC, optlen
		00 01 11 00		; ip4, scope 17, source 0
		7f 00 00		; 127.0.0.0/17
	HEX_ANSWER_END
ENTRY_END

STEP 20 QUERY
ENTRY_BEGIN
	HEX_ANSWER_BEGIN;
		00 00 01 00 00 01 00 00	 ; ID 0
		00 00 00 01 03 77 77 77	 ; www.example.com A? (DO)
		07 65 78 61 6d 70 6c 65
		03 63 6f 6d 00 00 01 00
		01 00 00 29 10 00 00 00
		80 00 00 0b

		00 08 00 07		; OPC, optlen
		00 01 11 00		; ip4, scope 17, source 0
		7f 02 00		; 127.2.0.0/17
	HEX_ANSWER_END
ENTRY_END

STEP 30 QUERY
ENTRY_BEGIN
	HEX_ANSWER_BEGIN;
		00 00 01 00 00 01 00 00	 ; ID 0
		00 00 00 01 03 77 77 77	 ; www.example.com A? (DO)
		07 65 78 61 6d 70 6c 65
		03 63 6f 6d 00 00 01 00
		01 00 00 29 10 00 00 00
		80 00 00 0b

		00 08 00 07		; OPC, optlen
		00 01 11 00		; ip4, scope 17, source 0
		7f 03 00		; 127.3.0.0/17
	HEX_ANSWER_END
ENTRY_END

; recursion happens here.
; The upstream server RANGE starts responding at STEP 50.
STEP 50 TRAFFIC

; The upstream server now responds for the nonsubnet response.
STEP 55 TRAFFIC

STEP 60 CHECK_ANSWER
ENTRY_BEGIN
MATCH all ednsdata
REPLY QR RD RA DO NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
www.example.com. IN A 10.20.30.40
;www.example.com. IN A 10.20.30.44
SECTION ADDITIONAL
;	HEX_EDNSDATA_BEGIN
;				; client is 127.3.0.1
;		00 08		; OPC
;		00 07		; option length
;		00 01		; Family
;		11 00		; source mask, scopemask
;		7f 03 00	; address
;	HEX_EDNSDATA_END
ENTRY_END

STEP 70 CHECK_ANSWER
ENTRY_BEGIN
MATCH all ednsdata
REPLY QR RD RA DO NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
www.example.com. IN A 10.20.30.40
;www.example.com. IN A 10.20.30.44
SECTION ADDITIONAL
;	HEX_EDNSDATA_BEGIN
;				; client is 127.2.0.1
;		00 08		; OPC
;		00 07		; option length
;		00 01		; Family
;		11 00		; source mask, scopemask
;		7f 02 00	; address
;	HEX_EDNSDATA_END
ENTRY_END

STEP 80 CHECK_ANSWER
ENTRY_BEGIN
MATCH all ednsdata
REPLY QR RD RA DO NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
www.example.com. IN A 10.20.30.40
;www.example.com. IN A 10.20.30.44
SECTION ADDITIONAL
;	HEX_EDNSDATA_BEGIN
;				; client is 127.0.0.1
;		00 08		; OPC
;		00 07		; option length
;		00 01		; Family
;		11 00		; source mask, scopemask
;		7f 00 00	; address
;	HEX_EDNSDATA_END
ENTRY_END

SCENARIO_END
