aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe
diff options
context:
space:
mode:
authorJack Mitchell <jack.mitchell@dbbroadcast.co.uk>2013-04-17 10:36:07 +0100
committerMartin Jansa <Martin.Jansa@gmail.com>2013-04-19 02:45:28 +0200
commita5cbd7c856f838913f8d3faca7765760cb01fe77 (patch)
tree8b6d577035c29c2e25887a9054bb27b60612274d /meta-oe
parentc43b56f6d66412998cb4635f5bf40c9e499eaabd (diff)
downloadmeta-openembedded-a5cbd7c856f838913f8d3faca7765760cb01fe77.tar.gz
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 <jack.mitchell@dbbroadcast.co.uk>
Diffstat (limited to 'meta-oe')
-rw-r--r--meta-oe/recipes-extended/net-snmp/files/ifmib.patch66
-rw-r--r--meta-oe/recipes-extended/net-snmp/net-snmp_5.7.1.bb1
2 files changed, 67 insertions, 0 deletions
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 <jack@embed.me.uk>
+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 <pci/pci.h>
++#include <setjmp.h>
+ 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"