{
"Interface",
"IgnoreSelected",
+ "ActiveInterfaceOnly",
NULL
};
-static int config_keys_num = 2;
+static int config_keys_num = 3;
static ignorelist_t *ignorelist = NULL;
+static _Bool active_interface_only = 0;
+
#ifdef HAVE_LIBKSTAT
#define MAX_NUMIF 256
extern kstat_ctl_t *kc;
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, "UniqueName") == 0)
{
#ifdef HAVE_LIBKSTAT
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 )
+ continue;
+
if_submit (if_ptr->ifa_name, "if_octets",
if_data->IFA_RX_BYTES,
if_data->IFA_TX_BYTES);
if (numfields < 11)
continue;
- incoming = atoll (fields[0]);
- outgoing = atoll (fields[8]);
- if_submit (device, "if_octets", incoming, outgoing);
-
incoming = atoll (fields[1]);
outgoing = atoll (fields[9]);
+ if ( active_interface_only && incoming == 0 && outgoing == 0 )
+ continue;
+
if_submit (device, "if_packets", incoming, outgoing);
+ incoming = atoll (fields[0]);
+ outgoing = atoll (fields[8]);
+ if_submit (device, "if_octets", incoming, outgoing);
+
incoming = atoll (fields[2]);
outgoing = atoll (fields[10]);
if_submit (device, "if_errors", incoming, outgoing);
sstrncpy(iname, ksp[i]->ks_name, sizeof(iname));
/* try to get 64bit counters */
- rx = get_kstat_value (ksp[i], "rbytes64");
- tx = get_kstat_value (ksp[i], "obytes64");
+ rx = get_kstat_value (ksp[i], "ipackets64");
+ tx = get_kstat_value (ksp[i], "opackets64");
/* or fallback to 32bit */
if (rx == -1LL)
- rx = get_kstat_value (ksp[i], "rbytes");
+ rx = get_kstat_value (ksp[i], "ipackets");
if (tx == -1LL)
- tx = get_kstat_value (ksp[i], "obytes");
+ tx = get_kstat_value (ksp[i], "opackets");
+ if ( active_interface_only && rx == 0 && tx == 0 )
+ continue;
if ((rx != -1LL) || (tx != -1LL))
- if_submit (iname, "if_octets", rx, tx);
+ if_submit (iname, "if_packets", rx, tx);
/* try to get 64bit counters */
- rx = get_kstat_value (ksp[i], "ipackets64");
- tx = get_kstat_value (ksp[i], "opackets64");
+ rx = get_kstat_value (ksp[i], "rbytes64");
+ tx = get_kstat_value (ksp[i], "obytes64");
/* or fallback to 32bit */
if (rx == -1LL)
- rx = get_kstat_value (ksp[i], "ipackets");
+ rx = get_kstat_value (ksp[i], "rbytes");
if (tx == -1LL)
- tx = get_kstat_value (ksp[i], "opackets");
+ tx = get_kstat_value (ksp[i], "obytes");
if ((rx != -1LL) || (tx != -1LL))
- if_submit (iname, "if_packets", rx, tx);
+ if_submit (iname, "if_octets", rx, tx);
/* no 64bit error counters yet */
rx = get_kstat_value (ksp[i], "ierrors");
ios = sg_get_network_io_stats (&num);
- for (i = 0; i < num; i++)
+ for (i = 0; i < num; i++) {
+ if ( active_interface_only && ios[i].rx == 0 && ios[i].tx == 0 )
+ continue;
if_submit (ios[i].interface_name, "if_octets", ios[i].rx, ios[i].tx);
+ }
/* #endif HAVE_LIBSTATGRAB */
#elif defined(HAVE_PERFSTAT)
for (i = 0; i < ifs; i++)
{
+ if ( active_interface_only && ifstat[i].ipackets == 0 && ifstat[i].opackets == 0 )
+ continue;
+
if_submit (ifstat[i].name, "if_octets", ifstat[i].ibytes, ifstat[i].obytes);
if_submit (ifstat[i].name, "if_packets", ifstat[i].ipackets ,ifstat[i].opackets);
if_submit (ifstat[i].name, "if_errors", ifstat[i].ierrors, ifstat[i].oerrors );