Address01 (address01)
Status: Final
Purpose
- Classify authoritative nameserver IP addresses as globally reachable, documentation, local-use, or otherwise not globally reachable.
- Detect the case where no nameserver address data is available.
Preconditions And Inputs
- Preconditions:
- A
zone.Zoneobject is available. - A recursor is available on the zone object for Methodsv2 lookups.
- A
- Required inputs:
- Delegation nameserver names and addresses from
GetDelNSNamesAndIPs. - Zone-apex nameserver names and addresses from
GetZoneNSNamesAndIPs. - Special-purpose address registry data via
constants.FindSpecialAddress.
- Delegation nameserver names and addresses from
- Profile/config knobs that affect behavior:
net.ipv4andnet.ipv6may affect address discovery in Methodsv2 lookups.
Algorithm And Decision Flow
- Emit
TEST_CASE_START. - Query nameserver names/addresses using
GetDelNSNamesAndIPsandGetZoneNSNamesAndIPs. - Merge the two result sets, keep only entries with an address, and deduplicate by lowercase
name/ip. - If no addressed nameserver remains, emit
A01_NO_NAME_SERVERS_FOUND, emitTEST_CASE_END, and return. - Group items by IP address, then iterate IP groups in lexicographic IP string order.
- For each IP group, classify by special-address category:
- Documentation category -> add all
name/ippairs in group to documentation set. - Local-use categories (
Private-Use,Loopback,Link Local,Link-Local,Unique-Local,Shared Address Space) -> add to local-use set. - Any other non-globally-reachable special range -> add to not-globally-reachable set.
- Otherwise -> add to globally-reachable set.
- Documentation category -> add all
- If globally-reachable set is non-empty, emit
A01_GLOBALLY_REACHABLE_ADDRwithservers; else emitA01_NO_GLOBALLY_REACHABLE_ADDR. - Emit
A01_DOCUMENTATION_ADDRif documentation set is non-empty. - Emit
A01_LOCAL_USE_ADDRif local-use set is non-empty. - Emit
A01_ADDR_NOT_GLOBALLY_REACHABLEif not-globally-reachable set is non-empty. - Emit
TEST_CASE_END.
Emitted Tags (Possible Set)
| Tag | Emitted when |
|---|---|
A01_ADDR_NOT_GLOBALLY_REACHABLE | At least one nameserver IP is in a special-purpose range that is not globally reachable and not classified as documentation/local-use. |
A01_DOCUMENTATION_ADDR | At least one nameserver IP is in a documentation-only range. |
A01_GLOBALLY_REACHABLE_ADDR | At least one nameserver IP is classified as globally reachable. |
A01_LOCAL_USE_ADDR | At least one nameserver IP is in a local-use category. |
A01_NO_GLOBALLY_REACHABLE_ADDR | No nameserver IP is classified as globally reachable. |
A01_NO_NAME_SERVERS_FOUND | No nameserver with an address was discovered from delegation+zone sources. |
TEST_CASE_END | Testcase completion marker is emitted. |
TEST_CASE_START | Testcase start marker is emitted. |
Tag Arguments
| Tag | Argument key | Type | Meaning |
|---|---|---|---|
A01_ADDR_NOT_GLOBALLY_REACHABLE | servers | array<object> | Structured {ns,address} object pairs in the non-globally-reachable set. |
A01_DOCUMENTATION_ADDR | servers | array<object> | Structured {ns,address} object pairs in documentation ranges. |
A01_GLOBALLY_REACHABLE_ADDR | servers | array<object> | Structured {ns,address} object pairs in globally reachable ranges. |
A01_LOCAL_USE_ADDR | servers | array<object> | Structured {ns,address} object pairs in local-use ranges. |
A01_NO_GLOBALLY_REACHABLE_ADDR | - | - | No arguments. |
A01_NO_NAME_SERVERS_FOUND | - | - | No arguments. |
TEST_CASE_END | testcase | string | Testcase display name (Address01). |
TEST_CASE_START | testcase | string | Testcase display name (Address01). |
Severity Levels Per Tag
| Tag | Level | Notes |
|---|---|---|
A01_ADDR_NOT_GLOBALLY_REACHABLE | ERROR | Default from share/profile.json (test_levels.ADDRESS). |
A01_DOCUMENTATION_ADDR | ERROR | Default from share/profile.json (test_levels.ADDRESS). |
A01_GLOBALLY_REACHABLE_ADDR | INFO | Default from share/profile.json (test_levels.ADDRESS). |
A01_LOCAL_USE_ADDR | ERROR | Default from share/profile.json (test_levels.ADDRESS). |
A01_NO_GLOBALLY_REACHABLE_ADDR | ERROR | Default from share/profile.json (test_levels.ADDRESS). |
A01_NO_NAME_SERVERS_FOUND | CRITICAL | Default from share/profile.json (test_levels.ADDRESS). |
TEST_CASE_END | DEBUG | Default from share/profile.json (test_levels.ADDRESS). |
TEST_CASE_START | DEBUG | Default from share/profile.json (test_levels.ADDRESS). |
Differences From Upstream
- Upstream reference:
address01.md - Differences (Upstream vs Gonemaster):
- Upstream: does not define a strict order for category tag emission. Gonemaster: emits
A01_GLOBALLY_REACHABLE_ADDR/A01_NO_GLOBALLY_REACHABLE_ADDRbefore other category tags. - Upstream: does not require a specific
serverspresentation order. Gonemaster: deduplicates and lexicographically sortsserversvalues before emission.
- Upstream: does not define a strict order for category tag emission. Gonemaster: emits
- Potential upstream report:
no
Edge Cases And Limitations
- The testcase ignores nameserver entries that lack resolved IP addresses.
- If all discovered addresses are reserved/non-global,
A01_NO_GLOBALLY_REACHABLE_ADDRcan be emitted together with one or more category error tags. - Multiple nameserver names sharing one IP are preserved as distinct
name/ipentries in output lists.