X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Finterface.c;h=90dc139dccc0131ff7b83a8921b8333beb615c84;hb=5c2993e4121feae745551be182221b31bc23ff97;hp=e17711e3105ae31ccd106576ede46b72dc5b48a4;hpb=4b8c1289003f0d60728f06a43bfcc9bc3de7004c;p=collectd.git diff --git a/src/interface.c b/src/interface.c index e17711e3..90dc139d 100644 --- a/src/interface.c +++ b/src/interface.c @@ -95,6 +95,7 @@ static ignorelist_t *ignorelist = NULL; extern kstat_ctl_t *kc; static kstat_t *ksp[MAX_NUMIF]; static int numif = 0; +static _Bool unique_name = 0; #endif /* HAVE_LIBKSTAT */ static int interface_config (const char *key, const char *value) @@ -113,6 +114,15 @@ static int interface_config (const char *key, const char *value) invert = 0; ignorelist_set_invert (ignorelist, invert); } + else if (strcasecmp (key, "UniqueName") == 0) + { + #ifdef HAVE_LIBKSTAT + if (IS_TRUE (value)) + unique_name = 1; + #else + WARNING ("interface plugin: the \"UniqueName\" option is only valid on Solaris."); + #endif /* HAVE_LIBKSTAT */ + } else { return (-1); @@ -180,7 +190,7 @@ static int interface_read (void) struct ifaddrs *if_list; struct ifaddrs *if_ptr; -/* Darin/Mac OS X and possible other *BSDs */ +/* Darwin/Mac OS X and possible other *BSDs */ #if HAVE_STRUCT_IF_DATA # define IFA_DATA if_data # define IFA_RX_BYTES ifi_ibytes @@ -276,6 +286,10 @@ static int interface_read (void) incoming = atoll (fields[2]); outgoing = atoll (fields[10]); if_submit (device, "if_errors", incoming, outgoing); + + incoming = atoll (fields[3]); + outgoing = atoll (fields[11]); + if_submit (device, "if_dropped", incoming, outgoing); } fclose (fh); @@ -285,6 +299,7 @@ static int interface_read (void) int i; derive_t rx; derive_t tx; + char iname[DATA_MAX_NAME_LEN]; if (kc == NULL) return (-1); @@ -294,6 +309,11 @@ static int interface_read (void) if (kstat_read (kc, ksp[i], NULL) == -1) continue; + if (unique_name) + ssnprintf(iname, sizeof(iname), "%s_%d_%s", ksp[i]->ks_module, ksp[i]->ks_instance, ksp[i]->ks_name); + else + 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"); @@ -303,7 +323,7 @@ static int interface_read (void) if (tx == -1LL) tx = get_kstat_value (ksp[i], "obytes"); if ((rx != -1LL) || (tx != -1LL)) - if_submit (ksp[i]->ks_name, "if_octets", rx, tx); + if_submit (iname, "if_octets", rx, tx); /* try to get 64bit counters */ rx = get_kstat_value (ksp[i], "ipackets64"); @@ -314,13 +334,13 @@ static int interface_read (void) if (tx == -1LL) tx = get_kstat_value (ksp[i], "opackets"); if ((rx != -1LL) || (tx != -1LL)) - if_submit (ksp[i]->ks_name, "if_packets", rx, tx); + if_submit (iname, "if_packets", rx, tx); /* no 64bit error counters yet */ rx = get_kstat_value (ksp[i], "ierrors"); tx = get_kstat_value (ksp[i], "oerrors"); if ((rx != -1LL) || (tx != -1LL)) - if_submit (ksp[i]->ks_name, "if_errors", rx, tx); + if_submit (iname, "if_errors", rx, tx); } /* #endif HAVE_LIBKSTAT */