Lines Matching refs:ic

92 static void ieee80211_node_table_init(struct ieee80211com *ic,
104 ieee80211_node_attach(struct ieee80211com *ic)
107 ieee80211_ageq_init(&ic->ic_stageq, ic->ic_max_keyix * 8,
109 ieee80211_node_table_init(ic, &ic->ic_sta, "station",
110 IEEE80211_INACT_INIT, ic->ic_max_keyix);
111 callout_init(&ic->ic_inact, 1);
112 callout_reset(&ic->ic_inact, IEEE80211_INACT_WAIT*hz,
113 ieee80211_node_timeout, ic);
115 ic->ic_node_alloc = node_alloc;
116 ic->ic_node_free = node_free;
117 ic->ic_node_cleanup = node_cleanup;
118 ic->ic_node_age = node_age;
119 ic->ic_node_drain = node_age; /* NB: same as age */
120 ic->ic_node_getrssi = node_getrssi;
121 ic->ic_node_getsignal = node_getsignal;
122 ic->ic_node_getmimoinfo = node_getmimoinfo;
128 ic->ic_flags_ext |= IEEE80211_FEXT_INACT; /* inactivity processing */
132 ieee80211_node_detach(struct ieee80211com *ic)
135 callout_drain(&ic->ic_inact);
136 ieee80211_node_table_cleanup(&ic->ic_sta);
137 ieee80211_ageq_drain(&ic->ic_stageq);
138 ieee80211_ageq_cleanup(&ic->ic_stageq);
190 struct ieee80211com *ic = vap->iv_ic;
192 ieee80211_node_table_reset(&ic->ic_sta, vap);
277 struct ieee80211com *ic = ni->ni_ic;
290 ni->ni_htrates = *ieee80211_get_suphtrates(ic, chan);
307 ni->ni_rates = *ieee80211_get_suprates(ic, chan);
324 struct ieee80211com *ic = vap->iv_ic;
330 ieee80211_chan2ieee(ic, chan),
333 ni = ieee80211_alloc_node(&ic->ic_sta, vap, vap->iv_myaddr);
343 ni->ni_intval = ic->ic_bintval;
346 if (ic->ic_phytype == IEEE80211_T_FH) {
378 if (ic->ic_bsschan != IEEE80211_CHAN_ANYC &&
379 ic->ic_bsschan->ic_freq != chan->ic_freq &&
380 IEEE80211_IS_CHAN_CACDONE(ic->ic_bsschan))
381 ieee80211_dfs_cac_clear(ic, ic->ic_bsschan);
382 ic->ic_bsschan = chan;
384 ic->ic_curmode = ieee80211_chan2mode(chan);
424 struct ieee80211com *ic = vap->iv_ic;
427 ieee80211_node_table_reset(&ic->ic_sta, vap);
429 ieee80211_reset_erp(ic);
431 ni = ieee80211_alloc_node(&ic->ic_sta, vap, vap->iv_myaddr);
437 ni->ni_intval = ic->ic_bintval;
463 struct ieee80211com *ic = ni->ni_ic;
466 if (isclr(ic->ic_chan_active, ieee80211_chan2ieee(ic, ni->ni_chan)))
503 struct ieee80211com *ic = ni->ni_ic;
508 if (isclr(ic->ic_chan_active, ieee80211_chan2ieee(ic, ni->ni_chan)))
539 ieee80211_chan2ieee(ic, ni->ni_chan), fail & 0x01 ? '!' : ' ');
655 struct ieee80211com *ic = ni->ni_ic;
664 ic->ic_flags&IEEE80211_F_SHPREAMBLE ? "short" : "long",
665 ic->ic_flags&IEEE80211_F_SHSLOT ? "short" : "long",
666 ic->ic_flags&IEEE80211_F_USEPROT ? ", protection" : ""
676 gethtadjustflags(struct ieee80211com *ic)
683 TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) {
708 ieee80211_sync_curchan(struct ieee80211com *ic)
712 c = ieee80211_ht_adjust_channel(ic, ic->ic_curchan, gethtadjustflags(ic));
713 if (c != ic->ic_curchan) {
714 ic->ic_curchan = c;
715 ic->ic_curmode = ieee80211_chan2mode(ic->ic_curchan);
716 ic->ic_rt = ieee80211_get_ratetable(ic->ic_curchan);
717 IEEE80211_UNLOCK(ic);
718 ic->ic_set_channel(ic);
719 ieee80211_radiotap_chan_change(ic);
720 IEEE80211_LOCK(ic);
729 ieee80211_setupcurchan(struct ieee80211com *ic, struct ieee80211_channel *c)
731 if (ic->ic_htcaps & IEEE80211_HTC_HT) {
732 int flags = gethtadjustflags(ic);
740 c = ieee80211_ht_adjust_channel(ic, c, flags);
742 ic->ic_bsschan = ic->ic_curchan = c;
743 ic->ic_curmode = ieee80211_chan2mode(ic->ic_curchan);
744 ic->ic_rt = ieee80211_get_ratetable(ic->ic_curchan);
752 ieee80211_setcurchan(struct ieee80211com *ic, struct ieee80211_channel *c)
754 ieee80211_setupcurchan(ic, c);
755 ieee80211_runtask(ic, &ic->ic_chan_task);
759 ieee80211_update_chw(struct ieee80211com *ic)
762 ieee80211_setupcurchan(ic, ic->ic_curchan);
763 ieee80211_runtask(ic, &ic->ic_chw_task);
774 struct ieee80211com *ic = selbs->ni_ic;
810 ieee80211_setcurchan(ic, selbs->ni_chan);
816 ieee80211_reset_erp(ic);
842 struct ieee80211com *ic = vap->iv_ic;
845 ni = ieee80211_alloc_node(&ic->ic_sta, vap, se->se_macaddr);
937 struct ieee80211com *ic = ni->ni_ic;
939 ic->ic_node_cleanup(ni);
1066 struct ieee80211com *ic = ni->ni_ic;
1096 ieee80211_ageq_drain_node(&ic->ic_stageq, ni);
1145 struct ieee80211com *ic = ni->ni_ic;
1148 ic->ic_node_cleanup(ni);
1222 struct ieee80211com *ic = nt->nt_ic;
1226 ni = ic->ic_node_alloc(vap, macaddr);
1237 hash = IEEE80211_NODE_HASH(ic, macaddr);
1241 ni->ni_txpower = ic->ic_txpowlimit; /* max power */
1242 ni->ni_txparms = &vap->iv_txparms[ieee80211_chan2mode(ic->ic_curchan)];
1258 ni->ni_ic = ic;
1277 struct ieee80211com *ic = vap->iv_ic;
1280 ni = ic->ic_node_alloc(vap, macaddr);
1288 ni->ni_ic = ic; /* NB: needed to set channel */
1314 struct ieee80211com *ic = vap->iv_ic;
1317 ni = ieee80211_alloc_node(&ic->ic_sta, vap, macaddr);
1341 struct ieee80211com *ic = vap->iv_ic;
1345 ni = ieee80211_alloc_node(&ic->ic_sta, vap, bssid);
1369 if ((ic->ic_htcaps & IEEE80211_HTC_HT) &&
1382 c = ieee80211_find_channel(ic,
1509 struct ieee80211com *ic = vap->iv_ic;
1532 if (ic->ic_newassoc != NULL)
1533 ic->ic_newassoc(ni, 1);
1626 struct ieee80211com *ic = vap->iv_ic;
1633 if (ic->ic_newassoc != NULL)
1634 ic->ic_newassoc(ni, 1);
1664 ieee80211_find_rxnode_debug(struct ieee80211com *ic,
1667 ieee80211_find_rxnode(struct ieee80211com *ic,
1674 nt = &ic->ic_sta;
1692 ieee80211_find_rxnode_withkey_debug(struct ieee80211com *ic,
1696 ieee80211_find_rxnode_withkey(struct ieee80211com *ic,
1703 nt = &ic->ic_sta;
1883 struct ieee80211com *ic = ni->ni_ic;
1884 struct ieee80211_node_table *nt = &ic->ic_sta;
1971 ieee80211_node_table_init(struct ieee80211com *ic,
1976 nt->nt_ic = ic;
1977 IEEE80211_NODE_LOCK_INIT(nt, ic->ic_name);
1988 ic_printf(ic,
2054 struct ieee80211com *ic = ni->ni_ic;
2107 ic->ic_node_age(ni);
2174 ieee80211_timeout_stations(struct ieee80211com *ic)
2176 struct ieee80211_node_table *nt = &ic->ic_sta;
2186 ieee80211_drain(struct ieee80211com *ic)
2188 struct ieee80211_node_table *nt = &ic->ic_sta;
2226 ic->ic_node_drain(ni);
2237 struct ieee80211com *ic = arg;
2248 if ((ic->ic_flags & IEEE80211_F_CSAPENDING) == 0) {
2249 ieee80211_scan_timeout(ic);
2250 ieee80211_timeout_stations(ic);
2251 ieee80211_ageq_age(&ic->ic_stageq, IEEE80211_INACT_WAIT);
2253 IEEE80211_LOCK(ic);
2254 ieee80211_erp_timeout(ic);
2255 ieee80211_ht_timeout(ic);
2256 IEEE80211_UNLOCK(ic);
2258 callout_reset(&ic->ic_inact, IEEE80211_INACT_WAIT*hz,
2259 ieee80211_node_timeout, ic);
2414 ieee80211_notify_erp_locked(struct ieee80211com *ic)
2418 IEEE80211_LOCK_ASSERT(ic);
2420 TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next)
2426 ieee80211_notify_erp(struct ieee80211com *ic)
2428 IEEE80211_LOCK(ic);
2429 ieee80211_notify_erp_locked(ic);
2430 IEEE80211_UNLOCK(ic);
2439 struct ieee80211com *ic = ni->ni_ic;
2441 IEEE80211_LOCK_ASSERT(ic);
2451 ic->ic_longslotsta++;
2454 ic->ic_longslotsta);
2456 if (!IEEE80211_IS_CHAN_108G(ic->ic_bsschan)) {
2462 ieee80211_set_shortslottime(ic, 0);
2471 ic->ic_nonerpsta++;
2474 ic->ic_nonerpsta);
2482 ic->ic_flags |= IEEE80211_F_USEBARKER;
2483 ic->ic_flags &= ~IEEE80211_F_SHPREAMBLE;
2489 if (ic->ic_protmode != IEEE80211_PROT_NONE &&
2490 ic->ic_nonerpsta == 1 &&
2491 (ic->ic_flags_ext & IEEE80211_FEXT_NONERP_PR) == 0) {
2494 ic->ic_flags |= IEEE80211_F_USEPROT;
2495 ieee80211_notify_erp_locked(ic);
2504 struct ieee80211com *ic = ni->ni_ic;
2527 IEEE80211_LOCK(ic);
2530 ic->ic_sta_assoc++;
2532 if (IEEE80211_IS_CHAN_HT(ic->ic_bsschan))
2534 if (IEEE80211_IS_CHAN_ANYG(ic->ic_bsschan) &&
2535 IEEE80211_IS_CHAN_FULL(ic->ic_bsschan))
2537 IEEE80211_UNLOCK(ic);
2546 ic->ic_flags & IEEE80211_F_SHPREAMBLE ? "short" : "long",
2547 ic->ic_flags & IEEE80211_F_SHSLOT ? "short" : "long",
2548 ic->ic_flags & IEEE80211_F_USEPROT ? ", protection" : "",
2565 if (ic->ic_newassoc != NULL)
2566 ic->ic_newassoc(ni, newassoc);
2576 disable_protection(struct ieee80211com *ic)
2578 KASSERT(ic->ic_nonerpsta == 0 &&
2579 (ic->ic_flags_ext & IEEE80211_FEXT_NONERP_PR) == 0,
2580 ("%d non ERP stations, flags 0x%x", ic->ic_nonerpsta,
2581 ic->ic_flags_ext));
2583 ic->ic_flags &= ~IEEE80211_F_USEPROT;
2585 if (ic->ic_caps & IEEE80211_C_SHPREAMBLE) {
2586 ic->ic_flags |= IEEE80211_F_SHPREAMBLE;
2587 ic->ic_flags &= ~IEEE80211_F_USEBARKER;
2589 ieee80211_notify_erp_locked(ic);
2598 struct ieee80211com *ic = ni->ni_ic;
2600 IEEE80211_LOCK_ASSERT(ic);
2602 KASSERT(IEEE80211_IS_CHAN_ANYG(ic->ic_bsschan),
2603 ("not in 11g, bss %u:0x%x", ic->ic_bsschan->ic_freq,
2604 ic->ic_bsschan->ic_flags));
2610 KASSERT(ic->ic_longslotsta > 0,
2611 ("bogus long slot station count %d", ic->ic_longslotsta));
2612 ic->ic_longslotsta--;
2615 ic->ic_longslotsta);
2616 if (ic->ic_longslotsta == 0) {
2621 if ((ic->ic_caps & IEEE80211_C_SHSLOT) &&
2622 ic->ic_opmode != IEEE80211_M_IBSS) {
2627 ieee80211_set_shortslottime(ic, 1);
2635 KASSERT(ic->ic_nonerpsta > 0,
2636 ("bogus non-ERP station count %d", ic->ic_nonerpsta));
2637 ic->ic_nonerpsta--;
2639 "non-ERP station leaves, count now %d%s", ic->ic_nonerpsta,
2640 (ic->ic_flags_ext & IEEE80211_FEXT_NONERP_PR) ?
2642 if (ic->ic_nonerpsta == 0 &&
2643 (ic->ic_flags_ext & IEEE80211_FEXT_NONERP_PR) == 0) {
2646 disable_protection(ic);
2660 ieee80211_erp_timeout(struct ieee80211com *ic)
2663 IEEE80211_LOCK_ASSERT(ic);
2665 if ((ic->ic_flags_ext & IEEE80211_FEXT_NONERP_PR) &&
2666 ieee80211_time_after(ticks, ic->ic_lastnonerp + IEEE80211_NONERP_PRESENT_AGE)) {
2671 ic->ic_flags_ext &= ~IEEE80211_FEXT_NONERP_PR;
2672 if (ic->ic_nonerpsta == 0)
2673 disable_protection(ic);
2684 struct ieee80211com *ic = ni->ni_ic;
2709 IEEE80211_LOCK(ic);
2712 ic->ic_sta_assoc--;
2714 if (IEEE80211_IS_CHAN_HT(ic->ic_bsschan))
2716 if (IEEE80211_IS_CHAN_ANYG(ic->ic_bsschan) &&
2717 IEEE80211_IS_CHAN_FULL(ic->ic_bsschan))
2719 IEEE80211_UNLOCK(ic);
2812 struct ieee80211com *ic = vap->iv_ic;
2821 ieee80211_iterate_nodes(&ic->ic_sta, get_adhoc_rssi, &info);
2824 ieee80211_iterate_nodes(&ic->ic_sta, get_hostap_rssi, &info);
2828 ieee80211_iterate_nodes(&ic->ic_sta, get_mesh_rssi, &info);
2835 info.rssi_total = ic->ic_node_getrssi(vap->iv_bss);