Search Linux Wireless

Link Quality stats not updating, recieved_channel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
-
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux