aboutsummaryrefslogtreecommitdiff
path: root/net-mgmt/collectd5
diff options
context:
space:
mode:
authorBrad Davis <brd@FreeBSD.org>2023-11-29 23:52:11 +0000
committerBrad Davis <brd@FreeBSD.org>2023-11-29 23:55:47 +0000
commit5b63443a6ea8490165d887f00c250f506f41e0d4 (patch)
tree52dd03d7e3a87f56ac88f4e92f927949bb651031 /net-mgmt/collectd5
parentd657352d82cdb6c1db0d221d52efd1d9fc94dc74 (diff)
downloadports-5b63443a6ea8490165d887f00c250f506f41e0d4.tar.gz
ports-5b63443a6ea8490165d887f00c250f506f41e0d4.zip
net-mgmt/collectd5: Use libpfctl
PR: 275013 Reviewed by: kp Approved by: Krzysztof <ports@bsdserwis.com> (maintainer) Sponsored by: Rubicon Communications, LLC ("Netgate")
Diffstat (limited to 'net-mgmt/collectd5')
-rw-r--r--net-mgmt/collectd5/Makefile9
-rw-r--r--net-mgmt/collectd5/files/patch-src__pf.c84
2 files changed, 90 insertions, 3 deletions
diff --git a/net-mgmt/collectd5/Makefile b/net-mgmt/collectd5/Makefile
index 049f6fdebb9a..4cb4de66ccfc 100644
--- a/net-mgmt/collectd5/Makefile
+++ b/net-mgmt/collectd5/Makefile
@@ -1,6 +1,6 @@
PORTNAME= collectd
PORTVERSION= 5.12.0
-PORTREVISION= 9
+PORTREVISION= 10
CATEGORIES= net-mgmt
MASTER_SITES= https://storage.googleapis.com/collectd-tarballs/
PKGNAMESUFFIX= 5
@@ -12,7 +12,10 @@ WWW= https://www.collectd.org/
LICENSE= GPLv2
LICENSE_FILE= ${WRKSRC}/COPYING
-USES= autoreconf cpe gmake libtool pkgconfig shebangfix tar:bzip2
+LIB_DEPENDS= libpfctl.so:net/libpfctl
+LDFLAGS+= -lpfctl
+
+USES= autoreconf cpe gmake libtool localbase:ldflags pkgconfig shebangfix tar:bzip2
GNU_CONFIGURE= yes
@@ -47,7 +50,7 @@ MQTT_DESC= Enable MQTT broker metrics
MYSQL_DESC= Enable mysql-based plugins
NOTIFYDESKTOP_DESC= Enable desktop notifications
NOTIFYEMAIL_DESC= Enable notifications via email
-NUTUPS_DESC= Enable nut (ups) plugin
+NUTUPS_DESC= Enable nut (ups) plugin (sysutils/nut must be configured with DEV option)
OLSRD_DESC= Enable olsrd plugin
ONEWIRE_DESC= Eanble onewire plugin (via owfs)
OPENLDAP_DESC= Enable OpenLDAP plugin
diff --git a/net-mgmt/collectd5/files/patch-src__pf.c b/net-mgmt/collectd5/files/patch-src__pf.c
new file mode 100644
index 000000000000..79ffa899938b
--- /dev/null
+++ b/net-mgmt/collectd5/files/patch-src__pf.c
@@ -0,0 +1,84 @@
+commit 57a1b64ff3ade058a5d8ddd60b3d54f5a2c73c33
+Author: Brad Davis <brd@FreeBSD.org>
+Date: Tue Nov 7 03:35:47 2023 -0700
+
+ FreeBSD's PF has a new interface so leverage libpfctl to access it so the right interface is used depending on the version
+
+diff --git a/src/pf.c b/src/pf.c
+index 9681d366..eef9540d 100644
+--- a/src/pf.c
++++ b/src/pf.c
+@@ -35,6 +35,9 @@
+ #endif
+
+ #include <net/pfvar.h>
++#ifdef __FreeBSD__
++#include <libpfctl.h>
++#endif
+
+ #ifndef FCNT_NAMES
+ #if FCNT_MAX != 3
+@@ -76,6 +79,56 @@ static void pf_submit(char const *type, char const *type_instance, uint64_t val,
+ plugin_dispatch_values(&vl);
+ } /* void pf_submit */
+
++#ifdef __FreeBSD__
++static int pf_read(void) {
++ struct pfctl_status *state;
++ int fd;
++
++ fd = open(pf_device, O_RDONLY);
++ if (fd < 0) {
++ ERROR("pf plugin: Unable to open %s: %s", pf_device, STRERRNO);
++ return -1;
++ }
++
++ if ((state = pfctl_get_status(fd)) == NULL) {
++ ERROR("pf plugin: ioctl(DIOCGETSTATUS) failed: %s", STRERRNO);
++ close(fd);
++ return -1;
++ }
++
++ close(fd);
++
++ if (!state->running) {
++ pfctl_free_status(state);
++ WARNING("pf plugin: PF is not running.");
++ return -1;
++ }
++
++ for (int i = 0; i < PFRES_MAX; i++) {
++ pf_submit("pf_counters", pf_reasons[i], pfctl_status_counter(state, i),
++ /* is gauge = */ false);
++ }
++ for (int i = 0; i < LCNT_MAX; i++) {
++ pf_submit("pf_limits", pf_lcounters[i], pfctl_status_lcounter(state, i),
++ /* is gauge = */ false);
++ }
++ for (int i = 0; i < FCNT_MAX; i++) {
++ pf_submit("pf_state", pf_fcounters[i], pfctl_status_fcounter(state, i),
++ /* is gauge = */ false);
++ }
++ for (int i = 0; i < SCNT_MAX; i++) {
++ pf_submit("pf_source", pf_scounters[i], pfctl_status_scounter(state, i),
++ /* is gauge = */ false);
++ }
++
++ pf_submit("pf_states", "current", (uint32_t)state->states,
++ /* is gauge = */ true);
++
++ pfctl_free_status(state);
++
++ return 0;
++} /* int pf_read */
++#else
+ static int pf_read(void) {
+ struct pf_status state;
+ int fd;
+@@ -119,5 +172,6 @@ static int pf_read(void) {
+
+ return 0;
+ } /* int pf_read */
++#endif
+
+ void module_register(void) { plugin_register_read("pf", pf_read); }