Skip to content

fix: support SMC ARS-221GL-FNB-NC24B#3675

Merged
krish-nvidia merged 2 commits into
NVIDIA:mainfrom
krish-nvidia:new-gg-smc
Jul 20, 2026
Merged

fix: support SMC ARS-221GL-FNB-NC24B#3675
krish-nvidia merged 2 commits into
NVIDIA:mainfrom
krish-nvidia:new-gg-smc

Conversation

@krish-nvidia

@krish-nvidia krish-nvidia commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

This PR:

  • Detects Supermicro MGX C2 systems from the NVIDIA PG535/2G535 processor module.
  • Skips KCS exploration because MGX C2 uses SSIF.
  • Checks IPMIHostInterface when available and evaluate Supermicro lockdown consistently with libredfish.
  • Preserves the ARS-121L-DNR HostInterface PXE exception.
  • Bumps libredfish to v0.44.22

Related issues

#3623

Type of Change

  • Add - New feature or capability
  • Change - Changes in existing functionality
  • Fix - Bug fixes
  • Remove - Removed features or deprecated functionality
  • Internal - Internal changes (refactoring, tests, docs, etc.)

Breaking Changes

  • This PR contains breaking changes

Testing

  • Unit tests added/updated
  • Integration tests added/updated
  • Manual testing performed
  • No testing required (docs, internal refactor, etc.)

Additional Notes

@krish-nvidia krish-nvidia self-assigned this Jul 17, 2026
@copy-pr-bot

copy-pr-bot Bot commented Jul 17, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Summary by CodeRabbit

  • New Features

    • Added MGX-C2 platform detection.
    • Improved lockdown status reporting for MGX-C2 systems using host-interface availability.
    • Added recognition for an additional Supermicro BIOS attribute format.
  • Bug Fixes

    • Corrected Supermicro management interface handling for MGX-C2 systems.
    • Improved accuracy of in-band lock and unlock status evaluation.

Walkthrough

The change adds MGX-C2 chassis classification based on NVIDIA hardware identifiers and integrates the result into Supermicro exploration configuration and lockdown status evaluation using the in-band IPMI host-interface state. It also updates Supermicro BIOS attributes and the libredfish dependency.

Changes

MGX-C2 Supermicro lockdown handling

Layer / File(s) Summary
MGX-C2 chassis detection
crates/bmc-explorer/src/chassis.rs
ExploredChassisCollection identifies NVIDIA processor modules whose model starts with PG535 or whose part number contains 2G535; unit tests cover positive and negative combinations.
Supermicro exploration and lockdown flow
crates/bmc-explorer/src/lib.rs
The exploration report derives is_mgx_c2, changes the OEM KCS interface requirement, and evaluates Supermicro lockdown using ipmi_host_interface_enabled for MGX-C2 in-band state.
Supermicro platform compatibility
crates/bmc-explorer/src/hw/supermicro.rs, Cargo.toml
Adds the hyphenated SR-IOVSupport BIOS attribute prefix and updates the libredfish dependency to tag v0.44.22.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant nv_generate_exploration_report
  participant ExploredChassisCollection
  participant manager_Config
  participant lockdown_status
  nv_generate_exploration_report->>ExploredChassisCollection: call is_mgx_c2()
  ExploredChassisCollection-->>nv_generate_exploration_report: return MGX-C2 classification
  nv_generate_exploration_report->>manager_Config: set need_oem_supermicro_kcs_interface to !is_mgx_c2
  nv_generate_exploration_report->>lockdown_status: pass explored chassis
  lockdown_status-->>nv_generate_exploration_report: compute Supermicro lockdown status
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately reflects the main fix for Supermicro ARS-221GL-FNB-NC24B support.
Description check ✅ Passed The description is directly aligned with the changes: MGX C2 detection, KCS skipping, lockdown logic, BIOS attrs, and libredfish bump.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@krish-nvidia

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/bmc-explorer/src/lib.rs`:
- Around line 668-703: Add table-driven tests for the lockdown status logic
around the MGX-C2 and Supermicro model branches, covering
ipmi_host_interface_enabled values Some(true), Some(false), and None for both
ARS-121L-DNR and a normal Supermicro model. Assert the resulting
InternalLockdownStatus and externally reported message/state, including the
ARS-121L-DNR PXE host-interface exception.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: c73e4cbf-599d-4418-8539-ffdec1009a7e

📥 Commits

Reviewing files that changed from the base of the PR and between dbb6f2b and f2c638e.

📒 Files selected for processing (2)
  • crates/bmc-explorer/src/chassis.rs
  • crates/bmc-explorer/src/lib.rs

Comment thread crates/bmc-explorer/src/lib.rs
Signed-off-by: Krish Dandiwala <kdandiwala@nvidia.com>
Signed-off-by: Krish Dandiwala <kdandiwala@nvidia.com>
@krish-nvidia
krish-nvidia marked this pull request as ready for review July 20, 2026 15:24
@krish-nvidia
krish-nvidia requested a review from a team as a code owner July 20, 2026 15:24
@krish-nvidia
krish-nvidia requested a review from poroh July 20, 2026 15:25

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/bmc-explorer/src/lib.rs`:
- Around line 688-699: Update the MGX-C2 branch assigning inband_locked and
inband_unlocked so ipmi_host_interface_enabled == None is treated as
unknown/partial rather than satisfying the fully Enabled status path; preserve
the existing Some(true) and Some(false) behavior. Add table-driven coverage for
Some(true), Some(false), and None around the relevant status evaluation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: e8eed262-d302-4466-8f39-126002287bf2

