diff options
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)) |