Skip to content

moq-relay-hops: carry HOP_PATH on NAMESPACE via an extended Parameters field#48

Merged
kixelated merged 1 commit into
mainfrom
claude/distracted-gagarin-9f2d98
Jul 6, 2026
Merged

moq-relay-hops: carry HOP_PATH on NAMESPACE via an extended Parameters field#48
kixelated merged 1 commit into
mainfrom
claude/distracted-gagarin-9f2d98

Conversation

@kixelated

Copy link
Copy Markdown
Collaborator

Problem

The Relay Hops extension relies on namespace advertisements carrying a HOP_PATH parameter as they propagate through a relay mesh. But in the subscriber-driven flow, advertisements propagate downstream as NAMESPACE messages (moqt Section 10.16) — the response to SUBSCRIBE_NAMESPACE — and that message has no Parameters field (only Type, Length, Track Namespace Suffix). So HOP_PATH had nowhere to ride on the reactive path, which is exactly the relay-mesh scenario the extension targets.

PUBLISH_NAMESPACE (0x6) and SUBSCRIBE_NAMESPACE (0x50) do carry a Parameters field, so HOP_PATH on the former and EXCLUDE_HOP on the latter were already fine.

Fix

This extension now defines an extended NAMESPACE message that appends Number of Parameters + Parameters after the (self-delimiting) Track Namespace Suffix, used only on a session that negotiated Relay Hops. HOP_PATH is carried there as well as on PUBLISH_NAMESPACE.

  • New section "Carrying Parameters on Namespace Advertisements" defining the extended NAMESPACE wire format (NAMESPACE_DONE is explicitly not extended — no state to carry).
  • Introduction describes both advertisement paths (proactive PUBLISH_NAMESPACE and reactive NAMESPACE responses).
  • Setup Negotiation ties the extended NAMESPACE format to the RELAY_HOPS negotiation; relays include HOP_PATH on every PUBLISH_NAMESPACE and NAMESPACE. Graceful-degradation wording updated since a non-negotiating session omits the whole Parameters field on NAMESPACE.
  • HOP_PATH Parameter now carried in PUBLISH_NAMESPACE or an extended NAMESPACE.
  • IANA HOP_PATH "Carried In" updated to PUBLISH_NAMESPACE, NAMESPACE.

EXCLUDE_HOP needed no change.

Extending a base-protocol message's wire format from an extension is safe here because it is gated on the per-session SETUP negotiation — both endpoints agree on whether NAMESPACE carries the trailing Parameters field before any NAMESPACE is sent.

Draft builds cleanly (kramdown-rfc ... OK, xml2rfc-txt ... OK).

🤖 Generated with Claude Code

…pagate

NAMESPACE (moqt Section 10.16), the message that delivers advertisements
on a SUBSCRIBE_NAMESPACE response stream, has no Parameters field, so
HOP_PATH had no way to travel the subscriber-driven relay path the
extension targets. Define an extended NAMESPACE message that appends a
Parameters field (gated on the RELAY_HOPS setup negotiation) and carry
HOP_PATH there as well as on PUBLISH_NAMESPACE.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @kixelated, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@kixelated kixelated merged commit 718be4d into main Jul 6, 2026
3 checks passed
@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0b9161ae-4d39-44e5-8b98-6ca0398393a1

📥 Commits

Reviewing files that changed from the base of the PR and between 746a576 and 6a30a1d.

📒 Files selected for processing (1)
  • draft-lcurley-moq-relay-hops.md

Walkthrough

This change updates the draft-lcurley-moq-relay-hops.md specification. It clarifies that both PUBLISH_NAMESPACE and NAMESPACE messages are treated as namespace advertisements, expands Setup Negotiation rules so negotiated sessions must carry HOP_PATH on both message types and honor EXCLUDE_HOP, and introduces a new section defining an extended NAMESPACE message format with an appended Parameters field. The MOQT Message Parameters registration table is updated to reflect where HOP_PATH and EXCLUDE_HOP are carried.

Changes

Area Description
Introduction Explicitly lists PUBLISH_NAMESPACE and NAMESPACE as namespace advertisements
Setup Negotiation Requires HOP_PATH on negotiated sessions for both message types; requires honoring EXCLUDE_HOP; specifies behavior when not negotiated
New section Defines extended NAMESPACE message format with appended Parameters field and parsing rules bounded by Length
Registration table Updates carried-in locations for HOP_PATH and EXCLUDE_HOP parameters

Related issues: None specified.

Related PRs: None specified.

Suggested labels: documentation, spec-change

Suggested reviewers: lcurley

Poem

A rabbit hops through session's gate,
With HOP_PATH tags to navigate,
NAMESPACE grows a new extension,
Parameters carried with intention,
EXCLUDE_HOP whispers, "not this way,"
The draft evolves another day. 🐇📜

✨ Finishing Touches
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch claude/distracted-gagarin-9f2d98

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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