📥 Commits

Reviewing files that changed from the base of the PR and between f2c638e and ba97c47.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • Cargo.toml
  • crates/bmc-explorer/src/chassis.rs
  • crates/bmc-explorer/src/hw/supermicro.rs
  • crates/bmc-explorer/src/lib.rs
🚧 Files skipped from review as they are similar to previous changes (1)
  • crates/bmc-explorer/src/chassis.rs

Comment on lines +688 to +699
let (inband_locked, inband_unlocked) = if explored_chassis.is_mgx_c2() {
(
ipmi_host_interface_enabled.is_none_or(|enabled| !enabled),
ipmi_host_interface_enabled.is_none_or(identity),
)
} else {
match (hi_enabled, kcs_privilege, is_syslockdown) {
(false, Some(SupermicroPrivilege::Callback), true) => {
Ok(InternalLockdownStatus::Enabled)
}
(true, Some(SupermicroPrivilege::Administrator), false) => {
Ok(InternalLockdownStatus::Disabled)
}
(true, None, false) => Ok(InternalLockdownStatus::Disabled),
_ => Ok(InternalLockdownStatus::Partial),
}
}
.map(|status| Some(LockdownStatus { status, message }))
(
kcs_privilege == Some(SupermicroPrivilege::Callback),
kcs_privilege.is_none()
|| kcs_privilege == Some(SupermicroPrivilege::Administrator),
)
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Map the file and inspect the relevant region.
echo "== crates/bmc-explorer/src/lib.rs outline =="
ast-grep outline crates/bmc-explorer/src/lib.rs --view expanded | sed -n '1,220p'

echo
echo "== relevant lines around 688-699 =="
sed -n '660,730p' crates/bmc-explorer/src/lib.rs | cat -n

echo
echo "== search for ipmi_host_interface_enabled usages =="
rg -n "ipmi_host_interface_enabled|inband_locked|inband_unlocked|InternalLockdownStatus::Enabled|host_interface_locked|is_syslockdown" crates/bmc-explorer/src/lib.rs crates -g '!target'

echo
echo "== tests mentioning MGX-C2 or lockdown status =="
rg -n "MGX-C2|mgx_c2|lockdown|host_interface|ipmi_host_interface_enabled" crates -g '*test*' -g '*tests*' -g '*.rs'

echo
echo "== if present, inspect nearby tests in the same file =="
rg -n "mod tests|#[[:space:]]*test" crates/bmc-explorer/src/lib.rs

Repository: NVIDIA/infra-controller

Length of output: 50380


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== lockdown_status function context =="
sed -n '433,735p' crates/bmc-explorer/src/lib.rs | cat -n | sed -n '1,340p'

echo
echo "== tests in crates/bmc-explorer =="
fd . crates/bmc-explorer/tests crates/bmc-explorer/src -t f | sed -n '1,200p'

echo
echo "== search for table-driven coverage around lockdown status in bmc-explorer tests =="
rg -n "lockdown_status|InternalLockdownStatus|mgx_c2|MGX|ipmi_host_interface_enabled|SupermicroPrivilege|Callback|Administrator" crates/bmc-explorer/tests crates/bmc-explorer/src -g '*.rs' -A 4 -B 4

