Re: [Madwifi-devel] HAL_MIB_STATS implemented?
Status: Beta
Brought to you by:
otaku
From: Sam L. <sa...@er...> - 2004-04-13 17:50:23
|
On Monday 12 April 2004 10:21 pm, Tsung Chwen Woo wrote: > Hi Sam, > > I'm using atheros 5212 chipset (Netgear WG511T) with ath_hal: 0.9.8.6, > wlan: 0.7.3.1 BETA, ath_pci: 0.8.5.4 BETA > > Here's the code I've used: > > In if_athvar.h, i've included the following: > > #define ath_hal_updatemibcounters(_ah, _mibstats) \ > ((*(_ah)->ah_updateMibCounters)((_ah), (_mibstats))) > > > > In ath_ioctl() function (about line 3253) in if_ath.c, i've added an extra > case to retrieve the mib counters (in pretty much the same manner as > athstats): > > case SIOCGMIBCOUNTERS: { > struct ath_hal *ah = sc->sc_ah; > struct ieee80211com *ic = &sc->sc_ic; > ! HAL_MIB_STATS hmibstats; > ! ath_hal_updatemibcounters(ah, &hmibstats); > ! ic->mib_counters.mib_rx_rts_successes = hmibstats.rts_good; > ! ic->mib_counters.mib_rx_rts_failures = hmibstats.rts_bad; > ! ic->mib_counters.mib_rx_ack_failures = hmibstats.ackrcv_bad; > ! ic->mib_counters.mib_rx_fcs_errors = hmibstats.fcs_bad; > ic->mib_counters.mib_tx_frames = ic->mib_counters.mib_tx_fragments; > if (copy_to_user(ifr->ifr_data, &ic->mib_counters, > sizeof (ic->mib_counters))) > return -EFAULT; > return 0; > } updatemibcounters does a += for each statistic so you're incrementing uninitialized variables. It appears you have a mib_counters variable which you should just supply directly instead. (BTW, this belongs in the driver softc structure and not the 802.11 layer as it's Atheros-specific.) Beware also that each call to updatemibcounters will also reset the h/w counters so you need to insure two operations don't happen concurrently. The best way (probably) to do this is to poll periodically in a single-threaded context (e.g. off a timer) and then return the current values through the ioctl. > > > The lines with a "!" is how I tried to extract the HAL_MIB_STATS struct. > The ic->mib_counters struct contains just a list of MIB counters members. > Outputting the stats will involve an application similar in workings to > athstats :-) . Am I on the right track in extracting these stats? > > Will I be correct to assume that sc_stats.ast_rx_crcerr is in fact > equivalent to hmibstats.fcs_bad? fcs_bad is probably more accurate as ast_rx_crcerr only counts frames that actually get sent up to the host. > > Also that sc_stats.ast_bmiss is equivalent to hmibstats.beacons? Or would > hmibstats.beacons be count for all received beacon mgt frames? beacons is the count of beacon frames received. ast_bmiss is the count of beacon miss interrupts. Sam |