Introduce API to populate parameter for connecting event
logging in order to be printed after STA INFO
event.
Add wlan_cm_is_first_attempt() api in order to
restrict the logging of STA INFO and connecting
event to first connection attempt.
Change-Id: Ica4253eea71ba72ea5176f733402d0758797463b
CRs-Fixed: 3599759
Currently the user configured MFP state that comes from the
userspace in connect request is not handled or processed.
Instead the RSN caps from assoc IE of connect request is inter-
sected with AP RSN caps and sent to Firmware using RSO command.
This RSN caps is used in FW in selecting a roam candidate, which
was causing the cross AKM (eg:SAE -> PSK) roam fail.
Hence, use the user configured MFP value in sending the RSN caps
to Firmware.
CRs-Fixed: 3606069
Change-Id: I3facfcf3616667b4749109d26d924c3fb1537494
Currently, in some API such as
"wlan_cfg80211_tdls_add_peer_mlo", when driver gets vdev, it is
MLO vdev, so it uses WLAN_MLO_MGR_ID ID, but when it tries to put
the vdev, since disconnection happens and mlo flag is cleared,
so it uses WLAN_OSIF_TDLS_ID ID which is non-ML vdev.
This causes release of vdev reference from different id for which
it never takes reference and result in crash.
To fix this, use same debug id throughout function. For that,
generalize the get_ml_vdev API by passing the debug id as
argument to the function.
Change-Id: I5800d207fdd17692297e71a0a9cdbcb86a4c5650
CRs-Fixed: 3608817
This change is to use ml dev context to fetch
link info, As ml dev context is available in both
vdev and psoc context. It's valid for both standby
and active links.
Change-Id: Ib705bd5a5a1144f980295331f5f26ba667906cf1
CRs-Fixed: 3568944
With new sun kernel, wep keys are deprecated,
resulting in compilation issues. Fix this by
not using wep_keys if kernel is sun or greater.
Change-Id: I2c79545798825ae7c963885356595e5fa35b910a
CRs-Fixed: 3601939
When roam from mlo to slo/legacy/owe, mlo_cleanup_link is called to
disconnect link vdev, mlme_cm_osif_disconnect_start_ind is called,
WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER is sent, then Tx queue is disabled,
all tx pkts can't be sent.
To fix it, when disconnect link vdev for roaming to slo/legacy/owe,
don't send WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER by checking special req
source CM_MLO_ROAM_INTERNAL_DISCONNECT.
Change-Id: Iacfc2f82069b2c21951af97c23c60ea99865a80d
CRs-Fixed: 3600747
When updating the AP link address and channel info after
roaming, update the self link address also to the link switch
context on each vdev. This information will be fetched while
sending roam + auth event to userspace after roaming.
Change-Id: I363a5ee8d65bb21d84c15879996369f4e397f2a6
CRs-Fixed: 3589401
VDEV is moved to INIT state as part of link switch disconnect,
before set MAC address response is received, any disconnect
request on this VDEV will not be handled as VDEV is in INIT
state, if link switch is in progress then it will abort link
switch and starts link switch dequeue process.
If the new disconnect request is from userspace it will
increment the OSIF ops, but if link switch is on assoc VDEV
OSIF is notified to restore the adapter deflink as part of
link switch complete where it wait for all OSIF ops to
complete. This is a deadlock case where driver is waiting
for ops completion on same thread where ops is initiated.
To fix this issue, do not handle link switch dequeue on the
same thread, instead move the link switch state to abort
and when actual link switch thread comes it will flush from
serialization.
If userspace disconnect is not queued as VDEV is in INIT
state due to link switch, kernel won't be notified about
the disconnect as this notification is only done on assoc
VDEV and any further connect requests from supplicant gets
dropped in kernel saying already connected and supplicant
will immediately try disconnect which driver will again
drop as VDEV is in INIT state. To avoid this kernel-driver
out of sync, forcefully move VDEV to disconnecting state
and queue the disconnect request.
Change-Id: I116859601ebba21d44797e74e160b56532ef833c
CRs-Fixed: 3588936
With MLO link removal, AP can remove a link that happens to be the assoc
link for a given Non-AP MLD. So far, the Non-AP MLD has been using the
assoc link to interact with other layers and make various decisions.
Change those behaviors on a case-by-case basis.
CRs-Fixed: 3577559
Change-Id: Iaa001bdd2571bce424a953caa3197a99a6f84180
After link switch, the assoc vdev and link vdev could change.
So once the link switch is complete, change the roam state to
DEINIT for the link vdevs
Change-Id: I3e583fc1cb5be8d17d8680dab96461b058740c0a
CRs-Fixed: 3581730
Send bridge partner details during peer create and peer
assoc. The partner of bridge peer are saved which are used later
during bridge peer create and assoc. Also add bridge peer partner
details while sending peer create and assoc on actual links.
CRs-Fixed: 3574656
Change-Id: I755614a131f6552ac28377d2c7648db4fd87b8df
After successful connection with an AP, driver fills the struct
cfg80211_connect_resp_params and sends it to the kernel.
For an MLO connection, the link's mac address field in the struct
is updated by AP's mac address instead of link's self_mac address.
So, update the kernel struct properly, to avoid issues.
Change-Id: I4d1ea4ee3fe5272dd4e08c0edd22b1df5c7999a3
CRs-Fixed: 3579820
Introduce following for link switch disconnect:
1) Connect request source.
2) Connect request reason.
If the set MAC address response for new link is successful, post
connection on new link and transition the link switch state to
connecting. If the status of connection is successful, update
the state to link switch complete or else directly go for
deserializing link switch command and posting response to FW.
Based on the final state of link switch at the time of sending
FW response, send the appropirate status of link switch and reset
the state of link switch to idle post FW notify.
Don't unlink BSS incase of failure in connection.
Don't indicate connect results to userspace.
As we are already in serialization due to link switch,
don't serialize/deserialize connection command if it
is due to link switch.
Incase of race condition between link switch connect and
userspace connect/disconnect always abort link switch connect.
Change-Id: Ie350b52021c36802b82d6cb5f6f441fe1bd10458
CRs-Fixed: 3556529
Introduce following for link switch disconnect:
1) Disconnect source.
2) Disconnect reason.
3) Link switch BIT in CM_ID to identify link switch request
Don't notify link switch disconnect to initiate disconnect on
other connect VDEV of MLO mgr.
Don't notify userspace if the disconnect request is due to
link switch.
Don't notify netdev to stop queues on link switch disconnect.
Don't flush any pending disconnect/connect request on complete
of link switch disconnect request.
Don't attempt to serialize/deserialize disconnect command
if it is a link switch command ID due to either disconnect request,
disconnect complete or disconnect request flush.
Before start of link switch set the VDEV flag as MLO link VDEV
to leverage the disconnect/connect checks for link VDEV and
restore the flag at the end of link switch. This will impact
when link switch on assoc VDEV is received for which initially
the flag is not set.
Check status of link switch disconnect done API to either
proceed further in link switch or terminate the link switch.
If any userspace disconnect and link switch disconnect race
condition, always abort link switch disconnect and notify
failure to FW.
Change-Id: I6ec2a850d49f5ec6df2ec868c290f19203cd8c88
CRs-Fixed: 3556481
1. APIs to check topology to see if the bridge vap/peer will be used.
2. API to check the max number of links supported.
Also check if we can have the primary and assoc links to be different
for WDS STATION. Based on the topology allow/block
connection to a particular AP.
CRs-Fixed: 3562149
Change-Id: Icf3b32036199f39b0d567ac88795dc07760ac1a5
Notify OSIF about each connected link once assoc VDEV connection
is completed, call the ops callback registered while filling
kernel data structure for each link.
Earlier post connection each VDEV's OSIF callback is called to notify
individually, but this leaves the OSIF unaware of standby link details
as the standby link doesn't have VDEV associated with it.
Change-Id: I027b91d02bdc4412400a7e66f11911da149e672b
CRs-Fixed: 3556378
After mlo connection is completed driver send the connect resp event
to kernel. As of now, driver gets the ML param info from the assoc_rsp IE.
For stand_by link, driver don't have vdev. Due to this, driver can't send the
stand_by info to kernel.
Fix is, instead of assoc_rsp IE driver will use mlo_mgr to get the links
information.
Change-Id: I8da762bed94de4ad2b024183c09b3d0a0f1b7ca4
CRs-Fixed: 3530712
In current scenario osif_cm_free_connect_req() and mlo_free_connect_ies()
used to free up connect request and its sub memory.
Similarly cm_free_connect_req() and cm_free_connect_req_param() also
free up the connect request and its sub memory.
So replace osif_cm_free_connect_req() with ucfg_cm_free_connect_req(),
mlo_free_connect_ies() and qdf_mem_free() with wlan_cm_free_connect_req()
and mlo_free_connect_ies() with wlan_cm_free_connect_req_param().
Change-Id: Ie62603652dd77ae5ae9f7b7085d4b9bb257eaf53
CRs-Fixed: 3554234
Masking the MLO API, mlo_setup_get_total_socs
using ic_eht_target check for non-MLDs in cmn_dev.
CRs-Fixed: 3551482
Change-Id: I8d585f534146f58beee605b2165bb0c51fc5bdb9
Host driver is currently indicating link reconfig
event on link vdev.
Change is to indicate link reconfig on the primary vdev
affiliated with wlan0.
Change-Id: I9955d98bcd52554adf22f838bfbd2263418432d1
CRs-Fixed: 3535940
CPU min frequency is boosted to maximum once roam start is received
Add support to reset CPU frequency in case of HO failure.
Change-Id: I137f78e3a307be136bcc27760be3d91cb6c1868b
CRs-Fixed: 3522954
When link removal TBTT expires, indicate the link removal
info to upper layer by vendor event.
Change-Id: Idf882cb22ccbd1c8b4ad6f03c6d27980cdbaef50
CRs-Fixed: 3481313
To enable the tx queues faster during roam, boost the
CPU min frequencies to maximum once roam start is received,
and reset them once queues roam sync is complete or
roaming is aborted.
This change enables such support for lithium and Clarence targets.
Change-Id: I49d2f50f1c0142e7db1c981276bd08b75159b6d3
CRs-Fixed: 3487573
1. Read the new service capability:
WMI_SERVICE_CCA_BUSY_INFO_FOREACH_20 MHz: Via this host knows
whether FW supports reporting of CCA busy info for each 20 MHz
subband of wideband scan channel or not.
WMI_SERVICE_VDEV_PARAM_CHWIDTH_WITH_NOTIFY_SUPPORT: Via this
host knows whether FW supports VDEV param channel width switch
with OMN/OMI notification or not
2. Register osif callback to send scan done indication to upper
layer
3. Add 2 new scan flags pause_home_channel and
report_cca_busy_for_each_20 MHz
Change-Id: I63d561a3c5f8e49a3ca42d956e6b630c63edeaf4
CRs-Fixed: 3460901
Send the driver disconnect internal reason code as an event to user space
using QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON vendor command.
Change-Id: I0027675b809b94628b6c0c4b8e8286e38fa9f47d
CRs-Fixed: 3371398
Some devices in WDS station mode have limitation when connected
in 3 LINK MLD association where the Primary umac selected and assoc
link should be same. Make sure to have a sanity check before
going for association in such cases.
If the primary umac and assoc links are set to be different then
the connection will be rejected.
Change-Id: If56461a140d4685ba279b1babe04709d919d1650
CRs-Fixed: 3443733
Currently, bss is unlinked from kernel scan db in below cases,
1. Disconnect
2. Connect failure
3. AP moves to hidden SSID mode from normal mode
bss is unlinked in above 1 and 2 cases (i.e. disconnect and
connect failure) to avoid continuous connect failures when
userspace attempts connect to the same AP without issuing a
fresh scan, which may result in blacklisting the AP. But
framework/wpa_supplicant can take care of this now by making
sure that connect is attempted only if scan result is from
a fresh scan.
Unlinking the bss may lead to inconsistency in some scenarios
and found that disconnect is most common scenario. So, don't
call __wlan_cfg80211_unlink_bss_list() in case 1 and 2 to
avoid unlinking.
Change-Id: I2d3af5fcc22360a5ead0e148d623194cb815f882
CRs-Fixed: 3433127
As part of commit I7a08635a7912cbd940d90a2d62433296740ad913
a vendor command is added to enable roam stats event.
This change registers callback to send the added vendor
command event to userspace.
Change-Id: I6dc3f8357ace5bb3fa41b4aa116652a91b9fd924
CRs-Fixed: 3427397
Currently, before sending a roamed indication to the kernel,
the host calls kernel APIs ieee80211_get_channel and
cfg80211_get_bss to confirm whether the roamed channel and
BSSID are present in the kernel scan cache or not.
In case if kernel returns the BSS pointer as NULL, Host calls
osif_populate_mlo_info_for_link API and uses BSS pointer
to populate MLO info for the link(s), this results in a
NULL pointer dereference in the host.
Fix is to avoid sending roam done indication to kernel/
userspace if kernel returns BSS pointer as NULL and issue
disconnection with reason REASON_UNSPEC_FAILURE.
Change-Id: I28f51369115a7ef20105073e4fcf6ee912c068b2
CRs-Fixed: 3404248
The kernel-doc script identified some documentation issues in the
os_if folder, so fix most of them. However do not modify the file
qca_vendor.h since most of the issues there are present upstream, and
the downstream file should match the upstream file.
Change-Id: I71948fb497c1ea2d1dd46308277d99beefde18b8
CRs-Fixed: 3390428
Use macro which indicates maximum number of links we can support
for a given MLO association. Currently this is used for 3 Link
association in which the Association request will have per STA
profile of two other partner links.
Change-Id: If0927367110d58f8e42b40bb987c5b7497b8d551
CRs-Fixed: 3381043
- Add osif callback api to get scan ie params
- Made few mlo manager api's public
CRs-Fixed: 3288038
Change-Id: I15a764682b8164eb1b66adeff44d7e344f2563c3
For roam auth vendor event to userspace, currently
16bytes of static memory is allocated for KCK. However,
latest security AKMs have higher KCK length.
Allocate the TLV based on the KCK length received from
firmware.
Change-Id: I2a869989a263f141a9b24a1fb9a97eb34889ac19
CRs-Fixed: 3346092
As part of MLO dynamic link deletion handling, cfg80211_disconnected is
taking link_id as an argument.
Add changes to support link_id param in cfg80211_disconnected.
Change-Id: Ia312b5e5768ba9abb11675839e912d4819a2fa86
CRs-Fixed: 3315102
Current code directly passes the result of wlan_vdev_get_psoc(vdev) to
wlan_objmgr_get_peer_by_mac, without null pointer checking, which can
result in null pointer dereferencing.
To fix this issue, add checking of the psoc pointer before passing to
wlan_objmgr_get_peer_by_mac.
Change-Id: Ica5ebbc448a6da8b1e7c846f05773d95f995eaca
CRs-Fixed: 3327337
Currently, this MLO flag is being set/clear without regard for
concurrency. We need to lock the vdev when updating these values to
prevent race condition.
Change-Id: Ied90d62f10f6f12a35eeac3060dd0fae7d0c6cfd
CRs-Fixed: 3305558
To protect user privacy, print SSID with QDF_SSID_FMT
and QDF_SSID_REF, then SSID will be hide in logs if
anonymization is enabled.
Change-Id: Ifad0ccd76bd1184a9b1d20f3d7fa4455df924843
CRs-Fixed: 3291826
For STA MLO connection, the AP can send M1 right after assoc
response on assoc link, which will trigger sending keys to FW
for mlo links, but it can happen that wmi_peer_assoc is not
sent for mlo link until this time.
Current code does not have handling for this case.
To solve this, store the link vdev keys and send them once
link vdev is connected.
Change-Id: I882da96280711ca9cfa4d6ba852fda4a8b6d7a77
CRs-Fixed: 3293692
Currently vdev reference is not released in api
osif_send_roam_auth_mlo_links_events().
To solve this release vdev reference to avoid leak.
Change-Id: Idc766925f5cd71cbdd577ee7b67abffc35130dd9
CRs-Fixed: 3305547
After mlo roaming is complete send roam auth mlo links
event to kernel.
Also populate cfg roam info structure with mlo link info.
Change-Id: I8710e3a53f05c50b7b276d87a39411cb43d0983f
CRs-Fixed: 3279967
Reproduce steps:
1. Connect from OSIF success, wdev->connected = true;
2. Disconnect from target if and reassoc from OSIF happens back to
back.
3. Disconnect event is not sent to kernel, wdev->connected keeps
true, isn't cleared.
4. Connect from OSIF failed too, wdev->connected keeps true, isn't
cleared.
5. Scan with random address failed since wdev->connected is true.
To fix it, if connect req was a reassoc req and received in not connected
state for race between disconnect from target if and reassoc connect from
OSIF, set reassoc_in_non_connected to send disconnect instead of
connect rsp to kernel to cleanup kernel flags like: wdev->connected.
change-Id: Ibbe38da14e9339b49589216250453b76c7387b57
CRs-Fixed: 3290496
Current code directly passes the result of wlan_vdev_get_psoc(vdev) to
wlan_objmgr_get_peer_by_mac, without null pointer checking, which can
result in null pointer dereferencing.
To fix this issue, add checking of the psoc pointer before passing,
and add verification inside wlan_objmgr_get_peer_by_mac.
Change-Id: Iaf0e2535c3a584db788ddc621745c66c296fe08f
CRs-Fixed: 3277651
Add a flag to indicate assoc req is used for this roaming,
don't treat assoc req as reassoc req.
Change-Id: I58f357b5581ca71e97841f1d7e0f3daad5d60970
CRs-Fixed: 3273877