| 903 | } |
| 904 | |
| 905 | int |
| 906 | ieee80211_sta_join(struct ieee80211vap *vap, struct ieee80211_channel *chan, |
| 907 | const struct ieee80211_scan_entry *se) |
| 908 | { |
| 909 | struct ieee80211com *ic = vap->iv_ic; |
| 910 | struct ieee80211_node *ni; |
| 911 | int do_ht = 0; |
| 912 | |
| 913 | ni = ieee80211_alloc_node(&ic->ic_sta, vap, se->se_macaddr); |
| 914 | if (ni == NULL) { |
| 915 | /* XXX msg */ |
| 916 | return 0; |
| 917 | } |
| 918 | |
| 919 | /* |
| 920 | * Expand scan state into node's format. |
| 921 | * XXX may not need all this stuff |
| 922 | */ |
| 923 | IEEE80211_ADDR_COPY(ni->ni_bssid, se->se_bssid); |
| 924 | ni->ni_esslen = se->se_ssid[1]; |
| 925 | memcpy(ni->ni_essid, se->se_ssid+2, ni->ni_esslen); |
| 926 | ni->ni_tstamp.tsf = se->se_tstamp.tsf; |
| 927 | ni->ni_intval = se->se_intval; |
| 928 | ni->ni_capinfo = se->se_capinfo; |
| 929 | ni->ni_chan = chan; |
| 930 | ni->ni_timoff = se->se_timoff; |
| 931 | ni->ni_fhdwell = se->se_fhdwell; |
| 932 | ni->ni_fhindex = se->se_fhindex; |
| 933 | ni->ni_erp = se->se_erp; |
| 934 | IEEE80211_RSSI_LPF(ni->ni_avgrssi, se->se_rssi); |
| 935 | ni->ni_noise = se->se_noise; |
| 936 | if (vap->iv_opmode == IEEE80211_M_STA) { |
| 937 | /* NB: only infrastructure mode requires an associd */ |
| 938 | ni->ni_flags |= IEEE80211_NODE_ASSOCID; |
| 939 | } |
| 940 | |
| 941 | if (ieee80211_ies_init(&ni->ni_ies, se->se_ies.data, se->se_ies.len)) { |
| 942 | ieee80211_ies_expand(&ni->ni_ies); |
| 943 | #ifdef IEEE80211_SUPPORT_SUPERG |
| 944 | if (ni->ni_ies.ath_ie != NULL) |
| 945 | ieee80211_parse_ath(ni, ni->ni_ies.ath_ie); |
| 946 | #endif |
| 947 | if (ni->ni_ies.htcap_ie != NULL) |
| 948 | ieee80211_parse_htcap(ni, ni->ni_ies.htcap_ie); |
| 949 | if (ni->ni_ies.htinfo_ie != NULL) |
| 950 | ieee80211_parse_htinfo(ni, ni->ni_ies.htinfo_ie); |
| 951 | #ifdef IEEE80211_SUPPORT_MESH |
| 952 | if (ni->ni_ies.meshid_ie != NULL) |
| 953 | ieee80211_parse_meshid(ni, ni->ni_ies.meshid_ie); |
| 954 | #endif |
| 955 | #ifdef IEEE80211_SUPPORT_TDMA |
| 956 | if (ni->ni_ies.tdma_ie != NULL) |
| 957 | ieee80211_parse_tdma(ni, ni->ni_ies.tdma_ie); |
| 958 | #endif |
| 959 | if (ni->ni_ies.vhtcap_ie != NULL) |
| 960 | ieee80211_parse_vhtcap(ni, ni->ni_ies.vhtcap_ie); |
| 961 | if (ni->ni_ies.vhtopmode_ie != NULL) |
| 962 | ieee80211_parse_vhtopmode(ni, ni->ni_ies.vhtopmode_ie); |
no test coverage detected