summaryrefslogtreecommitdiff
path: root/package/madwifi
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-03-29 02:12:39 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-03-29 02:12:39 +0000
commitf1edfd3cf5b72d18e52b4743cd6d278e8ea21fdd (patch)
tree1d4e6d4de42f373657a97544a5f4b935fac8918d /package/madwifi
parent31e6b1aa7d6cefc6c2be849e27b08d6744edc7bf (diff)
madwifi: add wprobe rxframe/probereq counters
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@15063 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/madwifi')
-rw-r--r--package/madwifi/patches/416-wprobe.patch72
1 files changed, 60 insertions, 12 deletions
diff --git a/package/madwifi/patches/416-wprobe.patch b/package/madwifi/patches/416-wprobe.patch
index 5e181e5bca..4530737829 100644
--- a/package/madwifi/patches/416-wprobe.patch
+++ b/package/madwifi/patches/416-wprobe.patch
@@ -1,6 +1,6 @@
---- /dev/null 2009-03-26 21:01:06.000000000 +0100
-+++ ./ath/ath_wprobe.c 2009-03-26 20:58:07.000000000 +0100
-@@ -0,0 +1,364 @@
+--- /dev/null
++++ b/ath/ath_wprobe.c
+@@ -0,0 +1,392 @@
+#include <net80211/ieee80211_node.h>
+#include <linux/wprobe.h>
+
@@ -22,6 +22,8 @@
+ WP_GLOBAL_PHY_BUSY,
+ WP_GLOBAL_PHY_RX,
+ WP_GLOBAL_PHY_TX,
++ WP_GLOBAL_FRAMES,
++ WP_GLOBAL_PROBEREQ,
+};
+
+static struct wprobe_item ath_wprobe_globals[] = {
@@ -45,6 +47,14 @@
+ .type = WPROBE_VAL_U8,
+ .flags = WPROBE_F_KEEPSTAT
+ },
++ [WP_GLOBAL_FRAMES] = {
++ .name = "frames",
++ .type = WPROBE_VAL_U32,
++ },
++ [WP_GLOBAL_PROBEREQ] = {
++ .name = "probereq",
++ .type = WPROBE_VAL_U32,
++ },
+};
+
+static struct wprobe_item ath_wprobe_link[] = {
@@ -153,6 +163,9 @@
+ WPROBE_SET(WP_GLOBAL_PHY_BUSY, U8, busy);
+ WPROBE_SET(WP_GLOBAL_PHY_RX, U8, rx);
+ WPROBE_SET(WP_GLOBAL_PHY_TX, U8, tx);
++ WPROBE_SET(WP_GLOBAL_FRAMES, U32, avp->av_rxframes);
++ WPROBE_SET(WP_GLOBAL_PROBEREQ, U32, avp->av_rxprobereq);
++
+phy_skip:
+ WPROBE_SET(WP_GLOBAL_NOISE, S16, noise);
+ WPROBE_FILL_END();
@@ -262,6 +275,21 @@
+}
+
+static void
++ath_wprobe_report_rx(struct ieee80211vap *vap, struct sk_buff *skb)
++{
++ struct ieee80211_frame *wh = (struct ieee80211_frame *)skb->data;
++ struct ath_vap *avp;
++
++ if (wprobe_disabled())
++ return;
++
++ avp = ATH_VAP(vap);
++ avp->av_rxframes++;
++ if (wh->i_fc[0] == (IEEE80211_FC0_TYPE_MGT | IEEE80211_FC0_SUBTYPE_PROBE_REQ))
++ avp->av_rxprobereq++;
++}
++
++static void
+ath_wprobe_node_join(struct ieee80211vap *vap, struct ieee80211_node *ni)
+{
+ struct wprobe_iface *dev;
@@ -365,8 +393,8 @@
+
+ wprobe_remove_iface(dev);
+}
---- a/ath/if_ath.c 2009-03-26 19:54:36.000000000 +0100
-+++ /var/folders/DB/DBZUyxsHGRKP0B3nCU1mmU+++TI/-Tmp-/cocci-output-73937-18abc0-if_ath.c 2009-03-26 21:08:34.000000000 +0100
+--- a/ath/if_ath.c
++++ b/ath/if_ath.c
@@ -400,6 +400,7 @@ static int countrycode = -1;
static int maxvaps = -1;
static int outdoor = -1;
@@ -399,15 +427,33 @@
ATH_NODE_UAPSD_LOCK_IRQ(an);
#ifdef IEEE80211_DEBUG_REFCNT
-@@ -7001,6 +7005,7 @@ drop_micfail:
+@@ -7001,6 +7005,8 @@ drop_micfail:
goto lookup_slowpath;
}
ATH_RSSI_LPF(ATH_NODE(ni)->an_avgrssi, rs->rs_rssi);
+ ath_node_sample_rx(ni, rs);
++ ath_wprobe_report_rx(ni->ni_vap, skb);
type = ieee80211_input(ni->ni_vap, ni, skb, rs->rs_rssi, bf->bf_tsf);
ieee80211_unref_node(&ni);
} else {
-@@ -7020,6 +7025,7 @@ lookup_slowpath:
+@@ -7011,15 +7017,22 @@ drop_micfail:
+
+ lookup_slowpath:
+ vap = ieee80211_find_rxvap(ic, wh->i_addr1);
+- if (vap)
++ if (vap) {
++ ath_wprobe_report_rx(vap, skb);
+ ni = ieee80211_find_rxnode(ic, vap, wh);
+- else
++ } else {
++ TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) {
++ ath_wprobe_report_rx(vap, skb);
++ }
++ vap = NULL;
+ ni = NULL;
++ }
+
+ if (ni != NULL) {
ieee80211_keyix_t keyix;
ATH_RSSI_LPF(ATH_NODE(ni)->an_avgrssi, rs->rs_rssi);
@@ -415,7 +461,7 @@
type = ieee80211_input(vap, ni, skb, rs->rs_rssi, bf->bf_tsf);
/*
* If the station has a key cache slot assigned
-@@ -8599,6 +8605,7 @@ ath_tx_processq(struct ath_softc *sc, st
+@@ -8599,6 +8612,7 @@ ath_tx_processq(struct ath_softc *sc, st
sc->sc_stats.ast_tx_rssi = ts->ts_rssi;
ATH_RSSI_LPF(an->an_halstats.ns_avgtxrssi,
ts->ts_rssi);
@@ -423,7 +469,7 @@
if (bf->bf_skb->priority == WME_AC_VO ||
bf->bf_skb->priority == WME_AC_VI)
ni->ni_ic->ic_wme.wme_hipri_traffic++;
-@@ -10090,6 +10097,7 @@ ath_newassoc(struct ieee80211_node *ni,
+@@ -10090,6 +10104,7 @@ ath_newassoc(struct ieee80211_node *ni,
struct ath_softc *sc = ic->ic_dev->priv;
sc->sc_rc->ops->newassoc(sc, ATH_NODE(ni), isnew);
@@ -431,8 +477,8 @@
/* are we supporting compression? */
if (!(vap->iv_ath_cap & ni->ni_ath_flags & IEEE80211_NODE_COMP))
---- a/ath/if_athvar.h 2009-03-26 19:54:35.000000000 +0100
-+++ /var/folders/DB/DBZUyxsHGRKP0B3nCU1mmU+++TI/-Tmp-/cocci-output-73937-80429d-if_athvar.h 2009-03-26 21:08:42.000000000 +0100
+--- a/ath/if_athvar.h
++++ b/ath/if_athvar.h
@@ -46,6 +46,7 @@
#include "ah_desc.h"
#include "ah_os.h"
@@ -451,11 +497,13 @@
u_int16_t an_decomp_index; /* decompression mask index */
u_int32_t an_avgrssi; /* average rssi over all rx frames */
u_int8_t an_prevdatarix; /* rate ix of last data frame */
-@@ -521,6 +525,7 @@ struct ath_vap {
+@@ -521,6 +525,9 @@ struct ath_vap {
#else
unsigned int av_beacon_alloc;
#endif
+ struct wprobe_iface av_wpif;
++ u32 av_rxframes;
++ u32 av_rxprobereq;
};
#define ATH_VAP(_v) ((struct ath_vap *)(_v))