1 /* 2 * Copyright (c) 2012-2015, 2020, The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 /** 18 * DOC: wlan_cm_api.c 19 * 20 * This file maintains definitaions public apis. 21 */ 22 23 #include <wlan_cm_api.h> 24 #include "connection_mgr/core/src/wlan_cm_main_api.h" 25 26 QDF_STATUS wlan_cm_start_connect(struct wlan_objmgr_vdev *vdev, 27 struct wlan_cm_connect_req *req) 28 { 29 return cm_connect_start_req(vdev, req); 30 } 31 32 QDF_STATUS wlan_cm_disconnect(struct wlan_objmgr_vdev *vdev, 33 enum wlan_cm_source source, 34 enum wlan_reason_code reason_code, 35 struct qdf_mac_addr *bssid) 36 { 37 struct wlan_cm_disconnect_req req = {0}; 38 39 req.vdev_id = wlan_vdev_get_id(vdev); 40 req.source = source; 41 req.reason_code = reason_code; 42 if (bssid) 43 qdf_copy_macaddr(&req.bssid, bssid); 44 45 return cm_disconnect_start_req(vdev, &req); 46 } 47 48 QDF_STATUS wlan_cm_disconnect_sync(struct wlan_objmgr_vdev *vdev, 49 enum wlan_cm_source source, 50 enum wlan_reason_code reason_code) 51 { 52 struct wlan_cm_disconnect_req req = {0}; 53 54 req.vdev_id = wlan_vdev_get_id(vdev); 55 req.source = source; 56 req.reason_code = reason_code; 57 58 return cm_disconnect_start_req_sync(vdev, &req); 59 } 60 61 QDF_STATUS wlan_cm_bss_select_ind_rsp(struct wlan_objmgr_vdev *vdev, 62 QDF_STATUS status) 63 { 64 return cm_bss_select_ind_rsp(vdev, status); 65 } 66 67 QDF_STATUS wlan_cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev, 68 QDF_STATUS status, 69 struct qdf_mac_addr *peer_mac) 70 { 71 return cm_bss_peer_create_rsp(vdev, status, peer_mac); 72 } 73 74 QDF_STATUS wlan_cm_connect_rsp(struct wlan_objmgr_vdev *vdev, 75 struct wlan_cm_connect_resp *resp) 76 { 77 return cm_connect_rsp(vdev, resp); 78 } 79 80 QDF_STATUS wlan_cm_bss_peer_delete_ind(struct wlan_objmgr_vdev *vdev, 81 struct qdf_mac_addr *peer_mac) 82 { 83 return cm_bss_peer_delete_req(vdev, peer_mac); 84 } 85 86 QDF_STATUS wlan_cm_bss_peer_delete_rsp(struct wlan_objmgr_vdev *vdev, 87 uint32_t status) 88 { 89 return cm_vdev_down_req(vdev, status); 90 } 91 92 QDF_STATUS wlan_cm_disconnect_rsp(struct wlan_objmgr_vdev *vdev, 93 struct wlan_cm_discon_rsp *resp) 94 { 95 return cm_disconnect_rsp(vdev, resp); 96 } 97 98 void wlan_cm_set_max_connect_attempts(struct wlan_objmgr_vdev *vdev, 99 uint8_t max_connect_attempts) 100 { 101 cm_set_max_connect_attempts(vdev, max_connect_attempts); 102 } 103 104 bool wlan_cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev) 105 { 106 return cm_is_vdev_connecting(vdev); 107 } 108 109 bool wlan_cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev) 110 { 111 return cm_is_vdev_connected(vdev); 112 } 113 114 bool wlan_cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev) 115 { 116 return cm_is_vdev_disconnecting(vdev); 117 } 118 119 bool wlan_cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev) 120 { 121 return cm_is_vdev_disconnected(vdev); 122 } 123 124 bool wlan_cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev) 125 { 126 return cm_is_vdev_roaming(vdev); 127 } 128 129 const char *wlan_cm_reason_code_to_str(enum wlan_reason_code reason) 130 { 131 if (reason > REASON_PROP_START) 132 return ""; 133 134 switch (reason) { 135 CASE_RETURN_STRING(REASON_UNSPEC_FAILURE); 136 CASE_RETURN_STRING(REASON_PREV_AUTH_NOT_VALID); 137 CASE_RETURN_STRING(REASON_DEAUTH_NETWORK_LEAVING); 138 CASE_RETURN_STRING(REASON_DISASSOC_DUE_TO_INACTIVITY); 139 CASE_RETURN_STRING(REASON_DISASSOC_AP_BUSY); 140 CASE_RETURN_STRING(REASON_CLASS2_FRAME_FROM_NON_AUTH_STA); 141 CASE_RETURN_STRING(REASON_CLASS3_FRAME_FROM_NON_ASSOC_STA); 142 CASE_RETURN_STRING(REASON_DISASSOC_NETWORK_LEAVING); 143 CASE_RETURN_STRING(REASON_STA_NOT_AUTHENTICATED); 144 CASE_RETURN_STRING(REASON_BAD_PWR_CAPABILITY); 145 CASE_RETURN_STRING(REASON_BAD_SUPPORTED_CHANNELS); 146 CASE_RETURN_STRING(REASON_DISASSOC_BSS_TRANSITION); 147 CASE_RETURN_STRING(REASON_INVALID_IE); 148 CASE_RETURN_STRING(REASON_MIC_FAILURE); 149 CASE_RETURN_STRING(REASON_4WAY_HANDSHAKE_TIMEOUT); 150 CASE_RETURN_STRING(REASON_GROUP_KEY_UPDATE_TIMEOUT); 151 CASE_RETURN_STRING(REASON_IN_4WAY_DIFFERS); 152 CASE_RETURN_STRING(REASON_INVALID_GROUP_CIPHER); 153 CASE_RETURN_STRING(REASON_INVALID_PAIRWISE_CIPHER); 154 CASE_RETURN_STRING(REASON_INVALID_AKMP); 155 CASE_RETURN_STRING(REASON_UNSUPPORTED_RSNE_VER); 156 CASE_RETURN_STRING(REASON_INVALID_RSNE_CAPABILITIES); 157 CASE_RETURN_STRING(REASON_1X_AUTH_FAILURE); 158 CASE_RETURN_STRING(REASON_CIPHER_SUITE_REJECTED); 159 CASE_RETURN_STRING(REASON_TDLS_PEER_UNREACHABLE); 160 CASE_RETURN_STRING(REASON_TDLS_UNSPEC); 161 CASE_RETURN_STRING(REASON_DISASSOC_SSP_REQUESTED); 162 CASE_RETURN_STRING(REASON_NO_SSP_ROAMING_AGREEMENT); 163 CASE_RETURN_STRING(REASON_BAD_CIPHER_OR_AKM); 164 CASE_RETURN_STRING(REASON_LOCATION_NOT_AUTHORIZED); 165 CASE_RETURN_STRING(REASON_SERVICE_CHANGE_PRECLUDES_TS); 166 CASE_RETURN_STRING(REASON_QOS_UNSPECIFIED); 167 CASE_RETURN_STRING(REASON_NO_BANDWIDTH); 168 CASE_RETURN_STRING(REASON_XS_UNACKED_FRAMES); 169 CASE_RETURN_STRING(REASON_EXCEEDED_TXOP); 170 CASE_RETURN_STRING(REASON_STA_LEAVING); 171 CASE_RETURN_STRING(REASON_END_TS_BA_DLS); 172 CASE_RETURN_STRING(REASON_UNKNOWN_TS_BA); 173 CASE_RETURN_STRING(REASON_TIMEDOUT); 174 CASE_RETURN_STRING(REASON_PEERKEY_MISMATCH); 175 CASE_RETURN_STRING(REASON_AUTHORIZED_ACCESS_LIMIT_REACHED); 176 CASE_RETURN_STRING(REASON_EXTERNAL_SERVICE_REQUIREMENTS); 177 CASE_RETURN_STRING(REASON_INVALID_FT_ACTION_FRAME_COUNT); 178 CASE_RETURN_STRING(REASON_INVALID_PMKID); 179 CASE_RETURN_STRING(REASON_INVALID_MDE); 180 CASE_RETURN_STRING(REASON_INVALID_FTE); 181 CASE_RETURN_STRING(REASON_MESH_PEERING_CANCELLED); 182 CASE_RETURN_STRING(REASON_MESH_MAX_PEERS); 183 CASE_RETURN_STRING(REASON_MESH_CONFIG_POLICY_VIOLATION); 184 CASE_RETURN_STRING(REASON_MESH_CLOSE_RCVD); 185 CASE_RETURN_STRING(REASON_MESH_MAX_RETRIES); 186 CASE_RETURN_STRING(REASON_MESH_CONFIRM_TIMEOUT); 187 CASE_RETURN_STRING(REASON_MESH_INVALID_GTK); 188 CASE_RETURN_STRING(REASON_MESH_INCONSISTENT_PARAMS); 189 CASE_RETURN_STRING(REASON_MESH_INVALID_SECURITY_CAP); 190 CASE_RETURN_STRING(REASON_MESH_PATH_ERROR_NO_PROXY_INFO); 191 CASE_RETURN_STRING(REASON_MESH_PATH_ERROR_NO_FORWARDING_INFO); 192 CASE_RETURN_STRING(REASON_MESH_PATH_ERROR_DEST_UNREACHABLE); 193 CASE_RETURN_STRING(REASON_MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS); 194 CASE_RETURN_STRING(REASON_MESH_CHANNEL_SWITCH_REGULATORY_REQ); 195 CASE_RETURN_STRING(REASON_MESH_CHANNEL_SWITCH_UNSPECIFIED); 196 CASE_RETURN_STRING(REASON_POOR_RSSI_CONDITIONS); 197 default: 198 return "Unknown"; 199 } 200 } 201 202 #ifdef WLAN_POLICY_MGR_ENABLE 203 void wlan_cm_hw_mode_change_resp(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, 204 wlan_cm_id cm_id, QDF_STATUS status) 205 { 206 cm_hw_mode_change_resp(pdev, vdev_id, cm_id, status); 207 } 208 #endif /* ifdef POLICY_MGR_ENABLE */ 209 210 #ifdef SM_ENG_HIST_ENABLE 211 void wlan_cm_sm_history_print(struct wlan_objmgr_vdev *vdev) 212 { 213 return cm_sm_history_print(vdev); 214 } 215 #endif 216