From 97ee626c2b4c68e24f030dec21ee652f61923d85 Mon Sep 17 00:00:00 2001 From: Rinigus Date: Sun, 31 Jul 2016 00:11:30 +0300 Subject: [PATCH] interface plugin: following active/inactive interfaces via ReportInactive --- src/collectd.conf.in | 2 +- src/collectd.conf.pod | 6 +++--- src/interface.c | 25 ++++++++++--------------- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/collectd.conf.in b/src/collectd.conf.in index bf9e8e6f..b678c425 100644 --- a/src/collectd.conf.in +++ b/src/collectd.conf.in @@ -582,7 +582,7 @@ # # Interface "eth0" # IgnoreSelected false -# ActiveInterfaceOnly false +# ReportInactive true # UniqueName false # diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 5bbbf5db..32738dc6 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -2735,16 +2735,16 @@ This will ignore the loopback interface, all interfaces with names starting with I and all interfaces with names starting with I followed by at least one digit. -=item B I|I +=item B I|I -When set to I, only interfaces with non-zero traffic will be +When set to I, only interfaces with non-zero traffic will be reported. Note that the check is done by looking into whether a package was sent at any time from boot and the corresponding counter is non-zero. So, if the interface has been sending data in the past since boot, but not during the reported time-interval, it will still be reported. -The default value is I and results in collection of the data +The default value is I and results in collection of the data from all interfaces that are selected by B and B options. diff --git a/src/interface.c b/src/interface.c index a91c13be..539df588 100644 --- a/src/interface.c +++ b/src/interface.c @@ -84,14 +84,14 @@ static const char *config_keys[] = { "Interface", "IgnoreSelected", - "ActiveInterfaceOnly", + "ReportInactive", NULL }; -static int config_keys_num = 3; +static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); static ignorelist_t *ignorelist = NULL; -static _Bool active_interface_only = 0; +static _Bool report_inactive = 1; #ifdef HAVE_LIBKSTAT #define MAX_NUMIF 256 @@ -117,13 +117,8 @@ static int interface_config (const char *key, const char *value) invert = 0; ignorelist_set_invert (ignorelist, invert); } - else if (strcasecmp (key, "ActiveInterfaceOnly") == 0) - { - if (IS_TRUE (value)) - active_interface_only = 1; - else - active_interface_only = 0; - } + else if (strcasecmp (key, "ReportInactive") == 0) + report_inactive = IS_TRUE (value); else if (strcasecmp (key, "UniqueName") == 0) { #ifdef HAVE_LIBKSTAT @@ -233,7 +228,7 @@ static int interface_read (void) if (if_ptr->ifa_addr != NULL && if_ptr->ifa_addr->sa_family == AF_LINK) { if_data = (struct IFA_DATA *) if_ptr->ifa_data; - if ( active_interface_only && if_data->IFA_RX_PACKT == 0 && if_data->IFA_TX_PACKT == 0 ) + if (!report_inactive && if_data->IFA_RX_PACKT == 0 && if_data->IFA_TX_PACKT == 0) continue; if_submit (if_ptr->ifa_name, "if_octets", @@ -290,7 +285,7 @@ static int interface_read (void) incoming = atoll (fields[1]); outgoing = atoll (fields[9]); - if ( active_interface_only && incoming == 0 && outgoing == 0 ) + if (!report_inactive && incoming == 0 && outgoing == 0) continue; if_submit (device, "if_packets", incoming, outgoing); @@ -338,7 +333,7 @@ static int interface_read (void) rx = get_kstat_value (ksp[i], "ipackets"); if (tx == -1LL) tx = get_kstat_value (ksp[i], "opackets"); - if ( active_interface_only && rx == 0 && tx == 0 ) + if (!report_inactive && rx == 0 && tx == 0) continue; if ((rx != -1LL) || (tx != -1LL)) if_submit (iname, "if_packets", rx, tx); @@ -369,7 +364,7 @@ static int interface_read (void) ios = sg_get_network_io_stats (&num); for (i = 0; i < num; i++) { - if ( active_interface_only && ios[i].rx == 0 && ios[i].tx == 0 ) + if (!report_inactive && ios[i].rx == 0 && ios[i].tx == 0) continue; if_submit (ios[i].interface_name, "if_octets", ios[i].rx, ios[i].tx); } @@ -405,7 +400,7 @@ static int interface_read (void) for (i = 0; i < ifs; i++) { - if ( active_interface_only && ifstat[i].ipackets == 0 && ifstat[i].opackets == 0 ) + if (!report_inactive && ifstat[i].ipackets == 0 && ifstat[i].opackets == 0) continue; if_submit (ifstat[i].name, "if_octets", ifstat[i].ibytes, ifstat[i].obytes); -- 2.30.2