Skip to content

Shared-LOM iDRAC: Manager EthernetInterface should be reported as a virtual child of the host LOM, not a standalone NIC #196

@berlikm

Description

@berlikm

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions