Skip to content

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

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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