Lines Matching refs:ic
78 ieee80211_node_attach(ieee80211com_t *ic) in ieee80211_node_attach() argument
80 struct ieee80211_impl *im = ic->ic_private; in ieee80211_node_attach()
82 ic->ic_node_alloc = ieee80211_node_alloc; in ieee80211_node_attach()
83 ic->ic_node_free = ieee80211_node_free; in ieee80211_node_attach()
84 ic->ic_node_cleanup = ieee80211_node_cleanup; in ieee80211_node_attach()
85 ic->ic_node_getrssi = ieee80211_node_getrssi; in ieee80211_node_attach()
98 ieee80211_node_lateattach(ieee80211com_t *ic) in ieee80211_node_lateattach() argument
104 ic->ic_tim_len = howmany(IEEE80211_AID_MAX, 8) * sizeof (uint8_t); in ieee80211_node_lateattach()
106 ieee80211_node_table_init(ic, &ic->ic_sta, "station", in ieee80211_node_lateattach()
109 ieee80211_node_table_init(ic, &ic->ic_scan, "scan", in ieee80211_node_lateattach()
112 ieee80211_reset_bss(ic); in ieee80211_node_lateattach()
119 ieee80211_node_detach(ieee80211com_t *ic) in ieee80211_node_detach() argument
122 if (ic->ic_bss != NULL) { in ieee80211_node_detach()
123 ieee80211_free_node(ic->ic_bss); in ieee80211_node_detach()
124 ic->ic_bss = NULL; in ieee80211_node_detach()
126 ieee80211_node_table_cleanup(&ic->ic_scan); in ieee80211_node_detach()
127 ieee80211_node_table_cleanup(&ic->ic_sta); in ieee80211_node_detach()
181 ieee80211_node_setchan(ieee80211com_t *ic, ieee80211_node_t *in, in ieee80211_node_setchan() argument
185 chan = ic->ic_curchan; in ieee80211_node_setchan()
195 in->in_htrates = *ieee80211_get_suphtrates(ic, chan); in ieee80211_node_setchan()
197 in->in_rates = *ieee80211_get_suprates(ic, chan); in ieee80211_node_setchan()
206 ieee80211_reset_scan(ieee80211com_t *ic) in ieee80211_reset_scan() argument
208 ieee80211_impl_t *im = ic->ic_private; in ieee80211_reset_scan()
210 if (ic->ic_des_chan != IEEE80211_CHAN_ANYC) { in ieee80211_reset_scan()
213 ieee80211_chan2ieee(ic, ic->ic_des_chan)); in ieee80211_reset_scan()
215 bcopy(ic->ic_chan_active, im->im_chan_scan, in ieee80211_reset_scan()
216 sizeof (ic->ic_chan_active)); in ieee80211_reset_scan()
219 "start chan %u\n", ieee80211_chan2ieee(ic, ic->ic_curchan)); in ieee80211_reset_scan()
230 ieee80211_begin_scan(ieee80211com_t *ic, boolean_t reset) in ieee80211_begin_scan() argument
232 IEEE80211_LOCK(ic); in ieee80211_begin_scan()
234 if (ic->ic_opmode != IEEE80211_M_HOSTAP) in ieee80211_begin_scan()
235 ic->ic_flags |= IEEE80211_F_ASCAN; in ieee80211_begin_scan()
238 (ic->ic_flags & IEEE80211_F_ASCAN) ? "active" : "passive", in ieee80211_begin_scan()
239 ieee80211_phymode_name[ic->ic_curmode], in ieee80211_begin_scan()
240 ieee80211_chan2ieee(ic, ic->ic_curchan)); in ieee80211_begin_scan()
245 ieee80211_reset_scan(ic); in ieee80211_begin_scan()
247 ieee80211_free_allnodes(&ic->ic_scan); in ieee80211_begin_scan()
249 ic->ic_flags |= IEEE80211_F_SCAN; in ieee80211_begin_scan()
250 IEEE80211_UNLOCK(ic); in ieee80211_begin_scan()
253 ieee80211_next_scan(ic); in ieee80211_begin_scan()
265 ieee80211_next_scan(ieee80211com_t *ic) in ieee80211_next_scan() argument
267 ieee80211_impl_t *im = ic->ic_private; in ieee80211_next_scan()
270 IEEE80211_LOCK(ic); in ieee80211_next_scan()
278 chan = ic->ic_curchan; in ieee80211_next_scan()
280 if (++chan > &ic->ic_sup_channels[IEEE80211_CHAN_MAX]) in ieee80211_next_scan()
281 chan = &ic->ic_sup_channels[0]; in ieee80211_next_scan()
283 ieee80211_chan2ieee(ic, chan))) { in ieee80211_next_scan()
285 ieee80211_chan2ieee(ic, chan)); in ieee80211_next_scan()
288 ieee80211_chan2ieee(ic, ic->ic_curchan), in ieee80211_next_scan()
289 ieee80211_chan2ieee(ic, chan)); in ieee80211_next_scan()
290 ic->ic_curchan = chan; in ieee80211_next_scan()
295 ic->ic_bss->in_rates = in ieee80211_next_scan()
296 ic->ic_sup_rates[ieee80211_chan2mode(ic, chan)]; in ieee80211_next_scan()
297 IEEE80211_UNLOCK(ic); in ieee80211_next_scan()
298 ieee80211_new_state(ic, IEEE80211_S_SCAN, -1); in ieee80211_next_scan()
301 } while (chan != ic->ic_curchan); in ieee80211_next_scan()
302 IEEE80211_UNLOCK(ic); in ieee80211_next_scan()
303 ieee80211_end_scan(ic); in ieee80211_next_scan()
323 ieee80211_create_ibss(ieee80211com_t *ic, struct ieee80211_channel *chan) in ieee80211_create_ibss() argument
325 ieee80211_impl_t *im = ic->ic_private; in ieee80211_create_ibss()
329 IEEE80211_LOCK_ASSERT(ic); in ieee80211_create_ibss()
339 nt = &ic->ic_sta; in ieee80211_create_ibss()
345 in = ieee80211_alloc_node(ic, &ic->ic_sta, ic->ic_macaddr); in ieee80211_create_ibss()
350 IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_macaddr); in ieee80211_create_ibss()
351 in->in_esslen = ic->ic_des_esslen; in ieee80211_create_ibss()
352 (void) memcpy(in->in_essid, ic->ic_des_essid, in->in_esslen); in ieee80211_create_ibss()
353 ieee80211_copy_bss(in, ic->ic_bss); in ieee80211_create_ibss()
354 in->in_intval = ic->ic_bintval; in ieee80211_create_ibss()
355 if (ic->ic_flags & IEEE80211_F_PRIVACY) in ieee80211_create_ibss()
357 if (ic->ic_phytype == IEEE80211_T_FH) { in ieee80211_create_ibss()
361 switch (ic->ic_opmode) { in ieee80211_create_ibss()
363 ic->ic_flags |= IEEE80211_F_SIBSS; in ieee80211_create_ibss()
365 if (ic->ic_flags & IEEE80211_F_DESBSSID) in ieee80211_create_ibss()
366 IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_des_bssid); in ieee80211_create_ibss()
371 if (ic->ic_flags & IEEE80211_F_DESBSSID) in ieee80211_create_ibss()
372 IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_des_bssid); in ieee80211_create_ibss()
379 ic->ic_opmode); in ieee80211_create_ibss()
387 ieee80211_node_setchan(ic, in, chan); in ieee80211_create_ibss()
388 ic->ic_curchan = chan; in ieee80211_create_ibss()
389 ic->ic_curmode = ieee80211_chan2mode(ic, chan); in ieee80211_create_ibss()
393 ieee80211_setbasicrates(&in->in_rates, ic->ic_curmode); in ieee80211_create_ibss()
394 IEEE80211_UNLOCK(ic); in ieee80211_create_ibss()
395 ieee80211_sta_join(ic, ieee80211_ref_node(in)); in ieee80211_create_ibss()
396 IEEE80211_LOCK(ic); in ieee80211_create_ibss()
400 ieee80211_reset_bss(ieee80211com_t *ic) in ieee80211_reset_bss() argument
405 ieee80211_node_table_reset(&ic->ic_sta); in ieee80211_reset_bss()
406 ieee80211_reset_erp(ic); in ieee80211_reset_bss()
408 in = ieee80211_alloc_node(ic, &ic->ic_scan, ic->ic_macaddr); in ieee80211_reset_bss()
410 obss = ic->ic_bss; in ieee80211_reset_bss()
411 ic->ic_bss = ieee80211_ref_node(in); in ieee80211_reset_bss()
414 in->in_intval = ic->ic_bintval; in ieee80211_reset_bss()
420 ieee80211_match_bss(ieee80211com_t *ic, ieee80211_node_t *in) in ieee80211_match_bss() argument
426 if (ieee80211_isclr(ic->ic_chan_active, in ieee80211_match_bss()
427 ieee80211_chan2ieee(ic, in->in_chan))) { in ieee80211_match_bss()
430 if (ic->ic_des_chan != IEEE80211_CHAN_ANYC && in ieee80211_match_bss()
431 in->in_chan != ic->ic_des_chan) { in ieee80211_match_bss()
434 if (ic->ic_opmode == IEEE80211_M_IBSS) { in ieee80211_match_bss()
441 if (ic->ic_flags & IEEE80211_F_PRIVACY) { in ieee80211_match_bss()
452 if (ic->ic_des_esslen != 0 && in ieee80211_match_bss()
453 (in->in_esslen != ic->ic_des_esslen || in ieee80211_match_bss()
454 memcmp(in->in_essid, ic->ic_des_essid, ic->ic_des_esslen) != 0)) { in ieee80211_match_bss()
457 if ((ic->ic_flags & IEEE80211_F_DESBSSID) && in ieee80211_match_bss()
458 !IEEE80211_ADDR_EQ(ic->ic_des_bssid, in->in_bssid)) { in ieee80211_match_bss()
480 ieee80211_node_compare(ieee80211com_t *ic, ieee80211_node_t *a, in ieee80211_node_compare() argument
502 rssia = ic->ic_node_getrssi(a); in ieee80211_node_compare()
503 rssib = ic->ic_node_getrssi(b); in ieee80211_node_compare()
528 ieee80211_cancel_scan(ieee80211com_t *ic) in ieee80211_cancel_scan() argument
530 IEEE80211_LOCK(ic); in ieee80211_cancel_scan()
533 (ic->ic_flags & IEEE80211_F_ASCAN) ? "active" : "passive"); in ieee80211_cancel_scan()
534 ic->ic_flags &= ~(IEEE80211_F_SCAN | IEEE80211_F_ASCAN); in ieee80211_cancel_scan()
535 cv_broadcast(&((ieee80211_impl_t *)ic->ic_private)->im_scan_cv); in ieee80211_cancel_scan()
536 IEEE80211_UNLOCK(ic); in ieee80211_cancel_scan()
549 ieee80211_end_scan(ieee80211com_t *ic) in ieee80211_end_scan() argument
551 ieee80211_node_table_t *nt = &ic->ic_scan; in ieee80211_end_scan()
555 ieee80211_cancel_scan(ic); in ieee80211_end_scan()
557 ieee80211_notify(ic, EVENT_SCAN_RESULTS); in ieee80211_end_scan()
558 IEEE80211_LOCK(ic); in ieee80211_end_scan()
566 if (in == NULL && (ic->ic_flags & IEEE80211_F_WPA) == 0) { in ieee80211_end_scan()
570 if (ic->ic_opmode == IEEE80211_M_IBSS && in ieee80211_end_scan()
571 (ic->ic_flags & IEEE80211_F_IBSSON) && in ieee80211_end_scan()
572 ic->ic_des_esslen != 0) { in ieee80211_end_scan()
573 ieee80211_create_ibss(ic, ic->ic_ibss_chan); in ieee80211_end_scan()
574 IEEE80211_UNLOCK(ic); in ieee80211_end_scan()
581 ieee80211_reset_scan(ic); in ieee80211_end_scan()
582 ic->ic_flags |= IEEE80211_F_SCAN | IEEE80211_F_ASCAN; in ieee80211_end_scan()
583 IEEE80211_UNLOCK(ic); in ieee80211_end_scan()
585 ieee80211_next_scan(ic); in ieee80211_end_scan()
589 if (ic->ic_flags & IEEE80211_F_SCANONLY || in ieee80211_end_scan()
590 ic->ic_flags & IEEE80211_F_WPA) { /* scan only */ in ieee80211_end_scan()
591 ic->ic_flags &= ~IEEE80211_F_SCANONLY; in ieee80211_end_scan()
592 IEEE80211_UNLOCK(ic); in ieee80211_end_scan()
593 ieee80211_new_state(ic, IEEE80211_S_INIT, -1); in ieee80211_end_scan()
620 if (ieee80211_match_bss(ic, in) == 0) { in ieee80211_end_scan()
624 selbs = ieee80211_node_compare(ic, selbs, in); in ieee80211_end_scan()
633 IEEE80211_UNLOCK(ic); in ieee80211_end_scan()
634 ieee80211_sta_join(ic, selbs); in ieee80211_end_scan()
652 ieee80211com_t *ic = in->in_ic; in ieee80211_ibss_merge() local
654 if (in == ic->ic_bss || in ieee80211_ibss_merge()
655 IEEE80211_ADDR_EQ(in->in_bssid, ic->ic_bss->in_bssid)) { in ieee80211_ibss_merge()
659 if (ieee80211_match_bss(ic, in) != 0) { /* capabilities mismatch */ in ieee80211_ibss_merge()
667 (ic->ic_flags & IEEE80211_F_SHPREAMBLE) ? "short" : "long", in ieee80211_ibss_merge()
668 (ic->ic_flags & IEEE80211_F_SHSLOT) ? "short" : "long", in ieee80211_ibss_merge()
669 (ic->ic_flags&IEEE80211_F_USEPROT) ? ", protection" : ""); in ieee80211_ibss_merge()
670 ieee80211_sta_join(ic, ieee80211_ref_node(in)); in ieee80211_ibss_merge()
678 ieee80211_setcurchan(ieee80211com_t *ic, struct ieee80211_channel *c) in ieee80211_setcurchan() argument
680 ic->ic_curchan = c; in ieee80211_setcurchan()
681 ic->ic_curmode = ieee80211_chan2mode(ic, ic->ic_curchan); in ieee80211_setcurchan()
682 if (ic->ic_set_channel != NULL) in ieee80211_setcurchan()
683 ic->ic_set_channel(ic); in ieee80211_setcurchan()
691 ieee80211_sta_join(ieee80211com_t *ic, ieee80211_node_t *selbs) in ieee80211_sta_join() argument
693 ieee80211_impl_t *im = ic->ic_private; in ieee80211_sta_join()
696 IEEE80211_LOCK(ic); in ieee80211_sta_join()
697 if (ic->ic_opmode == IEEE80211_M_IBSS) { in ieee80211_sta_join()
709 nt = &ic->ic_sta; in ieee80211_sta_join()
719 obss = ic->ic_bss; in ieee80211_sta_join()
720 ic->ic_bss = selbs; /* caller assumed to bump refcnt */ in ieee80211_sta_join()
725 ic->ic_curmode = ieee80211_chan2mode(ic, selbs->in_chan); in ieee80211_sta_join()
726 ic->ic_curchan = selbs->in_chan; in ieee80211_sta_join()
727 ic->ic_phytype = selbs->in_phytype; in ieee80211_sta_join()
733 ieee80211_reset_erp(ic); in ieee80211_sta_join()
734 ieee80211_wme_initparams(ic); in ieee80211_sta_join()
736 IEEE80211_UNLOCK(ic); in ieee80211_sta_join()
737 if (ic->ic_opmode == IEEE80211_M_STA) in ieee80211_sta_join()
738 ieee80211_new_state(ic, IEEE80211_S_AUTH, -1); in ieee80211_sta_join()
740 ieee80211_new_state(ic, IEEE80211_S_RUN, -1); in ieee80211_sta_join()
748 ieee80211_sta_leave(ieee80211com_t *ic, ieee80211_node_t *in) in ieee80211_sta_leave() argument
750 IEEE80211_LOCK(ic); in ieee80211_sta_leave()
751 ic->ic_node_cleanup(in); in ieee80211_sta_leave()
752 ieee80211_notify_node_leave(ic, in); in ieee80211_sta_leave()
753 IEEE80211_UNLOCK(ic); in ieee80211_sta_leave()
763 ieee80211_node_alloc(ieee80211com_t *ic) in ieee80211_node_alloc() argument
797 ieee80211com_t *ic = in->in_ic; in ieee80211_node_free() local
799 ic->ic_node_cleanup(in); in ieee80211_node_free()
839 ieee80211_setup_node(ieee80211com_t *ic, ieee80211_node_table_t *nt, in ieee80211_setup_node() argument
849 in->in_ic = ic; in ieee80211_setup_node()
854 in->in_txpower = ic->ic_txpowlimit; /* max power */ in ieee80211_setup_node()
858 ieee80211_crypto_resetkey(ic, &in->in_ucastkey, IEEE80211_KEYIX_NONE); in ieee80211_setup_node()
877 ieee80211_alloc_node(ieee80211com_t *ic, ieee80211_node_table_t *nt, in ieee80211_alloc_node() argument
882 in = ic->ic_node_alloc(ic); in ieee80211_alloc_node()
884 ieee80211_setup_node(ic, nt, in, macaddr); in ieee80211_alloc_node()
895 ieee80211_tmp_node(ieee80211com_t *ic, const uint8_t *macaddr) in ieee80211_tmp_node() argument
899 in = ic->ic_node_alloc(ic); in ieee80211_tmp_node()
905 IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_bss->in_bssid); in ieee80211_tmp_node()
907 in->in_txpower = ic->ic_bss->in_txpower; in ieee80211_tmp_node()
909 ieee80211_node_setchan(ic, in, ic->ic_bss->in_chan); in ieee80211_tmp_node()
910 ieee80211_crypto_resetkey(ic, &in->in_ucastkey, in ieee80211_tmp_node()
914 in->in_ic = ic; in ieee80211_tmp_node()
929 ieee80211com_t *ic = nt->nt_ic; in ieee80211_dup_bss() local
932 in = ieee80211_alloc_node(ic, nt, macaddr); in ieee80211_dup_bss()
937 ieee80211_copy_bss(in, ic->ic_bss); in ieee80211_dup_bss()
938 IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_bss->in_bssid); in ieee80211_dup_bss()
939 ieee80211_node_setchan(ic, in, ic->ic_bss->in_chan); in ieee80211_dup_bss()
1024 ieee80211com_t *ic = nt->nt_ic; in ieee80211_fakeup_adhoc_node() local
1032 in->in_rates = ic->ic_bss->in_rates; in ieee80211_fakeup_adhoc_node()
1033 if (ic->ic_node_newassoc != NULL) in ieee80211_fakeup_adhoc_node()
1034 ic->ic_node_newassoc(in, 1); in ieee80211_fakeup_adhoc_node()
1072 ieee80211_add_scan(ieee80211com_t *ic, const struct ieee80211_scanparams *sp, in ieee80211_add_scan() argument
1075 ieee80211_node_table_t *nt = &ic->ic_scan; in ieee80211_add_scan()
1084 in = ieee80211_alloc_node(ic, nt, wh->i_addr3); in ieee80211_add_scan()
1093 ieee80211_copy_bss(in, ic->ic_bss); in ieee80211_add_scan()
1094 ieee80211_node_setchan(ic, in, ic->ic_curchan); in ieee80211_add_scan()
1118 in->in_chan = &ic->ic_sup_channels[sp->chan]; in ieee80211_add_scan()
1190 ieee80211_add_neighbor(ieee80211com_t *ic, const struct ieee80211_frame *wh, in ieee80211_add_neighbor() argument
1195 in = ieee80211_dup_bss(&ic->ic_sta, wh->i_addr2); in ieee80211_add_neighbor()
1198 if (ic->ic_node_newassoc != NULL) in ieee80211_add_neighbor()
1199 ic->ic_node_newassoc(in, 1); in ieee80211_add_neighbor()
1224 ieee80211_find_rxnode(ieee80211com_t *ic, const struct ieee80211_frame *wh) in ieee80211_find_rxnode() argument
1230 if (ic->ic_opmode == IEEE80211_M_STA || in ieee80211_find_rxnode()
1231 (ic->ic_flags & IEEE80211_F_SCAN)) { in ieee80211_find_rxnode()
1232 nt = &ic->ic_scan; in ieee80211_find_rxnode()
1234 nt = &ic->ic_sta; in ieee80211_find_rxnode()
1246 in = ieee80211_ref_node(ic->ic_bss); in ieee80211_find_rxnode()
1260 ieee80211_find_txnode(ieee80211com_t *ic, const uint8_t *daddr) in ieee80211_find_txnode() argument
1262 ieee80211_node_table_t *nt = &ic->ic_sta; in ieee80211_find_txnode()
1272 if (ic->ic_opmode == IEEE80211_M_STA || IEEE80211_IS_MULTICAST(daddr)) in ieee80211_find_txnode()
1273 in = ieee80211_ref_node(ic->ic_bss); in ieee80211_find_txnode()
1279 if (ic->ic_opmode == IEEE80211_M_IBSS) { in ieee80211_find_txnode()
1309 ieee80211com_t *ic = in->in_ic; in ieee80211_free_node_locked() local
1318 ic->ic_node_free(in); in ieee80211_free_node_locked()
1412 ieee80211com_t *ic = nt->nt_ic; in ieee80211_timeout_scan_candidates() local
1416 in = ic->ic_bss; in ieee80211_timeout_scan_candidates()
1435 ieee80211com_t *ic = nt->nt_ic; in ieee80211_timeout_stations() local
1436 ieee80211_impl_t *im = ic->ic_private; in ieee80211_timeout_stations()
1441 IEEE80211_LOCK_ASSERT(ic); in ieee80211_timeout_stations()
1442 isadhoc = (ic->ic_opmode == IEEE80211_M_IBSS || in ieee80211_timeout_stations()
1443 ic->ic_opmode == IEEE80211_M_AHDEMO); in ieee80211_timeout_stations()
1459 if (in == ic->ic_bss) in ieee80211_timeout_stations()
1474 IEEE80211_UNLOCK(ic); in ieee80211_timeout_stations()
1476 IEEE80211_LOCK(ic); in ieee80211_timeout_stations()
1501 IEEE80211_UNLOCK(ic); in ieee80211_timeout_stations()
1502 IEEE80211_SEND_MGMT(ic, in, in ieee80211_timeout_stations()
1505 IEEE80211_LOCK(ic); in ieee80211_timeout_stations()
1507 ieee80211_node_leave(ic, in); in ieee80211_timeout_stations()
1551 ieee80211_node_leave(ieee80211com_t *ic, ieee80211_node_t *in) in ieee80211_node_leave() argument
1555 ASSERT(ic->ic_opmode == IEEE80211_M_IBSS); in ieee80211_node_leave()
1578 ieee80211_node_table_init(ieee80211com_t *ic, ieee80211_node_table_t *nt, in ieee80211_node_table_init() argument
1587 nt->nt_ic = ic; in ieee80211_node_table_init()