Deleted Added
full compact
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 ---