diff --git a/internal/parser/vendors/dell/parser.go b/internal/parser/vendors/dell/parser.go index 3556550..65a1a67 100644 --- a/internal/parser/vendors/dell/parser.go +++ b/internal/parser/vendors/dell/parser.go @@ -424,12 +424,33 @@ func parsePowerSupplyView(props map[string]string, result *models.AnalysisResult result.Hardware.PowerSupply = append(result.Hardware.PowerSupply, psu) } +// pcieFQDDNoisePrefix lists FQDD prefixes that represent internal chipset/CPU +// components or devices already captured with richer data elsewhere: +// - HostBridge/P2PBridge/ISABridge/SMBus: AMD EPYC internal fabric, not PCIe slots +// - AHCI.Embedded: AMD FCH SATA, not a slot device +// - Video.Embedded: BMC/iDRAC Matrox graphics chip, not user-visible +// - NIC.Embedded: already parsed from DCIM_NICView with model and MAC addresses +var pcieFQDDNoisePrefix = []string{ + "HostBridge.Embedded.", + "P2PBridge.Embedded.", + "ISABridge.Embedded.", + "SMBus.Embedded.", + "AHCI.Embedded.", + "Video.Embedded.", + "NIC.Embedded.", +} + func parsePCIeDeviceView(props map[string]string, result *models.AnalysisResult) { desc := strings.TrimSpace(firstNonEmpty(props["devicedescription"], props["description"])) fqdd := strings.TrimSpace(firstNonEmpty(props["fqdd"], props["instanceid"])) if desc == "" && fqdd == "" { return } + for _, prefix := range pcieFQDDNoisePrefix { + if strings.HasPrefix(fqdd, prefix) { + return + } + } p := models.PCIeDevice{ Slot: fqdd, Description: desc,