Maryam Tahhan [Mon, 28 Mar 2016 11:26:03 +0000 (12:26 +0100)]
dpdkstat: enable a plugin for DPDK stats
This patch enables support to retrieve statistics for DPDK
interfaces. An overview of the threading is as follows:
1. collectd init() or read() calls dpdk_helper_spawn() to retrieve
the required size of xstats to allocate.
1.1. DPDK counts ports, stats and length, writing them to
shared-memory (SHM).
1.2. DPDK helper (secondary) process quits, allowing cleanup of
the shared memory.
2. collectd resizes shared-memory to size of stats as provided by
DPDK.
3. collectd respawns the DPDK helper.
3.1. Helper blocks on a semaphore until told to read the stats
from DPDK and write them to SHM.
4. collectd dispatches statistics
4.1. Thread blocks on semaphore until stats are available.
This threading model is required to allow the plugin to detect when
the DPDK primary process/application has been killed/reset, and to avoid
the plugin from stopping another DPDK primary process from starting.
Some extra housekeeping is in place to ensure collectd is never
stalled by using sem_timedwait() with a timeout. If collectd dies, the
helper process will automatically quit after a timeout, as it detects
its ppid has changed.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com> Signed-off-by: Maryam Tahhan <maryam.tahhan@intel.com>
varnish plugin: Add informative warnings to the config handling.
Not all config options are valid for all versions of Varnish. Rather
than removing the if-clause altogether, which results in a "Ignoring
unknown configuration option" warning, print a user-friendly warning
instead.
libcollectdclient: fix compiler warning on Solaris
CC libcollectdclient_la-client.lo
"client.c", line 1104: argument #4 is incompatible with prototype:
prototype: pointer to function(pointer to const void, pointer to const void) returning int : "/usr/include/iso/stdlib_iso.h", line 134
argument : pointer to void
|c_avl_tree_t *c_avl_create (int (*compare) (const void *, const
void *));
| ^ line 54, utils_avltree.h
| included in line 34, utils_vl_lookup.c
|
| obj->by_type_tree = c_avl_create ((void *) strcmp);
| ^ line 567,
utils_vl_lookup.c
E_ARG_INCOMPATIBLE_WITH_ARG_L, argument #1 is incompatible with
prototype:
prototype: pointer to function(pointer to const void, pointer to
const void) returning int : "src/daemon/utils_avltree.h", line 54
argument : pointer to void
I'll look into writing a generic function to compare avl keys so
we don't need to do all the casting.
Hal needs dbus, but we need pkg-config to tell us that.
Now that pkg-config is not optional anymore, rewrite the
check to always use it. Also add a check for the header.
| ud.free_func = (void *) memcached_free;
| ^ line 559, memcached.c
assignment type mismatch:
pointer to function(pointer to void) returning void "=" pointer to void
Casting a function pointer to a void pointer is undefined behaviour
in C (it is defined in POSIX however)
network plugin: Fix heap overflow in parse_packet().
Emilien Gaspar has identified a heap overflow in parse_packet(), the
function used by the network plugin to parse incoming network packets.
This is a vulnerability in collectd, though the scope is not clear at
this point. At the very least specially crafted network packets can be
used to crash the daemon. We can't rule out a potential remote code
execution though.
CC write_riemann_la-write_riemann.lo
In file included from ./daemon/collectd.h:31:0,
from write_riemann.c:34:
./config.h:1664:0: error: "_FILE_OFFSET_BITS" redefined [-Werror]
#define _FILE_OFFSET_BITS 64
^
In file included from /usr/include/limits.h:17:0,
from
/opt/csw/lib/gcc/i386-pc-solaris2.10/5.2.0/include-fixed/limits.h:168,
from
/opt/csw/lib/gcc/i386-pc-solaris2.10/5.2.0/include-fixed/syslimits.h:7,
from
/opt/csw/lib/gcc/i386-pc-solaris2.10/5.2.0/include-fixed/limits.h:34,
from /opt/csw/include/protobuf-c/protobuf-c.h:200,
from /opt/csw/include/riemann/proto/riemann.pb-c.h:7,
from /opt/csw/include/riemann/attribute.h:21,
from /opt/csw/include/riemann/riemann-client.h:23,
from write_riemann.c:31:
/opt/csw/lib/gcc/i386-pc-solaris2.10/5.2.0/include-fixed/sys/feature_tests.h:196:0:
note: this is the location of the previous definition
#define _FILE_OFFSET_BITS 32
^
cc1: all warnings being treated as errors
Makefile:4645: recipe for target 'write_riemann_la-write_riemann.lo'
failed
gmake[3]: *** [write_riemann_la-write_riemann.lo] Error 1
gmake[3]: Leaving directory
'/home/dam/mgar/pkg/collectd/trunk/work/solaris10-i386/build-isa-pentium_pro/collectd-5.5.1.1126.g37fe166/src'
Makefile:4879: recipe for target 'all-recursive' failed
gmake[2]: *** [all-recursive] Error 1
gmake[2]: Leaving directory
'/home/dam/mgar/pkg/collectd/trunk/work/solaris10-i386/build-isa-pentium_pro/collectd-5.5.1.1126.g37fe166/src'
Makefile:3209: recipe for target 'all' failed
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory
'/home/dam/mgar/pkg/collectd/trunk/work/solaris10-i386/build-isa-pentium_pro/collectd-5.5.1.1126.g37fe166/src'
Makefile:572: recipe for target 'all-recursive' failed
gmake: *** [all-recursive] Error 1
gmake: Leaving directory
'/home/dam/mgar/pkg/collectd/trunk/work/solaris10-i386/build-isa-pentium_pro/collectd-5.5.1.1126.g37fe166'
/home/dam/mgar/pkg/.buildsys/v2/gar//gar.lib.mk:874: die Regel für Ziel
„build-work/solaris10-i386/build-isa-pentium_pro/collectd-5.5.1.1126.g37fe166/Makefile“
scheiterte