diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-07-10 09:29:03 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-07-24 15:05:10 -0400 |
commit | b291ba11181d46dfbd2d7a5c00a5f3335228191e (patch) | |
tree | 47813dce4a42e8334e531417425aa861848802bd /net/mac80211/rx.c | |
parent | ca386f3137eb68621fadba546d9eb35ac2f82de3 (diff) |
mac80211: monitor the connection
With the recent MLME rework I accidentally removed the connection
monitoring code. In order to add it back, this patch will add new
code to monitor both for beacon loss and for the connection actually
working, with possibly separate triggers.
When no unicast frames have been received from the AP for (currently)
two seconds, we will send the AP a probe request. Also, when we don't
see beacons from the AP for two seconds, we do the same (but those
times need not be the same due to the way the code is now written).
Additionally, clean up the parameters to the ieee80211_set_disassoc()
function that I need here, those are all useless except sdata.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r-- | net/mac80211/rx.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index fe6b99059531..b513fb791153 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -833,28 +833,22 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) | |||
833 | if (!sta) | 833 | if (!sta) |
834 | return RX_CONTINUE; | 834 | return RX_CONTINUE; |
835 | 835 | ||
836 | /* Update last_rx only for IBSS packets which are for the current | 836 | /* |
837 | * BSSID to avoid keeping the current IBSS network alive in cases where | 837 | * Update last_rx only for IBSS packets which are for the current |
838 | * other STAs are using different BSSID. */ | 838 | * BSSID to avoid keeping the current IBSS network alive in cases |
839 | * where other STAs start using different BSSID. | ||
840 | */ | ||
839 | if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) { | 841 | if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) { |
840 | u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len, | 842 | u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len, |
841 | NL80211_IFTYPE_ADHOC); | 843 | NL80211_IFTYPE_ADHOC); |
842 | if (compare_ether_addr(bssid, rx->sdata->u.ibss.bssid) == 0) | 844 | if (compare_ether_addr(bssid, rx->sdata->u.ibss.bssid) == 0) |
843 | sta->last_rx = jiffies; | 845 | sta->last_rx = jiffies; |
844 | } else | 846 | } else if (!is_multicast_ether_addr(hdr->addr1)) { |
845 | if (!is_multicast_ether_addr(hdr->addr1) || | 847 | /* |
846 | rx->sdata->vif.type == NL80211_IFTYPE_STATION) { | ||
847 | /* Update last_rx only for unicast frames in order to prevent | ||
848 | * the Probe Request frames (the only broadcast frames from a | ||
849 | * STA in infrastructure mode) from keeping a connection alive. | ||
850 | * Mesh beacons will update last_rx when if they are found to | 848 | * Mesh beacons will update last_rx when if they are found to |
851 | * match the current local configuration when processed. | 849 | * match the current local configuration when processed. |
852 | */ | 850 | */ |
853 | if (rx->sdata->vif.type == NL80211_IFTYPE_STATION && | 851 | sta->last_rx = jiffies; |
854 | ieee80211_is_beacon(hdr->frame_control)) { | ||
855 | rx->sdata->u.mgd.last_beacon = jiffies; | ||
856 | } else | ||
857 | sta->last_rx = jiffies; | ||
858 | } | 852 | } |
859 | 853 | ||
860 | if (!(rx->flags & IEEE80211_RX_RA_MATCH)) | 854 | if (!(rx->flags & IEEE80211_RX_RA_MATCH)) |