diff options
author | Brad Davis <brd@FreeBSD.org> | 2023-11-29 23:52:11 +0000 |
---|---|---|
committer | Brad Davis <brd@FreeBSD.org> | 2023-11-29 23:55:47 +0000 |
commit | 5b63443a6ea8490165d887f00c250f506f41e0d4 (patch) | |
tree | 52dd03d7e3a87f56ac88f4e92f927949bb651031 /net-mgmt/collectd5 | |
parent | d657352d82cdb6c1db0d221d52efd1d9fc94dc74 (diff) | |
download | ports-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/Makefile | 9 | ||||
-rw-r--r-- | net-mgmt/collectd5/files/patch-src__pf.c | 84 |
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); } |