From a5cbd7c856f838913f8d3faca7765760cb01fe77 Mon Sep 17 00:00:00 2001 From: Jack Mitchell Date: Wed, 17 Apr 2013 10:36:07 +0100 Subject: net-snmp: fix failure when starting on system without pci bus The snmpd daemon cannot start on platforms without a pci bus: snmpd[15460]: pcilib: Cannot open /proc/bus/pci snmpd[15460]: pcilib: Cannot find any working access method. snmpd should not depend on a PCI bus and should simply move on. Signed-off-by: Jack Mitchell --- .../recipes-extended/net-snmp/files/ifmib.patch | 66 ++++++++++++++++++++++ .../recipes-extended/net-snmp/net-snmp_5.7.1.bb | 1 + 2 files changed, 67 insertions(+) create mode 100644 meta-oe/recipes-extended/net-snmp/files/ifmib.patch (limited to 'meta-oe') diff --git a/meta-oe/recipes-extended/net-snmp/files/ifmib.patch b/meta-oe/recipes-extended/net-snmp/files/ifmib.patch new file mode 100644 index 0000000000..859c52c3e3 --- /dev/null +++ b/meta-oe/recipes-extended/net-snmp/files/ifmib.patch @@ -0,0 +1,66 @@ +Signed-off-by: Jack Mitchell +Upstream-Status: Pending +Bug-Report: http://sourceforge.net/p/net-snmp/bugs/2449/ + +diff --git a/agent/mibgroup/if-mib/data_access/interface_linux.c b/agent/mibgroup/if-mib/data_access/interface_linux.c +index 3419811..d6eb91a 100644 +--- a/agent/mibgroup/if-mib/data_access/interface_linux.c ++++ b/agent/mibgroup/if-mib/data_access/interface_linux.c +@@ -18,7 +18,31 @@ netsnmp_feature_require(interface_ioctl_flags_set) + + #ifdef HAVE_PCI_LOOKUP_NAME + #include ++#include + static struct pci_access *pci_access; ++ ++/* Avoid letting libpci call exit(1) when no PCI bus is available. */ ++static int do_longjmp =0; ++static jmp_buf err_buf; ++static void ++netsnmp_pci_error(char *msg, ...) ++{ ++ va_list args; ++ char *buf; ++ int buflen; ++ ++ va_start(args, msg); ++ buflen = strlen("pcilib: ")+strlen(msg)+2; ++ buf = malloc(buflen); ++ snprintf(buf, buflen, "pcilib: %s\n", msg); ++ snmp_vlog(LOG_ERR, buf, args); ++ free(buf); ++ va_end(args); ++ if (do_longjmp) ++ longjmp(err_buf, 1); ++ else ++ exit(1); ++} + #endif + + #ifdef HAVE_LINUX_ETHTOOL_H +@@ -147,10 +171,22 @@ netsnmp_arch_interface_init(void) + + #ifdef HAVE_PCI_LOOKUP_NAME + pci_access = pci_alloc(); +- if (pci_access) ++ if (!pci_access) { ++ snmp_log(LOG_ERR, "pcilib: pci_alloc failed\n"); ++ return; ++ } ++ ++ pci_access->error = netsnmp_pci_error; ++ ++ do_longjmp = 1; ++ if (setjmp(err_buf)) { ++ pci_cleanup(pci_access); ++ snmp_log(LOG_ERR, "pcilib: pci_init failed\n"); ++ pci_access = NULL; ++ } ++ else if (pci_access) + pci_init(pci_access); +- else +- snmp_log(LOG_ERR, "Unable to create pci access method\n"); ++ do_longjmp = 0; + #endif + } + diff --git a/meta-oe/recipes-extended/net-snmp/net-snmp_5.7.1.bb b/meta-oe/recipes-extended/net-snmp/net-snmp_5.7.1.bb index 14c1036018..19aa163c86 100644 --- a/meta-oe/recipes-extended/net-snmp/net-snmp_5.7.1.bb +++ b/meta-oe/recipes-extended/net-snmp/net-snmp_5.7.1.bb @@ -12,6 +12,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.tar.gz \ file://systemd-support.patch \ file://snmpd.service \ file://snmptrapd.service \ + file://ifmib.patch \ " EXTRA_OECONF += "--disable-embedded-perl --with-perl-modules=no" -- cgit 1.2.3-korg