[collectd] [PATCH] Madwifi plugin

Ondrej Zajicek santiago at crfreenet.org
Fri Jul 17 23:13:31 CEST 2009


Hello

Here is a patch adding plugin for collecting statistics of Madwifi
wireless driver.


---
diff -uprN collectd-4.6.3/configure.in collectd-4.6.3-mod/configure.in
--- collectd-4.6.3/configure.in	2009-06-02 11:17:47.000000000 +0200
+++ collectd-4.6.3-mod/configure.in	2009-07-17 21:57:50.000000000 +0200
@@ -2910,6 +2910,7 @@ plugin_ipvs="no"
 plugin_irq="no"
 plugin_libvirt="no"
 plugin_load="no"
+plugin_madwifi="no"
 plugin_memory="no"
 plugin_multimeter="no"
 plugin_nfs="no"
@@ -2936,6 +2937,7 @@ then
 	plugin_interface="yes"
 	plugin_irq="yes"
 	plugin_load="yes"
+	plugin_madwifi="yes"
 	plugin_memory="yes"
 	plugin_nfs="yes"
 	plugin_processes="yes"
@@ -3149,6 +3151,7 @@ AC_PLUGIN([irq],         [$plugin_irq], 
 AC_PLUGIN([libvirt],     [$plugin_libvirt],    [Virtual machine statistics])
 AC_PLUGIN([load],        [$plugin_load],       [System load])
 AC_PLUGIN([logfile],     [yes],                [File logging plugin])
+AC_PLUGIN([madwifi],     [$plugin_madwifi],    [Madwifi wireless statistics])
 AC_PLUGIN([match_regex], [yes],                [The regex match])
 AC_PLUGIN([match_timediff], [yes],             [The timediff match])
 AC_PLUGIN([match_value], [yes],                [The value match])
@@ -3353,6 +3356,7 @@ Configuration:
     libvirt . . . . . . . $enable_libvirt
     load  . . . . . . . . $enable_load
     logfile . . . . . . . $enable_logfile
+    madwifi . . . . . . . $enable_madwifi
     match_regex . . . . . $enable_match_regex
     match_timediff  . . . $enable_match_timediff
     match_value . . . . . $enable_match_value
diff -uprN collectd-4.6.3/src/Makefile.am collectd-4.6.3-mod/src/Makefile.am
--- collectd-4.6.3/src/Makefile.am	2009-06-02 11:17:47.000000000 +0200
+++ collectd-4.6.3-mod/src/Makefile.am	2009-07-17 21:57:50.000000000 +0200
@@ -410,6 +410,14 @@ collectd_LDADD += "-dlopen" logfile.la
 collectd_DEPENDENCIES += logfile.la
 endif
 
+if BUILD_PLUGIN_MADWIFI
+pkglib_LTLIBRARIES += madwifi.la
+madwifi_la_SOURCES = madwifi.c
+madwifi_la_LDFLAGS = -module -avoid-version
+collectd_LDADD += "-dlopen" madwifi.la
+collectd_DEPENDENCIES += madwifi.la
+endif
+
 if BUILD_PLUGIN_MATCH_REGEX
 pkglib_LTLIBRARIES += match_regex.la
 match_regex_la_SOURCES = match_regex.c
diff -uprN collectd-4.6.3/src/config.h.in collectd-4.6.3-mod/src/config.h.in
--- collectd-4.6.3/src/config.h.in	2009-06-02 11:19:03.000000000 +0200
+++ collectd-4.6.3-mod/src/config.h.in	2009-07-17 21:57:50.000000000 +0200
@@ -513,6 +513,9 @@
 /* Define to 1 if the logfile plugin is enabled. */
 #undef HAVE_PLUGIN_LOGFILE
 
+/* Define to 1 if the madwifi plugin is enabled. */
+#undef HAVE_PLUGIN_MADWIFI
+
 /* Define to 1 if the match_regex plugin is enabled. */
 #undef HAVE_PLUGIN_MATCH_REGEX
 
diff -uprN collectd-4.6.3/src/madwifi.c collectd-4.6.3-mod/src/madwifi.c
--- collectd-4.6.3/src/madwifi.c	1970-01-01 01:00:00.000000000 +0100
+++ collectd-4.6.3-mod/src/madwifi.c	2009-07-17 21:57:50.000000000 +0200
@@ -0,0 +1,441 @@
+/**
+ * collectd - src/madwifi.c
+ * Copyright (C) 2009  Ondrej 'SanTiago' Zajicek
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; only version 2 of the License is applicable.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ * Author:
+ *   Ondrej 'SanTiago' Zajicek <santiago at crfreenet.org>
+ *
+ *   based on some code from interfaces.c (collectd) and Madwifi driver
+ **/
+
+#include "collectd.h"
+#include "common.h"
+#include "plugin.h"
+#include "configfile.h"
+#include "utils_ignorelist.h"
+
+#include <dirent.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+
+#if !KERNEL_LINUX
+# error "No applicable input method."
+#endif
+
+#include <linux/wireless.h>
+#include "madwifi.h"
+
+
+/*
+ * (Module-)Global variables
+ */
+static const char *config_keys[] =
+{
+	"Interface",
+	"IgnoreSelected",
+	NULL
+};
+static int config_keys_num = 2;
+
+static ignorelist_t *ignorelist;
+
+
+static int madwifi_config (const char *key, const char *value)
+{
+	if (ignorelist == NULL)
+		ignorelist = ignorelist_create (/* invert = */ 1);
+
+	if (strcasecmp (key, "Interface") == 0) {
+		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))
+			invert = 0;
+		ignorelist_set_invert (ignorelist, invert);
+	} else {
+		return (-1);
+	}
+
+	return (0);
+}
+
+
+static void submit (const char *dev, const char *mac, const char *type, value_t *val, int len)
+{
+	value_list_t vl = VALUE_LIST_INIT;
+
+	vl.values = val;
+	vl.values_len = len;
+	sstrncpy (vl.host, hostname_g, sizeof (vl.host));
+	sstrncpy (vl.plugin, "madwifi", sizeof (vl.plugin));
+	sstrncpy (vl.plugin_instance, dev, sizeof (vl.plugin_instance));
+	sstrncpy (vl.type, type, sizeof (vl.type));
+	if (mac)
+		sstrncpy (vl.type_instance, mac, sizeof (vl.type_instance));
+
+	plugin_dispatch_values (&vl);
+}
+
+static void submit_counter (const char *dev, const char *mac, const char *type, counter_t val)
+{
+	value_t item;
+	item.counter = val;
+	submit (dev, mac, type, &item, 1);
+}
+
+static void submit_gauge (const char *dev, const char *mac, const char *type, gauge_t val)
+{
+	value_t item;
+	item.gauge = val;
+	submit (dev, mac, type, &item, 1);
+}
+
+static void submit_antx (const char *dev, const char *mac, const char *type, u_int32_t *vals, int count)
+{
+	int i;
+	value_t items[count];
+	for (i = 0; i < count; i++)
+		items[i].counter = vals[i];
+	submit (dev, mac, type, items, count);
+}
+
+static inline void
+macaddr_to_str(char *buf, int bufsize, const uint8_t mac[IEEE80211_ADDR_LEN])
+{
+	snprintf (buf, bufsize, "%02x:%02x:%02x:%02x:%02x:%02x",
+		mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+}
+
+static void
+process_athstats(int sk, const char *dev)
+{
+	struct ifreq ifr;
+	struct ath_stats stats;
+	strncpy(ifr.ifr_name, dev, sizeof (ifr.ifr_name));
+	ifr.ifr_data = (caddr_t) &stats;
+	if (ioctl(sk, SIOCGATHSTATS, &ifr) < 0)
+		return;
+
+#define STAT1(item) if (stats.ast_##item) submit_counter (dev, NULL, "ath_hw_" #item, stats.ast_##item)
+	STAT1 (watchdog);	/* device reset by watchdog */
+	STAT1 (hardware);	/* fatal hardware error interrupts */
+	STAT1 (bmiss);		/* beacon miss interrupts */
+	STAT1 (rxorn);		/* rx overrun interrupts */
+	STAT1 (rxeol);		/* rx eol interrupts */
+	STAT1 (txurn);		/* tx underrun interrupts */
+	STAT1 (mib);		/* mib interrupts */
+	STAT1 (tx_packets);	/* packet sent on the interface */
+	STAT1 (tx_mgmt);	/* management frames transmitted */
+	STAT1 (tx_discard);	/* frames discarded prior to assoc */
+	STAT1 (tx_invalid);	/* frames discarded due to is device gone */
+	STAT1 (tx_qstop);	/* tx queue stopped because it's full */
+	STAT1 (tx_encap);	/* tx encapsulation failed */
+	STAT1 (tx_nonode);	/* tx failed due to of no node */
+	STAT1 (tx_nobuf);	/* tx failed due to of no tx buffer (data) */
+	STAT1 (tx_nobufmgt);	/* tx failed due to of no tx buffer (mgmt)*/
+	STAT1 (tx_xretries);	/* tx failed due to of too many retries */
+	STAT1 (tx_fifoerr);	/* tx failed due to of FIFO underrun */
+	STAT1 (tx_filtered);	/* tx failed due to xmit filtered */
+	STAT1 (tx_shortretry);	/* tx on-chip retries (short) */
+	STAT1 (tx_longretry);	/* tx on-chip retries (long) */
+	STAT1 (tx_badrate);	/* tx failed due to of bogus xmit rate */
+	STAT1 (tx_noack);	/* tx frames with no ack marked */
+	STAT1 (tx_rts);		/* tx frames with rts enabled */
+	STAT1 (tx_cts);		/* tx frames with cts enabled */
+	STAT1 (tx_shortpre);	/* tx frames with short preamble */
+	STAT1 (tx_altrate);	/* tx frames with alternate rate */
+	STAT1 (tx_protect);	/* tx frames with protection */
+	STAT1 (rx_orn);		/* rx failed due to of desc overrun */
+	STAT1 (rx_crcerr);	/* rx failed due to of bad CRC */
+	STAT1 (rx_fifoerr);	/* rx failed due to of FIFO overrun */
+	STAT1 (rx_badcrypt);	/* rx failed due to of decryption */
+	STAT1 (rx_badmic);	/* rx failed due to of MIC failure */
+	STAT1 (rx_phyerr);	/* rx PHY error summary count */
+	STAT1 (rx_tooshort);	/* rx discarded due to frame too short */
+	STAT1 (rx_toobig);	/* rx discarded due to frame too large */
+	STAT1 (rx_nobuf);	/* rx setup failed due to of no skbuff */
+	STAT1 (rx_packets);	/* packet recv on the interface */
+	STAT1 (rx_mgt);		/* management frames received */
+	STAT1 (rx_ctl);		/* control frames received */
+	STAT1 (be_xmit);	/* beacons transmitted */
+	STAT1 (be_nobuf);	/* no skbuff available for beacon */
+	STAT1 (per_cal);	/* periodic calibration calls */
+	STAT1 (per_calfail);	/* periodic calibration failed */
+	STAT1 (per_rfgain);	/* periodic calibration rfgain reset */
+	STAT1 (rate_calls);	/* rate control checks */
+	STAT1 (rate_raise);	/* rate control raised xmit rate */
+	STAT1 (rate_drop);	/* rate control dropped xmit rate */
+	STAT1 (ant_defswitch);	/* rx/default antenna switches */
+	STAT1 (ant_txswitch);	/* tx antenna switches */
+	submit_antx (dev, NULL, "ath_hw_ant_rx", stats.ast_ant_rx, 8);	/* rx frames with antenna */
+	submit_antx (dev, NULL, "ath_hw_ant_tx", stats.ast_ant_tx, 8);	/* tx frames with antenna */
+#undef STAT1
+}
+
+static void
+process_80211stats(int sk, const char *dev)
+{
+	struct ifreq ifr;
+	struct ieee80211_stats stats;
+	strncpy (ifr.ifr_name, dev, sizeof (ifr.ifr_name));
+	ifr.ifr_data = (caddr_t) &stats;
+	if (ioctl(sk, SIOCG80211STATS, &ifr) < 0)
+		return;
+
+#define STAT1(item) if (stats.is_##item) submit_counter (dev, NULL, "ath_dev_" #item, stats.is_##item)
+	STAT1 (rx_badversion);		/* rx frame with bad version */
+	STAT1 (rx_tooshort);		/* rx frame too short */
+	STAT1 (rx_wrongbss);		/* rx from wrong bssid */
+	STAT1 (rx_dup);			/* rx discard due to it's a dup */
+	STAT1 (rx_wrongdir);		/* rx w/ wrong direction */
+	STAT1 (rx_mcastecho);		/* rx discard due to of mcast echo */
+	STAT1 (rx_notassoc);		/* rx discard due to sta !assoc */
+	STAT1 (rx_noprivacy);		/* rx w/ wep but privacy off */
+	STAT1 (rx_unencrypted);		/* rx w/o wep and privacy on */
+	STAT1 (rx_wepfail);		/* rx wep processing failed */
+	STAT1 (rx_decap);		/* rx decapsulation failed */
+	STAT1 (rx_mgtdiscard);		/* rx discard mgt frames */
+	STAT1 (rx_ctl);			/* rx discard ctrl frames */
+	STAT1 (rx_beacon);		/* rx beacon frames */
+	STAT1 (rx_rstoobig);		/* rx rate set truncated */
+	STAT1 (rx_elem_missing);	/* rx required element missing*/
+	STAT1 (rx_elem_toobig);		/* rx element too big */
+	STAT1 (rx_elem_toosmall);	/* rx element too small */
+	STAT1 (rx_elem_unknown);	/* rx element unknown */
+	STAT1 (rx_badchan);		/* rx frame w/ invalid chan */
+	STAT1 (rx_chanmismatch);	/* rx frame chan mismatch */
+	STAT1 (rx_nodealloc);		/* rx frame dropped */
+	STAT1 (rx_ssidmismatch);	/* rx frame ssid mismatch  */
+	STAT1 (rx_auth_unsupported);	/* rx w/ unsupported auth alg */
+	STAT1 (rx_auth_fail);		/* rx sta auth failure */
+	STAT1 (rx_auth_countermeasures);/* rx auth discard due to CM */
+	STAT1 (rx_assoc_bss);		/* rx assoc from wrong bssid */
+	STAT1 (rx_assoc_notauth);	/* rx assoc w/o auth */
+	STAT1 (rx_assoc_capmismatch);	/* rx assoc w/ cap mismatch */
+	STAT1 (rx_assoc_norate);	/* rx assoc w/ no rate match */
+	STAT1 (rx_assoc_badwpaie);	/* rx assoc w/ bad WPA IE */
+	STAT1 (rx_deauth);		/* rx deauthentication */
+	STAT1 (rx_disassoc);		/* rx disassociation */
+	STAT1 (rx_badsubtype);		/* rx frame w/ unknown subtype*/
+	STAT1 (rx_nobuf);		/* rx failed for lack of buf */
+	STAT1 (rx_decryptcrc);		/* rx decrypt failed on crc */
+	STAT1 (rx_ahdemo_mgt);		/* rx discard ahdemo mgt frame*/
+	STAT1 (rx_bad_auth);		/* rx bad auth request */
+	STAT1 (rx_unauth);		/* rx on unauthorized port */
+	STAT1 (rx_badkeyid);		/* rx w/ incorrect keyid */
+	STAT1 (rx_ccmpreplay);		/* rx seq# violation (CCMP) */
+	STAT1 (rx_ccmpformat);		/* rx format bad (CCMP) */
+	STAT1 (rx_ccmpmic);		/* rx MIC check failed (CCMP) */
+	STAT1 (rx_tkipreplay);		/* rx seq# violation (TKIP) */
+	STAT1 (rx_tkipformat);		/* rx format bad (TKIP) */
+	STAT1 (rx_tkipmic);		/* rx MIC check failed (TKIP) */
+	STAT1 (rx_tkipicv);		/* rx ICV check failed (TKIP) */
+	STAT1 (rx_badcipher);		/* rx failed due to of key type */
+	STAT1 (rx_nocipherctx);		/* rx failed due to key !setup */
+	STAT1 (rx_acl);			/* rx discard due to of acl policy */
+	STAT1 (rx_ffcnt);		/* rx fast frames */
+	STAT1 (rx_badathtnl);   	/* driver key alloc failed */
+	STAT1 (tx_nobuf);		/* tx failed for lack of buf */
+	STAT1 (tx_nonode);		/* tx failed for no node */
+	STAT1 (tx_unknownmgt);		/* tx of unknown mgt frame */
+	STAT1 (tx_badcipher);		/* tx failed due to of key type */
+	STAT1 (tx_nodefkey);		/* tx failed due to no defkey */
+	STAT1 (tx_noheadroom);		/* tx failed due to no space */
+	STAT1 (tx_ffokcnt);		/* tx fast frames sent success */
+	STAT1 (tx_fferrcnt);		/* tx fast frames sent success */
+	STAT1 (scan_active);		/* active scans started */
+	STAT1 (scan_passive);		/* passive scans started */
+	STAT1 (node_timeout);		/* nodes timed out inactivity */
+	STAT1 (crypto_nomem);		/* no memory for crypto ctx */
+	STAT1 (crypto_tkip);		/* tkip crypto done in s/w */
+	STAT1 (crypto_tkipenmic);	/* tkip en-MIC done in s/w */
+	STAT1 (crypto_tkipdemic);	/* tkip de-MIC done in s/w */
+	STAT1 (crypto_tkipcm);		/* tkip counter measures */
+	STAT1 (crypto_ccmp);		/* ccmp crypto done in s/w */
+	STAT1 (crypto_wep);		/* wep crypto done in s/w */
+	STAT1 (crypto_setkey_cipher);	/* cipher rejected key */
+	STAT1 (crypto_setkey_nokey);	/* no key index for setkey */
+	STAT1 (crypto_delkey);		/* driver key delete failed */
+	STAT1 (crypto_badcipher);	/* unknown cipher */
+	STAT1 (crypto_nocipher);	/* cipher not available */
+	STAT1 (crypto_attachfail);	/* cipher attach failed */
+	STAT1 (crypto_swfallback);	/* cipher fallback to s/w */
+	STAT1 (crypto_keyfail);		/* driver key alloc failed */
+	STAT1 (crypto_enmicfail);	/* en-MIC failed */
+	STAT1 (ibss_capmismatch);	/* merge failed-cap mismatch */
+	STAT1 (ibss_norate);		/* merge failed-rate mismatch */
+	STAT1 (ps_unassoc);		/* ps-poll for unassoc. sta */
+	STAT1 (ps_badaid);		/* ps-poll w/ incorrect aid */
+	STAT1 (ps_qempty);		/* ps-poll w/ nothing to send */
+#undef STAT1
+}
+
+
+static void
+process_station(int sk, const char *dev, struct ieee80211req_sta_info *si)
+{
+	struct iwreq iwr;
+	static char mac[DATA_MAX_NAME_LEN];
+	struct ieee80211req_sta_stats stats;
+	const struct ieee80211_nodestats *ns = &stats.is_stats;
+
+	macaddr_to_str (mac, sizeof (mac), si->isi_macaddr);
+
+	submit_gauge (dev, mac, "ath_sta_tx_rate", (si->isi_rates[si->isi_txrate] & IEEE80211_RATE_VAL) / 2);
+	submit_gauge (dev, mac, "ath_sta_rssi", si->isi_rssi);
+
+	memset (&iwr, 0, sizeof (iwr));
+	strncpy(iwr.ifr_name, dev, sizeof (iwr.ifr_name));
+	iwr.u.data.pointer = &stats;
+	iwr.u.data.length = sizeof (stats);
+	memcpy(stats.is_u.macaddr, si->isi_macaddr, IEEE80211_ADDR_LEN);
+	if (ioctl(sk, IEEE80211_IOCTL_STA_STATS, &iwr) < 0)
+		return;
+
+#define STAT1(item) if (ns->ns_##item) submit_counter (dev, mac, "ath_sta_" #item, ns->ns_##item)
+	STAT1 (rx_data);		/* rx data frames */
+	STAT1 (rx_mgmt);		/* rx management frames */
+	STAT1 (rx_ctrl);		/* rx control frames */
+	STAT1 (rx_ucast);		/* rx unicast frames */
+	STAT1 (rx_mcast);		/* rx multi/broadcast frames */
+	STAT1 (rx_bytes);		/* rx data count (bytes) */
+	STAT1 (rx_beacons);		/* rx beacon frames */
+	STAT1 (rx_proberesp);		/* rx probe response frames */
+
+	STAT1 (rx_dup);			/* rx discard because it's a dup */
+	STAT1 (rx_noprivacy);		/* rx w/ wep but privacy off */
+	STAT1 (rx_wepfail);		/* rx wep processing failed */
+	STAT1 (rx_demicfail);		/* rx demic failed */
+	STAT1 (rx_decap);		/* rx decapsulation failed */
+	STAT1 (rx_defrag);		/* rx defragmentation failed */
+	STAT1 (rx_disassoc);		/* rx disassociation */
+	STAT1 (rx_deauth);		/* rx deauthentication */
+	STAT1 (rx_decryptcrc);		/* rx decrypt failed on crc */
+	STAT1 (rx_unauth);		/* rx on unauthorized port */
+	STAT1 (rx_unencrypted);		/* rx unecrypted w/ privacy */
+
+	STAT1 (tx_data);		/* tx data frames */
+	STAT1 (tx_mgmt);		/* tx management frames */
+	STAT1 (tx_ucast);		/* tx unicast frames */
+	STAT1 (tx_mcast);		/* tx multi/broadcast frames */
+	STAT1 (tx_bytes);		/* tx data count (bytes) */
+	STAT1 (tx_probereq);		/* tx probe request frames */
+	STAT1 (tx_uapsd);		/* tx on uapsd queue */
+
+	STAT1 (tx_novlantag);		/* tx discard due to no tag */
+	STAT1 (tx_vlanmismatch);	/* tx discard due to of bad tag */
+
+	STAT1 (tx_eosplost);		/* uapsd EOSP retried out */
+	STAT1 (ps_discard);		/* ps discard due to of age */
+	STAT1 (uapsd_triggers);		/* uapsd triggers */
+
+	/* MIB-related state */
+	STAT1 (tx_assoc);		/* [re]associations */
+	STAT1 (tx_assoc_fail);		/* [re]association failures */
+	STAT1 (tx_auth);		/* [re]authentications */
+	STAT1 (tx_auth_fail);		/* [re]authentication failures*/
+	STAT1 (tx_deauth);		/* deauthentications */
+	STAT1 (tx_disassoc);		/* disassociations */
+	STAT1 (psq_drops);		/* power save queue drops */
+#undef STAT1
+}
+
+static void
+process_stations(int sk, const char *dev)
+{
+	uint8_t buf[24*1024];
+	struct iwreq iwr;
+	uint8_t *cp;
+	int len;
+
+	memset (&iwr, 0, sizeof (iwr));
+	strncpy (iwr.ifr_name, dev, sizeof (iwr.ifr_name));
+	iwr.u.data.pointer = (void *) buf;
+	iwr.u.data.length = sizeof (buf);
+	if (ioctl (sk, IEEE80211_IOCTL_STA_INFO, &iwr) < 0)
+		return;
+
+	len = iwr.u.data.length;
+
+	cp = buf;
+	while (len >= sizeof (struct ieee80211req_sta_info))
+	{
+		struct ieee80211req_sta_info *si = (void *) cp;
+		process_station(sk, dev, si);
+		cp += si->isi_len;
+		len -= si->isi_len;
+	}
+}
+
+
+static int
+check_devname(const char *dev)
+{
+	char buf[256];
+	char buf2[256];
+	int i;
+
+	if (dev[0] == '.')
+		return 0;
+	
+	ssnprintf (buf, sizeof (buf), "/sys/class/net/%s/device/driver", dev);
+	buf[sizeof (buf) - 1] = 0;
+
+	i = readlink (buf, buf2, sizeof (buf2) - 1);
+	if (i < 0)
+		return 0;
+	buf2[i] = 0;
+
+	return (strstr (buf2, "/drivers/ath_") != NULL);
+}
+
+
+static int madwifi_read (void)
+{
+	struct dirent *de;
+
+	int sk = socket(AF_INET, SOCK_DGRAM, 0);
+	if (sk < 0)
+		return (-1);
+
+	DIR *nets = opendir ("/sys/class/net/");
+	if (nets == NULL)
+		return (-1);
+
+	while ((de = readdir (nets)))
+		if (check_devname (de->d_name) &&
+		    (ignorelist_match (ignorelist, de->d_name) == 0)) {
+			process_athstats (sk, de->d_name);
+			process_80211stats (sk, de->d_name);
+			process_stations (sk, de->d_name);
+		}
+	closedir(nets);
+
+	close(sk);
+
+	return (0);
+}
+
+void module_register (void)
+{
+	plugin_register_config ("madwifi", madwifi_config,
+			config_keys, config_keys_num);
+
+	plugin_register_read ("madwifi", madwifi_read);
+}
diff -uprN collectd-4.6.3/src/madwifi.h collectd-4.6.3-mod/src/madwifi.h
--- collectd-4.6.3/src/madwifi.h	1970-01-01 01:00:00.000000000 +0100
+++ collectd-4.6.3-mod/src/madwifi.h	2009-07-17 21:57:50.000000000 +0200
@@ -0,0 +1,307 @@
+/**
+ * This file is compiled from several Madwifi header files.
+ * Original copyright is:
+ *
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef MADWIFI_H
+#define MADWIFI_H
+
+#define	IEEE80211_ADDR_LEN		6		/* size of 802.11 address */
+#define	IEEE80211_RATE_VAL		0x7f
+#define	IEEE80211_RATE_SIZE		8		/* 802.11 standard */
+#define	IEEE80211_RATE_MAXSIZE		15		/* max rates we'll handle */
+
+
+/*
+ * Per/node (station) statistics available when operating as an AP.
+ */
+struct ieee80211_nodestats {
+	u_int32_t ns_rx_data;		/* rx data frames */
+	u_int32_t ns_rx_mgmt;		/* rx management frames */
+	u_int32_t ns_rx_ctrl;		/* rx control frames */
+	u_int32_t ns_rx_ucast;		/* rx unicast frames */
+	u_int32_t ns_rx_mcast;		/* rx multi/broadcast frames */
+	u_int64_t ns_rx_bytes;		/* rx data count (bytes) */
+	u_int64_t ns_rx_beacons;	/* rx beacon frames */
+	u_int32_t ns_rx_proberesp;	/* rx probe response frames */
+
+	u_int32_t ns_rx_dup;		/* rx discard because it's a dup */
+	u_int32_t ns_rx_noprivacy;	/* rx w/ wep but privacy off */
+	u_int32_t ns_rx_wepfail;	/* rx wep processing failed */
+	u_int32_t ns_rx_demicfail;	/* rx demic failed */
+	u_int32_t ns_rx_decap;		/* rx decapsulation failed */
+	u_int32_t ns_rx_defrag;		/* rx defragmentation failed */
+	u_int32_t ns_rx_disassoc;	/* rx disassociation */
+	u_int32_t ns_rx_deauth;		/* rx deauthentication */
+	u_int32_t ns_rx_decryptcrc;	/* rx decrypt failed on crc */
+	u_int32_t ns_rx_unauth;		/* rx on unauthorized port */
+	u_int32_t ns_rx_unencrypted;	/* rx unecrypted w/ privacy */
+
+	u_int32_t ns_tx_data;		/* tx data frames */
+	u_int32_t ns_tx_mgmt;		/* tx management frames */
+	u_int32_t ns_tx_ucast;		/* tx unicast frames */
+	u_int32_t ns_tx_mcast;		/* tx multi/broadcast frames */
+	u_int64_t ns_tx_bytes;		/* tx data count (bytes) */
+	u_int32_t ns_tx_probereq;	/* tx probe request frames */
+	u_int32_t ns_tx_uapsd;		/* tx on uapsd queue */
+
+	u_int32_t ns_tx_novlantag;	/* tx discard due to no tag */
+	u_int32_t ns_tx_vlanmismatch;	/* tx discard due to of bad tag */
+
+	u_int32_t ns_tx_eosplost;	/* uapsd EOSP retried out */
+
+	u_int32_t ns_ps_discard;	/* ps discard due to of age */
+
+	u_int32_t ns_uapsd_triggers;	/* uapsd triggers */
+
+	/* MIB-related state */
+	u_int32_t ns_tx_assoc;		/* [re]associations */
+	u_int32_t ns_tx_assoc_fail;	/* [re]association failures */
+	u_int32_t ns_tx_auth;		/* [re]authentications */
+	u_int32_t ns_tx_auth_fail;	/* [re]authentication failures*/
+	u_int32_t ns_tx_deauth;		/* deauthentications */
+	u_int32_t ns_tx_deauth_code;	/* last deauth reason */
+	u_int32_t ns_tx_disassoc;	/* disassociations */
+	u_int32_t ns_tx_disassoc_code;	/* last disassociation reason */
+	u_int32_t ns_psq_drops;		/* power save queue drops */
+};
+
+/*
+ * Summary statistics.
+ */
+struct ieee80211_stats {
+	u_int32_t is_rx_badversion;	/* rx frame with bad version */
+	u_int32_t is_rx_tooshort;	/* rx frame too short */
+	u_int32_t is_rx_wrongbss;	/* rx from wrong bssid */
+	u_int32_t is_rx_dup;		/* rx discard due to it's a dup */
+	u_int32_t is_rx_wrongdir;	/* rx w/ wrong direction */
+	u_int32_t is_rx_mcastecho;	/* rx discard due to of mcast echo */
+	u_int32_t is_rx_notassoc;	/* rx discard due to sta !assoc */
+	u_int32_t is_rx_noprivacy;	/* rx w/ wep but privacy off */
+	u_int32_t is_rx_unencrypted;	/* rx w/o wep and privacy on */
+	u_int32_t is_rx_wepfail;	/* rx wep processing failed */
+	u_int32_t is_rx_decap;		/* rx decapsulation failed */
+	u_int32_t is_rx_mgtdiscard;	/* rx discard mgt frames */
+	u_int32_t is_rx_ctl;		/* rx discard ctrl frames */
+	u_int32_t is_rx_beacon;		/* rx beacon frames */
+	u_int32_t is_rx_rstoobig;	/* rx rate set truncated */
+	u_int32_t is_rx_elem_missing;	/* rx required element missing*/
+	u_int32_t is_rx_elem_toobig;	/* rx element too big */
+	u_int32_t is_rx_elem_toosmall;	/* rx element too small */
+	u_int32_t is_rx_elem_unknown;	/* rx element unknown */
+	u_int32_t is_rx_badchan;	/* rx frame w/ invalid chan */
+	u_int32_t is_rx_chanmismatch;	/* rx frame chan mismatch */
+	u_int32_t is_rx_nodealloc;	/* rx frame dropped */
+	u_int32_t is_rx_ssidmismatch;	/* rx frame ssid mismatch  */
+	u_int32_t is_rx_auth_unsupported;/* rx w/ unsupported auth alg */
+	u_int32_t is_rx_auth_fail;	/* rx sta auth failure */
+	u_int32_t is_rx_auth_countermeasures;/* rx auth discard due to CM */
+	u_int32_t is_rx_assoc_bss;	/* rx assoc from wrong bssid */
+	u_int32_t is_rx_assoc_notauth;	/* rx assoc w/o auth */
+	u_int32_t is_rx_assoc_capmismatch;/* rx assoc w/ cap mismatch */
+	u_int32_t is_rx_assoc_norate;	/* rx assoc w/ no rate match */
+	u_int32_t is_rx_assoc_badwpaie;	/* rx assoc w/ bad WPA IE */
+	u_int32_t is_rx_deauth;		/* rx deauthentication */
+	u_int32_t is_rx_disassoc;	/* rx disassociation */
+	u_int32_t is_rx_badsubtype;	/* rx frame w/ unknown subtype*/
+	u_int32_t is_rx_nobuf;		/* rx failed for lack of buf */
+	u_int32_t is_rx_decryptcrc;	/* rx decrypt failed on crc */
+	u_int32_t is_rx_ahdemo_mgt;	/* rx discard ahdemo mgt frame*/
+	u_int32_t is_rx_bad_auth;	/* rx bad auth request */
+	u_int32_t is_rx_unauth;		/* rx on unauthorized port */
+	u_int32_t is_rx_badkeyid;	/* rx w/ incorrect keyid */
+	u_int32_t is_rx_ccmpreplay;	/* rx seq# violation (CCMP) */
+	u_int32_t is_rx_ccmpformat;	/* rx format bad (CCMP) */
+	u_int32_t is_rx_ccmpmic;	/* rx MIC check failed (CCMP) */
+	u_int32_t is_rx_tkipreplay;	/* rx seq# violation (TKIP) */
+	u_int32_t is_rx_tkipformat;	/* rx format bad (TKIP) */
+	u_int32_t is_rx_tkipmic;	/* rx MIC check failed (TKIP) */
+	u_int32_t is_rx_tkipicv;	/* rx ICV check failed (TKIP) */
+	u_int32_t is_rx_badcipher;	/* rx failed due to of key type */
+	u_int32_t is_rx_nocipherctx;	/* rx failed due to key !setup */
+	u_int32_t is_rx_acl;		/* rx discard due to of acl policy */
+	u_int32_t is_rx_ffcnt;		/* rx fast frames */
+	u_int32_t is_rx_badathtnl;	/* driver key alloc failed */
+	u_int32_t is_tx_nobuf;		/* tx failed for lack of buf */
+	u_int32_t is_tx_nonode;		/* tx failed for no node */
+	u_int32_t is_tx_unknownmgt;	/* tx of unknown mgt frame */
+	u_int32_t is_tx_badcipher;	/* tx failed due to of key type */
+	u_int32_t is_tx_nodefkey;	/* tx failed due to no defkey */
+	u_int32_t is_tx_noheadroom;	/* tx failed due to no space */
+	u_int32_t is_tx_ffokcnt;	/* tx fast frames sent success */
+	u_int32_t is_tx_fferrcnt;	/* tx fast frames sent success */
+	u_int32_t is_scan_active;	/* active scans started */
+	u_int32_t is_scan_passive;	/* passive scans started */
+	u_int32_t is_node_timeout;	/* nodes timed out inactivity */
+	u_int32_t is_crypto_nomem;	/* no memory for crypto ctx */
+	u_int32_t is_crypto_tkip;	/* tkip crypto done in s/w */
+	u_int32_t is_crypto_tkipenmic;	/* tkip en-MIC done in s/w */
+	u_int32_t is_crypto_tkipdemic;	/* tkip de-MIC done in s/w */
+	u_int32_t is_crypto_tkipcm;	/* tkip counter measures */
+	u_int32_t is_crypto_ccmp;	/* ccmp crypto done in s/w */
+	u_int32_t is_crypto_wep;	/* wep crypto done in s/w */
+	u_int32_t is_crypto_setkey_cipher;/* cipher rejected key */
+	u_int32_t is_crypto_setkey_nokey;/* no key index for setkey */
+	u_int32_t is_crypto_delkey;	/* driver key delete failed */
+	u_int32_t is_crypto_badcipher;	/* unknown cipher */
+	u_int32_t is_crypto_nocipher;	/* cipher not available */
+	u_int32_t is_crypto_attachfail;	/* cipher attach failed */
+	u_int32_t is_crypto_swfallback;	/* cipher fallback to s/w */
+	u_int32_t is_crypto_keyfail;	/* driver key alloc failed */
+	u_int32_t is_crypto_enmicfail;	/* en-MIC failed */
+	u_int32_t is_ibss_capmismatch;	/* merge failed-cap mismatch */
+	u_int32_t is_ibss_norate;	/* merge failed-rate mismatch */
+	u_int32_t is_ps_unassoc;	/* ps-poll for unassoc. sta */
+	u_int32_t is_ps_badaid;		/* ps-poll w/ incorrect aid */
+	u_int32_t is_ps_qempty;		/* ps-poll w/ nothing to send */
+};
+
+/*
+ * Retrieve per-node statistics.
+ */
+struct ieee80211req_sta_stats {
+	union {
+		/* NB: explicitly force 64-bit alignment */
+		u_int8_t macaddr[IEEE80211_ADDR_LEN];
+		u_int64_t pad;
+	} is_u;
+	struct ieee80211_nodestats is_stats;
+};
+
+/*
+ * Station information block; the mac address is used
+ * to retrieve other data like stats, unicast key, etc.
+ */
+struct ieee80211req_sta_info {
+	u_int16_t isi_len;		/* length (mult of 4) */
+	u_int16_t isi_freq;		/* MHz */
+	u_int16_t isi_flags;		/* channel flags */
+	u_int16_t isi_state;		/* state flags */
+	u_int8_t isi_authmode;		/* authentication algorithm */
+	u_int8_t isi_rssi;
+	u_int16_t isi_capinfo;		/* capabilities */
+	u_int8_t isi_athflags;		/* Atheros capabilities */
+	u_int8_t isi_erp;		/* ERP element */
+	u_int8_t isi_macaddr[IEEE80211_ADDR_LEN];
+	u_int8_t isi_nrates;		/* negotiated rates */
+	u_int8_t isi_rates[IEEE80211_RATE_MAXSIZE];
+	u_int8_t isi_txrate;		/* index to isi_rates[] */
+	u_int16_t isi_ie_len;		/* IE length */
+	u_int16_t isi_associd;		/* assoc response */
+	u_int16_t isi_txpower;		/* current tx power */
+	u_int16_t isi_vlan;		/* vlan tag */
+	u_int16_t isi_txseqs[17];	/* seq to be transmitted */
+	u_int16_t isi_rxseqs[17];	/* seq previous for qos frames*/
+	u_int16_t isi_inact;		/* inactivity timer */
+	u_int8_t isi_uapsd;		/* UAPSD queues */
+	u_int8_t isi_opmode;		/* sta operating mode */
+
+	/* XXX frag state? */
+	/* variable length IE data */
+};
+
+
+struct ath_stats {
+	u_int32_t ast_watchdog;		/* device reset by watchdog */
+	u_int32_t ast_hardware;		/* fatal hardware error interrupts */
+	u_int32_t ast_bmiss;		/* beacon miss interrupts */
+	u_int32_t ast_rxorn;		/* rx overrun interrupts */
+	u_int32_t ast_rxeol;		/* rx eol interrupts */
+	u_int32_t ast_txurn;		/* tx underrun interrupts */
+	u_int32_t ast_mib;		/* mib interrupts */
+	u_int32_t ast_tx_packets;	/* packet sent on the interface */
+	u_int32_t ast_tx_mgmt;		/* management frames transmitted */
+	u_int32_t ast_tx_discard;	/* frames discarded prior to assoc */
+	u_int32_t ast_tx_invalid;	/* frames discarded due to is device gone */
+	u_int32_t ast_tx_qstop;		/* tx queue stopped because it's full */
+	u_int32_t ast_tx_encap;		/* tx encapsulation failed */
+	u_int32_t ast_tx_nonode;	/* tx failed due to of no node */
+	u_int32_t ast_tx_nobuf;		/* tx failed due to of no tx buffer (data) */
+	u_int32_t ast_tx_nobufmgt;	/* tx failed due to of no tx buffer (mgmt)*/
+	u_int32_t ast_tx_xretries;	/* tx failed due to of too many retries */
+	u_int32_t ast_tx_fifoerr;	/* tx failed due to of FIFO underrun */
+	u_int32_t ast_tx_filtered;	/* tx failed due to xmit filtered */
+	u_int32_t ast_tx_shortretry;	/* tx on-chip retries (short) */
+	u_int32_t ast_tx_longretry;	/* tx on-chip retries (long) */
+	u_int32_t ast_tx_badrate;	/* tx failed due to of bogus xmit rate */
+	u_int32_t ast_tx_noack;		/* tx frames with no ack marked */
+	u_int32_t ast_tx_rts;		/* tx frames with rts enabled */
+	u_int32_t ast_tx_cts;		/* tx frames with cts enabled */
+	u_int32_t ast_tx_shortpre;	/* tx frames with short preamble */
+	u_int32_t ast_tx_altrate;	/* tx frames with alternate rate */
+	u_int32_t ast_tx_protect;	/* tx frames with protection */
+	u_int32_t ast_rx_orn;		/* rx failed due to of desc overrun */
+	u_int32_t ast_rx_crcerr;	/* rx failed due to of bad CRC */
+	u_int32_t ast_rx_fifoerr;	/* rx failed due to of FIFO overrun */
+	u_int32_t ast_rx_badcrypt;	/* rx failed due to of decryption */
+	u_int32_t ast_rx_badmic;	/* rx failed due to of MIC failure */
+	u_int32_t ast_rx_phyerr;	/* rx PHY error summary count */
+	u_int32_t ast_rx_phy[32];	/* rx PHY error per-code counts */
+	u_int32_t ast_rx_tooshort;	/* rx discarded due to frame too short */
+	u_int32_t ast_rx_toobig;	/* rx discarded due to frame too large */
+	u_int32_t ast_rx_nobuf;		/* rx setup failed due to of no skbuff */
+	u_int32_t ast_rx_packets;	/* packet recv on the interface */
+	u_int32_t ast_rx_mgt;		/* management frames received */
+	u_int32_t ast_rx_ctl;		/* control frames received */
+	int8_t ast_tx_rssi;		/* tx rssi of last ack */
+	int8_t ast_rx_rssi;		/* rx rssi from histogram */
+	u_int32_t ast_be_xmit;		/* beacons transmitted */
+	u_int32_t ast_be_nobuf;		/* no skbuff available for beacon */
+	u_int32_t ast_per_cal;		/* periodic calibration calls */
+	u_int32_t ast_per_calfail;	/* periodic calibration failed */
+	u_int32_t ast_per_rfgain;	/* periodic calibration rfgain reset */
+	u_int32_t ast_rate_calls;	/* rate control checks */
+	u_int32_t ast_rate_raise;	/* rate control raised xmit rate */
+	u_int32_t ast_rate_drop;	/* rate control dropped xmit rate */
+	u_int32_t ast_ant_defswitch;	/* rx/default antenna switches */
+	u_int32_t ast_ant_txswitch;	/* tx antenna switches */
+	u_int32_t ast_ant_rx[8];	/* rx frames with antenna */
+	u_int32_t ast_ant_tx[8];	/* tx frames with antenna */
+};
+
+#define	SIOCGATHSTATS			(SIOCDEVPRIVATE+0)
+#define	SIOCGATHDIAG			(SIOCDEVPRIVATE+1)
+#define SIOCGATHRADARSIG		(SIOCDEVPRIVATE+2)
+#define	SIOCGATHHALDIAG			(SIOCDEVPRIVATE+3)
+#define	SIOCG80211STATS			(SIOCDEVPRIVATE+2)
+/* NB: require in+out parameters so cannot use wireless extensions, yech */
+#define	IEEE80211_IOCTL_GETKEY		(SIOCDEVPRIVATE+3)
+#define	IEEE80211_IOCTL_GETWPAIE	(SIOCDEVPRIVATE+4)
+#define	IEEE80211_IOCTL_STA_STATS	(SIOCDEVPRIVATE+5)
+#define	IEEE80211_IOCTL_STA_INFO	(SIOCDEVPRIVATE+6)
+#define	SIOC80211IFCREATE		(SIOCDEVPRIVATE+7)
+#define	SIOC80211IFDESTROY	 	(SIOCDEVPRIVATE+8)
+#define	IEEE80211_IOCTL_SCAN_RESULTS	(SIOCDEVPRIVATE+9)
+
+
+#endif
diff -uprN collectd-4.6.3/src/types.db collectd-4.6.3-mod/src/types.db
--- collectd-4.6.3/src/types.db	2009-06-02 11:17:47.000000000 +0200
+++ collectd-4.6.3-mod/src/types.db	2009-07-17 21:57:50.000000000 +0200
@@ -119,3 +119,179 @@ voltage			value:GAUGE:U:U
 vs_memory		value:GAUGE:0:9223372036854775807
 vs_processes		value:GAUGE:0:65535
 vs_threads		value:GAUGE:0:65535
+ath_dev_rx_badversion		value:COUNTER:0:4294967295
+ath_dev_rx_tooshort		value:COUNTER:0:4294967295
+ath_dev_rx_wrongbss		value:COUNTER:0:4294967295
+ath_dev_rx_dup			value:COUNTER:0:4294967295
+ath_dev_rx_wrongdir		value:COUNTER:0:4294967295
+ath_dev_rx_mcastecho		value:COUNTER:0:4294967295
+ath_dev_rx_notassoc		value:COUNTER:0:4294967295
+ath_dev_rx_noprivacy		value:COUNTER:0:4294967295
+ath_dev_rx_unencrypted		value:COUNTER:0:4294967295
+ath_dev_rx_wepfail		value:COUNTER:0:4294967295
+ath_dev_rx_decap		value:COUNTER:0:4294967295
+ath_dev_rx_mgtdiscard		value:COUNTER:0:4294967295
+ath_dev_rx_ctl			value:COUNTER:0:4294967295
+ath_dev_rx_beacon		value:COUNTER:0:4294967295
+ath_dev_rx_rstoobig		value:COUNTER:0:4294967295
+ath_dev_rx_elem_missing		value:COUNTER:0:4294967295
+ath_dev_rx_elem_toobig		value:COUNTER:0:4294967295
+ath_dev_rx_elem_toosmall	value:COUNTER:0:4294967295
+ath_dev_rx_elem_unknown		value:COUNTER:0:4294967295
+ath_dev_rx_badchan		value:COUNTER:0:4294967295
+ath_dev_rx_chanmismatch		value:COUNTER:0:4294967295
+ath_dev_rx_nodealloc		value:COUNTER:0:4294967295
+ath_dev_rx_ssidmismatch		value:COUNTER:0:4294967295
+ath_dev_rx_auth_unsupported	value:COUNTER:0:4294967295
+ath_dev_rx_auth_fail		value:COUNTER:0:4294967295
+ath_dev_rx_assoc_bss		value:COUNTER:0:4294967295
+ath_dev_rx_assoc_notauth	value:COUNTER:0:4294967295
+ath_dev_rx_assoc_capmismatch	value:COUNTER:0:4294967295
+ath_dev_rx_assoc_norate		value:COUNTER:0:4294967295
+ath_dev_rx_assoc_badwpaie	value:COUNTER:0:4294967295
+ath_dev_rx_deauth		value:COUNTER:0:4294967295
+ath_dev_rx_disassoc		value:COUNTER:0:4294967295
+ath_dev_rx_badsubtype		value:COUNTER:0:4294967295
+ath_dev_rx_nobuf		value:COUNTER:0:4294967295
+ath_dev_rx_decryptcrc		value:COUNTER:0:4294967295
+ath_dev_rx_ahdemo_mgt		value:COUNTER:0:4294967295
+ath_dev_rx_bad_auth		value:COUNTER:0:4294967295
+ath_dev_rx_unauth		value:COUNTER:0:4294967295
+ath_dev_rx_badkeyid		value:COUNTER:0:4294967295
+ath_dev_rx_ccmpreplay		value:COUNTER:0:4294967295
+ath_dev_rx_ccmpformat		value:COUNTER:0:4294967295
+ath_dev_rx_ccmpmic		value:COUNTER:0:4294967295
+ath_dev_rx_tkipreplay		value:COUNTER:0:4294967295
+ath_dev_rx_tkipformat		value:COUNTER:0:4294967295
+ath_dev_rx_tkipmic		value:COUNTER:0:4294967295
+ath_dev_rx_tkipicv		value:COUNTER:0:4294967295
+ath_dev_rx_badcipher		value:COUNTER:0:4294967295
+ath_dev_rx_nocipherctx		value:COUNTER:0:4294967295
+ath_dev_rx_acl			value:COUNTER:0:4294967295
+ath_dev_rx_ffcnt		value:COUNTER:0:4294967295
+ath_dev_rx_badathtnl		value:COUNTER:0:4294967295
+ath_dev_rx_auth_countermeasures	value:COUNTER:0:4294967295
+ath_dev_tx_nobuf		value:COUNTER:0:4294967295
+ath_dev_tx_nonode		value:COUNTER:0:4294967295
+ath_dev_tx_unknownmgt		value:COUNTER:0:4294967295
+ath_dev_tx_badcipher		value:COUNTER:0:4294967295
+ath_dev_tx_nodefkey		value:COUNTER:0:4294967295
+ath_dev_tx_noheadroom		value:COUNTER:0:4294967295
+ath_dev_tx_ffokcnt		value:COUNTER:0:4294967295
+ath_dev_tx_fferrcnt		value:COUNTER:0:4294967295
+ath_dev_scan_active		value:COUNTER:0:4294967295
+ath_dev_scan_passive		value:COUNTER:0:4294967295
+ath_dev_node_timeout		value:COUNTER:0:4294967295
+ath_dev_crypto_nomem		value:COUNTER:0:4294967295
+ath_dev_crypto_tkip		value:COUNTER:0:4294967295
+ath_dev_crypto_tkipenmic	value:COUNTER:0:4294967295
+ath_dev_crypto_tkipdemic	value:COUNTER:0:4294967295
+ath_dev_crypto_tkipcm		value:COUNTER:0:4294967295
+ath_dev_crypto_ccmp		value:COUNTER:0:4294967295
+ath_dev_crypto_wep		value:COUNTER:0:4294967295
+ath_dev_crypto_setkey_cipher	value:COUNTER:0:4294967295
+ath_dev_crypto_setkey_nokey	value:COUNTER:0:4294967295
+ath_dev_crypto_delkey		value:COUNTER:0:4294967295
+ath_dev_crypto_badcipher	value:COUNTER:0:4294967295
+ath_dev_crypto_nocipher		value:COUNTER:0:4294967295
+ath_dev_crypto_attachfail	value:COUNTER:0:4294967295
+ath_dev_crypto_swfallback	value:COUNTER:0:4294967295
+ath_dev_crypto_keyfail		value:COUNTER:0:4294967295
+ath_dev_crypto_enmicfail	value:COUNTER:0:4294967295
+ath_dev_ibss_capmismatch	value:COUNTER:0:4294967295
+ath_dev_ibss_norate		value:COUNTER:0:4294967295
+ath_dev_ps_unassoc		value:COUNTER:0:4294967295
+ath_dev_ps_badaid		value:COUNTER:0:4294967295
+ath_dev_ps_qempty		value:COUNTER:0:4294967295
+ath_hw_watchdog			value:COUNTER:0:4294967295
+ath_hw_hardware			value:COUNTER:0:4294967295
+ath_hw_bmiss			value:COUNTER:0:4294967295
+ath_hw_rxorn			value:COUNTER:0:4294967295
+ath_hw_rxeol			value:COUNTER:0:4294967295
+ath_hw_txurn			value:COUNTER:0:4294967295
+ath_hw_mib			value:COUNTER:0:4294967295
+ath_hw_tx_packets		value:COUNTER:0:4294967295
+ath_hw_tx_mgmt			value:COUNTER:0:4294967295
+ath_hw_tx_discard		value:COUNTER:0:4294967295
+ath_hw_tx_invalid		value:COUNTER:0:4294967295
+ath_hw_tx_qstop			value:COUNTER:0:4294967295
+ath_hw_tx_encap			value:COUNTER:0:4294967295
+ath_hw_tx_nonode		value:COUNTER:0:4294967295
+ath_hw_tx_nobuf			value:COUNTER:0:4294967295
+ath_hw_tx_nobufmgt		value:COUNTER:0:4294967295
+ath_hw_tx_xretries		value:COUNTER:0:4294967295
+ath_hw_tx_fifoerr		value:COUNTER:0:4294967295
+ath_hw_tx_filtered		value:COUNTER:0:4294967295
+ath_hw_tx_shortretry		value:COUNTER:0:4294967295
+ath_hw_tx_longretry		value:COUNTER:0:4294967295
+ath_hw_tx_badrate		value:COUNTER:0:4294967295
+ath_hw_tx_noack			value:COUNTER:0:4294967295
+ath_hw_tx_rts			value:COUNTER:0:4294967295
+ath_hw_tx_cts			value:COUNTER:0:4294967295
+ath_hw_tx_shortpre		value:COUNTER:0:4294967295
+ath_hw_tx_altrate		value:COUNTER:0:4294967295
+ath_hw_tx_protect		value:COUNTER:0:4294967295
+ath_hw_rx_orn			value:COUNTER:0:4294967295
+ath_hw_rx_crcerr		value:COUNTER:0:4294967295
+ath_hw_rx_fifoerr		value:COUNTER:0:4294967295
+ath_hw_rx_badcrypt		value:COUNTER:0:4294967295
+ath_hw_rx_badmic		value:COUNTER:0:4294967295
+ath_hw_rx_phyerr		value:COUNTER:0:4294967295
+ath_hw_rx_tooshort		value:COUNTER:0:4294967295
+ath_hw_rx_toobig		value:COUNTER:0:4294967295
+ath_hw_rx_nobuf			value:COUNTER:0:4294967295
+ath_hw_rx_packets		value:COUNTER:0:4294967295
+ath_hw_rx_mgt			value:COUNTER:0:4294967295
+ath_hw_rx_ctl			value:COUNTER:0:4294967295
+ath_hw_be_xmit			value:COUNTER:0:4294967295
+ath_hw_be_nobuf			value:COUNTER:0:4294967295
+ath_hw_per_cal			value:COUNTER:0:4294967295
+ath_hw_per_calfail		value:COUNTER:0:4294967295
+ath_hw_per_rfgain		value:COUNTER:0:4294967295
+ath_hw_rate_calls		value:COUNTER:0:4294967295
+ath_hw_rate_raise		value:COUNTER:0:4294967295
+ath_hw_rate_drop		value:COUNTER:0:4294967295
+ath_hw_ant_defswitch		value:COUNTER:0:4294967295
+ath_hw_ant_txswitch		value:COUNTER:0:4294967295
+ath_hw_ant_rx			0:COUNTER:0:4294967295, 1:COUNTER:0:4294967295, 2:COUNTER:0:4294967295, 3:COUNTER:0:4294967295, 4:COUNTER:0:4294967295, 5:COUNTER:0:4294967295, 6:COUNTER:0:4294967295, 7:COUNTER:0:4294967295
+ath_hw_ant_tx			0:COUNTER:0:4294967295, 1:COUNTER:0:4294967295, 2:COUNTER:0:4294967295, 3:COUNTER:0:4294967295, 4:COUNTER:0:4294967295, 5:COUNTER:0:4294967295, 6:COUNTER:0:4294967295, 7:COUNTER:0:4294967295
+ath_sta_tx_rate			value:GAUGE:0:127
+ath_sta_rssi			value:GAUGE:0:255
+ath_sta_rx_data			value:COUNTER:0:4294967295
+ath_sta_rx_mgmt			value:COUNTER:0:4294967295
+ath_sta_rx_ctrl			value:COUNTER:0:4294967295
+ath_sta_rx_ucast		value:COUNTER:0:4294967295
+ath_sta_rx_mcast		value:COUNTER:0:4294967295
+ath_sta_rx_bytes		value:COUNTER:0:U
+ath_sta_rx_beacons		value:COUNTER:0:U
+ath_sta_rx_proberesp		value:COUNTER:0:4294967295
+ath_sta_rx_dup			value:COUNTER:0:4294967295
+ath_sta_rx_noprivacy		value:COUNTER:0:4294967295
+ath_sta_rx_wepfail		value:COUNTER:0:4294967295
+ath_sta_rx_demicfail		value:COUNTER:0:4294967295
+ath_sta_rx_decap		value:COUNTER:0:4294967295
+ath_sta_rx_defrag		value:COUNTER:0:4294967295
+ath_sta_rx_disassoc		value:COUNTER:0:4294967295
+ath_sta_rx_deauth		value:COUNTER:0:4294967295
+ath_sta_rx_decryptcrc		value:COUNTER:0:4294967295
+ath_sta_rx_unauth		value:COUNTER:0:4294967295
+ath_sta_rx_unencrypted		value:COUNTER:0:4294967295
+ath_sta_tx_data			value:COUNTER:0:4294967295
+ath_sta_tx_mgmt			value:COUNTER:0:4294967295
+ath_sta_tx_ucast		value:COUNTER:0:4294967295
+ath_sta_tx_mcast		value:COUNTER:0:4294967295
+ath_sta_tx_bytes		value:COUNTER:0:U
+ath_sta_tx_probereq		value:COUNTER:0:4294967295
+ath_sta_tx_uapsd		value:COUNTER:0:4294967295
+ath_sta_tx_novlantag		value:COUNTER:0:4294967295
+ath_sta_tx_vlanmismatch		value:COUNTER:0:4294967295
+ath_sta_tx_eosplost		value:COUNTER:0:4294967295
+ath_sta_ps_discard		value:COUNTER:0:4294967295
+ath_sta_uapsd_triggers		value:COUNTER:0:4294967295
+ath_sta_tx_assoc		value:COUNTER:0:4294967295
+ath_sta_tx_assoc_fail		value:COUNTER:0:4294967295
+ath_sta_tx_auth			value:COUNTER:0:4294967295
+ath_sta_tx_auth_fail		value:COUNTER:0:4294967295
+ath_sta_tx_deauth		value:COUNTER:0:4294967295
+ath_sta_tx_disassoc		value:COUNTER:0:4294967295
+ath_sta_psq_drops		value:COUNTER:0:4294967295


-- 
Elen sila lumenn' omentielvo

Ondrej 'SanTiago' Zajicek (email: santiago at crfreenet.org)
OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net)
"To err is human -- to blame it on a computer is even more so."
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
Url : http://mailman.verplant.org/pipermail/collectd/attachments/20090717/1291f7d9/attachment-0001.pgp 


More information about the collectd mailing list