summaryrefslogtreecommitdiffstats
path: root/net/mac80211/ibss.c
diff options
context:
space:
mode:
authorSara Sharon <sara.sharon@intel.com>2019-01-16 05:14:41 -0500
committerJohannes Berg <johannes.berg@intel.com>2019-02-08 07:51:50 -0500
commit4abb52a46e7336c1e568a53761c8b7a81bbaaeaf (patch)
treeba154f2d70a786a6871dcd5af7ba2aa39ba45bab /net/mac80211/ibss.c
parent9f308616b6176b6dc470e6eb3569a09b100a823a (diff)
mac80211: pass bssids to elements parsing function
In multiple BSSID, we have nested IEs inside the multiple BSSID IE, that override the external ones for that specific BSS. As preparation for supporting that, pass 2 BSSIDs to the parse function, the transmitter, and the selected BSSID, so it can know which IEs to choose. If the selected BSSID is NULL, the outer ones will be applied. Change ieee80211_bss_info_update to parse elements itself, instead of receiving them parsed, so we have the relevant bss entry in hand. Signed-off-by: Sara Sharon <sara.sharon@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/ibss.c')
-rw-r--r--net/mac80211/ibss.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index 0d704e8d7078..4e4507115cf3 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -8,6 +8,7 @@
8 * Copyright 2009, Johannes Berg <johannes@sipsolutions.net> 8 * Copyright 2009, Johannes Berg <johannes@sipsolutions.net>
9 * Copyright 2013-2014 Intel Mobile Communications GmbH 9 * Copyright 2013-2014 Intel Mobile Communications GmbH
10 * Copyright(c) 2016 Intel Deutschland GmbH 10 * Copyright(c) 2016 Intel Deutschland GmbH
11 * Copyright(c) 2018-2019 Intel Corporation
11 * 12 *
12 * This program is free software; you can redistribute it and/or modify 13 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as 14 * it under the terms of the GNU General Public License version 2 as
@@ -1124,8 +1125,7 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
1124 1125
1125 ieee80211_update_sta_info(sdata, mgmt, len, rx_status, elems, channel); 1126 ieee80211_update_sta_info(sdata, mgmt, len, rx_status, elems, channel);
1126 1127
1127 bss = ieee80211_bss_info_update(local, rx_status, mgmt, len, elems, 1128 bss = ieee80211_bss_info_update(local, rx_status, mgmt, len, channel);
1128 channel);
1129 if (!bss) 1129 if (!bss)
1130 return; 1130 return;
1131 1131
@@ -1604,7 +1604,7 @@ void ieee80211_rx_mgmt_probe_beacon(struct ieee80211_sub_if_data *sdata,
1604 return; 1604 return;
1605 1605
1606 ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen, 1606 ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen,
1607 false, &elems); 1607 false, &elems, mgmt->bssid, NULL);
1608 1608
1609 ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems); 1609 ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems);
1610} 1610}
@@ -1654,7 +1654,7 @@ void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
1654 1654
1655 ieee802_11_parse_elems( 1655 ieee802_11_parse_elems(
1656 mgmt->u.action.u.chan_switch.variable, 1656 mgmt->u.action.u.chan_switch.variable,
1657 ies_len, true, &elems); 1657 ies_len, true, &elems, mgmt->bssid, NULL);
1658 1658
1659 if (elems.parse_error) 1659 if (elems.parse_error)
1660 break; 1660 break;