ieee80211_output.c (253007) | ieee80211_output.c (253639) |
---|---|
1/*- 2 * Copyright (c) 2001 Atsushi Onoe 3 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 11 unchanged lines hidden (view full) --- 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2001 Atsushi Onoe 3 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 11 unchanged lines hidden (view full) --- 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_output.c 253007 2013-07-07 21:39:37Z alfred $"); | 28__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_output.c 253639 2013-07-25 06:23:26Z rpaulo $"); |
29 30#include "opt_inet.h" 31#include "opt_inet6.h" 32#include "opt_wlan.h" 33 34#include <sys/param.h> 35#include <sys/systm.h> 36#include <sys/mbuf.h> --- 1841 unchanged lines hidden (view full) --- 1878 ic->ic_countryie = ieee80211_alloc_countryie(ic); 1879 if (ic->ic_countryie == NULL) 1880 return frm; 1881 ic->ic_countryie_chan = ic->ic_bsschan; 1882 } 1883 return add_appie(frm, ic->ic_countryie); 1884} 1885 | 29 30#include "opt_inet.h" 31#include "opt_inet6.h" 32#include "opt_wlan.h" 33 34#include <sys/param.h> 35#include <sys/systm.h> 36#include <sys/mbuf.h> --- 1841 unchanged lines hidden (view full) --- 1878 ic->ic_countryie = ieee80211_alloc_countryie(ic); 1879 if (ic->ic_countryie == NULL) 1880 return frm; 1881 ic->ic_countryie_chan = ic->ic_bsschan; 1882 } 1883 return add_appie(frm, ic->ic_countryie); 1884} 1885 |
1886uint8_t * 1887ieee80211_add_wpa(uint8_t *frm, const struct ieee80211vap *vap) 1888{ 1889 if (vap->iv_flags & IEEE80211_F_WPA1 && vap->iv_wpa_ie != NULL) 1890 return (add_ie(frm, vap->iv_wpa_ie)); 1891 else { 1892 /* XXX else complain? */ 1893 return (frm); 1894 } 1895} 1896 1897uint8_t * 1898ieee80211_add_rsn(uint8_t *frm, const struct ieee80211vap *vap) 1899{ 1900 if (vap->iv_flags & IEEE80211_F_WPA2 && vap->iv_rsn_ie != NULL) 1901 return (add_ie(frm, vap->iv_rsn_ie)); 1902 else { 1903 /* XXX else complain? */ 1904 return (frm); 1905 } 1906} 1907 1908uint8_t * 1909ieee80211_add_qos(uint8_t *frm, const struct ieee80211_node *ni) 1910{ 1911 if (ni->ni_flags & IEEE80211_NODE_QOS) { 1912 *frm++ = IEEE80211_ELEMID_QOS; 1913 *frm++ = 1; 1914 *frm++ = 0; 1915 } 1916 1917 return (frm); 1918} 1919 |
|
1886/* 1887 * Send a probe request frame with the specified ssid 1888 * and any optional information element data. 1889 */ 1890int 1891ieee80211_send_probereq(struct ieee80211_node *ni, 1892 const uint8_t sa[IEEE80211_ADDR_LEN], 1893 const uint8_t da[IEEE80211_ADDR_LEN], --- 52 unchanged lines hidden (view full) --- 1946 vap->iv_stats.is_tx_nobuf++; 1947 ieee80211_free_node(ni); 1948 return ENOMEM; 1949 } 1950 1951 frm = ieee80211_add_ssid(frm, ssid, ssidlen); 1952 rs = ieee80211_get_suprates(ic, ic->ic_curchan); 1953 frm = ieee80211_add_rates(frm, rs); | 1920/* 1921 * Send a probe request frame with the specified ssid 1922 * and any optional information element data. 1923 */ 1924int 1925ieee80211_send_probereq(struct ieee80211_node *ni, 1926 const uint8_t sa[IEEE80211_ADDR_LEN], 1927 const uint8_t da[IEEE80211_ADDR_LEN], --- 52 unchanged lines hidden (view full) --- 1980 vap->iv_stats.is_tx_nobuf++; 1981 ieee80211_free_node(ni); 1982 return ENOMEM; 1983 } 1984 1985 frm = ieee80211_add_ssid(frm, ssid, ssidlen); 1986 rs = ieee80211_get_suprates(ic, ic->ic_curchan); 1987 frm = ieee80211_add_rates(frm, rs); |
1954 if (vap->iv_flags & IEEE80211_F_WPA2) { 1955 if (vap->iv_rsn_ie != NULL) 1956 frm = add_ie(frm, vap->iv_rsn_ie); 1957 /* XXX else complain? */ 1958 } | 1988 frm = ieee80211_add_rsn(frm, vap); |
1959 frm = ieee80211_add_xrates(frm, rs); | 1989 frm = ieee80211_add_xrates(frm, rs); |
1960 if (vap->iv_flags & IEEE80211_F_WPA1) { 1961 if (vap->iv_wpa_ie != NULL) 1962 frm = add_ie(frm, vap->iv_wpa_ie); 1963 /* XXX else complain? */ 1964 } | 1990 frm = ieee80211_add_wpa(frm, vap); |
1965 if (vap->iv_appie_probereq != NULL) 1966 frm = add_appie(frm, vap->iv_appie_probereq); 1967 m->m_pkthdr.len = m->m_len = frm - mtod(m, uint8_t *); 1968 1969 KASSERT(M_LEADINGSPACE(m) >= sizeof(struct ieee80211_frame), 1970 ("leading space %zd", M_LEADINGSPACE(m))); 1971 M_PREPEND(m, sizeof(struct ieee80211_frame), M_NOWAIT); 1972 if (m == NULL) { --- 249 unchanged lines hidden (view full) --- 2222 2223 if (type == IEEE80211_FC0_SUBTYPE_REASSOC_REQ) { 2224 IEEE80211_ADDR_COPY(frm, bss->ni_bssid); 2225 frm += IEEE80211_ADDR_LEN; 2226 } 2227 2228 frm = ieee80211_add_ssid(frm, ni->ni_essid, ni->ni_esslen); 2229 frm = ieee80211_add_rates(frm, &ni->ni_rates); | 1991 if (vap->iv_appie_probereq != NULL) 1992 frm = add_appie(frm, vap->iv_appie_probereq); 1993 m->m_pkthdr.len = m->m_len = frm - mtod(m, uint8_t *); 1994 1995 KASSERT(M_LEADINGSPACE(m) >= sizeof(struct ieee80211_frame), 1996 ("leading space %zd", M_LEADINGSPACE(m))); 1997 M_PREPEND(m, sizeof(struct ieee80211_frame), M_NOWAIT); 1998 if (m == NULL) { --- 249 unchanged lines hidden (view full) --- 2248 2249 if (type == IEEE80211_FC0_SUBTYPE_REASSOC_REQ) { 2250 IEEE80211_ADDR_COPY(frm, bss->ni_bssid); 2251 frm += IEEE80211_ADDR_LEN; 2252 } 2253 2254 frm = ieee80211_add_ssid(frm, ni->ni_essid, ni->ni_esslen); 2255 frm = ieee80211_add_rates(frm, &ni->ni_rates); |
2230 if (vap->iv_flags & IEEE80211_F_WPA2) { 2231 if (vap->iv_rsn_ie != NULL) 2232 frm = add_ie(frm, vap->iv_rsn_ie); 2233 /* XXX else complain? */ 2234 } | 2256 frm = ieee80211_add_rsn(frm, vap); |
2235 frm = ieee80211_add_xrates(frm, &ni->ni_rates); 2236 if (capinfo & IEEE80211_CAPINFO_SPECTRUM_MGMT) { 2237 frm = ieee80211_add_powercapability(frm, 2238 ic->ic_curchan); 2239 frm = ieee80211_add_supportedchannels(frm, ic); 2240 } 2241 if ((vap->iv_flags_ht & IEEE80211_FHT_HT) && 2242 ni->ni_ies.htcap_ie != NULL && 2243 ni->ni_ies.htcap_ie[0] == IEEE80211_ELEMID_HTCAP) 2244 frm = ieee80211_add_htcap(frm, ni); | 2257 frm = ieee80211_add_xrates(frm, &ni->ni_rates); 2258 if (capinfo & IEEE80211_CAPINFO_SPECTRUM_MGMT) { 2259 frm = ieee80211_add_powercapability(frm, 2260 ic->ic_curchan); 2261 frm = ieee80211_add_supportedchannels(frm, ic); 2262 } 2263 if ((vap->iv_flags_ht & IEEE80211_FHT_HT) && 2264 ni->ni_ies.htcap_ie != NULL && 2265 ni->ni_ies.htcap_ie[0] == IEEE80211_ELEMID_HTCAP) 2266 frm = ieee80211_add_htcap(frm, ni); |
2245 if (vap->iv_flags & IEEE80211_F_WPA1) { 2246 if (vap->iv_wpa_ie != NULL) 2247 frm = add_ie(frm, vap->iv_wpa_ie); 2248 /* XXX else complain */ 2249 } | 2267 frm = ieee80211_add_wpa(frm, vap); |
2250 if ((ic->ic_flags & IEEE80211_F_WME) && 2251 ni->ni_ies.wme_ie != NULL) 2252 frm = ieee80211_add_wme_info(frm, &ic->ic_wme); 2253 if ((vap->iv_flags_ht & IEEE80211_FHT_HT) && 2254 ni->ni_ies.htcap_ie != NULL && 2255 ni->ni_ies.htcap_ie[0] == IEEE80211_ELEMID_VENDOR) 2256 frm = ieee80211_add_htcap_vendor(frm, ni); 2257#ifdef IEEE80211_SUPPORT_SUPERG --- 250 unchanged lines hidden (view full) --- 2508 (vap->iv_flags_ext & IEEE80211_FEXT_DFS)) { 2509 if (vap->iv_quiet) 2510 frm = ieee80211_add_quiet(frm, vap); 2511 } 2512 } 2513 if (IEEE80211_IS_CHAN_ANYG(bss->ni_chan)) 2514 frm = ieee80211_add_erp(frm, ic); 2515 frm = ieee80211_add_xrates(frm, rs); | 2268 if ((ic->ic_flags & IEEE80211_F_WME) && 2269 ni->ni_ies.wme_ie != NULL) 2270 frm = ieee80211_add_wme_info(frm, &ic->ic_wme); 2271 if ((vap->iv_flags_ht & IEEE80211_FHT_HT) && 2272 ni->ni_ies.htcap_ie != NULL && 2273 ni->ni_ies.htcap_ie[0] == IEEE80211_ELEMID_VENDOR) 2274 frm = ieee80211_add_htcap_vendor(frm, ni); 2275#ifdef IEEE80211_SUPPORT_SUPERG --- 250 unchanged lines hidden (view full) --- 2526 (vap->iv_flags_ext & IEEE80211_FEXT_DFS)) { 2527 if (vap->iv_quiet) 2528 frm = ieee80211_add_quiet(frm, vap); 2529 } 2530 } 2531 if (IEEE80211_IS_CHAN_ANYG(bss->ni_chan)) 2532 frm = ieee80211_add_erp(frm, ic); 2533 frm = ieee80211_add_xrates(frm, rs); |
2516 if (vap->iv_flags & IEEE80211_F_WPA2) { 2517 if (vap->iv_rsn_ie != NULL) 2518 frm = add_ie(frm, vap->iv_rsn_ie); 2519 /* XXX else complain? */ 2520 } | 2534 frm = ieee80211_add_rsn(frm, vap); |
2521 /* 2522 * NB: legacy 11b clients do not get certain ie's. 2523 * The caller identifies such clients by passing 2524 * a token in legacy to us. Could expand this to be 2525 * any legacy client for stuff like HT ie's. 2526 */ 2527 if (IEEE80211_IS_CHAN_HT(bss->ni_chan) && 2528 legacy != IEEE80211_SEND_LEGACY_11B) { 2529 frm = ieee80211_add_htcap(frm, bss); 2530 frm = ieee80211_add_htinfo(frm, bss); 2531 } | 2535 /* 2536 * NB: legacy 11b clients do not get certain ie's. 2537 * The caller identifies such clients by passing 2538 * a token in legacy to us. Could expand this to be 2539 * any legacy client for stuff like HT ie's. 2540 */ 2541 if (IEEE80211_IS_CHAN_HT(bss->ni_chan) && 2542 legacy != IEEE80211_SEND_LEGACY_11B) { 2543 frm = ieee80211_add_htcap(frm, bss); 2544 frm = ieee80211_add_htinfo(frm, bss); 2545 } |
2532 if (vap->iv_flags & IEEE80211_F_WPA1) { 2533 if (vap->iv_wpa_ie != NULL) 2534 frm = add_ie(frm, vap->iv_wpa_ie); 2535 /* XXX else complain? */ 2536 } | 2546 frm = ieee80211_add_wpa(frm, vap); |
2537 if (vap->iv_flags & IEEE80211_F_WME) 2538 frm = ieee80211_add_wme_param(frm, &ic->ic_wme); 2539 if (IEEE80211_IS_CHAN_HT(bss->ni_chan) && 2540 (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT) && 2541 legacy != IEEE80211_SEND_LEGACY_11B) { 2542 frm = ieee80211_add_htcap_vendor(frm, bss); 2543 frm = ieee80211_add_htinfo_vendor(frm, bss); 2544 } --- 281 unchanged lines hidden (view full) --- 2826 } else 2827 bo->bo_quiet = frm; 2828 2829 if (IEEE80211_IS_CHAN_ANYG(ni->ni_chan)) { 2830 bo->bo_erp = frm; 2831 frm = ieee80211_add_erp(frm, ic); 2832 } 2833 frm = ieee80211_add_xrates(frm, rs); | 2547 if (vap->iv_flags & IEEE80211_F_WME) 2548 frm = ieee80211_add_wme_param(frm, &ic->ic_wme); 2549 if (IEEE80211_IS_CHAN_HT(bss->ni_chan) && 2550 (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT) && 2551 legacy != IEEE80211_SEND_LEGACY_11B) { 2552 frm = ieee80211_add_htcap_vendor(frm, bss); 2553 frm = ieee80211_add_htinfo_vendor(frm, bss); 2554 } --- 281 unchanged lines hidden (view full) --- 2836 } else 2837 bo->bo_quiet = frm; 2838 2839 if (IEEE80211_IS_CHAN_ANYG(ni->ni_chan)) { 2840 bo->bo_erp = frm; 2841 frm = ieee80211_add_erp(frm, ic); 2842 } 2843 frm = ieee80211_add_xrates(frm, rs); |
2834 if (vap->iv_flags & IEEE80211_F_WPA2) { 2835 if (vap->iv_rsn_ie != NULL) 2836 frm = add_ie(frm, vap->iv_rsn_ie); 2837 /* XXX else complain */ 2838 } | 2844 frm = ieee80211_add_rsn(frm, vap); |
2839 if (IEEE80211_IS_CHAN_HT(ni->ni_chan)) { 2840 frm = ieee80211_add_htcap(frm, ni); 2841 bo->bo_htinfo = frm; 2842 frm = ieee80211_add_htinfo(frm, ni); 2843 } | 2845 if (IEEE80211_IS_CHAN_HT(ni->ni_chan)) { 2846 frm = ieee80211_add_htcap(frm, ni); 2847 bo->bo_htinfo = frm; 2848 frm = ieee80211_add_htinfo(frm, ni); 2849 } |
2844 if (vap->iv_flags & IEEE80211_F_WPA1) { 2845 if (vap->iv_wpa_ie != NULL) 2846 frm = add_ie(frm, vap->iv_wpa_ie); 2847 /* XXX else complain */ 2848 } | 2850 frm = ieee80211_add_wpa(frm, vap); |
2849 if (vap->iv_flags & IEEE80211_F_WME) { 2850 bo->bo_wme = frm; 2851 frm = ieee80211_add_wme_param(frm, &ic->ic_wme); 2852 } 2853 if (IEEE80211_IS_CHAN_HT(ni->ni_chan) && 2854 (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT)) { 2855 frm = ieee80211_add_htcap_vendor(frm, ni); 2856 frm = ieee80211_add_htinfo_vendor(frm, ni); --- 418 unchanged lines hidden --- | 2851 if (vap->iv_flags & IEEE80211_F_WME) { 2852 bo->bo_wme = frm; 2853 frm = ieee80211_add_wme_param(frm, &ic->ic_wme); 2854 } 2855 if (IEEE80211_IS_CHAN_HT(ni->ni_chan) && 2856 (vap->iv_flags_ht & IEEE80211_FHT_HTCOMPAT)) { 2857 frm = ieee80211_add_htcap_vendor(frm, ni); 2858 frm = ieee80211_add_htinfo_vendor(frm, ni); --- 418 unchanged lines hidden --- |