[fix] remove ASIC ports before replication cleanup on empty transition - #232

Merged
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition
Mar 10, 2026
Merged

[fix] remove ASIC ports before replication cleanup on empty transition#232
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition

Conversation

@zeeshanlakhani

@zeeshanlakhanizeeshanlakhani commented Feb 28, 2026

Copy link
Copy Markdown
Contributor

When all members are removed from a multicast group, the (true, true) transition path cleaned up replication table entries but skipped process_membership_changes, leaving stale ports in the ASIC groups. Subsequent re-adds failed with "already contains port" (500).

This fix calls process_membership_changes before cleanup_empty_group_replication so mc_port_remove runs on every port. Extend the IPv6 empty-then-add integration test to cover the full add -> remove all -> re-add cycle.

References:

@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from 6ed1122 to c0cc2dcCompareFebruary 28, 2026 07:20
When all members are removed from a multicast group, the (true, true)
transition path cleaned up replication table entries but skipped
process_membership_changes, leaving stale ports in the ASIC groups.
Subsequent re-adds failed with "already contains port" (500).
This fix calls process_membership_changes before cleanup_empty_group_replication
so mc_port_remove runs on every port. Extend the IPv6 empty-then-add
integration test to cover the full add -> remove all -> re-add cycle.
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from c0cc2dc to 5a4f56eCompareFebruary 28, 2026 07:32
@zeeshanlakhani
zeeshanlakhani marked this pull request as ready for review February 28, 2026 09:37
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after testing with
a feature-gated (for multicast) dpd binary. There's a minor follow-up (oxidecomputer/dendrite#232) that I'll work in after this. - Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter), fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after
testing with a feature-gated (for multicast) dpd binary.
There's a minor follow-up
(oxidecomputer/dendrite#232) that I'll work in
after this.
- Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter),
fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
… recovery path
This matches Dendrite PR oxidecomputer/dendrite#232.
This update dendrite rev to 5a4f56e (oxidecomputer/dendrite#232), which fixes
the empty-transition in `modify_group_internal`. With the fix, the
delete+recreate recovery path in `modify_group_membership` is no longer
needed. Errors now propagate directly and the reconciler handles
drift on the next pass.
@zeeshanlakhanizeeshanlakhani self-assigned this Mar 5, 2026
Comment threaddpd/src/mcast/mod.rs Outdated
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from e082a6c to d049a0bCompareMarch 10, 2026 05:54
@zeeshanlakhani
zeeshanlakhani merged commit b31ba90 into mainMar 10, 2026
6 checks passed
@zeeshanlakhani
zeeshanlakhani deleted the zl/fix-mcast-empty-transition branch March 10, 2026 06:29
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 10, 2026
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 16, 2026
Sign up for freeto 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.

2 participants

@zeeshanlakhani@FelixMcFelix
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[fix] remove ASIC ports before replication cleanup on empty transition - #232

Merged
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition
Mar 10, 2026
Merged

[fix] remove ASIC ports before replication cleanup on empty transition#232
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition

Conversation

@zeeshanlakhani

@zeeshanlakhanizeeshanlakhani commented Feb 28, 2026

Copy link
Copy Markdown
Contributor

When all members are removed from a multicast group, the (true, true) transition path cleaned up replication table entries but skipped process_membership_changes, leaving stale ports in the ASIC groups. Subsequent re-adds failed with "already contains port" (500).

This fix calls process_membership_changes before cleanup_empty_group_replication so mc_port_remove runs on every port. Extend the IPv6 empty-then-add integration test to cover the full add -> remove all -> re-add cycle.

References:

@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from 6ed1122 to c0cc2dcCompareFebruary 28, 2026 07:20
When all members are removed from a multicast group, the (true, true)
transition path cleaned up replication table entries but skipped
process_membership_changes, leaving stale ports in the ASIC groups.
Subsequent re-adds failed with "already contains port" (500).
This fix calls process_membership_changes before cleanup_empty_group_replication
so mc_port_remove runs on every port. Extend the IPv6 empty-then-add
integration test to cover the full add -> remove all -> re-add cycle.
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from c0cc2dc to 5a4f56eCompareFebruary 28, 2026 07:32
@zeeshanlakhani
zeeshanlakhani marked this pull request as ready for review February 28, 2026 09:37
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after testing with
a feature-gated (for multicast) dpd binary. There's a minor follow-up (oxidecomputer/dendrite#232) that I'll work in after this. - Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter), fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after
testing with a feature-gated (for multicast) dpd binary.
There's a minor follow-up
(oxidecomputer/dendrite#232) that I'll work in
after this.
- Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter),
fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
… recovery path
This matches Dendrite PR oxidecomputer/dendrite#232.
This update dendrite rev to 5a4f56e (oxidecomputer/dendrite#232), which fixes
the empty-transition in `modify_group_internal`. With the fix, the
delete+recreate recovery path in `modify_group_membership` is no longer
needed. Errors now propagate directly and the reconciler handles
drift on the next pass.
@zeeshanlakhanizeeshanlakhani self-assigned this Mar 5, 2026
Comment threaddpd/src/mcast/mod.rs Outdated
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from e082a6c to d049a0bCompareMarch 10, 2026 05:54
@zeeshanlakhani
zeeshanlakhani merged commit b31ba90 into mainMar 10, 2026
6 checks passed
@zeeshanlakhani
zeeshanlakhani deleted the zl/fix-mcast-empty-transition branch March 10, 2026 06:29
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 10, 2026
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 16, 2026
Sign up for freeto 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.

2 participants

@zeeshanlakhani@FelixMcFelix
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[fix] remove ASIC ports before replication cleanup on empty transition - #232

Merged
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition
Mar 10, 2026
Merged

[fix] remove ASIC ports before replication cleanup on empty transition#232
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition

Conversation

@zeeshanlakhani

@zeeshanlakhanizeeshanlakhani commented Feb 28, 2026

Copy link
Copy Markdown
Contributor

When all members are removed from a multicast group, the (true, true) transition path cleaned up replication table entries but skipped process_membership_changes, leaving stale ports in the ASIC groups. Subsequent re-adds failed with "already contains port" (500).

This fix calls process_membership_changes before cleanup_empty_group_replication so mc_port_remove runs on every port. Extend the IPv6 empty-then-add integration test to cover the full add -> remove all -> re-add cycle.

References:

@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from 6ed1122 to c0cc2dcCompareFebruary 28, 2026 07:20
When all members are removed from a multicast group, the (true, true)
transition path cleaned up replication table entries but skipped
process_membership_changes, leaving stale ports in the ASIC groups.
Subsequent re-adds failed with "already contains port" (500).
This fix calls process_membership_changes before cleanup_empty_group_replication
so mc_port_remove runs on every port. Extend the IPv6 empty-then-add
integration test to cover the full add -> remove all -> re-add cycle.
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from c0cc2dc to 5a4f56eCompareFebruary 28, 2026 07:32
@zeeshanlakhani
zeeshanlakhani marked this pull request as ready for review February 28, 2026 09:37
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after testing with
a feature-gated (for multicast) dpd binary. There's a minor follow-up (oxidecomputer/dendrite#232) that I'll work in after this. - Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter), fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after
testing with a feature-gated (for multicast) dpd binary.
There's a minor follow-up
(oxidecomputer/dendrite#232) that I'll work in
after this.
- Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter),
fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
… recovery path
This matches Dendrite PR oxidecomputer/dendrite#232.
This update dendrite rev to 5a4f56e (oxidecomputer/dendrite#232), which fixes
the empty-transition in `modify_group_internal`. With the fix, the
delete+recreate recovery path in `modify_group_membership` is no longer
needed. Errors now propagate directly and the reconciler handles
drift on the next pass.
@zeeshanlakhanizeeshanlakhani self-assigned this Mar 5, 2026
Comment threaddpd/src/mcast/mod.rs Outdated
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from e082a6c to d049a0bCompareMarch 10, 2026 05:54
@zeeshanlakhani
zeeshanlakhani merged commit b31ba90 into mainMar 10, 2026
6 checks passed
@zeeshanlakhani
zeeshanlakhani deleted the zl/fix-mcast-empty-transition branch March 10, 2026 06:29
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 10, 2026
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 16, 2026
Sign up for freeto 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.

2 participants

@zeeshanlakhani@FelixMcFelix
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[fix] remove ASIC ports before replication cleanup on empty transition - #232

Merged
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition
Mar 10, 2026
Merged

[fix] remove ASIC ports before replication cleanup on empty transition#232
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition

Conversation

@zeeshanlakhani

@zeeshanlakhanizeeshanlakhani commented Feb 28, 2026

Copy link
Copy Markdown
Contributor

When all members are removed from a multicast group, the (true, true) transition path cleaned up replication table entries but skipped process_membership_changes, leaving stale ports in the ASIC groups. Subsequent re-adds failed with "already contains port" (500).

This fix calls process_membership_changes before cleanup_empty_group_replication so mc_port_remove runs on every port. Extend the IPv6 empty-then-add integration test to cover the full add -> remove all -> re-add cycle.

References:

@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from 6ed1122 to c0cc2dcCompareFebruary 28, 2026 07:20
When all members are removed from a multicast group, the (true, true)
transition path cleaned up replication table entries but skipped
process_membership_changes, leaving stale ports in the ASIC groups.
Subsequent re-adds failed with "already contains port" (500).
This fix calls process_membership_changes before cleanup_empty_group_replication
so mc_port_remove runs on every port. Extend the IPv6 empty-then-add
integration test to cover the full add -> remove all -> re-add cycle.
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from c0cc2dc to 5a4f56eCompareFebruary 28, 2026 07:32
@zeeshanlakhani
zeeshanlakhani marked this pull request as ready for review February 28, 2026 09:37
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after testing with
a feature-gated (for multicast) dpd binary. There's a minor follow-up (oxidecomputer/dendrite#232) that I'll work in after this. - Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter), fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after
testing with a feature-gated (for multicast) dpd binary.
There's a minor follow-up
(oxidecomputer/dendrite#232) that I'll work in
after this.
- Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter),
fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
… recovery path
This matches Dendrite PR oxidecomputer/dendrite#232.
This update dendrite rev to 5a4f56e (oxidecomputer/dendrite#232), which fixes
the empty-transition in `modify_group_internal`. With the fix, the
delete+recreate recovery path in `modify_group_membership` is no longer
needed. Errors now propagate directly and the reconciler handles
drift on the next pass.
@zeeshanlakhanizeeshanlakhani self-assigned this Mar 5, 2026
Comment threaddpd/src/mcast/mod.rs Outdated
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from e082a6c to d049a0bCompareMarch 10, 2026 05:54
@zeeshanlakhani
zeeshanlakhani merged commit b31ba90 into mainMar 10, 2026
6 checks passed
@zeeshanlakhani
zeeshanlakhani deleted the zl/fix-mcast-empty-transition branch March 10, 2026 06:29
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 10, 2026
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 16, 2026
Sign up for freeto 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.

2 participants

@zeeshanlakhani@FelixMcFelix
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[fix] remove ASIC ports before replication cleanup on empty transition - #232

Merged
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition
Mar 10, 2026
Merged

[fix] remove ASIC ports before replication cleanup on empty transition#232
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition

Conversation

@zeeshanlakhani

@zeeshanlakhanizeeshanlakhani commented Feb 28, 2026

Copy link
Copy Markdown
Contributor

When all members are removed from a multicast group, the (true, true) transition path cleaned up replication table entries but skipped process_membership_changes, leaving stale ports in the ASIC groups. Subsequent re-adds failed with "already contains port" (500).

This fix calls process_membership_changes before cleanup_empty_group_replication so mc_port_remove runs on every port. Extend the IPv6 empty-then-add integration test to cover the full add -> remove all -> re-add cycle.

References:

@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from 6ed1122 to c0cc2dcCompareFebruary 28, 2026 07:20
When all members are removed from a multicast group, the (true, true)
transition path cleaned up replication table entries but skipped
process_membership_changes, leaving stale ports in the ASIC groups.
Subsequent re-adds failed with "already contains port" (500).
This fix calls process_membership_changes before cleanup_empty_group_replication
so mc_port_remove runs on every port. Extend the IPv6 empty-then-add
integration test to cover the full add -> remove all -> re-add cycle.
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from c0cc2dc to 5a4f56eCompareFebruary 28, 2026 07:32
@zeeshanlakhani
zeeshanlakhani marked this pull request as ready for review February 28, 2026 09:37
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after testing with
a feature-gated (for multicast) dpd binary. There's a minor follow-up (oxidecomputer/dendrite#232) that I'll work in after this. - Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter), fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after
testing with a feature-gated (for multicast) dpd binary.
There's a minor follow-up
(oxidecomputer/dendrite#232) that I'll work in
after this.
- Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter),
fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
… recovery path
This matches Dendrite PR oxidecomputer/dendrite#232.
This update dendrite rev to 5a4f56e (oxidecomputer/dendrite#232), which fixes
the empty-transition in `modify_group_internal`. With the fix, the
delete+recreate recovery path in `modify_group_membership` is no longer
needed. Errors now propagate directly and the reconciler handles
drift on the next pass.
@zeeshanlakhanizeeshanlakhani self-assigned this Mar 5, 2026
Comment threaddpd/src/mcast/mod.rs Outdated
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from e082a6c to d049a0bCompareMarch 10, 2026 05:54
@zeeshanlakhani
zeeshanlakhani merged commit b31ba90 into mainMar 10, 2026
6 checks passed
@zeeshanlakhani
zeeshanlakhani deleted the zl/fix-mcast-empty-transition branch March 10, 2026 06:29
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 10, 2026
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 16, 2026
Sign up for freeto 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.

2 participants

@zeeshanlakhani@FelixMcFelix
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[fix] remove ASIC ports before replication cleanup on empty transition - #232

Merged
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition
Mar 10, 2026
Merged

[fix] remove ASIC ports before replication cleanup on empty transition#232
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition

Conversation

@zeeshanlakhani

@zeeshanlakhanizeeshanlakhani commented Feb 28, 2026

Copy link
Copy Markdown
Contributor

When all members are removed from a multicast group, the (true, true) transition path cleaned up replication table entries but skipped process_membership_changes, leaving stale ports in the ASIC groups. Subsequent re-adds failed with "already contains port" (500).

This fix calls process_membership_changes before cleanup_empty_group_replication so mc_port_remove runs on every port. Extend the IPv6 empty-then-add integration test to cover the full add -> remove all -> re-add cycle.

References:

@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from 6ed1122 to c0cc2dcCompareFebruary 28, 2026 07:20
When all members are removed from a multicast group, the (true, true)
transition path cleaned up replication table entries but skipped
process_membership_changes, leaving stale ports in the ASIC groups.
Subsequent re-adds failed with "already contains port" (500).
This fix calls process_membership_changes before cleanup_empty_group_replication
so mc_port_remove runs on every port. Extend the IPv6 empty-then-add
integration test to cover the full add -> remove all -> re-add cycle.
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from c0cc2dc to 5a4f56eCompareFebruary 28, 2026 07:32
@zeeshanlakhani
zeeshanlakhani marked this pull request as ready for review February 28, 2026 09:37
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after testing with
a feature-gated (for multicast) dpd binary. There's a minor follow-up (oxidecomputer/dendrite#232) that I'll work in after this. - Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter), fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after
testing with a feature-gated (for multicast) dpd binary.
There's a minor follow-up
(oxidecomputer/dendrite#232) that I'll work in
after this.
- Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter),
fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
… recovery path
This matches Dendrite PR oxidecomputer/dendrite#232.
This update dendrite rev to 5a4f56e (oxidecomputer/dendrite#232), which fixes
the empty-transition in `modify_group_internal`. With the fix, the
delete+recreate recovery path in `modify_group_membership` is no longer
needed. Errors now propagate directly and the reconciler handles
drift on the next pass.
@zeeshanlakhanizeeshanlakhani self-assigned this Mar 5, 2026
Comment threaddpd/src/mcast/mod.rs Outdated
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from e082a6c to d049a0bCompareMarch 10, 2026 05:54
@zeeshanlakhani
zeeshanlakhani merged commit b31ba90 into mainMar 10, 2026
6 checks passed
@zeeshanlakhani
zeeshanlakhani deleted the zl/fix-mcast-empty-transition branch March 10, 2026 06:29
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 10, 2026
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 16, 2026
Sign up for freeto 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.

2 participants

@zeeshanlakhani@FelixMcFelix
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[fix] remove ASIC ports before replication cleanup on empty transition - #232

Merged
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition
Mar 10, 2026
Merged

[fix] remove ASIC ports before replication cleanup on empty transition#232
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition

Conversation

@zeeshanlakhani

@zeeshanlakhanizeeshanlakhani commented Feb 28, 2026

Copy link
Copy Markdown
Contributor

When all members are removed from a multicast group, the (true, true) transition path cleaned up replication table entries but skipped process_membership_changes, leaving stale ports in the ASIC groups. Subsequent re-adds failed with "already contains port" (500).

This fix calls process_membership_changes before cleanup_empty_group_replication so mc_port_remove runs on every port. Extend the IPv6 empty-then-add integration test to cover the full add -> remove all -> re-add cycle.

References:

@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from 6ed1122 to c0cc2dcCompareFebruary 28, 2026 07:20
When all members are removed from a multicast group, the (true, true)
transition path cleaned up replication table entries but skipped
process_membership_changes, leaving stale ports in the ASIC groups.
Subsequent re-adds failed with "already contains port" (500).
This fix calls process_membership_changes before cleanup_empty_group_replication
so mc_port_remove runs on every port. Extend the IPv6 empty-then-add
integration test to cover the full add -> remove all -> re-add cycle.
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from c0cc2dc to 5a4f56eCompareFebruary 28, 2026 07:32
@zeeshanlakhani
zeeshanlakhani marked this pull request as ready for review February 28, 2026 09:37
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after testing with
a feature-gated (for multicast) dpd binary. There's a minor follow-up (oxidecomputer/dendrite#232) that I'll work in after this. - Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter), fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after
testing with a feature-gated (for multicast) dpd binary.
There's a minor follow-up
(oxidecomputer/dendrite#232) that I'll work in
after this.
- Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter),
fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
… recovery path
This matches Dendrite PR oxidecomputer/dendrite#232.
This update dendrite rev to 5a4f56e (oxidecomputer/dendrite#232), which fixes
the empty-transition in `modify_group_internal`. With the fix, the
delete+recreate recovery path in `modify_group_membership` is no longer
needed. Errors now propagate directly and the reconciler handles
drift on the next pass.
@zeeshanlakhanizeeshanlakhani self-assigned this Mar 5, 2026
Comment threaddpd/src/mcast/mod.rs Outdated
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from e082a6c to d049a0bCompareMarch 10, 2026 05:54
@zeeshanlakhani
zeeshanlakhani merged commit b31ba90 into mainMar 10, 2026
6 checks passed
@zeeshanlakhani
zeeshanlakhani deleted the zl/fix-mcast-empty-transition branch March 10, 2026 06:29
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 10, 2026
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 16, 2026
Sign up for freeto 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.

2 participants

@zeeshanlakhani@FelixMcFelix
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[fix] remove ASIC ports before replication cleanup on empty transition - #232

Merged
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition
Mar 10, 2026
Merged

[fix] remove ASIC ports before replication cleanup on empty transition#232
zeeshanlakhani merged 2 commits into
mainfrom
zl/fix-mcast-empty-transition

Conversation

@zeeshanlakhani

@zeeshanlakhanizeeshanlakhani commented Feb 28, 2026

Copy link
Copy Markdown
Contributor

When all members are removed from a multicast group, the (true, true) transition path cleaned up replication table entries but skipped process_membership_changes, leaving stale ports in the ASIC groups. Subsequent re-adds failed with "already contains port" (500).

This fix calls process_membership_changes before cleanup_empty_group_replication so mc_port_remove runs on every port. Extend the IPv6 empty-then-add integration test to cover the full add -> remove all -> re-add cycle.

References:

@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from 6ed1122 to c0cc2dcCompareFebruary 28, 2026 07:20
When all members are removed from a multicast group, the (true, true)
transition path cleaned up replication table entries but skipped
process_membership_changes, leaving stale ports in the ASIC groups.
Subsequent re-adds failed with "already contains port" (500).
This fix calls process_membership_changes before cleanup_empty_group_replication
so mc_port_remove runs on every port. Extend the IPv6 empty-then-add
integration test to cover the full add -> remove all -> re-add cycle.
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from c0cc2dc to 5a4f56eCompareFebruary 28, 2026 07:32
@zeeshanlakhani
zeeshanlakhani marked this pull request as ready for review February 28, 2026 09:37
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after testing with
a feature-gated (for multicast) dpd binary. There's a minor follow-up (oxidecomputer/dendrite#232) that I'll work in after this. - Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter), fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after
testing with a feature-gated (for multicast) dpd binary.
There's a minor follow-up
(oxidecomputer/dendrite#232) that I'll work in
after this.
- Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter),
fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
… recovery path
This matches Dendrite PR oxidecomputer/dendrite#232.
This update dendrite rev to 5a4f56e (oxidecomputer/dendrite#232), which fixes
the empty-transition in `modify_group_internal`. With the fix, the
delete+recreate recovery path in `modify_group_membership` is no longer
needed. Errors now propagate directly and the reconciler handles
drift on the next pass.
@zeeshanlakhanizeeshanlakhani self-assigned this Mar 5, 2026
Comment threaddpd/src/mcast/mod.rs Outdated
@zeeshanlakhani
zeeshanlakhaniforce-pushed the zl/fix-mcast-empty-transition branch from e082a6c to d049a0bCompareMarch 10, 2026 05:54
@zeeshanlakhani
zeeshanlakhani merged commit b31ba90 into mainMar 10, 2026
6 checks passed
@zeeshanlakhani
zeeshanlakhani deleted the zl/fix-mcast-empty-transition branch March 10, 2026 06:29
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 10, 2026
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 16, 2026
Sign up for freeto 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.

2 participants

@zeeshanlakhani@FelixMcFelix