Browse Source

Merge pull request #14568 from PolynomialDivision/collectd-fix-snmp6

collectd: refactor snmp6
lilik-openwrt-22.03
Hannu Nyman 4 years ago
committed by GitHub
parent
commit
1d07e993bb
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 15 deletions
  1. +1
    -1
      utils/collectd/Makefile
  2. +16
    -14
      utils/collectd/patches/931-snmp6-add-ipv6-statistics.patch

+ 1
- 1
utils/collectd/Makefile View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=collectd PKG_NAME:=collectd
PKG_VERSION:=5.12.0 PKG_VERSION:=5.12.0
PKG_RELEASE:=5
PKG_RELEASE:=6
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://collectd.org/files/ \ PKG_SOURCE_URL:=https://collectd.org/files/ \


+ 16
- 14
utils/collectd/patches/931-snmp6-add-ipv6-statistics.patch View File

@ -90,7 +90,7 @@ Signed-off-by: Nick Hainke <vincent@systemli.org>
# Port "8125" # Port "8125"
--- /dev/null --- /dev/null
+++ b/src/snmp6.c +++ b/src/snmp6.c
@@ -0,0 +1,133 @@
@@ -0,0 +1,135 @@
+/* +/*
+ This Plugin is based opn the interface.c Plugin. + This Plugin is based opn the interface.c Plugin.
+*/ +*/
@ -155,7 +155,7 @@ Signed-off-by: Nick Hainke <vincent@systemli.org>
+int snmp_read(char *ifname) { +int snmp_read(char *ifname) {
+ FILE *fh; + FILE *fh;
+ char buffer[1024]; + char buffer[1024];
+ char *fields[16];
+ char *fields[2];
+ int numfields; + int numfields;
+ int currline = 0; + int currline = 0;
+ derive_t data[76]; + derive_t data[76];
@ -178,17 +178,17 @@ Signed-off-by: Nick Hainke <vincent@systemli.org>
+ } + }
+ +
+ while (fgets(buffer, 1024, fh) != NULL) { + while (fgets(buffer, 1024, fh) != NULL) {
+ numfields = strsplit(buffer, fields, 16);
+ numfields = strsplit(buffer, fields, 2);
+ +
+ if (numfields < 2) + if (numfields < 2)
+ continue;
+ return -1;
+ +
+ data[currline++] = atoll(fields[1]); + data[currline++] = atoll(fields[1]);
+ } + }
+ +
+ fclose(fh); + fclose(fh);
+ +
+ if (currline < 25) {
+ if (currline < 28) {
+ return -1; + return -1;
+ } + }
+ +
@ -202,19 +202,21 @@ Signed-off-by: Nick Hainke <vincent@systemli.org>
+#ifndef HAVE_IFADDRS_H +#ifndef HAVE_IFADDRS_H
+ return -1; + return -1;
+#else +#else
+ struct ifaddrs *addrs,*tmp;
+ +
+ getifaddrs(&addrs);
+ tmp = addrs;
+ // getifaddrs is not working all the time (e.g. wireguard interfaces)
+ // instead we use if_nameindex() syscall as suggested in:
+ // https://stackoverflow.com/a/45796495/8474618
+ struct if_nameindex *if_nidxs, *intf;
+ +
+ while (tmp)
+ {
+ if (tmp->ifa_addr && tmp->ifa_addr->sa_family == AF_PACKET)
+ snmp_read(tmp->ifa_name);
+ tmp = tmp->ifa_next;
+ if_nidxs = if_nameindex();
+
+ if (if_nidxs != NULL) {
+ for (intf = if_nidxs; intf->if_index != 0 || intf->if_name != NULL; intf++) {
+ snmp_read(intf->if_name);
+ }
+ if_freenameindex(if_nidxs);
+ } + }
+ +
+ freeifaddrs(addrs);
+ snmp_read("all"); + snmp_read("all");
+ return 0; + return 0;
+#endif +#endif


Loading…
Cancel
Save