| 1761 | } |
| 1762 | |
| 1763 | void |
| 1764 | ieee80211_init_neighbor(struct ieee80211_node *ni, |
| 1765 | const struct ieee80211_frame *wh, |
| 1766 | const struct ieee80211_scanparams *sp) |
| 1767 | { |
| 1768 | int do_ht_setup = 0, do_vht_setup = 0; |
| 1769 | |
| 1770 | ni->ni_esslen = sp->ssid[1]; |
| 1771 | memcpy(ni->ni_essid, sp->ssid + 2, sp->ssid[1]); |
| 1772 | IEEE80211_ADDR_COPY(ni->ni_bssid, wh->i_addr3); |
| 1773 | memcpy(ni->ni_tstamp.data, sp->tstamp, sizeof(ni->ni_tstamp)); |
| 1774 | ni->ni_intval = sp->bintval; |
| 1775 | ni->ni_capinfo = sp->capinfo; |
| 1776 | ni->ni_chan = ni->ni_ic->ic_curchan; |
| 1777 | ni->ni_fhdwell = sp->fhdwell; |
| 1778 | ni->ni_fhindex = sp->fhindex; |
| 1779 | ni->ni_erp = sp->erp; |
| 1780 | ni->ni_timoff = sp->timoff; |
| 1781 | #ifdef IEEE80211_SUPPORT_MESH |
| 1782 | if (ni->ni_vap->iv_opmode == IEEE80211_M_MBSS) |
| 1783 | ieee80211_mesh_init_neighbor(ni, wh, sp); |
| 1784 | #endif |
| 1785 | if (ieee80211_ies_init(&ni->ni_ies, sp->ies, sp->ies_len)) { |
| 1786 | ieee80211_ies_expand(&ni->ni_ies); |
| 1787 | if (ni->ni_ies.wme_ie != NULL) |
| 1788 | ni->ni_flags |= IEEE80211_NODE_QOS; |
| 1789 | else |
| 1790 | ni->ni_flags &= ~IEEE80211_NODE_QOS; |
| 1791 | #ifdef IEEE80211_SUPPORT_SUPERG |
| 1792 | if (ni->ni_ies.ath_ie != NULL) |
| 1793 | ieee80211_parse_ath(ni, ni->ni_ies.ath_ie); |
| 1794 | #endif |
| 1795 | if (ni->ni_ies.htcap_ie != NULL) |
| 1796 | ieee80211_parse_htcap(ni, ni->ni_ies.htcap_ie); |
| 1797 | if (ni->ni_ies.htinfo_ie != NULL) |
| 1798 | ieee80211_parse_htinfo(ni, ni->ni_ies.htinfo_ie); |
| 1799 | |
| 1800 | if (ni->ni_ies.vhtcap_ie != NULL) |
| 1801 | ieee80211_parse_vhtcap(ni, ni->ni_ies.vhtcap_ie); |
| 1802 | if (ni->ni_ies.vhtopmode_ie != NULL) |
| 1803 | ieee80211_parse_vhtopmode(ni, ni->ni_ies.vhtopmode_ie); |
| 1804 | |
| 1805 | if ((ni->ni_ies.htcap_ie != NULL) && |
| 1806 | (ni->ni_ies.htinfo_ie != NULL) && |
| 1807 | (ni->ni_vap->iv_flags_ht & IEEE80211_FHT_HT)) { |
| 1808 | do_ht_setup = 1; |
| 1809 | } |
| 1810 | |
| 1811 | if ((ni->ni_ies.vhtcap_ie != NULL) && |
| 1812 | (ni->ni_ies.vhtopmode_ie != NULL) && |
| 1813 | (ni->ni_vap->iv_flags_vht & IEEE80211_FVHT_VHT)) { |
| 1814 | do_vht_setup = 1; |
| 1815 | } |
| 1816 | } |
| 1817 | |
| 1818 | /* NB: must be after ni_chan is setup */ |
| 1819 | ieee80211_setup_rates(ni, sp->rates, sp->xrates, |
| 1820 | IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE | |
no test coverage detected