X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Finterface.c;h=fad37dbefdaf6208133e2454da22ac3ef2e263db;hb=9b626288aff81c68fe19210a58b4a32eeefde9d3;hp=8947dd61c0160b8c833e48a872e6dd69c93c6664;hpb=12f08ff05e4f451232072c52f1383a0fb97db707;p=collectd.git diff --git a/src/interface.c b/src/interface.c index 8947dd61..fad37dbe 100644 --- a/src/interface.c +++ b/src/interface.c @@ -24,6 +24,7 @@ #include "common.h" #include "plugin.h" #include "configfile.h" +#include "utils_ignorelist.h" #if HAVE_SYS_TYPES_H # include @@ -77,14 +78,7 @@ static const char *config_keys[] = }; static int config_keys_num = 2; -static char **if_list = NULL; -static int if_list_num = 0; -/* - * if_list_action: - * 0 => default is to collect selected interface - * 1 => ignore selcted interfaces - */ -static int if_list_action = 0; +static ignorelist_t *ignorelist = NULL; #ifdef HAVE_LIBKSTAT #define MAX_NUMIF 256 @@ -95,33 +89,21 @@ static int numif = 0; static int interface_config (const char *key, const char *value) { - char **temp; + if (ignorelist == NULL) + ignorelist = ignorelist_create (/* invert = */ 1); if (strcasecmp (key, "Interface") == 0) { - temp = (char **) realloc (if_list, (if_list_num + 1) * sizeof (char *)); - if (temp == NULL) - { - ERROR ("Cannot allocate more memory."); - return (1); - } - if_list = temp; - - if ((if_list[if_list_num] = strdup (value)) == NULL) - { - ERROR ("Cannot allocate memory."); - return (1); - } - if_list_num++; + ignorelist_add (ignorelist, value); } else if (strcasecmp (key, "IgnoreSelected") == 0) { + int invert = 1; if ((strcasecmp (value, "True") == 0) || (strcasecmp (value, "Yes") == 0) || (strcasecmp (value, "On") == 0)) - if_list_action = 1; - else - if_list_action = 0; + invert = 0; + ignorelist_set_invert (ignorelist, invert); } else { @@ -161,26 +143,6 @@ static int interface_init (void) } /* int interface_init */ #endif /* HAVE_LIBKSTAT */ -/* - * Check if this interface/instance should be ignored. This is called from - * both, `submit' and `write' to give client and server the ability to - * ignore certain stuff.. - */ -static int check_ignore_if (const char *interface) -{ - int i; - - /* If no interfaces are given collect all interfaces. Mostly to be - * backwards compatible, but also because this is much easier. */ - if (if_list_num < 1) - return (0); - - for (i = 0; i < if_list_num; i++) - if (strcasecmp (interface, if_list[i]) == 0) - return (if_list_action); - return (1 - if_list_action); -} /* int check_ignore_if */ - static void if_submit (const char *dev, const char *type, unsigned long long rx, unsigned long long tx) @@ -188,7 +150,7 @@ static void if_submit (const char *dev, const char *type, value_t values[2]; value_list_t vl = VALUE_LIST_INIT; - if (check_ignore_if (dev)) + if (ignorelist_match (ignorelist, dev) != 0) return; values[0].counter = rx; @@ -196,7 +158,6 @@ static void if_submit (const char *dev, const char *type, vl.values = values; vl.values_len = 2; - vl.time = time (NULL); sstrncpy (vl.host, hostname_g, sizeof (vl.host)); sstrncpy (vl.plugin, "interface", sizeof (vl.plugin)); sstrncpy (vl.type, type, sizeof (vl.type));