summaryrefslogtreecommitdiff
path: root/net-mgmt/net-snmp/files/patch-agent_kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'net-mgmt/net-snmp/files/patch-agent_kernel.c')
-rw-r--r--net-mgmt/net-snmp/files/patch-agent_kernel.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/net-mgmt/net-snmp/files/patch-agent_kernel.c b/net-mgmt/net-snmp/files/patch-agent_kernel.c
new file mode 100644
index 000000000000..133b04bd1824
--- /dev/null
+++ b/net-mgmt/net-snmp/files/patch-agent_kernel.c
@@ -0,0 +1,40 @@
+--- agent/kernel.c.orig 2023-08-15 20:32:01 UTC
++++ agent/kernel.c
+@@ -252,7 +252,37 @@ free_kmem(void)
+ kmem = -1;
+ }
+ }
++#elif defined(__FreeBSD__)
++kvm_t *kd;
+
++/**
++ * Initialize the libkvm descriptor. On FreeBSD we can use most of libkvm
++ * without requiring /dev/kmem access. Only kvm_nlist() and kvm_read() need
++ * that, and we don't use them.
++ *
++ * @return TRUE upon success; FALSE upon failure.
++ */
++int
++init_kmem(const char *file)
++{
++ char err[4096];
++
++ kd = kvm_openfiles(NULL, "/dev/null", NULL, O_RDONLY, err);
++ if (!kd) {
++ snmp_log(LOG_CRIT, "init_kmem: kvm_openfiles failed: %s\n", err);
++ return FALSE;
++ }
++ return TRUE;
++}
++
++void
++free_kmem(void)
++{
++ if (kd != NULL) {
++ (void)kvm_close(kd);
++ kd = NULL;
++ }
++}
+ #else
+ int
+ init_kmem(const char *file)