Skip to content

fix: echo query id in legacy unicast responses (#496) - #498

Merged
keepsimple1 merged 1 commit into
mainfrom
fix/issue-496-unicast
Sep 7, 2026
Merged

fix: echo query id in legacy unicast responses (#496)#498
keepsimple1 merged 1 commit into
mainfrom
fix/issue-496-unicast

Conversation

@keepsimple1

Copy link
Copy Markdown
Owner

Fixes issue #496 part 1:

Problem:

RFC 6762 §6.7 requires a legacy unicast response to echo the querier's message id. The id-echo machinery already existed, but responses always went out with id 0.

Fix:

Add DnsOutgoing::set_multicast() and call it on the legacy-unicast path so wire_id() emits the id set via set_id().

RFC 6762 §6.7 requires a legacy unicast response to echo the querier's
message id. The id-echo machinery (`set_id`/`wire_id`) already existed,
but `wire_id()` returns 0 whenever `multicast` is true, and nothing ever
cleared that flag, so responses always went out with id 0. Standard DNS
tools reject this, e.g. `dig` warns "ID mismatch: expected ID N, got 0".

Add `DnsOutgoing::set_multicast()` and call it on the legacy-unicast path
(`unicast_dest.is_some()`) so `wire_id()` emits the id set via `set_id()`.
Multicast responses and the delayed-PTR path keep `multicast = true` and
so correctly keep id 0.

Extend `test_legacy_unicast_response` to send a query with a distinctive
id and assert the response echoes it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@keepsimple1
keepsimple1 merged commit b61fee3 into main Sep 7, 2026
3 checks passed
@keepsimple1
keepsimple1 deleted the fix/issue-496-unicast branch September 7, 2026 19:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant