Changeset a35b458 in mainline for uspace/lib/ieee80211/src/ieee80211_iface_impl.c
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ieee80211/src/ieee80211_iface_impl.c
r3061bc1 ra35b458 55 55 nic_t *nic_data = nic_get_from_ddf_fun(fun); 56 56 ieee80211_dev_t *ieee80211_dev = nic_get_specific(nic_data); 57 57 58 58 if (!ieee80211_is_ready(ieee80211_dev)) 59 59 return EREFUSED; 60 60 61 61 if (now) 62 62 ieee80211_dev->ops->scan(ieee80211_dev); 63 63 64 64 fibril_mutex_lock(&ieee80211_dev->ap_list.results_mutex); 65 65 66 66 if (results) { 67 67 ieee80211_scan_result_list_t *result_list = 68 68 &ieee80211_dev->ap_list; 69 69 70 70 unsigned int i = 0; 71 71 ieee80211_scan_result_list_foreach(*result_list, result) { … … 75 75 i++; 76 76 } 77 77 78 78 results->length = i; 79 79 } 80 80 81 81 fibril_mutex_unlock(&ieee80211_dev->ap_list.results_mutex); 82 82 83 83 return EOK; 84 84 } … … 102 102 { 103 103 ieee80211_dev->bssid_info.res_link = auth_data; 104 104 105 105 /* Set channel. */ 106 106 errno_t rc = ieee80211_dev->ops->set_freq(ieee80211_dev, … … 108 108 if (rc != EOK) 109 109 return rc; 110 110 111 111 /* Try to authenticate. */ 112 112 ieee80211_authenticate(ieee80211_dev); 113 113 114 114 fibril_mutex_lock(&ieee80211_dev->gen_mutex); 115 115 rc = fibril_condvar_wait_timeout(&ieee80211_dev->gen_cond, 116 116 &ieee80211_dev->gen_mutex, AUTH_TIMEOUT); 117 117 fibril_mutex_unlock(&ieee80211_dev->gen_mutex); 118 118 119 119 if (rc != EOK) 120 120 return rc; 121 121 122 122 if (ieee80211_get_auth_phase(ieee80211_dev) != 123 123 IEEE80211_AUTH_AUTHENTICATED) { … … 126 126 return EINVAL; 127 127 } 128 128 129 129 /* Try to associate. */ 130 130 ieee80211_associate(ieee80211_dev, password); 131 131 132 132 fibril_mutex_lock(&ieee80211_dev->gen_mutex); 133 133 rc = fibril_condvar_wait_timeout(&ieee80211_dev->gen_cond, 134 134 &ieee80211_dev->gen_mutex, AUTH_TIMEOUT); 135 135 fibril_mutex_unlock(&ieee80211_dev->gen_mutex); 136 136 137 137 if (rc != EOK) 138 138 return rc; 139 139 140 140 if (ieee80211_get_auth_phase(ieee80211_dev) != 141 141 IEEE80211_AUTH_ASSOCIATED) { … … 144 144 return EINVAL; 145 145 } 146 146 147 147 /* On open network, we are finished. */ 148 148 if (auth_data->scan_result.security.type != 149 149 IEEE80211_SECURITY_OPEN) { 150 150 /* Otherwise wait for 4-way handshake to complete. */ 151 151 152 152 fibril_mutex_lock(&ieee80211_dev->gen_mutex); 153 153 rc = fibril_condvar_wait_timeout(&ieee80211_dev->gen_cond, 154 154 &ieee80211_dev->gen_mutex, HANDSHAKE_TIMEOUT); 155 155 fibril_mutex_unlock(&ieee80211_dev->gen_mutex); 156 156 157 157 if (rc != EOK) { 158 158 ieee80211_deauthenticate(ieee80211_dev); … … 160 160 } 161 161 } 162 162 163 163 ieee80211_set_auth_phase(ieee80211_dev, IEEE80211_AUTH_CONNECTED); 164 164 165 165 return EOK; 166 166 } … … 182 182 assert(ssid_start); 183 183 assert(password); 184 184 185 185 nic_t *nic_data = nic_get_from_ddf_fun(fun); 186 186 ieee80211_dev_t *ieee80211_dev = nic_get_specific(nic_data); 187 187 188 188 if (!ieee80211_is_ready(ieee80211_dev)) 189 189 return EREFUSED; 190 190 191 191 if (ieee80211_is_connected(ieee80211_dev)) { 192 192 errno_t rc = ieee80211_dev->iface->disconnect(fun); … … 194 194 return rc; 195 195 } 196 196 197 197 ieee80211_set_connect_request(ieee80211_dev); 198 198 199 199 errno_t rc = ENOENT; 200 200 fibril_mutex_lock(&ieee80211_dev->scan_mutex); 201 201 202 202 ieee80211_dev->pending_conn_req = false; 203 203 204 204 ieee80211_scan_result_list_foreach(ieee80211_dev->ap_list, result) { 205 205 if (!str_lcmp(ssid_start, result->scan_result.ssid, … … 210 210 } 211 211 } 212 212 213 213 fibril_mutex_unlock(&ieee80211_dev->scan_mutex); 214 214 215 215 return rc; 216 216 } … … 228 228 nic_t *nic_data = nic_get_from_ddf_fun(fun); 229 229 ieee80211_dev_t *ieee80211_dev = nic_get_specific(nic_data); 230 230 231 231 if (!ieee80211_is_ready(ieee80211_dev)) 232 232 return EREFUSED; 233 233 234 234 if (!ieee80211_is_connected(ieee80211_dev)) 235 235 return EOK; 236 236 237 237 fibril_mutex_lock(&ieee80211_dev->ap_list.results_mutex); 238 238 errno_t rc = ieee80211_deauthenticate(ieee80211_dev); 239 239 fibril_mutex_unlock(&ieee80211_dev->ap_list.results_mutex); 240 240 241 241 return rc; 242 242 }
Note:
See TracChangeset
for help on using the changeset viewer.