Lines Matching refs:ic
102 ieee80211_add_vap(struct ieee80211com *ic)
110 ic->ic_vap = 0;
112 ic->ic_vap += NBBY;
116 ic->ic_vap++;
117 setbit(ieee80211_vapmap, ic->ic_vap);
118 SLIST_INSERT_HEAD(&ieee80211_list, ic, ic_next);
124 ieee80211_remove_vap(struct ieee80211com *ic)
129 SLIST_REMOVE(&ieee80211_list, ic, ieee80211com, ic_next);
130 IASSERT(ic->ic_vap < sizeof(ieee80211_vapmap)*NBBY,
131 ("invalid vap id %d", ic->ic_vap));
132 IASSERT(isset(ieee80211_vapmap, ic->ic_vap),
133 ("vap id %d not allocated", ic->ic_vap));
134 clrbit(ieee80211_vapmap, ic->ic_vap);
154 ieee80211_init_link_state(struct ieee80211com *ic)
156 struct ifnet *ifp = ic->ic_ifp;
165 switch (ic->ic_opmode) {
178 ieee80211_ifattach(struct ieee80211com *ic)
180 struct ifnet *ifp = ic->ic_ifp;
188 ether_ifattach(ifp, ic->ic_myaddr);
190 sizeof(struct ieee80211_frame_addr4), &ic->ic_rawbpf);
192 ieee80211_crypto_attach(ic);
199 memset(ic->ic_chan_avail, 0, sizeof(ic->ic_chan_avail));
200 ic->ic_modecaps |= 1<<IEEE80211_MODE_AUTO;
202 c = &ic->ic_channels[i];
207 if (i != ieee80211_chan2ieee(ic, c)) {
214 setbit(ic->ic_chan_avail, i);
219 ic->ic_modecaps |= 1<<IEEE80211_MODE_11A;
221 ic->ic_modecaps |= 1<<IEEE80211_MODE_11B;
223 ic->ic_modecaps |= 1<<IEEE80211_MODE_11G;
225 ic->ic_modecaps |= 1<<IEEE80211_MODE_FH;
227 ic->ic_modecaps |= 1<<IEEE80211_MODE_TURBO_A;
229 ic->ic_modecaps |= 1<<IEEE80211_MODE_TURBO_G;
230 if (ic->ic_curchan == NULL) {
232 ic->ic_curchan = &ic->ic_channels[i];
236 /* validate ic->ic_curmode */
237 if ((ic->ic_modecaps & (1<<ic->ic_curmode)) == 0)
238 ic->ic_curmode = IEEE80211_MODE_AUTO;
239 ic->ic_des_chan = IEEE80211_CHAN_ANYC; /* any channel is ok */
244 if (ic->ic_caps & IEEE80211_C_WME)
245 ic->ic_flags |= IEEE80211_F_WME;
247 (void) ieee80211_setmode(ic, ic->ic_curmode);
249 if (ic->ic_bintval == 0)
250 ic->ic_bintval = IEEE80211_BINTVAL_DEFAULT;
251 ic->ic_bmisstimeout = 7*ic->ic_bintval; /* default 7 beacons */
252 ic->ic_dtim_period = IEEE80211_DTIM_DEFAULT;
253 IEEE80211_BEACON_LOCK_INIT(ic, "beacon");
255 if (ic->ic_lintval == 0)
256 ic->ic_lintval = ic->ic_bintval;
257 ic->ic_txpowlimit = IEEE80211_TXPOWER_MAX;
259 LIST_INSERT_HEAD(&ieee80211com_head, ic, ic_list);
260 ieee80211_node_attach(ic);
261 ieee80211_proto_attach(ic);
263 ieee80211_add_vap(ic);
265 ieee80211_sysctl_attach(ic); /* NB: requires ic_vap */
271 if (ic->ic_reset == NULL)
272 ic->ic_reset = ieee80211_default_reset;
274 ieee80211_init_link_state(ic);
278 ieee80211_ifdetach(struct ieee80211com *ic)
280 struct ifnet *ifp = ic->ic_ifp;
282 ieee80211_remove_vap(ic);
284 ieee80211_sysctl_detach(ic);
285 ieee80211_proto_detach(ic);
286 ieee80211_crypto_detach(ic);
287 ieee80211_node_detach(ic);
288 LIST_REMOVE(ic, ic_list);
289 ifmedia_fini(&ic->ic_media);
291 IEEE80211_BEACON_LOCK_DESTROY(ic);
327 ieee80211_chan2ieee(struct ieee80211com *ic, struct ieee80211_channel *c)
329 if (ic->ic_channels <= c && c <= &ic->ic_channels[IEEE80211_CHAN_MAX])
330 return c - ic->ic_channels;
334 if_printf(ic->ic_ifp, "invalid channel freq %u flags %x\n",
338 if_printf(ic->ic_ifp, "invalid channel (NULL)\n");
375 ieee80211_media_init_with_lock(struct ieee80211com *ic,
382 struct ifnet *ifp = ic->ic_ifp;
392 ieee80211_node_lateattach(ic);
395 ic->ic_caps &= ~IEEE80211_C_HOSTAP;
401 ifmedia_init_with_lock(&ic->ic_media, 0,
415 if ((ic->ic_modecaps & (1<<mode)) == 0)
418 ADD(ic, IFM_AUTO, mopt); /* e.g. 11a auto */
419 if (ic->ic_caps & IEEE80211_C_IBSS)
420 ADD(ic, IFM_AUTO, mopt | IFM_IEEE80211_ADHOC);
421 if (ic->ic_caps & IEEE80211_C_HOSTAP)
422 ADD(ic, IFM_AUTO, mopt | IFM_IEEE80211_HOSTAP);
423 if (ic->ic_caps & IEEE80211_C_AHDEMO)
424 ADD(ic, IFM_AUTO, mopt | IFM_IEEE80211_ADHOC | IFM_FLAG0);
425 if (ic->ic_caps & IEEE80211_C_MONITOR)
426 ADD(ic, IFM_AUTO, mopt | IFM_IEEE80211_MONITOR);
429 rs = &ic->ic_sup_rates[mode];
432 mword = ieee80211_rate2media(ic, rate, mode);
435 ADD(ic, mword, mopt);
436 if (ic->ic_caps & IEEE80211_C_IBSS)
437 ADD(ic, mword, mopt | IFM_IEEE80211_ADHOC);
438 if (ic->ic_caps & IEEE80211_C_HOSTAP)
439 ADD(ic, mword, mopt | IFM_IEEE80211_HOSTAP);
440 if (ic->ic_caps & IEEE80211_C_AHDEMO)
441 ADD(ic, mword, mopt | IFM_IEEE80211_ADHOC | IFM_FLAG0);
442 if (ic->ic_caps & IEEE80211_C_MONITOR)
443 ADD(ic, mword, mopt | IFM_IEEE80211_MONITOR);
462 mword = ieee80211_rate2media(ic, allrates.rs_rates[i],
467 ADD(ic, mword, 0);
468 if (ic->ic_caps & IEEE80211_C_IBSS)
469 ADD(ic, mword, IFM_IEEE80211_ADHOC);
470 if (ic->ic_caps & IEEE80211_C_HOSTAP)
471 ADD(ic, mword, IFM_IEEE80211_HOSTAP);
472 if (ic->ic_caps & IEEE80211_C_AHDEMO)
473 ADD(ic, mword, IFM_IEEE80211_ADHOC | IFM_FLAG0);
474 if (ic->ic_caps & IEEE80211_C_MONITOR)
475 ADD(ic, mword, IFM_IEEE80211_MONITOR);
478 ifmedia_set(&ic->ic_media, imr.ifm_active);
486 ieee80211_media_init(struct ieee80211com *ic,
490 ieee80211_media_init_with_lock(ic, media_change, media_stat, NULL);
494 ieee80211_announce(struct ieee80211com *ic)
496 struct ifnet *ifp = ic->ic_ifp;
501 if ((ic->ic_modecaps & (1<<mode)) == 0)
505 rs = &ic->ic_sup_rates[mode];
508 mword = ieee80211_rate2media(ic, rate, mode);
520 findrate(struct ieee80211com *ic, enum ieee80211_phymode mode, int rate)
524 int i, nrates = ic->ic_sup_rates[mode].rs_nrates;
526 if (IEEERATE(ic, mode, i) == rate)
539 struct ieee80211com *ic;
542 SLIST_FOREACH(ic, &ieee80211_list, ic_next)
543 if (IEEE80211_ADDR_EQ(mac, ic->ic_myaddr))
546 return ic;
553 struct ieee80211com *ic;
557 SLIST_FOREACH(ic, &ieee80211_list, ic_next)
558 if (ic->ic_ifp == ifp)
561 return ic;
570 struct ieee80211com *ic;
576 ic = ieee80211_find_instance(ifp);
577 if (!ic) {
581 ime = ic->ic_media.ifm_cur;
619 if ((ic->ic_modecaps & (1<<newphymode)) == 0)
642 if ((ic->ic_modecaps & (1<<j)) == 0)
644 i = findrate(ic, j, newrate);
652 i = findrate(ic, newphymode, newrate);
684 if (ic->ic_modecaps & (1<<j)) {
694 if (ic->ic_curmode != newphymode) { /* change phy mode */
695 error = ieee80211_setmode(ic, newphymode);
704 if (ic->ic_fixed_rate != i) {
705 ic->ic_fixed_rate = i; /* set fixed tx rate */
712 if (ic->ic_opmode != newopmode) {
713 ic->ic_opmode = newopmode;
719 ic->ic_flags &= ~IEEE80211_F_IBSSON;
722 ic->ic_flags |= IEEE80211_F_IBSSON;
730 ieee80211_reset_erp(ic);
731 ieee80211_wme_initparams(ic); /* after opmode change */
732 ieee80211_init_link_state(ic); /* after opmode change */
745 struct ieee80211com *ic;
748 ic = ieee80211_find_instance(ifp);
749 if (!ic) {
755 if (ic->ic_state == IEEE80211_S_RUN)
760 if (ic->ic_fixed_rate != IEEE80211_FIXED_RATE_NONE) {
764 rs = &ic->ic_sup_rates[ic->ic_curmode];
765 imr->ifm_active |= ieee80211_rate2media(ic,
766 rs->rs_rates[ic->ic_fixed_rate], ic->ic_curmode);
767 } else if (ic->ic_opmode == IEEE80211_M_STA) {
771 rs = &ic->ic_bss->ni_rates;
772 imr->ifm_active |= ieee80211_rate2media(ic,
773 rs->rs_rates[ic->ic_bss->ni_txrate], ic->ic_curmode);
776 switch (ic->ic_opmode) {
792 switch (ic->ic_curmode) {
817 ieee80211_watchdog(struct ieee80211com *ic)
822 if (ic->ic_state != IEEE80211_S_INIT) {
823 if (ic->ic_mgt_timer && --ic->ic_mgt_timer == 0)
824 ieee80211_new_state(ic, IEEE80211_S_SCAN, 0);
825 nt = &ic->ic_scan;
831 nt = &ic->ic_sta;
838 if (ic->ic_mgt_timer != 0 || need_inact_timer)
839 ic->ic_ifp->if_timer = 1;
858 ieee80211_setmode(struct ieee80211com *ic, enum ieee80211_phymode mode)
875 if ((ic->ic_modecaps & (1<<mode)) == 0) {
876 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ANY,
878 __func__, mode, ic->ic_modecaps);
889 c = &ic->ic_channels[i];
902 IEEE80211_DPRINTF(ic, IEEE80211_MSG_ANY,
910 memset(ic->ic_chan_active, 0, sizeof(ic->ic_chan_active));
912 c = &ic->ic_channels[i];
918 setbit(ic->ic_chan_active, i);
921 setbit(ic->ic_chan_active, i);
930 if (ic->ic_ibss_chan == NULL ||
931 isclr(ic->ic_chan_active, ieee80211_chan2ieee(ic, ic->ic_ibss_chan))) {
933 if (isset(ic->ic_chan_active, i)) {
934 ic->ic_ibss_chan = &ic->ic_channels[i];
937 IASSERT(ic->ic_ibss_chan != NULL &&
938 isset(ic->ic_chan_active,
939 ieee80211_chan2ieee(ic, ic->ic_ibss_chan)),
941 ieee80211_chan2ieee(ic, ic->ic_ibss_chan)));
946 if (ic->ic_des_chan != IEEE80211_CHAN_ANYC &&
947 isclr(ic->ic_chan_active, ieee80211_chan2ieee(ic, ic->ic_des_chan)))
948 ic->ic_des_chan = IEEE80211_CHAN_ANYC;
957 ieee80211_set11gbasicrates(&ic->ic_sup_rates[mode],
963 ieee80211_set11gbasicrates(&ic->ic_sup_rates[mode],
972 if (ic->ic_bss) /* NB: can be called before lateattach */
973 ic->ic_bss->ni_rates = ic->ic_sup_rates[mode];
975 ic->ic_curmode = mode;
976 ieee80211_reset_erp(ic); /* reset ERP state */
977 ieee80211_wme_initparams(ic); /* reset WME stat */
990 ieee80211_chan2mode(struct ieee80211com *ic, struct ieee80211_channel *chan)
1003 if (ic->ic_curmode == IEEE80211_MODE_TURBO_G)
1005 if (ic->ic_curmode == IEEE80211_MODE_11B)
1017 ieee80211_rate2media(struct ieee80211com *ic, int rate, enum ieee80211_phymode mode)
1068 /* NB: ic may be NULL for some drivers */
1069 if (ic && ic->ic_phytype == IEEE80211_T_FH) {