diff options
| -rw-r--r-- | core/hdd/src/wlan_hdd_cfg80211.c | 20 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_cfg80211.h | 2 | ||||
| -rw-r--r-- | core/sme/inc/csr_api.h | 1 | ||||
| -rw-r--r-- | core/sme/inc/csr_internal.h | 7 | ||||
| -rw-r--r-- | core/sme/src/csr/csr_api_roam.c | 3 |
5 files changed, 32 insertions, 1 deletions
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 9f431ae95cd1..13c76610e60c 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -3012,7 +3012,7 @@ int wlan_hdd_send_roam_auth_event(hdd_context_t *hdd_ctx_ptr, uint8_t *bssid, ETH_ALEN + req_rsn_len + rsp_rsn_len + sizeof(uint8_t) + SIR_REPLAY_CTR_LEN + SIR_KCK_KEY_LEN + SIR_KCK_KEY_LEN + - (7 * NLMSG_HDRLEN), + sizeof(uint8_t) + (8 * NLMSG_HDRLEN), QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH_INDEX, GFP_KERNEL); @@ -3057,6 +3057,24 @@ int wlan_hdd_send_roam_auth_event(hdd_context_t *hdd_ctx_ptr, uint8_t *bssid, } } + hddLog(CDF_TRACE_LEVEL_DEBUG, FL("Subnet Change Status = %d"), + roam_info_ptr->subnet_change_status); + + /* + * Add subnet change status if subnet has changed + * 0 = unchanged + * 1 = changed + * 2 = unknown + */ + if (roam_info_ptr->subnet_change_status) { + if (nla_put_u8(skb, + QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_SUBNET_STATUS, + roam_info_ptr->subnet_change_status)) { + hddLog(CDF_TRACE_LEVEL_ERROR, FL("nla put fail")); + goto nla_put_failure; + } + } + cfg80211_vendor_event(skb, GFP_KERNEL); return 0; diff --git a/core/hdd/src/wlan_hdd_cfg80211.h b/core/hdd/src/wlan_hdd_cfg80211.h index 34134d3b9ff4..f86e36b96b65 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.h +++ b/core/hdd/src/wlan_hdd_cfg80211.h @@ -1554,6 +1554,7 @@ enum qca_wlan_vendor_attr_set_no_dfs_flag { * @QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_KEY_REPLAY_CTR: Replay Counter * @QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_PTK_KCK: KCK of the PTK * @QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_PTK_KEK: KEK of the PTK + * @QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_SUBNET_STATUS: subnet change status */ enum qca_wlan_vendor_attr_roam_auth { QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_INVALID = 0, @@ -1564,6 +1565,7 @@ enum qca_wlan_vendor_attr_roam_auth { QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_KEY_REPLAY_CTR, QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_PTK_KCK, QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_PTK_KEK, + QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_SUBNET_STATUS, QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_AFTER_LAST, QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_MAX = QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_AFTER_LAST - 1 diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index bf2162d5a098..0ba6b035acf7 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1351,6 +1351,7 @@ typedef struct tagCsrRoamInfo { uint8_t kck[SIR_KCK_KEY_LEN]; uint8_t kek[SIR_KEK_KEY_LEN]; uint8_t replay_ctr[SIR_REPLAY_CTR_LEN]; + uint8_t subnet_change_status; #endif tSirSmeChanInfo chan_info; uint8_t target_channel; diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index 830ff6b67a15..0dc1db38f7a8 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -1202,6 +1202,13 @@ typedef struct tagCsrRoamStruct { (eCsrLostLink2 == (pCommand)->u.roamCmd.roamReason) || \ (eCsrLostLink3 == (pCommand)->u.roamCmd.roamReason)) +#ifdef FEATURE_LFR_SUBNET_DETECTION +/* bit-4 and bit-5 indicate the subnet status */ +#define CSR_GET_SUBNET_STATUS(roam_reason) (((roam_reason) & 0x30) >> 4) +#else +#define CSR_GET_SUBNET_STATUS(roam_reason) (0) +#endif + CDF_STATUS csr_get_channel_and_power_list(tpAniSirGlobal pMac); CDF_STATUS csrScanFilter11dResult(tpAniSirGlobal pMac); diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 28062cb770d8..5ac222dabd40 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -6440,6 +6440,9 @@ static void csr_roam_process_join_res(tpAniSirGlobal mac_ctx, FL ("LFR3: Copy KCK, KEK and Replay Ctr")); } + + roam_info.subnet_change_status = + CSR_GET_SUBNET_STATUS(roam_offload_params->roamReason); #endif csr_roam_call_callback(mac_ctx, session_id, &roam_info, cmd->u.roamCmd.roamId, |
