summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 2d3861c)
raw | patch | inline | side by side (parent: 2d3861c)
author | Doug MacEachern <dougm@hyperic.com> | |
Wed, 6 May 2009 08:41:08 +0000 (10:41 +0200) | ||
committer | Florian Forster <octo@huhu.verplant.org> | |
Wed, 6 May 2009 08:41:08 +0000 (10:41 +0200) |
Signed-off-by: Doug MacEachern <dougm@hyperic.com>
Signed-off-by: Florian Forster <octo@huhu.verplant.org>
Signed-off-by: Florian Forster <octo@huhu.verplant.org>
src/tcpconns.c | patch | blob | history |
diff --git a/src/tcpconns.c b/src/tcpconns.c
index e1bc88209569b7e8bf1f0ac8d4c69abe59d3321e..02241f3d55e94721eb42ca90cb77ec80c6283182 100644 (file)
--- a/src/tcpconns.c
+++ b/src/tcpconns.c
#include "common.h"
#include "plugin.h"
+#if defined(__OpenBSD__) || defined(__NetBSD__)
+#undef HAVE_SYSCTLBYNAME /* force HAVE_LIBKVM_NLIST path */
+#endif
+
#if !KERNEL_LINUX && !HAVE_SYSCTLBYNAME && !HAVE_LIBKVM_NLIST
# error "No applicable input method."
#endif
# include <netinet/tcp_var.h>
/* #endif HAVE_SYSCTLBYNAME */
-/* This is for OpenBSD and possibly NetBSD. */
+/* This is for OpenBSD and NetBSD. */
#elif HAVE_LIBKVM_NLIST
# include <sys/queue.h>
# include <sys/socket.h>
# include <netinet/in.h>
# include <netinet/in_systm.h>
# include <netinet/ip.h>
+# include <netinet/ip_var.h>
# include <netinet/in_pcb.h>
# include <netinet/tcp.h>
# include <netinet/tcp_timer.h>
/* Get the `head' pcb */
head = (struct inpcb *) &(inpcbtable_ptr->inpt_queue);
/* Get the first pcb */
- next = CIRCLEQ_FIRST (&table.inpt_queue);
+ next = (struct inpcb *)CIRCLEQ_FIRST (&table.inpt_queue);
while (next != head)
{
kread ((u_long) next, &inpcb, sizeof (inpcb));
/* Advance `next' */
- next = CIRCLEQ_NEXT (&inpcb, inp_queue);
+ next = (struct inpcb *)CIRCLEQ_NEXT (&inpcb, inp_queue);
/* Ignore sockets, that are not connected. */
+#ifdef __NetBSD__
+ if (inpcb.inp_af == AF_INET6)
+ continue; /* XXX see netbsd/src/usr.bin/netstat/inet6.c */
+#else
if (!(inpcb.inp_flags & INP_IPV6)
&& (inet_lnaof(inpcb.inp_laddr) == INADDR_ANY))
continue;
if ((inpcb.inp_flags & INP_IPV6)
&& IN6_IS_ADDR_UNSPECIFIED (&inpcb.inp_laddr6))
continue;
+#endif
kread ((u_long) inpcb.inp_ppcb, &tcpcb, sizeof (tcpcb));
conn_handle_ports (ntohs(inpcb.inp_lport), ntohs(inpcb.inp_fport), tcpcb.t_state);