echo
echo "== look for none_or patterns in the same function or nearby branches =="
rg -n "is_none_or\\(|is_some_and\\(" crates/bmc-explorer/src/lib.rs -A 2 -B 2

Repository: NVIDIA/infra-controller

Length of output: 47463


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== supermicro GB300 integration test =="
sed -n '1,220p' crates/bmc-explorer/tests/integration/supermicro_gb300_explore.rs | cat -n

echo
echo "== supermicro mock data references =="
rg -n "service_enabled|ipmi_host_interface|sys_lockdown|lockdown" crates/bmc-explorer/tests crates/bmc-mock crates -g '*.rs' -A 3 -B 3

echo
echo "== fixture builder for supermicro GB300 =="
sed -n '1,260p' crates/bmc-explorer/tests/integration/common.rs | cat -n

echo
echo "== any tests or comments about missing MGX-C2 host-interface fields =="
rg -n "MGX-C2|mgx_c2|when available|missing field|reference semantics|partial" crates/bmc-explorer crates -g '*.rs' -A 2 -B 2

Repository: NVIDIA/infra-controller

Length of output: 50380


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Redfish serial console model for service_enabled =="
rg -n "service_enabled|ServiceEnabled" crates -g '*.rs' -A 3 -B 3 | sed -n '1,240p'

echo
echo "== Supermicro mock that sets IPMI service_enabled =="
sed -n '180,230p' crates/bmc-mock/src/hw/supermicro_gb300_nvl.rs | cat -n

echo
echo "== supermicro OEM manager state defaults =="
sed -n '1,120p' crates/bmc-mock/src/redfish/oem/supermicro/manager.rs | cat -n

echo
echo "== inspect the generated/typed host interface accessors if present =="
rg -n "interface_enabled\\(|service_enabled\\(" crates -g '*.rs' -A 3 -B 3 | sed -n '1,240p'

Repository: NVIDIA/infra-controller

Length of output: 34636


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== locate the IPMI host interface type =="
rg -n "ipmi_host_interface|ServiceEnabled|service_enabled" crates/redfish crates/nv_redfish crates -g '*.rs' -A 4 -B 4 | sed -n '1,260p'

echo
echo "== inspect the relevant Redfish model definition if found =="
fd ".*(serial_console|host_interface|computer_system|manager).*\.rs$" crates/redfish crates/nv_redfish -t f | sed -n '1,120p'

echo
echo "== show the direct model around any ServiceEnabled field definition =="
rg -n "pub .*service_enabled|service_enabled:|ServiceEnabled" crates/redfish crates/nv_redfish -g '*.rs' -A 6 -B 6 | sed -n '1,220p'

Repository: NVIDIA/infra-controller

Length of output: 12062


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== find the Redfish type that carries ServiceEnabled =="
rg -n "pub .*service_enabled|service_enabled: Option<bool>|service_enabled: bool|ServiceEnabled" crates/redfish/src -g '*.rs' -A 6 -B 6 | sed -n '1,220p'

echo
echo "== inspect likely model files around the matching definition(s) =="
fd ".*(serial_console|host_interface|ethernet_interface|session_service|telemetry_service).*\.rs$" crates/redfish/src -t f | sed -n '1,120p'

Repository: NVIDIA/infra-controller

Length of output: 3739


Do not let missing MGX-C2 ServiceEnabled report Enabled crates/bmc-explorer/src/lib.rs:688-699
ipmi_host_interface_enabled is optional here, so None can still satisfy the is_syslockdown && inband_locked && host_interface_locked path and produce a false Enabled status. Treat the missing case as unknown/partial instead, and add table coverage for Some(true), Some(false), and None.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/bmc-explorer/src/lib.rs` around lines 688 - 699, Update the MGX-C2
branch assigning inband_locked and inband_unlocked so
ipmi_host_interface_enabled == None is treated as unknown/partial rather than
satisfying the fully Enabled status path; preserve the existing Some(true) and
Some(false) behavior. Add table-driven coverage for Some(true), Some(false), and
None around the relevant status evaluation.

@krish-nvidia
krish-nvidia merged commit ddcc2cd into NVIDIA:main Jul 20, 2026
63 checks passed
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.

2 participants