Repository navigation
[ddm, mg-lower, pt6] underlay membership sweep, admin v5, & mrib origination - #999
Open
zeeshanlakhani wants to merge 3 commits into
Open
zeeshanlakhani wants to merge 3 commits into
zeeshanlakhani wants to merge 3 commits into
Conversation
…ination This is the sixth (and last) part in a series of recut PRs split from #675. After pt5, we had ddm peers exchanging multicast subscriptions, but the imports never made their way to the switch, and mgd couldn't originate groups into ddm yet. This work handles both. Includes: - A multicast member sweep in ddmd (`ddm/src/mcast.rs`), which is tasked with programming imported routes into the DPD underlay group members (rear ports for now, geared toward mcast v1). - This sweep runs every 10s and can get woken up early by the db whenever an `(origin, nexthop, interface)` 3-tuple import is added or removed (via watch notify) - A read-modify-write per group per pass. The write passes back the group tag from the read. Nexus still owns group create/delete, and `External` members are not updated. - Only members programmed by this ddmd process (since startup) get removed (same as unicast + tunnel routes). - QSFP "Underlay" members are skipped for now (TODO), as replicas would cycle between racks without RPF or a designated forwarder. - Multicast imports are structured and keyed per `(nexthop, ifname)` link, and `remove_nexthop_{mcast_}routes` take the interface. Before, the same link-local nexthop on two interfaces collapsed into one entry, where losing either link caused a drop. - A new ddm admin API version (`MULTICAST_INTERFACES`), where `get_multicast_groups` returns `ImportedMulticastRoute` with the interface name. - Transits only redistribute imports that are new or changed (including over path/metric modifications). - `mg-common::tfport` kills a TODO and introduces a parser for `tfport<kind><port>_<link>[.vlan]` names, replacing the prefix/suffix string handling we dealt with previously. - mg-lower MRIB origination uses a separate thread (from unicast/tunnels) that diffs `loc_mrib` against ddm's originated groups and advertises/withdraws accordingly. - This is a watcher-driven task with a 1s fallback resync, like unicast. - *testing*: - We introduce a dual-sidecar topology, with a server with one link to each sidecar (e.g., `sl0` -> sidecar a, `sl1` -> sidecar b), importing from both, dropping and restoring `sl1`, and performing a ddmd restart. - Multicast phases have been added to the trio, quartet (failover), and sextet integrations. - *deps* - For `dual-sidecar testing` ~ SoftNPU purposes, we are pinned against oxidecomputer/dendrite#405 for dendrite.
zeeshanlakhani
force-pushed
the
zl/mcast-lower
branch
from
November 9, 2026 09:02
051c135 to
7d6d1bd
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is the sixth (and last, maybe) part in a series of recut PRs split from #675. After pt5, we had ddm peers exchanging multicast subscriptions, but the imports never made their way to the switch, and mgd couldn't originate groups into ddm yet. This work handles both.
Includes:
ddm/src/mcast.rs), which is tasked with programming imported routes into the DPD underlay group members (rear ports for now, geared toward mcast v1).(origin, nexthop, interface)3-tuple import is added or removed (via watch notify).Externalmembers are not updated.(nexthop, ifname)link, andremove_nexthop_{mcast_}routestake the interface. Before, the same link-local nexthop on two interfaces collapsed into one entry, where losing either link caused a drop.MULTICAST_INTERFACES), whereget_multicast_groupsreturnsImportedMulticastRoutewith the interface name.mg-common::tfportkills a TODO and introduces a parser fortfport<kind><port>_<link>[.vlan]names, replacing the prefix/suffix string handling we dealt with previously.loc_mribagainst ddm's originated groups and advertises/withdraws accordingly.sl0-> sidecar a,sl1-> sidecar b), importing from both, dropping and restoringsl1, and performing a ddmd restart.dual-sidecar testing~ SoftNPU purposes, we are pinned against [softnpu, mcast] wire up the softnpu backend for multicast table ops dendrite#405 for dendrite.