Lines Matching refs:ni
215 ieee80211_node_authorize(struct ieee80211_node *ni)
217 struct ieee80211com *ic = ni->ni_ic;
219 ni->ni_flags |= IEEE80211_NODE_AUTH;
220 ni->ni_inact_reload = ic->ic_inact_run;
224 ieee80211_node_unauthorize(struct ieee80211_node *ni)
226 ni->ni_flags &= ~IEEE80211_NODE_AUTH;
235 struct ieee80211_node *ni, struct ieee80211_channel *chan)
239 ni->ni_chan = chan;
240 ni->ni_rates = ic->ic_sup_rates[ieee80211_chan2mode(ic, chan)];
424 struct ieee80211_node *ni;
446 ni = ieee80211_alloc_node(&ic->ic_sta, ic->ic_myaddr);
447 if (ni == NULL) {
451 IEEE80211_ADDR_COPY(ni->ni_bssid, ic->ic_myaddr);
452 ni->ni_esslen = ic->ic_des_esslen;
453 memcpy(ni->ni_essid, ic->ic_des_essid, ni->ni_esslen);
454 copy_bss(ni, ic->ic_bss);
455 ni->ni_intval = ic->ic_bintval;
457 ni->ni_capinfo |= IEEE80211_CAPINFO_PRIVACY;
459 ni->ni_fhdwell = 200; /* XXX */
460 ni->ni_fhindex = 1;
464 ni->ni_capinfo |= IEEE80211_CAPINFO_IBSS; /* XXX */
466 IEEE80211_ADDR_COPY(ni->ni_bssid, ic->ic_des_bssid);
468 ni->ni_bssid[0] |= 0x02; /* local bit for IBSS */
474 ieee80211_set_chan(ic, ni, chan);
485 ieee80211_set11gbasicrates(&ni->ni_rates, IEEE80211_MODE_11G);
490 ieee80211_set11gbasicrates(&ni->ni_rates, IEEE80211_MODE_11B);
493 (void)ieee80211_sta_join(ic, ieee80211_ref_node(ni));
499 struct ieee80211_node *ni, *obss;
504 ni = ieee80211_alloc_node(&ic->ic_scan, ic->ic_myaddr);
505 IASSERT(ni != NULL, ("unable to setup initial BSS node"));
507 ic->ic_bss = ieee80211_ref_node(ni);
509 copy_bss(ni, obss);
510 ni->ni_intval = ic->ic_bintval;
519 ieee80211_match_bss(struct ieee80211com *ic, struct ieee80211_node *ni)
525 if (isclr(ic->ic_chan_active, ieee80211_chan2ieee(ic, ni->ni_chan)))
528 ni->ni_chan != ic->ic_des_chan)
532 if ((ni->ni_capinfo & IEEE80211_CAPINFO_IBSS) == 0)
535 if ((ni->ni_capinfo & IEEE80211_CAPINFO_ESS) == 0)
540 if ((ni->ni_capinfo & IEEE80211_CAPINFO_PRIVACY) == 0)
544 if (ni->ni_capinfo & IEEE80211_CAPINFO_PRIVACY)
548 rate = ieee80211_fix_rate(ni, IEEE80211_R_DONEGO | IEEE80211_R_DOFRATE);
553 (ni->ni_esslen != ic->ic_des_esslen ||
554 memcmp(ni->ni_essid, ic->ic_des_essid, ic->ic_des_esslen) != 0))
558 !IEEE80211_ADDR_EQ(ic->ic_des_bssid, ni->ni_bssid))
561 if (ni->ni_fails >= STA_FAILS_MAX)
572 ether_sprintf(ni->ni_macaddr));
573 printf(" %s%c", ether_sprintf(ni->ni_bssid),
575 ni->ni_chan),
577 printf(" %+4d", ni->ni_rssi);
581 (ni->ni_capinfo & IEEE80211_CAPINFO_ESS) ? "ess" :
582 (ni->ni_capinfo & IEEE80211_CAPINFO_IBSS) ? "ibss" :
586 (ni->ni_capinfo & IEEE80211_CAPINFO_PRIVACY) ?
589 ieee80211_print_essid(ni->ni_essid, ni->ni_esslen);
598 maxrate(const struct ieee80211_node *ni)
600 const struct ieee80211_rateset *rs = &ni->ni_rates;
676 struct ieee80211_node *ni, *selbs;
696 TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
697 rssi = ic->ic_node_getrssi(ni);
698 i = ieee80211_chan2ieee(ic, ni->ni_chan);
764 TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
765 if (ni->ni_fails)
766 ni->ni_fails--;
787 TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
788 if (ieee80211_match_bss(ic, ni) == 0) {
790 selbs = ni;
791 else if (ieee80211_node_compare(ic, ni, selbs) > 0)
792 selbs = ni;
820 ieee80211_ibss_merge(struct ieee80211_node *ni)
822 struct ieee80211com *ic = ni->ni_ic;
824 if (ni == ic->ic_bss ||
825 IEEE80211_ADDR_EQ(ni->ni_bssid, ic->ic_bss->ni_bssid)) {
829 if (ieee80211_match_bss(ic, ni) != 0) { /* capabilities mismatch */
835 if (!ieee80211_sta_join(ic, ieee80211_ref_node(ni)))
839 ether_sprintf(ni->ni_bssid),
910 ieee80211_sta_leave(struct ieee80211com *ic, struct ieee80211_node *ni)
912 ic->ic_node_cleanup(ni);
913 ieee80211_notify_node_leave(ic, ni);
917 ieee80211_get_rate(const struct ieee80211_node * const ni)
919 #define RATE(_ix) (ni->ni_rates.rs_rates[(_ix)] & IEEE80211_RATE_VAL)
921 struct ieee80211com *ic = ni->ni_ic;
924 IASSERT(ni != NULL, ("ni != NULL"));
925 IASSERT(ieee80211_node_refcnt(ni) > 0,
926 ("refcnt(ni) == %d", ieee80211_node_refcnt(ni)));
932 for (ix = ni->ni_rates.rs_nrates - 1;
943 rate = ni->ni_rates.rs_rates[ni->ni_txrate];
946 rs = &ni->ni_rates;
952 return ni->ni_rates.rs_rates[0] & IEEE80211_RATE_VAL;
961 struct ieee80211_node *ni;
963 ni = malloc(sizeof(struct ieee80211_node),
965 return ni;
975 node_cleanup(struct ieee80211_node *ni)
978 struct ieee80211com *ic = ni->ni_ic;
982 if (ni->ni_flags & IEEE80211_NODE_PWR_MGT) {
984 ni->ni_flags &= ~IEEE80211_NODE_PWR_MGT;
987 ether_sprintf(ni->ni_macaddr), ic->ic_ps_sta);
996 ni->ni_flags &= ~IEEE80211_NODE_AREF;
1001 IEEE80211_NODE_SAVEQ_DRAIN(ni, qlen);
1003 ic->ic_set_tim(ni, 0);
1005 ni->ni_associd = 0;
1006 if (ni->ni_challenge != NULL) {
1007 free(ni->ni_challenge, M_DEVBUF);
1008 ni->ni_challenge = NULL;
1023 for (i = 0; i < N(ni->ni_rxfrag); i++) {
1024 m_freem(ni->ni_rxfrag[i]);
1025 ni->ni_rxfrag[i] = NULL;
1031 ieee80211_node_delucastkey(ni);
1036 node_free(struct ieee80211_node *ni)
1038 struct ieee80211com *ic = ni->ni_ic;
1040 ic->ic_node_cleanup(ni);
1041 if (ni->ni_wpa_ie != NULL)
1042 free(ni->ni_wpa_ie, M_DEVBUF);
1043 if (ni->ni_wme_ie != NULL)
1044 free(ni->ni_wme_ie, M_DEVBUF);
1045 IEEE80211_NODE_SAVEQ_DESTROY(ni);
1046 free(ni, M_80211_NODE);
1050 node_getrssi(const struct ieee80211_node *ni)
1052 return ni->ni_rssi;
1057 struct ieee80211_node *ni, const u_int8_t *macaddr)
1063 "%s %p<%s> in %s table\n", __func__, ni,
1066 IEEE80211_ADDR_COPY(ni->ni_macaddr, macaddr);
1068 ieee80211_node_initref(ni); /* mark referenced */
1069 ni->ni_chan = IEEE80211_CHAN_ANYC;
1070 ni->ni_authmode = IEEE80211_AUTH_OPEN;
1071 ni->ni_txpower = ic->ic_txpowlimit; /* max power */
1072 ieee80211_crypto_resetkey(ic, &ni->ni_ucastkey, IEEE80211_KEYIX_NONE);
1073 ni->ni_inact_reload = nt->nt_inact_init;
1074 ni->ni_inact = ni->ni_inact_reload;
1075 IEEE80211_NODE_SAVEQ_INIT(ni, "unknown");
1078 TAILQ_INSERT_TAIL(&nt->nt_node, ni, ni_list);
1079 LIST_INSERT_HEAD(&nt->nt_hash[hash], ni, ni_hash);
1080 ni->ni_table = nt;
1081 ni->ni_ic = ic;
1089 struct ieee80211_node *ni;
1091 ni = ic->ic_node_alloc(nt);
1092 if (ni != NULL)
1093 ieee80211_setup_node(nt, ni, macaddr);
1096 return ni;
1108 struct ieee80211_node *ni;
1110 ni = ic->ic_node_alloc(&ic->ic_sta);
1111 if (ni != NULL) {
1113 "%s %p<%s>\n", __func__, ni, ether_sprintf(macaddr));
1115 IEEE80211_ADDR_COPY(ni->ni_macaddr, macaddr);
1116 IEEE80211_ADDR_COPY(ni->ni_bssid, ic->ic_bss->ni_bssid);
1117 ieee80211_node_initref(ni); /* mark referenced */
1118 ni->ni_txpower = ic->ic_bss->ni_txpower;
1120 ieee80211_set_chan(ic, ni, ic->ic_bss->ni_chan);
1121 ieee80211_crypto_resetkey(ic, &ni->ni_ucastkey,
1124 IEEE80211_NODE_SAVEQ_INIT(ni, "unknown");
1126 ni->ni_table = NULL; /* NB: pedantic */
1127 ni->ni_ic = ic;
1132 return ni;
1139 struct ieee80211_node *ni;
1141 ni = ic->ic_node_alloc(nt);
1142 if (ni != NULL) {
1143 ieee80211_setup_node(nt, ni, macaddr);
1147 ni->ni_authmode = ic->ic_bss->ni_authmode;
1148 ni->ni_txpower = ic->ic_bss->ni_txpower;
1149 ni->ni_vlan = ic->ic_bss->ni_vlan; /* XXX?? */
1150 IEEE80211_ADDR_COPY(ni->ni_bssid, ic->ic_bss->ni_bssid);
1151 ieee80211_set_chan(ic, ni, ic->ic_bss->ni_chan);
1152 ni->ni_rsn = ic->ic_bss->ni_rsn;
1156 return ni;
1168 struct ieee80211_node *ni;
1174 LIST_FOREACH(ni, &nt->nt_hash[hash], ni_hash) {
1175 if (IEEE80211_ADDR_EQ(ni->ni_macaddr, macaddr)) {
1176 ieee80211_ref_node(ni); /* mark referenced */
1181 ni, ether_sprintf(ni->ni_macaddr),
1182 ieee80211_node_refcnt(ni));
1184 return ni;
1202 struct ieee80211_node *ni;
1205 ni = _ieee80211_find_node(nt, macaddr);
1207 return ni;
1221 struct ieee80211_node *ni;
1223 ni = ieee80211_dup_bss(nt, macaddr);
1224 if (ni != NULL) {
1226 ni->ni_rates = ic->ic_bss->ni_rates;
1228 ic->ic_newassoc(ni, 1);
1230 ieee80211_node_authorize(ni);
1232 return ni;
1289 struct ieee80211_node *ni;
1292 ni = ieee80211_find_node(nt, wh->i_addr2);
1293 if (ni == NULL) {
1297 ni = ic->ic_node_alloc(nt);
1298 if (ni == NULL) {
1302 ieee80211_setup_node(nt, ni, wh->i_addr2);
1307 ni->ni_authmode = ic->ic_bss->ni_authmode;
1308 ni->ni_txpower = ic->ic_bss->ni_txpower;
1309 ni->ni_vlan = ic->ic_bss->ni_vlan; /* XXX?? */
1310 ieee80211_set_chan(ic, ni, ic->ic_curchan);
1311 ni->ni_rsn = ic->ic_bss->ni_rsn;
1321 if (sp->sp_ssid[1] != 0 && (ISPROBE(subtype) || ni->ni_esslen == 0)) {
1322 ni->ni_esslen = sp->sp_ssid[1];
1323 memset(ni->ni_essid, 0, sizeof(ni->ni_essid));
1324 memcpy(ni->ni_essid, sp->sp_ssid + 2, sp->sp_ssid[1]);
1327 ni->ni_scangen = ic->ic_scan.nt_scangen;
1328 IEEE80211_ADDR_COPY(ni->ni_bssid, wh->i_addr3);
1329 ni->ni_rssi = rssi;
1330 ni->ni_rstamp = rstamp;
1331 memcpy(ni->ni_tstamp.data, sp->sp_tstamp, sizeof(ni->ni_tstamp));
1332 ni->ni_intval = sp->sp_bintval;
1333 ni->ni_capinfo = sp->sp_capinfo;
1334 ni->ni_chan = &ic->ic_channels[sp->sp_chan];
1335 ni->ni_fhdwell = sp->sp_fhdwell;
1336 ni->ni_fhindex = sp->sp_fhindex;
1337 ni->ni_erp = sp->sp_erp;
1343 ni->ni_dtim_count = ie->tim_count;
1344 ni->ni_dtim_period = ie->tim_period;
1353 ni->ni_timoff = sp->sp_timoff;
1359 saveie(&ni->ni_wme_ie, sp->sp_wme);
1360 saveie(&ni->ni_wpa_ie, sp->sp_wpa);
1363 ieee80211_setup_rates(ni, sp->sp_rates, sp->sp_xrates,
1367 ieee80211_free_node(ni);
1372 ieee80211_init_neighbor(struct ieee80211com *ic, struct ieee80211_node *ni,
1376 ni->ni_esslen = sp->sp_ssid[1];
1377 memcpy(ni->ni_essid, sp->sp_ssid + 2, sp->sp_ssid[1]);
1378 IEEE80211_ADDR_COPY(ni->ni_bssid, wh->i_addr3);
1379 memcpy(ni->ni_tstamp.data, sp->sp_tstamp, sizeof(ni->ni_tstamp));
1380 ni->ni_intval = sp->sp_bintval;
1381 ni->ni_capinfo = sp->sp_capinfo;
1382 ni->ni_chan = ic->ic_bss->ni_chan;
1383 ni->ni_fhdwell = sp->sp_fhdwell;
1384 ni->ni_fhindex = sp->sp_fhindex;
1385 ni->ni_erp = sp->sp_erp;
1386 ni->ni_timoff = sp->sp_timoff;
1388 ieee80211_saveie(&ni->ni_wme_ie, sp->sp_wme);
1390 ieee80211_saveie(&ni->ni_wpa_ie, sp->sp_wpa);
1393 ieee80211_setup_rates(ni, sp->sp_rates, sp->sp_xrates,
1397 ic->ic_newassoc(ni, isnew);
1411 struct ieee80211_node *ni;
1413 ni = ieee80211_dup_bss(&ic->ic_sta, wh->i_addr2);/* XXX alloc_node? */
1414 if (ni != NULL) {
1415 ieee80211_init_neighbor(ic, ni, wh, sp, 1);
1417 ieee80211_node_authorize(ni);
1419 return ni;
1444 struct ieee80211_node *ni;
1458 ni = _ieee80211_find_node(nt, wh->i_addr1);
1460 ni = _ieee80211_find_node(nt, wh->i_addr2);
1461 if (ni == NULL)
1462 ni = ieee80211_ref_node(ic->ic_bss);
1465 return ni;
1487 struct ieee80211_node *ni;
1499 ni = nt->nt_keyixmap[keyix];
1501 ni = NULL;
1503 if (ni == NULL) {
1505 ni = _ieee80211_find_node(nt, wh->i_addr1);
1507 ni = _ieee80211_find_node(nt, wh->i_addr2);
1508 if (ni == NULL)
1509 ni = ieee80211_ref_node(ic->ic_bss);
1515 keyix = ni->ni_ucastkey.wk_rxkeyix;
1519 IEEE80211_DPRINTF(ni->ni_ic, IEEE80211_MSG_NODE,
1521 __func__, ni, ether_sprintf(ni->ni_macaddr),
1522 ieee80211_node_refcnt(ni)+1);
1523 nt->nt_keyixmap[keyix] = ieee80211_ref_node(ni);
1527 ieee80211_ref_node(ni);
1531 return ni;
1549 struct ieee80211_node *ni;
1560 ni = ieee80211_ref_node(ic->ic_bss);
1562 ni = _ieee80211_find_node(nt, macaddr);
1565 if (ni == NULL) {
1573 ni = ieee80211_fakeup_adhoc_node(nt, macaddr);
1574 if (ni != NULL)
1575 (void)ieee80211_ref_node(ni);
1583 return ni;
1599 struct ieee80211_node *ni;
1605 LIST_FOREACH(ni, &nt->nt_hash[hash], ni_hash) {
1606 if (IEEE80211_ADDR_EQ(ni->ni_macaddr, macaddr) &&
1607 ni->ni_chan == chan) {
1608 ieee80211_ref_node(ni); /* mark referenced */
1613 ni, ether_sprintf(ni->ni_macaddr),
1614 ieee80211_node_refcnt(ni));
1618 ni, ether_sprintf(ni->ni_macaddr),
1619 ieee80211_node_refcnt(ni));
1626 return ni;
1635 struct ieee80211_node *best, *ni;
1651 for (ni = LIST_NEXT(ni0, ni_hash); ni != NULL;
1652 ni = LIST_NEXT(ni, ni_hash)) {
1653 if (!IEEE80211_ADDR_EQ(ni->ni_macaddr, best->ni_macaddr) ||
1654 ni->ni_ic != best->ni_ic || ni->ni_chan != chan)
1657 if (ssid[1] == 0 || ni->ni_esslen == 0)
1659 else if (ssid[1] == ni->ni_esslen &&
1660 memcmp(ssid + 2, ni->ni_essid, ssid[1]) == 0)
1666 best = ni;
1688 #define MATCH_SSID(ni, ssid, ssidlen) \
1689 (ni->ni_esslen == ssidlen && memcmp(ni->ni_essid, ssid, ssidlen) == 0)
1692 struct ieee80211_node *ni;
1703 TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
1704 if (MATCH_SSID(ni, ssid, ssidlen))
1709 LIST_FOREACH(ni, &nt->nt_hash[hash], ni_hash) {
1710 if (IEEE80211_ADDR_EQ(ni->ni_macaddr, macaddr) &&
1711 MATCH_SSID(ni, ssid, ssidlen))
1715 if (ni != NULL) {
1716 ieee80211_ref_node(ni); /* mark referenced */
1721 ni, ether_sprintf(ni->ni_macaddr),
1722 ieee80211_node_refcnt(ni));
1726 ni, ether_sprintf(ni->ni_macaddr),
1727 ieee80211_node_refcnt(ni));
1733 return ni;
1738 _ieee80211_free_node(struct ieee80211_node *ni)
1740 struct ieee80211com *ic = ni->ni_ic;
1741 struct ieee80211_node_table *nt = ni->ni_table;
1744 "%s %p<%s> in %s table\n", __func__, ni,
1745 ether_sprintf(ni->ni_macaddr),
1748 IEEE80211_AID_CLR(ni->ni_associd, ic->ic_aid_bitmap);
1750 TAILQ_REMOVE(&nt->nt_node, ni, ni_list);
1751 LIST_REMOVE(ni, ni_hash);
1753 ic->ic_node_free(ni);
1758 ieee80211_free_node_debug(struct ieee80211_node *ni, const char *func, int line)
1760 ieee80211_free_node(struct ieee80211_node *ni)
1763 struct ieee80211_node_table *nt = ni->ni_table;
1766 IEEE80211_DPRINTF(ni->ni_ic, IEEE80211_MSG_NODE,
1767 "%s (%s:%u) %p<%s> refcnt %d\n", __func__, func, line, ni,
1768 ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni)-1);
1773 if (ieee80211_node_dectestref(ni)) {
1777 _ieee80211_free_node(ni);
1778 } else if (ieee80211_node_refcnt(ni) == 1 &&
1785 keyix = ni->ni_ucastkey.wk_rxkeyix;
1787 nt->nt_keyixmap[keyix] == ni) {
1788 IEEE80211_DPRINTF(ni->ni_ic, IEEE80211_MSG_NODE,
1790 ni, ether_sprintf(ni->ni_macaddr));
1792 ieee80211_node_decref(ni); /* XXX needed? */
1793 _ieee80211_free_node(ni);
1798 if (ieee80211_node_dectestref(ni))
1799 _ieee80211_free_node(ni);
1807 ieee80211_node_delucastkey(struct ieee80211_node *ni)
1809 struct ieee80211com *ic = ni->ni_ic;
1830 keyix = ni->ni_ucastkey.wk_rxkeyix;
1831 status = ieee80211_crypto_delkey(ic, &ni->ni_ucastkey);
1841 IASSERT(nikey == ni,
1842 ("key map out of sync, ni %p nikey %p", ni, nikey));
1843 IEEE80211_DPRINTF(ni->ni_ic, IEEE80211_MSG_NODE,
1845 __func__, ni, ether_sprintf(ni->ni_macaddr),
1846 ieee80211_node_refcnt(ni)-1);
1847 ieee80211_free_node(ni);
1858 node_reclaim(struct ieee80211_node_table *nt, struct ieee80211_node *ni)
1864 IEEE80211_DPRINTF(ni->ni_ic, IEEE80211_MSG_NODE,
1866 __func__, ni, ether_sprintf(ni->ni_macaddr),
1867 nt->nt_name, ieee80211_node_refcnt(ni)-1);
1875 keyix = ni->ni_ucastkey.wk_rxkeyix;
1877 nt->nt_keyixmap[keyix] == ni) {
1878 IEEE80211_DPRINTF(ni->ni_ic, IEEE80211_MSG_NODE,
1880 __func__, ni, ether_sprintf(ni->ni_macaddr));
1882 ieee80211_node_decref(ni); /* NB: don't need free */
1884 if (!ieee80211_node_dectestref(ni)) {
1891 TAILQ_REMOVE(&nt->nt_node, ni, ni_list);
1892 LIST_REMOVE(ni, ni_hash);
1893 ni->ni_table = NULL; /* clear reference */
1895 _ieee80211_free_node(ni);
1902 struct ieee80211_node *ni;
1907 while ((ni = TAILQ_FIRST(&nt->nt_node)) != NULL) {
1908 if (ni->ni_associd != 0) {
1910 ic->ic_auth->ia_node_leave(ic, ni);
1911 IEEE80211_AID_CLR(ni->ni_associd, ic->ic_aid_bitmap);
1913 node_reclaim(nt, ni);
1934 struct ieee80211_node *ni, *tni;
1937 ni = ic->ic_bss;
1939 if (ni->ni_rxfrag[0] != NULL && ticks > ni->ni_rxfragstamp + hz) {
1940 m_freem(ni->ni_rxfrag[0]);
1941 ni->ni_rxfrag[0] = NULL;
1943 TAILQ_FOREACH_SAFE(ni, &nt->nt_node, ni_list, tni) {
1944 if (ni->ni_inact && --ni->ni_inact == 0) {
1947 "(refcnt %u)\n", ether_sprintf(ni->ni_macaddr),
1948 ieee80211_node_refcnt(ni));
1949 node_reclaim(nt, ni);
1971 struct ieee80211_node *ni;
1992 TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
1993 if (ni->ni_scangen == gen) /* previously handled */
1995 ni->ni_scangen = gen;
2003 (ni->ni_flags & IEEE80211_NODE_AREF) == 0)
2010 if (ni->ni_rxfrag[0] != NULL &&
2011 ticks > ni->ni_rxfragstamp + hz) {
2012 m_freem(ni->ni_rxfrag[0]);
2013 ni->ni_rxfrag[0] = NULL;
2019 if (ni == ic->ic_bss)
2021 ni->ni_inact--;
2022 if (ni->ni_associd != 0 || isadhoc) {
2032 if (IEEE80211_NODE_SAVEQ_QLEN(ni) != 0) {
2036 IEEE80211_NODE_SAVEQ_LOCK(ni);
2037 while (IF_POLL(&ni->ni_savedq, m) != NULL &&
2039 IEEE80211_DPRINTF(ic, IEEE80211_MSG_POWER, "[%s] discard frame, age %u\n", ether_sprintf(ni->ni_macaddr), M_AGE_GET(m));/*XXX*/
2040 _IEEE80211_NODE_SAVEQ_DEQUEUE_HEAD(ni, m);
2046 IEEE80211_NODE_SAVEQ_UNLOCK(ni);
2052 ether_sprintf(ni->ni_macaddr),
2054 IEEE80211_NODE_STAT_ADD(ni,
2056 if (IEEE80211_NODE_SAVEQ_QLEN(ni) == 0)
2057 ic->ic_set_tim(ni, 0);
2066 if (0 < ni->ni_inact &&
2067 ni->ni_inact <= ic->ic_inact_probe) {
2070 ni, "%s",
2079 ieee80211_ref_node(ni);
2081 ieee80211_send_nulldata(ni);
2086 if (ni->ni_inact <= 0) {
2088 IEEE80211_MSG_INACT | IEEE80211_MSG_NODE, ni,
2090 "(refcnt %u)", ieee80211_node_refcnt(ni));
2107 if (ni->ni_associd != 0) {
2108 IEEE80211_SEND_MGMT(ic, ni,
2112 ieee80211_node_leave(ic, ni);
2125 struct ieee80211_node *ni;
2141 TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
2142 if (ni->ni_scangen != gen) {
2143 ni->ni_scangen = gen;
2144 (void) ieee80211_ref_node(ni);
2146 (*f)(arg, ni);
2147 ieee80211_free_node(ni);
2156 struct ieee80211_node *ni)
2158 printf("%p: mac %s refcnt %d\n", ni,
2159 ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni));
2161 ni->ni_scangen, ni->ni_authmode, ni->ni_flags);
2163 ni->ni_associd, ni->ni_txpower, ni->ni_vlan);
2165 ni->ni_txseqs[0],
2166 ni->ni_rxseqs[0] >> IEEE80211_SEQ_SEQ_SHIFT,
2167 ni->ni_rxseqs[0] & IEEE80211_SEQ_FRAG_MASK,
2168 ni->ni_rxfragstamp);
2170 ni->ni_rstamp, ni->ni_rssi, ni->ni_intval, ni->ni_capinfo);
2172 ether_sprintf(ni->ni_bssid),
2173 ni->ni_esslen, ni->ni_essid,
2174 ni->ni_chan->ic_freq, ni->ni_chan->ic_flags);
2176 ni->ni_fails, ni->ni_inact, ni->ni_txrate);
2190 ieee80211_node_join_11g(struct ieee80211com *ic, struct ieee80211_node *ni)
2200 if ((ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) == 0) {
2204 ether_sprintf(ni->ni_macaddr), ic->ic_longslotsta);
2214 if (!ieee80211_iserp_rateset(ic, &ni->ni_rates)) {
2218 ether_sprintf(ni->ni_macaddr), ic->ic_nonerpsta);
2231 if ((ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE) == 0) {
2234 ether_sprintf(ni->ni_macaddr));
2239 ni->ni_flags |= IEEE80211_NODE_ERP;
2244 ieee80211_node_join(struct ieee80211com *ic, struct ieee80211_node *ni,
2249 if (ni->ni_associd == 0) {
2262 IEEE80211_SEND_MGMT(ic, ni, resp,
2264 ieee80211_node_leave(ic, ni);
2267 ni->ni_associd = aid | 0xc000;
2268 IEEE80211_AID_SET(ni->ni_associd, ic->ic_aid_bitmap);
2272 ieee80211_node_join_11g(ic, ni);
2278 ether_sprintf(ni->ni_macaddr), newassoc ? "" : "re",
2279 IEEE80211_NODE_AID(ni),
2283 ni->ni_flags & IEEE80211_NODE_QOS ? ", QoS" : ""
2288 ic->ic_newassoc(ni, newassoc);
2289 ni->ni_inact_reload = ic->ic_inact_auth;
2290 ni->ni_inact = ni->ni_inact_reload;
2291 IEEE80211_SEND_MGMT(ic, ni, resp, IEEE80211_STATUS_SUCCESS);
2294 ic->ic_auth->ia_node_join(ic, ni);
2295 ieee80211_notify_node_join(ic, ni, newassoc);
2302 ieee80211_node_leave_11g(struct ieee80211com *ic, struct ieee80211_node *ni)
2306 ("not in 11g, bss %u:0x%x, curmode %u", ni->ni_chan->ic_freq,
2307 ni->ni_chan->ic_flags, ic->ic_curmode));
2312 if ((ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) == 0) {
2318 ether_sprintf(ni->ni_macaddr), ic->ic_longslotsta);
2337 if ((ni->ni_flags & IEEE80211_NODE_ERP) == 0) {
2343 ether_sprintf(ni->ni_macaddr), ic->ic_nonerpsta);
2365 ieee80211_node_leave(struct ieee80211com *ic, struct ieee80211_node *ni)
2367 struct ieee80211_node_table *nt = ni->ni_table;
2371 ether_sprintf(ni->ni_macaddr), IEEE80211_NODE_AID(ni));
2382 if (ni->ni_associd == 0)
2392 ic->ic_auth->ia_node_leave(ic, ni);
2393 IEEE80211_AID_CLR(ni->ni_associd, ic->ic_aid_bitmap);
2394 ni->ni_associd = 0;
2398 ieee80211_node_leave_11g(ic, ni);
2406 ieee80211_sta_leave(ic, ni);
2417 node_reclaim(nt, ni);
2420 ieee80211_free_node(ni);
2429 struct ieee80211_node *ni;
2436 TAILQ_FOREACH(ni, &nt->nt_node, ni_list)
2437 if (ni->ni_capinfo & IEEE80211_CAPINFO_IBSS) {
2439 rssi_total += ic->ic_node_getrssi(ni);
2444 TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
2446 rssi_total += ic->ic_node_getrssi(ni);
2452 TAILQ_FOREACH(ni, &nt->nt_node, ni_list)
2453 if (IEEE80211_AID(ni->ni_associd) != 0) {
2455 rssi_total += ic->ic_node_getrssi(ni);
2475 ieee80211_set_tim(struct ieee80211_node *ni, int set)
2477 struct ieee80211com *ic = ni->ni_ic;
2484 aid = IEEE80211_AID(ni->ni_associd);