Problem
When iDRAC NIC.Selection is LOM1/LOM2/LOM3/LOM4 (BMC sharing a host LOM via NCSI), check_redfish reports the iDRAC Manager Ethernet Interface as a separate NIC. The BMC's NCSI MAC and the host LOM's MAC differ, but they share one physical port and one cable. Switches receive two LLDP frames per port; downstream tools (netbox-sync, cable inference) double-model the link.
Authoritative source
NIC.<n>.Selection in the iDRAC Manager Attributes. ManagerAttributeRegistry confirms it's a writable Enumeration:
{
"AttributeName": "NIC.1.Selection",
"Readonly": false,
"Type": "Enumeration",
"Value": [
{"ValueDisplayName": "Dedicated", "ValueName": "1"},
{"ValueDisplayName": "LOM1", "ValueName": "2"},
{"ValueDisplayName": "LOM2", "ValueName": "3"},
{"ValueDisplayName": "LOM3", "ValueName": "4"},
{"ValueDisplayName": "LOM4", "ValueName": "5"}
]
}
Live evidence (iDRAC 6.10.30.20, PowerEdge C6420; IPs/MACs anonymized)
1. Manager Attributes — NIC selection is LOM1:
GET /redfish/v1/Managers/iDRAC.Embedded.1/Attributes
"NIC.1.Selection" : "LOM1"
"CurrentNIC.1.ActiveNIC" : "LOM1"
"CurrentNIC.1.ActiveSharedLOM" : "LOM1"
"CurrentNIC.1.NumberOfLOM" : 3
"NIC.1.MACAddress" : "b8:cb:29:aa:bb:01"
"CurrentNIC.1.MACAddress" : "b8:cb:29:aa:bb:01"
"CurrentNIC.1.MACAddress2" : "b8:cb:29:aa:bb:02"
"NIC.1.SwitchConnection" : "Not Supported"
"NIC.1.SwitchPortConnection" : "Not Supported"
2. Manager EthernetInterface — the BMC's NCSI NIC:
GET /redfish/v1/Managers/iDRAC.Embedded.1/EthernetInterfaces/NIC.1
"Id" : "NIC.1"
"Name" : "Manager Ethernet Interface"
"EthernetInterfaceType": "Physical" ← misleading; physically rides on LOM1
"MACAddress" : "b8:cb:29:aa:bb:01"
"PermanentMACAddress" : "b8:cb:29:aa:bb:01"
"IPv4Addresses" : [{"Address": "192.0.2.60", ...}]
"Links" : { "Chassis": ... } ← no link to host NIC
3. Host NetworkPort — the actual physical LOM1:
GET /redfish/v1/Chassis/System.Embedded.1/NetworkAdapters/NIC.Embedded.1/NetworkPorts/NIC.Embedded.1-1
"Id" : "NIC.Embedded.1-1"
"PhysicalPortNumber" : "1"
"LinkStatus" : "Up"
"AssociatedNetworkAddresses" : ["b8:cb:29:aa:cc:01"]
"CurrentLinkSpeedMbps" : 1000
Two distinct MACs (...aa:bb:01 for the BMC, ...aa:cc:01 for the host), one physical port, one cable. The switch logs both via LLDP on the same port.
Proposed change
When NIC.<n>.Selection != "Dedicated", emit the Manager EthernetInterface as a virtual interface with parent = <host LOM> instead of a standalone physical NIC. The host LOM is the n-th port across NIC.Embedded.*/NetworkPorts/* enumerated in numeric order (LOM1 = NIC.Embedded.1-1, etc.). Cross-check the chosen port has LinkStatus == "Up" so it fails loudly if the convention doesn't hold.
When Selection == "Dedicated", no change — keep current behavior.
Sketch
mgr_attrs = redfish.get("/redfish/v1/Managers/iDRAC.Embedded.1/Attributes")["Attributes"]
selection = mgr_attrs.get("NIC.1.Selection", "Dedicated")
if selection != "Dedicated":
lom_index = int(selection.removeprefix("LOM")) # "LOM1" -> 1
host_ports = enumerate_embedded_network_ports(redfish) # ordered NIC.Embedded.*-* list
parent_port = host_ports[lom_index - 1] # fail loudly if out of range
mgr_nic.type = "virtual"
mgr_nic.parent = parent_port.fqdd # e.g. "NIC.Embedded.1-1"
mgr_nic.bmc_shared_lom = selection # for downstream visibility
else:
pass # existing dedicated-mode behavior
netbox-sync side
Needs to set Interface.type = "virtual" and Interface.parent = <host LOM interface> for the iDRAC NIC, instead of creating it as a separate physical interface. Happy to open a sister issue once you confirm the direction here.
Why parent/virtual (not just merge MACs onto the LOM)
- Preserves the BMC's own MAC and IP as first-class records (keeps OOB management discoverable).
- NetBox's
parent relation natively expresses "rides on this PHY", so cable inference can skip children and only cable the parent.
- One physical port = one cable. No special-casing downstream.
Repro
curl -ksu USER:PASS https://IDRAC/redfish/v1/Managers/iDRAC.Embedded.1/Attributes \
| jq '.Attributes | with_entries(select(.key | test("NIC.1.Selection|CurrentNIC.1.ActiveSharedLOM")))'
If Selection != "Dedicated", current check_redfish over-reports.
Problem
When iDRAC
NIC.SelectionisLOM1/LOM2/LOM3/LOM4(BMC sharing a host LOM via NCSI),check_redfishreports the iDRACManager Ethernet Interfaceas a separate NIC. The BMC's NCSI MAC and the host LOM's MAC differ, but they share one physical port and one cable. Switches receive two LLDP frames per port; downstream tools (netbox-sync, cable inference) double-model the link.Authoritative source
NIC.<n>.Selectionin the iDRAC Manager Attributes. ManagerAttributeRegistry confirms it's a writable Enumeration:{ "AttributeName": "NIC.1.Selection", "Readonly": false, "Type": "Enumeration", "Value": [ {"ValueDisplayName": "Dedicated", "ValueName": "1"}, {"ValueDisplayName": "LOM1", "ValueName": "2"}, {"ValueDisplayName": "LOM2", "ValueName": "3"}, {"ValueDisplayName": "LOM3", "ValueName": "4"}, {"ValueDisplayName": "LOM4", "ValueName": "5"} ] }Live evidence (iDRAC 6.10.30.20, PowerEdge C6420; IPs/MACs anonymized)
1. Manager Attributes — NIC selection is
LOM1:2. Manager EthernetInterface — the BMC's NCSI NIC:
3. Host NetworkPort — the actual physical LOM1:
Two distinct MACs (
...aa:bb:01for the BMC,...aa:cc:01for the host), one physical port, one cable. The switch logs both via LLDP on the same port.Proposed change
When
NIC.<n>.Selection != "Dedicated", emit the Manager EthernetInterface as a virtual interface withparent = <host LOM>instead of a standalone physical NIC. The host LOM is the n-th port acrossNIC.Embedded.*/NetworkPorts/*enumerated in numeric order (LOM1 = NIC.Embedded.1-1, etc.). Cross-check the chosen port hasLinkStatus == "Up"so it fails loudly if the convention doesn't hold.When
Selection == "Dedicated", no change — keep current behavior.Sketch
netbox-sync side
Needs to set
Interface.type = "virtual"andInterface.parent = <host LOM interface>for the iDRAC NIC, instead of creating it as a separate physical interface. Happy to open a sister issue once you confirm the direction here.Why parent/virtual (not just merge MACs onto the LOM)
parentrelation natively expresses "rides on this PHY", so cable inference can skip children and only cable the parent.Repro
If
Selection != "Dedicated", currentcheck_redfishover-reports.