Today, booting a host from an integrated NIC requires declaring dpu_mode: no_dpu (or nic_mode), which makes site-explorer skip linking the host's DPUs as managed machines (no_dpu skips exploration entirely; nic_mode explores and issues set_nic_mode but never links them). For hosts whose DPU BMCs are cabled and explorable, we want to keep the DPUs managed and boot from the integrated NIC.
ExpectedHostNic.primary (the boot-interface axis) and dpu_mode (the DPU-management axis) are really separate concerns that today's single flag conflates. "Zero-DPU" / "DPU in NIC mode" really describes what the primary interface is, not that the host has no DPUs or that every DPU is unused.
#2657 makes the declared ExpectedHostNic.primary authoritative and stops configure_host_machine from claiming primary against a declaration. What's missing for the DPU-mode case is ownership: on a DpuMode host, a declared integrated NIC that DHCPs creates an anonymous (machine_id = NULL) row that no path adopts —
- host-NIC predictions are minted only in
create_zero_dpu_machine (called once, machine_creator.rs), which doesn't run for DpuMode hosts;
find_existing_machine (machine.rs) matches only already-owned MACs.
So pick_boot_interface (which reads owned interface rows) never sees the integrated NIC, even after the DPU is stopped from taking over.
The change
During DpuMode ingestion, also own the declared integrated NIC — e.g. mint a prediction for it carrying primary (reusing the prediction carrier added in #2657) so it's adopted and marked primary on its first DHCP, while the DPUs stay explored and linked but non-boot.
Open question: the integrated NIC's network segment type when the DPU normally serves the admin network (Admin vs HostInband vs other) — needs its own investigation of how an integrated boot/admin NIC gets its IP on a DPU host.
Conceptual: this nudges dpu_mode toward meaning "is the primary interface a DPU?", decoupled from "do we manage the DPUs." Decide whether to eventually express these as two independent fields.
Done when
- A host with cabled, explorable DPUs declared
dpu_mode: dpu_mode that also declares an integrated NIC primary boots from that integrated NIC.
- The DPUs are still explored and linked as managed machines (not skipped).
Part of #2660.
Today, booting a host from an integrated NIC requires declaring
dpu_mode: no_dpu(ornic_mode), which makes site-explorer skip linking the host's DPUs as managed machines (no_dpuskips exploration entirely;nic_modeexplores and issuesset_nic_modebut never links them). For hosts whose DPU BMCs are cabled and explorable, we want to keep the DPUs managed and boot from the integrated NIC.ExpectedHostNic.primary(the boot-interface axis) anddpu_mode(the DPU-management axis) are really separate concerns that today's single flag conflates. "Zero-DPU" / "DPU in NIC mode" really describes what the primary interface is, not that the host has no DPUs or that every DPU is unused.Builds on #2657
#2657 makes the declared
ExpectedHostNic.primaryauthoritative and stopsconfigure_host_machinefrom claiming primary against a declaration. What's missing for the DPU-mode case is ownership: on a DpuMode host, a declared integrated NIC that DHCPs creates an anonymous (machine_id = NULL) row that no path adopts —create_zero_dpu_machine(called once,machine_creator.rs), which doesn't run for DpuMode hosts;find_existing_machine(machine.rs) matches only already-owned MACs.So
pick_boot_interface(which reads owned interface rows) never sees the integrated NIC, even after the DPU is stopped from taking over.The change
During DpuMode ingestion, also own the declared integrated NIC — e.g. mint a prediction for it carrying
primary(reusing the prediction carrier added in #2657) so it's adopted and marked primary on its first DHCP, while the DPUs stay explored and linked but non-boot.Open question: the integrated NIC's network segment type when the DPU normally serves the admin network (Admin vs HostInband vs other) — needs its own investigation of how an integrated boot/admin NIC gets its IP on a DPU host.
Conceptual: this nudges
dpu_modetoward meaning "is the primary interface a DPU?", decoupled from "do we manage the DPUs." Decide whether to eventually express these as two independent fields.Done when
dpu_mode: dpu_modethat also declares an integrated NICprimaryboots from that integrated NIC.Part of #2660.