diff options
| -rw-r--r-- | package/madwifi/patches/416-wprobe.patch | 72 | 
1 files changed, 60 insertions, 12 deletions
| diff --git a/package/madwifi/patches/416-wprobe.patch b/package/madwifi/patches/416-wprobe.patch index 5e181e5bc..453073782 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)) | 
