Lines Matching refs:sta
74 void wihap_sta_delete(struct wihap_sta_info *sta);
268 struct wihap_sta_info *sta, *next; in wihap_shutdown() local
284 for (sta = TAILQ_FIRST(&whi->sta_list); sta != NULL; sta = next) { in wihap_shutdown()
285 timeout_del(&sta->tmo); in wihap_shutdown()
287 printf("wihap_shutdown: free(sta=%p)\n", sta); in wihap_shutdown()
288 next = TAILQ_NEXT(sta, list); in wihap_shutdown()
289 if (sta->challenge) in wihap_shutdown()
290 free(sta->challenge, M_TEMP, 0); in wihap_shutdown()
291 free(sta, M_DEVBUF, 0); in wihap_shutdown()
329 wihap_sta_movetail(struct wihap_info *whi, struct wihap_sta_info *sta) in wihap_sta_movetail() argument
331 TAILQ_REMOVE(&whi->sta_list, sta, list); in wihap_sta_movetail()
332 sta->flags &= ~WI_SIFLAGS_DEAD; in wihap_sta_movetail()
333 TAILQ_INSERT_TAIL(&whi->sta_list, sta, list); in wihap_sta_movetail()
341 struct wihap_sta_info *sta, *next; in wihap_timeout() local
346 for (i = 10, sta = TAILQ_FIRST(&whi->sta_list); in wihap_timeout()
347 i != 0 && sta != NULL && (sta->flags & WI_SIFLAGS_DEAD); in wihap_timeout()
348 i--, sta = next) { in wihap_timeout()
349 next = TAILQ_NEXT(sta, list); in wihap_timeout()
350 if (timeout_pending(&sta->tmo)) { in wihap_timeout()
352 wihap_sta_movetail(whi, sta); in wihap_timeout()
353 } else if (sta->flags & WI_SIFLAGS_ASSOC) { in wihap_timeout()
356 ether_sprintf(sta->addr)); in wihap_timeout()
359 wihap_sta_disassoc(sc, sta->addr, in wihap_timeout()
361 sta->flags &= ~WI_SIFLAGS_ASSOC; in wihap_timeout()
368 wihap_sta_movetail(whi, sta); in wihap_timeout()
369 timeout_add_sec(&sta->tmo, whi->inactivity_time); in wihap_timeout()
370 } else if (sta->flags & WI_SIFLAGS_AUTHEN) { in wihap_timeout()
373 ether_sprintf(sta->addr)); in wihap_timeout()
376 wihap_sta_deauth(sc, sta->addr, in wihap_timeout()
378 sta->flags &= ~WI_SIFLAGS_AUTHEN; in wihap_timeout()
381 if (sta->flags & WI_SIFLAGS_PERM) in wihap_timeout()
382 wihap_sta_movetail(whi, sta); in wihap_timeout()
384 wihap_sta_delete(sta); in wihap_timeout()
389 sta = TAILQ_FIRST(&whi->sta_list); in wihap_timeout()
390 if (sta != NULL && (sta->flags & WI_SIFLAGS_DEAD)) in wihap_timeout()
399 struct wihap_sta_info *sta = v; in wihap_sta_timeout() local
400 struct wi_softc *sc = sta->sc; in wihap_sta_timeout()
407 TAILQ_REMOVE(&whi->sta_list, sta, list); in wihap_sta_timeout()
408 sta->flags |= WI_SIFLAGS_DEAD; in wihap_sta_timeout()
409 TAILQ_INSERT_HEAD(&whi->sta_list, sta, list); in wihap_sta_timeout()
423 wihap_sta_delete(struct wihap_sta_info *sta) in wihap_sta_delete() argument
425 struct wi_softc *sc = sta->sc; in wihap_sta_delete()
427 int i = sta->asid - 0xc001; in wihap_sta_delete()
429 timeout_del(&sta->tmo); in wihap_sta_delete()
433 TAILQ_REMOVE(&whi->sta_list, sta, list); in wihap_sta_delete()
434 LIST_REMOVE(sta, hash); in wihap_sta_delete()
435 if (sta->challenge) in wihap_sta_delete()
436 free(sta->challenge, M_TEMP, 0); in wihap_sta_delete()
437 free(sta, M_DEVBUF, 0); in wihap_sta_delete()
450 struct wihap_sta_info *sta; in wihap_sta_alloc() local
454 sta = malloc(sizeof(*sta), M_DEVBUF, M_NOWAIT | M_ZERO); in wihap_sta_alloc()
455 if (sta == NULL) in wihap_sta_alloc()
463 sta->asid = 0xc001 + i; in wihap_sta_alloc()
466 TAILQ_INSERT_TAIL(&whi->sta_list, sta, list); in wihap_sta_alloc()
467 LIST_INSERT_HEAD(&whi->sta_hash[hash], sta, hash); in wihap_sta_alloc()
469 sta->sc = sc; in wihap_sta_alloc()
471 bcopy(addr, &sta->addr, ETHER_ADDR_LEN); in wihap_sta_alloc()
472 timeout_set(&sta->tmo, wihap_sta_timeout, sta); in wihap_sta_alloc()
473 timeout_add_sec(&sta->tmo, whi->inactivity_time); in wihap_sta_alloc()
475 return (sta); in wihap_sta_alloc()
486 struct wihap_sta_info *sta; in wihap_sta_find() local
489 LIST_FOREACH(sta, &whi->sta_hash[i], hash) in wihap_sta_find()
490 if (addr_cmp(addr, sta->addr)) in wihap_sta_find()
491 return sta; in wihap_sta_find()
497 wihap_check_rates(struct wihap_sta_info *sta, u_int8_t rates[], int rates_len) in wihap_check_rates() argument
499 struct wi_softc *sc = sta->sc; in wihap_check_rates()
502 sta->rates = 0; in wihap_check_rates()
503 sta->tx_max_rate = 0; in wihap_check_rates()
507 sta->rates |= WI_SUPPRATES_1M; in wihap_check_rates()
510 sta->rates |= WI_SUPPRATES_2M; in wihap_check_rates()
511 if (sta->tx_max_rate < 1) in wihap_check_rates()
512 sta->tx_max_rate = 1; in wihap_check_rates()
515 sta->rates |= WI_SUPPRATES_5M; in wihap_check_rates()
516 if (sta->tx_max_rate < 2) in wihap_check_rates()
517 sta->tx_max_rate = 2; in wihap_check_rates()
520 sta->rates |= WI_SUPPRATES_11M; in wihap_check_rates()
521 sta->tx_max_rate = 3; in wihap_check_rates()
525 sta->rates &= sc->wi_supprates; in wihap_check_rates()
526 sta->tx_curr_rate = sta->tx_max_rate; in wihap_check_rates()
528 return (sta->rates == 0 ? -1 : 0); in wihap_check_rates()
541 struct wihap_sta_info *sta; in wihap_auth_req() local
579 sta = wihap_sta_find(whi, rxfrm->wi_addr2); in wihap_auth_req()
580 if (sta == NULL) { in wihap_auth_req()
601 sta = wihap_sta_alloc(sc, rxfrm->wi_addr2); in wihap_auth_req()
603 if (sta == NULL) { in wihap_auth_req()
609 timeout_add_sec(&sta->tmo, whi->inactivity_time); in wihap_auth_req()
625 sta->flags |= WI_SIFLAGS_AUTHEN; in wihap_auth_req()
635 if (!sta->challenge) { in wihap_auth_req()
636 sta->challenge = malloc(128, M_TEMP, M_NOWAIT); in wihap_auth_req()
637 if (!sta->challenge) in wihap_auth_req()
641 challenge[i] = sta->challenge[i] = in wihap_auth_req()
650 if (challenge_len != 128 || !sta->challenge || in wihap_auth_req()
657 if (sta->challenge[i] != challenge[i]) { in wihap_auth_req()
662 sta->flags |= WI_SIFLAGS_AUTHEN; in wihap_auth_req()
663 free(sta->challenge, M_TEMP, 0); in wihap_auth_req()
664 sta->challenge = NULL; in wihap_auth_req()
717 struct wihap_sta_info *sta; in wihap_assoc_req() local
768 sta = wihap_sta_find(whi, rxfrm->wi_addr2); in wihap_assoc_req()
769 if (sta == NULL || !(sta->flags & WI_SIFLAGS_AUTHEN)) { in wihap_assoc_req()
776 if (wihap_check_rates(sta, rates, rates_len) < 0) { in wihap_assoc_req()
788 sta->capinfo = capinfo; in wihap_assoc_req()
814 asid = sta->asid; in wihap_assoc_req()
816 if (sta->flags & WI_SIFLAGS_ASSOC) { in wihap_assoc_req()
821 sta->flags |= WI_SIFLAGS_ASSOC; in wihap_assoc_req()
822 timeout_add_sec(&sta->tmo, whi->inactivity_time); in wihap_assoc_req()
857 struct wihap_sta_info *sta; in wihap_deauth_req() local
865 sta = wihap_sta_find(whi, rxfrm->wi_addr2); in wihap_deauth_req()
866 if (sta == NULL) { in wihap_deauth_req()
872 wihap_sta_delete(sta); in wihap_deauth_req()
886 struct wihap_sta_info *sta; in wihap_disassoc_req() local
894 sta = wihap_sta_find(whi, rxfrm->wi_addr2); in wihap_disassoc_req()
895 if (sta == NULL) { in wihap_disassoc_req()
900 else if (!(sta->flags & WI_SIFLAGS_AUTHEN)) { in wihap_disassoc_req()
910 sta->flags &= ~WI_SIFLAGS_ASSOC; in wihap_disassoc_req()
1040 struct wihap_sta_info *sta; in wihap_sta_is_assoc() local
1042 sta = wihap_sta_find(whi, addr); in wihap_sta_is_assoc()
1043 if (sta != NULL && (sta->flags & WI_SIFLAGS_ASSOC)) { in wihap_sta_is_assoc()
1045 timeout_add_sec(&sta->tmo, whi->inactivity_time); in wihap_sta_is_assoc()
1060 struct wihap_sta_info *sta; in wihap_check_tx() local
1070 sta = wihap_sta_find(whi, addr); in wihap_check_tx()
1071 if (sta != NULL && (sta->flags & WI_SIFLAGS_ASSOC)) { in wihap_check_tx()
1073 timeout_add_sec(&sta->tmo, whi->inactivity_time); in wihap_check_tx()
1074 *txrate = txratetable[sta->tx_curr_rate]; in wihap_check_tx()
1098 struct wihap_sta_info *sta; in wihap_data_input() local
1129 sta = wihap_sta_find(whi, rxfrm->wi_addr2); in wihap_data_input()
1132 if (sta == NULL || !(sta->flags & WI_SIFLAGS_ASSOC)) { in wihap_data_input()
1143 timeout_add_sec(&sta->tmo, whi->inactivity_time); in wihap_data_input()
1144 sta->sig_info = letoh16(rxfrm->wi_q_info); in wihap_data_input()
1180 struct wihap_sta_info *sta; in wihap_ioctl() local
1199 sta = wihap_sta_find(whi, reqsta.addr); in wihap_ioctl()
1200 if (sta == NULL) in wihap_ioctl()
1204 if (sta->flags & WI_SIFLAGS_ASSOC) in wihap_ioctl()
1205 wihap_sta_disassoc(sc, sta->addr, in wihap_ioctl()
1208 if (sta->flags & WI_SIFLAGS_AUTHEN) in wihap_ioctl()
1209 wihap_sta_deauth(sc, sta->addr, in wihap_ioctl()
1212 wihap_sta_delete(sta); in wihap_ioctl()
1221 sta = wihap_sta_find(whi, reqsta.addr); in wihap_ioctl()
1222 if (sta == NULL) in wihap_ioctl()
1225 reqsta.flags = sta->flags; in wihap_ioctl()
1226 reqsta.asid = sta->asid; in wihap_ioctl()
1227 reqsta.capinfo = sta->capinfo; in wihap_ioctl()
1228 reqsta.sig_info = sta->sig_info; in wihap_ioctl()
1229 reqsta.rates = sta->rates; in wihap_ioctl()
1243 sta = wihap_sta_find(whi, reqsta.addr); in wihap_ioctl()
1244 if (sta != NULL) { in wihap_ioctl()
1254 sta = wihap_sta_alloc(sc, reqsta.addr); in wihap_ioctl()
1255 sta->flags = reqsta.flags; in wihap_ioctl()
1256 timeout_add_sec(&sta->tmo, whi->inactivity_time); in wihap_ioctl()
1282 sta = TAILQ_FIRST(&whi->sta_list); in wihap_ioctl()
1283 while (sta && reqall.size >= n+sizeof(struct hostap_sta)) { in wihap_ioctl()
1285 bcopy(sta->addr, stabuf.addr, ETHER_ADDR_LEN); in wihap_ioctl()
1286 stabuf.asid = sta->asid; in wihap_ioctl()
1287 stabuf.flags = sta->flags; in wihap_ioctl()
1288 stabuf.capinfo = sta->capinfo; in wihap_ioctl()
1289 stabuf.sig_info = sta->sig_info; in wihap_ioctl()
1290 stabuf.rates = sta->rates; in wihap_ioctl()
1297 sta = TAILQ_NEXT(sta, list); in wihap_ioctl()
1311 sta = TAILQ_FIRST(&whi->sta_list); in wihap_ioctl()
1312 while (sta && na->na_size >= in wihap_ioctl()
1315 IEEE80211_ADDR_COPY(nr.nr_macaddr, sta->addr); in wihap_ioctl()
1320 nr.nr_associd = sta->asid; in wihap_ioctl()
1321 nr.nr_rssi = sta->sig_info >> 8; in wihap_ioctl()
1323 nr.nr_capinfo = sta->capinfo; in wihap_ioctl()
1325 if (sta->rates & WI_SUPPRATES_1M) in wihap_ioctl()
1327 if (sta->rates & WI_SUPPRATES_2M) in wihap_ioctl()
1329 if (sta->rates & WI_SUPPRATES_5M) in wihap_ioctl()
1331 if (sta->rates & WI_SUPPRATES_11M) in wihap_ioctl()
1340 sta = TAILQ_NEXT(sta, list); in wihap_ioctl()