Lines Matching refs:ic

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