From: Johannes Berg <johannes@sipsolutions.net>
To: linux-wireless@vger.kernel.org
Cc: Sara Sharon <sara.sharon@intel.com>
Subject: [PATCH v7 02/11] mac80211: move the bss update from elements to an helper
Date: Mon, 28 Jan 2019 11:54:37 +0100 [thread overview]
Message-ID: <20190128105446.17256-2-johannes@sipsolutions.net> (raw)
In-Reply-To: <20190128105446.17256-1-johannes@sipsolutions.net>
From: Sara Sharon <sara.sharon@intel.com>
This will allow iterating over multiple BSSs inside
cfg80211_bss, in case of multiple BSSID.
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
net/mac80211/scan.c | 150 +++++++++++++++++++++++---------------------
1 file changed, 80 insertions(+), 70 deletions(-)
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
index b58f75da9c84..20211cbc63f4 100644
--- a/net/mac80211/scan.c
+++ b/net/mac80211/scan.c
@@ -58,6 +58,85 @@ static bool is_uapsd_supported(struct ieee802_11_elems *elems)
return qos_info & IEEE80211_WMM_IE_AP_QOSINFO_UAPSD;
}
+static void
+ieee80211_update_bss_from_elems(struct ieee80211_local *local,
+ struct ieee80211_bss *bss,
+ struct ieee802_11_elems *elems,
+ struct ieee80211_rx_status *rx_status,
+ bool beacon)
+{
+ int clen, srlen;
+
+ if (beacon)
+ bss->device_ts_beacon = rx_status->device_timestamp;
+ else
+ bss->device_ts_presp = rx_status->device_timestamp;
+
+ if (elems->parse_error) {
+ if (beacon)
+ bss->corrupt_data |= IEEE80211_BSS_CORRUPT_BEACON;
+ else
+ bss->corrupt_data |= IEEE80211_BSS_CORRUPT_PROBE_RESP;
+ } else {
+ if (beacon)
+ bss->corrupt_data &= ~IEEE80211_BSS_CORRUPT_BEACON;
+ else
+ bss->corrupt_data &= ~IEEE80211_BSS_CORRUPT_PROBE_RESP;
+ }
+
+ /* save the ERP value so that it is available at association time */
+ if (elems->erp_info && (!elems->parse_error ||
+ !(bss->valid_data & IEEE80211_BSS_VALID_ERP))) {
+ bss->erp_value = elems->erp_info[0];
+ bss->has_erp_value = true;
+ if (!elems->parse_error)
+ bss->valid_data |= IEEE80211_BSS_VALID_ERP;
+ }
+
+ /* replace old supported rates if we get new values */
+ if (!elems->parse_error ||
+ !(bss->valid_data & IEEE80211_BSS_VALID_RATES)) {
+ srlen = 0;
+ if (elems->supp_rates) {
+ clen = IEEE80211_MAX_SUPP_RATES;
+ if (clen > elems->supp_rates_len)
+ clen = elems->supp_rates_len;
+ memcpy(bss->supp_rates, elems->supp_rates, clen);
+ srlen += clen;
+ }
+ if (elems->ext_supp_rates) {
+ clen = IEEE80211_MAX_SUPP_RATES - srlen;
+ if (clen > elems->ext_supp_rates_len)
+ clen = elems->ext_supp_rates_len;
+ memcpy(bss->supp_rates + srlen, elems->ext_supp_rates,
+ clen);
+ srlen += clen;
+ }
+ if (srlen) {
+ bss->supp_rates_len = srlen;
+ if (!elems->parse_error)
+ bss->valid_data |= IEEE80211_BSS_VALID_RATES;
+ }
+ }
+
+ if (!elems->parse_error ||
+ !(bss->valid_data & IEEE80211_BSS_VALID_WMM)) {
+ bss->wmm_used = elems->wmm_param || elems->wmm_info;
+ bss->uapsd_supported = is_uapsd_supported(elems);
+ if (!elems->parse_error)
+ bss->valid_data |= IEEE80211_BSS_VALID_WMM;
+ }
+
+ if (beacon) {
+ struct ieee80211_supported_band *sband =
+ local->hw.wiphy->bands[rx_status->band];
+ if (!(rx_status->encoding == RX_ENC_HT) &&
+ !(rx_status->encoding == RX_ENC_VHT))
+ bss->beacon_rate =
+ &sband->bitrates[rx_status->rate_idx];
+ }
+}
+
struct ieee80211_bss *
ieee80211_bss_info_update(struct ieee80211_local *local,
struct ieee80211_rx_status *rx_status,
@@ -67,7 +146,6 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
bool beacon = ieee80211_is_beacon(mgmt->frame_control);
struct cfg80211_bss *cbss;
struct ieee80211_bss *bss;
- int clen, srlen;
struct cfg80211_inform_bss bss_meta = {
.boottime_ns = rx_status->boottime_ns,
};
@@ -132,75 +210,7 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
bss = (void *)cbss->priv;
-
- if (beacon)
- bss->device_ts_beacon = rx_status->device_timestamp;
- else
- bss->device_ts_presp = rx_status->device_timestamp;
-
- if (elems.parse_error) {
- if (beacon)
- bss->corrupt_data |= IEEE80211_BSS_CORRUPT_BEACON;
- else
- bss->corrupt_data |= IEEE80211_BSS_CORRUPT_PROBE_RESP;
- } else {
- if (beacon)
- bss->corrupt_data &= ~IEEE80211_BSS_CORRUPT_BEACON;
- else
- bss->corrupt_data &= ~IEEE80211_BSS_CORRUPT_PROBE_RESP;
- }
-
- /* save the ERP value so that it is available at association time */
- if (elems.erp_info && (!elems.parse_error ||
- !(bss->valid_data & IEEE80211_BSS_VALID_ERP))) {
- bss->erp_value = elems.erp_info[0];
- bss->has_erp_value = true;
- if (!elems.parse_error)
- bss->valid_data |= IEEE80211_BSS_VALID_ERP;
- }
-
- /* replace old supported rates if we get new values */
- if (!elems.parse_error ||
- !(bss->valid_data & IEEE80211_BSS_VALID_RATES)) {
- srlen = 0;
- if (elems.supp_rates) {
- clen = IEEE80211_MAX_SUPP_RATES;
- if (clen > elems.supp_rates_len)
- clen = elems.supp_rates_len;
- memcpy(bss->supp_rates, elems.supp_rates, clen);
- srlen += clen;
- }
- if (elems.ext_supp_rates) {
- clen = IEEE80211_MAX_SUPP_RATES - srlen;
- if (clen > elems.ext_supp_rates_len)
- clen = elems.ext_supp_rates_len;
- memcpy(bss->supp_rates + srlen, elems.ext_supp_rates,
- clen);
- srlen += clen;
- }
- if (srlen) {
- bss->supp_rates_len = srlen;
- if (!elems.parse_error)
- bss->valid_data |= IEEE80211_BSS_VALID_RATES;
- }
- }
-
- if (!elems.parse_error ||
- !(bss->valid_data & IEEE80211_BSS_VALID_WMM)) {
- bss->wmm_used = elems.wmm_param || elems.wmm_info;
- bss->uapsd_supported = is_uapsd_supported(&elems);
- if (!elems.parse_error)
- bss->valid_data |= IEEE80211_BSS_VALID_WMM;
- }
-
- if (beacon) {
- struct ieee80211_supported_band *sband =
- local->hw.wiphy->bands[rx_status->band];
- if (!(rx_status->encoding == RX_ENC_HT) &&
- !(rx_status->encoding == RX_ENC_VHT))
- bss->beacon_rate =
- &sband->bitrates[rx_status->rate_idx];
- }
+ ieee80211_update_bss_from_elems(local, bss, &elems, rx_status, beacon);
return bss;
}
--
2.17.2
next prev parent reply other threads:[~2019-01-28 10:55 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-28 10:54 [PATCH v7 01/11] mac80211: pass bssids to elements parsing function Johannes Berg
2019-01-28 10:54 ` Johannes Berg [this message]
2019-01-28 10:54 ` [PATCH v7 03/11] cfg80211: Parsing of Multiple BSSID information in scanning Johannes Berg
2019-01-28 10:54 ` [PATCH v7 04/11] cfg80211: Properly track transmitting and non-transmitting BSS Johannes Berg
2019-01-28 10:54 ` [PATCH v7 05/11] cfg80211: Move Multiple BSS info to struct cfg80211_bss to be visible Johannes Berg
2019-01-28 10:54 ` [PATCH v7 06/11] cfg80211: parse mbssid only if HW supports it Johannes Berg
2019-01-28 10:54 ` [PATCH v7 07/11] cfg80211: make BSSID generation function inline Johannes Berg
2019-01-28 10:54 ` [PATCH v7 08/11] cfg80211: save mbssid properties Johannes Berg
2019-01-28 10:54 ` [PATCH v7 09/11] mac80211: support mbssid Johannes Berg
2019-01-28 10:54 ` [PATCH v7 10/11] mac80211: indicate support for multiple BSSID Johannes Berg
2019-01-28 10:54 ` [PATCH v7 11/11] mac80211_hwsim: Declare support for Multi-BSSID Johannes Berg
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=20190128105446.17256-2-johannes@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=sara.sharon@intel.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;
as well as URLs for NNTP newsgroup(s).