X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fsynproxy.c;h=d51077f26d7ee570342a75aecb0ad3e690fec5d4;hp=eea65baa2864c229cc03d136b9fd8300c283e5e6;hb=a811574a6acbf87f23948411876a231fecaeb491;hpb=813cfffe619513b3136d8980c022728cde81c3e3 diff --git a/src/synproxy.c b/src/synproxy.c index eea65baa..d51077f2 100644 --- a/src/synproxy.c +++ b/src/synproxy.c @@ -21,27 +21,29 @@ #include "collectd.h" -#include "common.h" #include "plugin.h" +#include "utils/common/common.h" #if !KERNEL_LINUX #error "No applicable input method." #endif +#define SYNPROXY_FIELDS 6 + static const char *synproxy_stat_path = "/proc/net/stat/synproxy"; -static const char *column_names[] = { - "entries", "syn_received", "invalid", "valid", "retransmission", "reopened" -}; -static const char *column_types[] = { - "current_connections", "synproxy_connections", "synproxy_cookies", - "synproxy_cookies", "synproxy_cookies", "synproxy_connections" -}; +static const char *column_names[SYNPROXY_FIELDS] = { + "entries", "syn_received", "invalid", + "valid", "retransmission", "reopened"}; +static const char *column_types[SYNPROXY_FIELDS] = { + "current_connections", "connections", "cookies", "cookies", "cookies", + "connections"}; static void synproxy_submit(value_t *results) { value_list_t vl = VALUE_LIST_INIT; - for (unsigned n = 1; n < 6; n++) { + /* 1st column (entries) is hardcoded to 0 in kernel code */ + for (size_t n = 1; n < SYNPROXY_FIELDS; n++) { vl.values = &results[n]; vl.values_len = 1; @@ -50,16 +52,15 @@ static void synproxy_submit(value_t *results) { sstrncpy(vl.type_instance, column_names[n], sizeof(vl.type_instance)); plugin_dispatch_values(&vl); - } + } } static int synproxy_read(void) { - FILE *fh; char buf[1024]; - value_t results[6]; + value_t results[SYNPROXY_FIELDS]; int is_header = 1, status = 0; - fh = fopen(synproxy_stat_path, "r"); + FILE *fh = fopen(synproxy_stat_path, "r"); if (fh == NULL) { ERROR("synproxy plugin: unable to open %s", synproxy_stat_path); return -1; @@ -68,47 +69,44 @@ static int synproxy_read(void) { memset(results, 0, sizeof(results)); while (fgets(buf, sizeof(buf), fh) != NULL) { - int numfields; - char *fields[6], *endprt; + char *fields[SYNPROXY_FIELDS], *endprt; if (is_header) { is_header = 0; continue; } - numfields = strsplit(buf, fields, STATIC_ARRAY_SIZE(fields)); - if (numfields != 6) { - ERROR("synproxy plugin: unexpected number of columns in %s", - synproxy_stat_path); + int numfields = strsplit(buf, fields, STATIC_ARRAY_SIZE(fields)); + if (numfields != SYNPROXY_FIELDS) { + ERROR("synproxy plugin: unexpected number of columns in %s", + synproxy_stat_path); status = -1; break; } /* 1st column (entries) is hardcoded to 0 in kernel code */ - for (unsigned n = 1; n < 6; n++) { + for (size_t n = 1; n < SYNPROXY_FIELDS; n++) { char *endptr = NULL; errno = 0; results[n].derive += strtoull(fields[n], &endprt, 16); if ((endptr == fields[n]) || errno != 0) { ERROR("synproxy plugin: unable to parse value: %s", fields[n]); - status = -1; - goto err_close; + fclose(fh); + return -1; } } } -err_close: fclose(fh); if (status == 0) { synproxy_submit(results); } - return status; + return status; } void module_register(void) { plugin_register_read("synproxy", synproxy_read); } /* void module_register */ -