summaryrefslogtreecommitdiffstats
path: root/net/mac80211/mlme.c
Commit message (Collapse)AuthorAgeFilesLines
* wifi: mac80211: mlme: fix disassoc with MLOJohannes Berg2022-07-221-3/+5
| | | | | | | | | | | | In MLO we shouldn't call ieee80211_bss_info_change_notify(), call that only (for backward compatibility) without MLO, and otherwise ieee80211_vif_cfg_change_notify(). Similarly, ieee80211_reset_erp_info() only applies to the current link, and in MLO we assume the driver doesn't really need that. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: transmit assoc frame with address translationJohannes Berg2022-07-221-9/+9
| | | | | | | | | | To transmit the association frame to the right station and with address translation, use the correct addresses there and set up the AP address in the configuration earlier so it's applied during the transmit of auth/assoc frames. Fixes: 81151ce462e5 ("wifi: mac80211: support MLO authentication/association with one link") Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: fix link_sta setupJohannes Berg2022-07-221-5/+6
| | | | | | | | | We need to copy the address to both the private and public portion of the link_sta (the private one is needed for the hash table). Fix this. Fixes: bbe90107e1d9 ("wifi: mac80211: mlme: refactor link station setup") Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: set sta.mlo to mlo stateJohannes Berg2022-07-221-2/+2
| | | | | | | | | | At this point, we've already changed link_id to be zero for a non-MLO connection, so use the 'mlo' variable rather than link ID to determine the MLO status of the station. Fixes: bd363ee53302 ("wifi: mac80211: mlme: set sta.mlo correctly") Fixes: 81151ce462e5 ("wifi: mac80211: support MLO authentication/association with one link") Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: fix override calculationJohannes Berg2022-07-221-0/+2
| | | | | | | | | | | In my previous changes here, I neglected to take the old conn_flags into account that might still be present from the authentication, and thus ieee80211_setup_assoc_link() can misbehave, as well as the override calculation being wrong. Fix that by ORing in the old flags. Fixes: 1845c1d4a455 ("wifi: mac80211: mlme: refactor assoc link setup") Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: tx: use AP address in some places for MLOJohannes Berg2022-07-221-2/+4
| | | | | | | | | | In a few places we need to use the AP (MLD) address, not the deflink BSSID, the link address translation will happen later. To make that work properly for fast-xmit, set up the ap_addr in the vif.cfg earlier. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: set sta.mlo correctlyJohannes Berg2022-07-151-0/+2
| | | | | | | | Due to some changes and rebasing between different patches this fell through the cracks; we need to set sta.mlo if the connection is using MLO. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: support MLO authentication/association with one linkJohannes Berg2022-07-151-232/+840
| | | | | | | | | | | | | | | | | | | | | | It might seem a bit pointless to do a multi-link operation connection with just a single link, but this is already a big change, so for now, limit MLO connections to a single link. Extending that to multiple links will require * work on parsing the multi-link element with STA profile properly, including element fragmentation; * checking the per-link status in the multi-link element * implementing logic to have active/inactive links to let drivers decide which links should be active; * implementing multicast RX deduplication; * and likely more. For now this is still useful since it lets us do multi-link connections for the purposes of testing APIs and the higher layers such as wpa_supplicant. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: fix up link station creation/insertionJohannes Berg2022-07-151-1/+1
| | | | | | | | | | | | | When we create a station with a non-default link, then we should have a link address, and we definitely need to insert it into the link hash table on insertion. Split the API into with and without link creation and if it has a link, insert the link into the link hash table on sta_info_insert(). Fixes: ba6ddab94fc6 ("wifi: mac80211: maintain link-sta hash table") Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: limit A-MSDU subframes for client tooJohannes Berg2022-07-151-0/+3
| | | | | | | | | | | In AP/mesh where the stations are added by userspace, we limit the number of A-MSDU subframes according to the extended capabilities. Refactor the code and extend that also to client-side. Fixes: 506bcfa8abeb ("mac80211: limit the A-MSDU Tx based on peer's capabilities") Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: refactor ieee80211_set_associated()Johannes Berg2022-07-151-26/+41
| | | | | | | | Split out much of the code in ieee80211_set_associated() into a new ieee80211_link_set_associated() which can be called per link later for MLO. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: look up beacon elems only if neededJohannes Berg2022-07-151-15/+17
| | | | | | | | If NEED_DTIM_BEFORE_ASSOC isn't set, then we don't need to enter an RCU critical section and look up the beacon elements. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: refactor assoc link setupJohannes Berg2022-07-151-130/+156
| | | | | | | | | | | | Factor out the code to set up the assoc link into a new function ieee80211_setup_assoc_link(). While at it, also modify the 'override' handling to just take into account whether or not the conn_flags were changed, which is what we need to setup again the channel later. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: remove address arg to ieee80211_mark_sta_auth()Johannes Berg2022-07-151-4/+4
| | | | | | | There's no need to pass the address, we can look at the auth_data inside the function rather than outside. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: refactor assoc success handlingJohannes Berg2022-07-151-360/+375
| | | | | | | | | | | Refactor the per-link setup out of ieee80211_assoc_success() into a new function ieee80211_assoc_config_link(). It looks useless for now to parse the elements again inside ieee80211_assoc_config_link(), but that will be done with the link ID in the future. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: refactor ieee80211_prep_channel() a bitJohannes Berg2022-07-151-37/+44
| | | | | | | | | Refactor ieee80211_prep_channel() to make the link argument optional and add a conn_flags pointer argument instead, so that we can later use this for links that don't exist yet to build the right information for MLO. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: refactor assoc req element buildingJohannes Berg2022-07-151-115/+161
| | | | | | | | For MLO, we will need to build these elements per link, so factor out the code that does this, returning the capability, to simplify building the multi-link element in the future. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: switch some things back to deflinkJohannes Berg2022-07-151-32/+39
| | | | | | | | | With MLO, when we'll disconnect from an AP MLD, we'll just destroy all the links. Therefore, the only thing we (may) need to reset is the deflink data, so switch back to that and adjust the comments accordingly. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: change flags in ieee80211_determine_chantype()Johannes Berg2022-07-151-12/+16
| | | | | | | | | | | For MLO we'll need to read flags not directly from the link as it may not even exist yet if we're just setting up flags for a secondary link before sending the association request, so pass the incoming conn_flags separately. Also, while at it, pass the sdata/link separately as for non-tracking now the link may be NULL. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: shift some code aroundJohannes Berg2022-07-151-493/+509
| | | | | | | | We'll need ieee80211_prep_channel() in other code for MLO later, so move the code up - unchanged for now - to avoid forward declarations in the future. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: refactor link station setupJohannes Berg2022-07-151-54/+65
| | | | | | | Refactor the code here since we need to have it also for each link station after association in MLO later. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: move IEEE80211_SDATA_OPERATING_GMODE to linkJohannes Berg2022-07-151-5/+2
| | | | | | | | The flag here is currently per interface, but the way we set and clear it means it should be per link, so change it. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: make ieee80211_check_rate_mask() link-awareJohannes Berg2022-07-151-1/+1
| | | | | | | Change ieee80211_check_rate_mask() to use a link rather than the sdata and deflink/bss_conf. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: clean up supported channels element codeJohannes Berg2022-07-151-2/+3
| | | | | | | | Clean up the code building the supported channels element a little bit by using a local variable instead of the long line. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: consider EHT element size in assoc requestJohannes Berg2022-07-151-0/+3
| | | | | | | | | We need to consider the (maximum) size of the EHT element we'll add for the association request, otherwise we may run out of space. Fixes: 820acc810fb6 ("mac80211: Add EHT capabilities to association/probe request") Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: simplify adding ht/vht/he/eht elementsJohannes Berg2022-07-151-48/+31
| | | | | | | | | | | The functions currently take a link and check data from it, but this needs to change for MLO. Simplify the prototypes by passing only the needed arguments. Remove the regulatory checks, the warnings shouldn't trigger, and haven't as far as I know. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: refactor adding custom elementsJohannes Berg2022-07-151-87/+125
| | | | | | | | | | | | | Rework the sorting of custom elements into the association request by moving the elements before HT/VHT/HE to each their own function. While at it, fix the placement of the ones that should be between VHT and HE. This doesn't fix the placement of elements that should be between HE and EHT yet, a similar change might be needed in the future. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: refactor adding rates to assoc requestJohannes Berg2022-07-151-67/+74
| | | | | | | | | | | | There's some awkward code that really only exists because we want to optimize the allocation size, but that's not really all that necessary. Refactor the code that adds rates to the association request frame to have a separate function, removing the goto. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: use only channel width in ieee80211_parse_bitrates()Johannes Berg2022-07-151-1/+2
| | | | | | | For MLO, we may not have a full chandef here later, so change the API to pass only the width. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: remove redundant conditionJohannes Berg2022-07-151-1/+1
| | | | | | | | Here, ext_capa is checked and can only be non-NULL if assoc_data->ie_len was set before, so the check here is redundant. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: fix multi-BSSID element parsingJohannes Berg2022-07-151-10/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | When parsing a frame containing a multi-BSSID element, we need to know both the transmitted and non-transmitted BSSID so we can parse it correctly. Unfortunately, in quite a number of cases, we got this wrong and were passing the wrong BSSID or useless information: * the mgmt->bssid from a frame is only the transmitted BSSID if the frame is a beacon * passing just one of the parameters as non-NULL isn't useful and ignored In those case where we need to parse for a specific BSS we always have a BSS structure pointer, representing the BSS we need, whether transmitted or not. Thus, pass that pointer to the parsing function instead of the two BSSIDs. Also fix two bugs: * we need to re-parse all the elements for the other BSS when iterating the non-transmitted BSSes in scan * we need to parse for the correct BSS when setting up the channel data in client code Fixes: 78ac51f81532 ("mac80211: support multi-bssid") Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: move tdls_chan_switch_prohibited to link dataJohannes Berg2022-07-151-1/+1
| | | | | | | This value should be per link, since a TDLS connection is only established on a given link. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: don't re-parse elems in ieee80211_assoc_success()Johannes Berg2022-07-151-15/+4
| | | | | | | | We're already passing the elems pointer, and have parsed them from the same frame with exactly the same parameters, so don't need to do that again. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: cfg80211: extend cfg80211_rx_assoc_resp() for MLOJohannes Berg2022-07-151-1/+1
| | | | | | | | Extend the cfg80211_rx_assoc_resp() to cover multiple BSSes, the AP MLD address and local link addresses for MLO. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: cfg80211: put cfg80211_rx_assoc_resp() arguments into a structJohannes Berg2022-07-151-5/+12
| | | | | | | | For MLO we'll need a lot more arguments, including all the BSS pointers and link addresses, so move the data to a struct to be able to extend it more easily later. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: cfg80211: adjust assoc comeback for MLOJohannes Berg2022-07-151-1/+1
| | | | | | | | We only report the BSSID to userspace, so change the argument from BSS struct pointer to AP address, which we'll use to carry either the BSSID or AP MLD address. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: unify assoc data event sendingJohannes Berg2022-07-151-31/+20
| | | | | | | | | | | | | | | | There are a few cases where we send an event to cfg80211 manually, but ieee80211_destroy_assoc_data() also handles the case of abandoning; some cases don't need an event and success is handled yet differently. Unify this by providing a single status argument to the ieee80211_destroy_assoc_data() function and then handling all the different cases of events (or no events) there. This will help simplify the code when MLO support is added. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: cfg80211: prepare association failure APIs for MLOJohannes Berg2022-07-151-5/+23
| | | | | | | | | | | | For MLO, we need the ability to report back multiple BSS structures to release, as well as the AP MLD address (if attempting to make an MLO connection). Unify cfg80211_assoc_timeout() and cfg80211_abandon_assoc() into a new cfg80211_assoc_failure() that gets a structure parameter with the necessary data. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: cfg80211: remove BSS pointer from cfg80211_disassoc_requestJohannes Berg2022-07-151-9/+5
| | | | | | | | | | The race described by the comment in mac80211 hasn't existed since the locking rework to use the same lock and for MLO we need to pass the AP MLD address, so just pass the BSSID or AP MLD address instead of the BSS struct pointer, and adjust all the code accordingly. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: use correct link_staJohannes Berg2022-07-151-17/+33
| | | | | | | For station capabilities, e.g. TWT, we need to use the correct link station instead of deflink. Switch the code to do that. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: remove sta argument from ieee80211_config_bwJohannes Berg2022-07-151-5/+1
| | | | | | | The argument is unused except for NULL checking, but we already do that anyway, so it's not needed. Remove the argument. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: use ieee80211_get_link_sband()Johannes Berg2022-07-151-6/+6
| | | | | | | | | This requires a few more changes. While at it, also add a warning to ieee80211_get_sband() to avoid it being used when there are multiple links. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: split IEEE80211_STA_DISABLE_WMM to link dataJohannes Berg2022-07-151-4/+5
| | | | | | | | If we decide to stop tracking QoS/WMM parameters, then this should be a per-link decision. Move the flag to the link instead. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: first adjustments for MLOJohannes Berg2022-07-151-360/+405
| | | | | | | | | | | | | Do the first adjustments in the client-side code to pass the link pointer (instead of sdata) to most places etc. This is just preparation, so the real MLO patches become smaller. Note that this isn't complete, notably there are still quite a few references to sta->deflink and sta->sta.deflink. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: do IEEE80211_STA_RESET_SIGNAL_AVE per linkJohannes Berg2022-07-151-4/+3
| | | | | | | | | Remove the IEEE80211_STA_RESET_SIGNAL_AVE flag and use a bool instead, but invert the polarity (now calling it tracking_signal_avg) so we don't have to initialize it, and put that into the link instead. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: mlme: track AP (MLD) address separatelyJohannes Berg2022-07-151-14/+16
| | | | | | | | | To prepare a bit more for MLO in the client code, track the AP's address (for now only the BSSID, but will track the AP MLD's address later) separately from the per-link BSSID. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: remove unused bssid variableJohannes Berg2022-07-151-2/+0
| | | | | | This variable is only written to, remove it. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: change QoS settings API to take link into accountJohannes Berg2022-07-151-26/+29
| | | | | | | Take the link into account in the QoS settings (EDCA parameters) APIs. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: expect powersave handling in driver for MLOJohannes Berg2022-07-151-1/+3
| | | | | | | | In MLO, expect the driver fully handles powersave handling, including tracking whether or not a beacon was received, the DTIM period, etc. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* wifi: mac80211: move ps setting to vif configJohannes Berg2022-07-151-4/+3
| | | | | | | | | | This really shouldn't be in a per-link config, we don't want to let anyone control it that way (if anything, link powersave could be forced through APIs to activate/deactivate a link), and we don't support powersave in software with devices that can do MLO. Signed-off-by: Johannes Berg <johannes.berg@intel.com>