Linux wireless drivers development
 help / color / mirror / Atom feed
* Link Quality stats not updating, recieved_channel
@ 2008-02-22 14:26 Andrew Lunn
  2008-02-22 21:05 ` Dan Williams
  0 siblings, 1 reply; 5+ messages in thread
From: Andrew Lunn @ 2008-02-22 14:26 UTC (permalink / raw)
  To: linux-wireless

Hi Folks

I found a problem with the IPW2100/ieee80211 drivers which i think
also affects other users of ieee80211 in stock 2.6.24 and earlier.

The function net/ieee80211/ieee80211_rx.c:update_network() gets called
in response to a beacon or a probe response. It is responsible for
updating the information we already have about the network described
by the beacon or the probe response. At the beginning of the function
is:

        /* We only update the statistics if they were created by receiving
         * the network information on the actual channel the network is on.
         *
         * This keeps beacons received on neighbor channels from bringing
         * down the signal level of an AP. */
        if (dst->channel == src->stats.received_channel)
                memcpy(&dst->stats, &src->stats,
                       sizeof(struct ieee80211_rx_stats));
        else
                IEEE80211_DEBUG_SCAN("Network %s info received "
                        "off channel (%d vs. %d)\n", print_mac(mac, src->bssid),
                        dst->channel, src->stats.received_channel);

The problem is that the ipw2100 driver never fills in the
stats.received_channel. So the RSSI and other link quality parameters
never get updated. The RSSI is always the RSSI of the first frame
which caused the network record to be created. 

I have an application which triggers periodic scans and prints out the
results and clearly shows this problem if you walk around. Using
iwlist ethX scan should also demonstrate the problem and enabling
IEEE80211_DEBUG_SCAN can demonstrate the problem as well.

I took a quick look at some of the drivers. As far as i can see, only
the IPW2200 driver fills in stats.received_channel before calling
80211_rx().

To get my application working i changed the test above. I update the
stats if src->stats.received_channel is zero, or if
src->stats.received_channel is not zero it must equal dst->channel.

However i don't know the big picture, so i don't know if this is the
correct fix. If it is correct, i would be happy to submit a patch.  

        Thanks
                Andrew

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-02-22 23:07 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-22 14:26 Link Quality stats not updating, recieved_channel Andrew Lunn
2008-02-22 21:05 ` Dan Williams
2008-02-22 21:21   ` Andrew Lunn
2008-02-22 22:14     ` Dan Williams
2008-02-22 23:07       ` Andrew Lunn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox