projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rrdtool plugin: Make sure "cache_timeout + random_variation" dosn't get negative.
[collectd.git]
/
src
/
tcpconns.c
diff --git
a/src/tcpconns.c
b/src/tcpconns.c
index
f576b68
..
d68cd09
100644
(file)
--- a/
src/tcpconns.c
+++ b/
src/tcpconns.c
@@
-1,6
+1,7
@@
/**
* collectd - src/tcpconns.c
/**
* collectd - src/tcpconns.c
- * Copyright (C) 2007 Florian octo Forster
+ * Copyright (C) 2007,2008 Florian octo Forster
+ * Copyright (C) 2008 Michael Stapelberg
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@
-17,6
+18,7
@@
*
* Author:
* Florian octo Forster <octo at verplant.org>
*
* Author:
* Florian octo Forster <octo at verplant.org>
+ * Michael Stapelberg <michael+git at stapelberg.de>
**/
/**
**/
/**
@@
-59,6
+61,10
@@
#include "common.h"
#include "plugin.h"
#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
#if !KERNEL_LINUX && !HAVE_SYSCTLBYNAME && !HAVE_LIBKVM_NLIST
# error "No applicable input method."
#endif
@@
-95,7
+101,7
@@
# include <netinet/tcp_var.h>
/* #endif HAVE_SYSCTLBYNAME */
# 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>
#elif HAVE_LIBKVM_NLIST
# include <sys/queue.h>
# include <sys/socket.h>
@@
-103,6
+109,7
@@
# include <netinet/in.h>
# include <netinet/in_systm.h>
# include <netinet/ip.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>
# include <netinet/in_pcb.h>
# include <netinet/tcp.h>
# include <netinet/tcp_timer.h>
@@
-447,9
+454,7
@@
static int conn_config (const char *key, const char *value)
{
if (strcasecmp (key, "ListeningPorts") == 0)
{
{
if (strcasecmp (key, "ListeningPorts") == 0)
{
- if ((strcasecmp (value, "Yes") == 0)
- || (strcasecmp (value, "True") == 0)
- || (strcasecmp (value, "On") == 0))
+ if (IS_TRUE (value))
port_collect_listening = 1;
else
port_collect_listening = 0;
port_collect_listening = 1;
else
port_collect_listening = 0;
@@
-670,7
+675,7
@@
static int conn_read (void)
/* Get the `head' pcb */
head = (struct inpcb *) &(inpcbtable_ptr->inpt_queue);
/* Get the first pcb */
/* 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)
{
while (next != head)
{
@@
-678,15
+683,20
@@
static int conn_read (void)
kread ((u_long) next, &inpcb, sizeof (inpcb));
/* Advance `next' */
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. */
/* 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;
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);
kread ((u_long) inpcb.inp_ppcb, &tcpcb, sizeof (tcpcb));
conn_handle_ports (ntohs(inpcb.inp_lport), ntohs(inpcb.inp_fport), tcpcb.t_state);