public inbox for linux-wireless@vger.kernel.org
 help / color / mirror / Atom feed
From: "Luis R. Rodriguez" <lrodriguez@atheros.com>
To: linville@tuxdriver.com, johannes@sipsolutions.net, j@w1.fi
Cc: linux-wireless@vger.kernel.org, ath9k-devel@lists.ath9k.org,
	"Luis R. Rodriguez" <lrodriguez@atheros.com>
Subject: [PATCH 02/18] mac80211: drop frames for sta with no valid rate
Date: Wed, 10 Jun 2009 04:19:19 -0400	[thread overview]
Message-ID: <1244621975-1238-3-git-send-email-lrodriguez@atheros.com> (raw)
In-Reply-To: <1244621975-1238-1-git-send-email-lrodriguez@atheros.com>

When we're associated we should be able to send data to
target sta. If we cannot we may be trying to use the incorrect
band to talk to the sta. Lets catch any such cases, warn, and
drop the frames to not invalidate assumptions being made on
rate control algorithms when they have a valid sta to
communicate with. Any such cases should be handled and fixed.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---
 include/net/mac80211.h |   11 +++++++++++
 net/mac80211/tx.c      |   23 +++++++++++++++++++++++
 2 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 17d61d1..9559efa 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2103,6 +2103,17 @@ rate_lowest_index(struct ieee80211_supported_band *sband,
 	return 0;
 }
 
+static inline
+bool rate_usable_index_exists(struct ieee80211_supported_band *sband,
+			      struct ieee80211_sta *sta)
+{
+	unsigned int i;
+
+	for (i = 0; i < sband->n_bitrates; i++)
+		if (rate_supported(sta, sband->band, i))
+			return true;
+	return false;
+}
 
 int ieee80211_rate_control_register(struct rate_control_ops *ops);
 void ieee80211_rate_control_unregister(struct rate_control_ops *ops);
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index e43fbb9..915c8a3 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -511,6 +511,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
 	int i, len;
 	bool inval = false, rts = false, short_preamble = false;
 	struct ieee80211_tx_rate_control txrc;
+	u32 sta_flags;
 
 	memset(&txrc, 0, sizeof(txrc));
 
@@ -543,7 +544,29 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
 	     (tx->sta && test_sta_flags(tx->sta, WLAN_STA_SHORT_PREAMBLE))))
 		txrc.short_preamble = short_preamble = true;
 
+	sta_flags = tx->sta ? get_sta_flags(tx->sta) : 0;
+
+	/*
+	 * Lets not bother rate control if we're associated and cannot
+	 * talk to the sta. This should not happen.
+	 */
+	if (unlikely((tx->local->sw_scanning) &&
+	    (sta_flags & WLAN_STA_ASSOC) &&
+	    !rate_usable_index_exists(sband, &tx->sta->sta))) {
+#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
+		printk(KERN_DEBUG "%s: dropped data frame -- no "
+		       "supported rate for station %pM on %c GHz band\n",
+		       tx->dev->name, hdr->addr1,
+		       tx->channel->band ? '5' : '2');
+#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */
+		WARN_ON(1);
+		return TX_DROP;
+	}
 
+	/*
+	 * If we're associated point with the sta we know we can at
+	 * least send the frame at the lowest bit rate.
+	 */
 	rate_control_get_rate(tx->sdata, tx->sta, &txrc);
 
 	if (unlikely(info->control.rates[0].idx < 0))
-- 
1.6.0.6


  parent reply	other threads:[~2009-06-10  8:19 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-10  8:19 [PATCH 00/18] wireless: rate cleanups Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 01/18] mac80211: disable moving between PS modes during scan Luis R. Rodriguez
2009-06-10 12:53   ` Luis R. Rodriguez
2009-06-10  8:19 ` Luis R. Rodriguez [this message]
2009-06-10  8:19 ` [PATCH 03/18] ath9k: downgrade assert in rc.c for invalid rate Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 04/18] iwlwifi: remove rs_get_rate workaround Luis R. Rodriguez
2009-06-10 19:08   ` reinette chatre
2009-06-10 20:31     ` Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 05/18] ath9k: cleanup try count for MRR in rate control Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 06/18] ath9k: remove unused min rate calculation code Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 07/18] ath9k: remove unused stepdown when looking for the next rate Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 08/18] ath9k: remove pointless wrapper ath_rc_rate_getidx() Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 09/18] ath9k: rename ath_rc_get_nextlowervalid_txrate() Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 10/18] ath9k: remove unused ath_rc_isvalid_txmask() Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 11/18] ath9k: remove ATH9K_MODE_11B Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 12/18] ath9k: remap ATH9K_MODE_* Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 13/18] ath9k: rename ath_rc_ratefind_ht() to ath_rc_get_highest_rix() Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 14/18] ath9k: remove unnecessary IEEE80211_TX_CTL_NO_ACK checks Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 15/18] mac80211: make minstrel/pid RC use ieee80211_is_data(fc) Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 16/18] iwlwifi: " Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 17/18] mac80211: add helper for management / no-ack frame rate decision Luis R. Rodriguez
2009-06-10  8:19 ` [PATCH 18/18] ath9k: remove rate control wraper Luis R. Rodriguez

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1244621975-1238-3-git-send-email-lrodriguez@atheros.com \
    --to=lrodriguez@atheros.com \
    --cc=ath9k-devel@lists.ath9k.org \
    --cc=j@w1.fi \
    --cc=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox