--- net-snmp-5.7/agent/mibgroup/if-mib/data_access/interface_linux.c.orig 2011-07-02 00:35:46.000000000 +0200 +++ net-snmp-5.7/agent/mibgroup/if-mib/data_access/interface_linux.c 2011-08-07 21:10:45.760672551 +0200 @@ -19,6 +19,18 @@ #ifdef HAVE_PCI_LOOKUP_NAME #include static struct pci_access *pci_access; +static int _net_snmp_pci_status = 1; + +static void _net_snmp_pci_error(char *msg, ...) +{ + va_list args; + + va_start(args, msg); + snmp_log(LOG_ERR, "pcilib: "); + snmp_vlog(LOG_ERR, msg, args); + snmp_log(LOG_ERR, "\n"); + _net_snmp_pci_status = 0; +} #endif #ifdef HAVE_LINUX_ETHTOOL_H @@ -146,9 +158,15 @@ #ifdef HAVE_PCI_LOOKUP_NAME pci_access = pci_alloc(); - if (pci_access) + if (pci_access) { + pci_access->error = _net_snmp_pci_error; pci_init(pci_access); - else + if (_net_snmp_pci_status == 0) { + pci_cleanup(pci_access); + pci_access = NULL; + snmp_log(LOG_ERR, "Unable to create pci access method (libpci)\n"); + } + } else snmp_log(LOG_ERR, "Unable to create pci access method\n"); #endif }