staging: rtl8192e: Remove dead code associated with CONFIG_CFG_80211
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
This commit is contained in:
@@ -1387,14 +1387,6 @@ short rtl8192_init(struct net_device *dev)
|
|||||||
priv->ops->init_adapter_variable(dev);
|
priv->ops->init_adapter_variable(dev);
|
||||||
rtl8192_get_channel_map(dev);
|
rtl8192_get_channel_map(dev);
|
||||||
|
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
/* channel map setting for the cfg80211 style */
|
|
||||||
{
|
|
||||||
struct r8192_priv* priv = rtllib_priv(dev);
|
|
||||||
rtllib_set_geo(priv);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
init_hal_dm(dev);
|
init_hal_dm(dev);
|
||||||
|
|
||||||
init_timer(&priv->watch_dog_timer);
|
init_timer(&priv->watch_dog_timer);
|
||||||
@@ -3093,11 +3085,6 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,
|
|||||||
goto fail1;
|
goto fail1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
if (!rtl8192_register_wiphy_dev(dev))
|
|
||||||
goto fail1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
netif_carrier_off(dev);
|
netif_carrier_off(dev);
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
|
|
||||||
|
@@ -56,10 +56,6 @@
|
|||||||
#include "r8190P_def.h"
|
#include "r8190P_def.h"
|
||||||
#include "r8192E_dev.h"
|
#include "r8192E_dev.h"
|
||||||
|
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
#include "rtl_regd.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_RTL_RFKILL
|
#ifdef CONFIG_RTL_RFKILL
|
||||||
#include "rtl_rfkill.h"
|
#include "rtl_rfkill.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -660,11 +656,6 @@ typedef struct r8192_priv
|
|||||||
void (*rf_close)(struct net_device *dev);
|
void (*rf_close)(struct net_device *dev);
|
||||||
void (*rf_init)(struct net_device *dev);
|
void (*rf_init)(struct net_device *dev);
|
||||||
|
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
struct ieee80211_rate rates[IEEE80211_NUM_BANDS][RTL_RATE_MAX];
|
|
||||||
struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
rx_desc *rx_ring[MAX_RX_QUEUE];
|
rx_desc *rx_ring[MAX_RX_QUEUE];
|
||||||
struct sk_buff *rx_buf[MAX_RX_QUEUE][MAX_RX_COUNT];
|
struct sk_buff *rx_buf[MAX_RX_QUEUE][MAX_RX_COUNT];
|
||||||
dma_addr_t rx_ring_dma[MAX_RX_QUEUE];
|
dma_addr_t rx_ring_dma[MAX_RX_QUEUE];
|
||||||
@@ -1144,8 +1135,4 @@ ActUpdateChannelAccessSetting(
|
|||||||
PCHANNEL_ACCESS_SETTING ChnlAccessSetting
|
PCHANNEL_ACCESS_SETTING ChnlAccessSetting
|
||||||
);
|
);
|
||||||
|
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
struct net_device *wiphy_to_net_device(struct wiphy *wiphy);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -35,10 +35,6 @@
|
|||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/wireless.h>
|
#include <linux/wireless.h>
|
||||||
|
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
#include <net/cfg80211.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "rtl819x_HT.h"
|
#include "rtl819x_HT.h"
|
||||||
#include "rtl819x_BA.h"
|
#include "rtl819x_BA.h"
|
||||||
#include "rtl819x_TS.h"
|
#include "rtl819x_TS.h"
|
||||||
@@ -854,7 +850,6 @@ enum _REG_PREAMBLE_MODE{
|
|||||||
#define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTLLIB_SCTL_FRAG)
|
#define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTLLIB_SCTL_FRAG)
|
||||||
#define WLAN_GET_SEQ_SEQ(seq) (((seq) & RTLLIB_SCTL_SEQ) >> 4)
|
#define WLAN_GET_SEQ_SEQ(seq) (((seq) & RTLLIB_SCTL_SEQ) >> 4)
|
||||||
|
|
||||||
#ifndef CONFIG_CFG_80211
|
|
||||||
/* Authentication algorithms */
|
/* Authentication algorithms */
|
||||||
#define WLAN_AUTH_OPEN 0
|
#define WLAN_AUTH_OPEN 0
|
||||||
#define WLAN_AUTH_SHARED_KEY 1
|
#define WLAN_AUTH_SHARED_KEY 1
|
||||||
@@ -942,7 +937,6 @@ enum rtllib_reasoncode {
|
|||||||
WLAN_REASON_IEEE8021X_FAILED = 23,
|
WLAN_REASON_IEEE8021X_FAILED = 23,
|
||||||
WLAN_REASON_CIPHER_SUITE_REJECTED = 24,
|
WLAN_REASON_CIPHER_SUITE_REJECTED = 24,
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
#define RTLLIB_STATMASK_SIGNAL (1<<0)
|
#define RTLLIB_STATMASK_SIGNAL (1<<0)
|
||||||
#define RTLLIB_STATMASK_RSSI (1<<1)
|
#define RTLLIB_STATMASK_RSSI (1<<1)
|
||||||
@@ -2106,145 +2100,6 @@ typedef struct _RT_PMKID_LIST
|
|||||||
u16 ssid_length;
|
u16 ssid_length;
|
||||||
} RT_PMKID_LIST, *PRT_PMKID_LIST;
|
} RT_PMKID_LIST, *PRT_PMKID_LIST;
|
||||||
|
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
enum {
|
|
||||||
LIBIPW_CH_PASSIVE_ONLY = (1 << 0),
|
|
||||||
LIBIPW_CH_80211H_RULES = (1 << 1),
|
|
||||||
LIBIPW_CH_B_ONLY = (1 << 2),
|
|
||||||
LIBIPW_CH_NO_IBSS = (1 << 3),
|
|
||||||
LIBIPW_CH_UNIFORM_SPREADING = (1 << 4),
|
|
||||||
LIBIPW_CH_RADAR_DETECT = (1 << 5),
|
|
||||||
LIBIPW_CH_INVALID = (1 << 6),
|
|
||||||
};
|
|
||||||
struct rtllib_channel {
|
|
||||||
u32 freq;
|
|
||||||
u8 channel;
|
|
||||||
u8 flags;
|
|
||||||
u8 max_power;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define RTLLIB_24GHZ_MIN_CHANNEL 1
|
|
||||||
#define RTLLIB_24GHZ_MAX_CHANNEL 14
|
|
||||||
#define RTLLIB_24GHZ_CHANNELS (RTLLIB_24GHZ_MAX_CHANNEL - \
|
|
||||||
RTLLIB_24GHZ_MIN_CHANNEL + 1)
|
|
||||||
|
|
||||||
struct reg_dmn_pair_mapping {
|
|
||||||
u16 regDmnEnum;
|
|
||||||
u16 reg_5ghz_ctl;
|
|
||||||
u16 reg_2ghz_ctl;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct rtl_regulatory {
|
|
||||||
char alpha2[2];
|
|
||||||
u16 country_code;
|
|
||||||
u16 max_power_level;
|
|
||||||
u32 tp_scale;
|
|
||||||
u16 current_rd;
|
|
||||||
u16 current_rd_ext;
|
|
||||||
int16_t power_limit;
|
|
||||||
struct reg_dmn_pair_mapping *regpair;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ieee80211_bss {
|
|
||||||
/* Yes, this is a hack */
|
|
||||||
struct cfg80211_bss cbss;
|
|
||||||
|
|
||||||
/* don't want to look up all the time */
|
|
||||||
size_t ssid_len;
|
|
||||||
u8 ssid[IEEE80211_MAX_SSID_LEN];
|
|
||||||
|
|
||||||
u8 dtim_period;
|
|
||||||
|
|
||||||
bool wmm_used;
|
|
||||||
|
|
||||||
unsigned long last_probe_resp;
|
|
||||||
|
|
||||||
#ifdef CONFIG_MAC80211_MESH
|
|
||||||
u8 *mesh_id;
|
|
||||||
size_t mesh_id_len;
|
|
||||||
u8 *mesh_cfg;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define IEEE80211_MAX_SUPP_RATES 32
|
|
||||||
u8 supp_rates[IEEE80211_MAX_SUPP_RATES];
|
|
||||||
size_t supp_rates_len;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* During assocation, we save an ERP value from a probe response so
|
|
||||||
* that we can feed ERP info to the driver when handling the
|
|
||||||
* association completes. these fields probably won't be up-to-date
|
|
||||||
* otherwise, you probably don't want to use them.
|
|
||||||
*/
|
|
||||||
bool has_erp_value;
|
|
||||||
u8 erp_value;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Parsed Information Elements */
|
|
||||||
struct ieee802_11_elems {
|
|
||||||
u8 *ie_start;
|
|
||||||
size_t total_len;
|
|
||||||
|
|
||||||
/* pointers to IEs */
|
|
||||||
u8 *ssid;
|
|
||||||
u8 *supp_rates;
|
|
||||||
u8 *fh_params;
|
|
||||||
u8 *ds_params;
|
|
||||||
u8 *cf_params;
|
|
||||||
struct ieee80211_tim_ie *tim;
|
|
||||||
u8 *ibss_params;
|
|
||||||
u8 *challenge;
|
|
||||||
u8 *wpa;
|
|
||||||
u8 *rsn;
|
|
||||||
u8 *erp_info;
|
|
||||||
u8 *ext_supp_rates;
|
|
||||||
u8 *wmm_info;
|
|
||||||
u8 *wmm_param;
|
|
||||||
struct ieee80211_ht_cap *ht_cap_elem;
|
|
||||||
struct ieee80211_ht_info *ht_info_elem;
|
|
||||||
u8 *mesh_config;
|
|
||||||
u8 *mesh_id;
|
|
||||||
u8 *peer_link;
|
|
||||||
u8 *preq;
|
|
||||||
u8 *prep;
|
|
||||||
u8 *perr;
|
|
||||||
u8 *ch_switch_elem;
|
|
||||||
u8 *country_elem;
|
|
||||||
u8 *pwr_constr_elem;
|
|
||||||
u8 *quiet_elem; /* first quite element */
|
|
||||||
u8 *timeout_int;
|
|
||||||
|
|
||||||
/* length of them, respectively */
|
|
||||||
u8 ssid_len;
|
|
||||||
u8 supp_rates_len;
|
|
||||||
u8 fh_params_len;
|
|
||||||
u8 ds_params_len;
|
|
||||||
u8 cf_params_len;
|
|
||||||
u8 tim_len;
|
|
||||||
u8 ibss_params_len;
|
|
||||||
u8 challenge_len;
|
|
||||||
u8 wpa_len;
|
|
||||||
u8 rsn_len;
|
|
||||||
u8 erp_info_len;
|
|
||||||
u8 ext_supp_rates_len;
|
|
||||||
u8 wmm_info_len;
|
|
||||||
u8 wmm_param_len;
|
|
||||||
u8 mesh_config_len;
|
|
||||||
u8 mesh_id_len;
|
|
||||||
u8 peer_link_len;
|
|
||||||
u8 preq_len;
|
|
||||||
u8 prep_len;
|
|
||||||
u8 perr_len;
|
|
||||||
u8 ch_switch_elem_len;
|
|
||||||
u8 country_elem_len;
|
|
||||||
u8 pwr_constr_elem_len;
|
|
||||||
u8 quiet_elem_len;
|
|
||||||
u8 num_of_quiet_elem; /* can be more the one */
|
|
||||||
u8 timeout_int_len;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _RT_INTEL_PROMISCUOUS_MODE_INFO {
|
typedef struct _RT_INTEL_PROMISCUOUS_MODE_INFO {
|
||||||
bool bPromiscuousOn;
|
bool bPromiscuousOn;
|
||||||
bool bFilterSourceStationFrame;
|
bool bFilterSourceStationFrame;
|
||||||
@@ -2283,10 +2138,6 @@ struct rtllib_device {
|
|||||||
HT_EXTCHNL_OFFSET chan_offset_bk;
|
HT_EXTCHNL_OFFSET chan_offset_bk;
|
||||||
HT_CHANNEL_WIDTH bandwidth_bk;
|
HT_CHANNEL_WIDTH bandwidth_bk;
|
||||||
u8 hwscan_sem_up;
|
u8 hwscan_sem_up;
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
struct wireless_dev wdev;
|
|
||||||
struct rtl_regulatory regulatory;
|
|
||||||
#endif
|
|
||||||
u8 CntAfterLink;
|
u8 CntAfterLink;
|
||||||
|
|
||||||
RT_OP_MODE OpMode;
|
RT_OP_MODE OpMode;
|
||||||
|
@@ -56,26 +56,6 @@
|
|||||||
|
|
||||||
#define DRV_NAME "rtllib_92e"
|
#define DRV_NAME "rtllib_92e"
|
||||||
|
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
#ifdef CONFIG_RTL_RFKILL
|
|
||||||
static inline void rtllib_rfkill_poll(struct wiphy *wiphy)
|
|
||||||
{
|
|
||||||
struct rtllib_device *rtllib = NULL;
|
|
||||||
|
|
||||||
rtllib = (struct rtllib_device *)wiphy_priv(wiphy);
|
|
||||||
|
|
||||||
rtllib = (struct rtllib_device *)netdev_priv_rsl(rtllib->dev);
|
|
||||||
|
|
||||||
if (rtllib->rtllib_rfkill_poll)
|
|
||||||
rtllib->rtllib_rfkill_poll(rtllib->dev);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static inline void rtllib_rfkill_poll(struct wiphy *wiphy) {}
|
|
||||||
#endif
|
|
||||||
struct cfg80211_ops rtllib_config_ops = {.rfkill_poll = rtllib_rfkill_poll };
|
|
||||||
void *rtllib_wiphy_privid = &rtllib_wiphy_privid;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void _setup_timer( struct timer_list* ptimer, void* fun, unsigned long data )
|
void _setup_timer( struct timer_list* ptimer, void* fun, unsigned long data )
|
||||||
{
|
{
|
||||||
ptimer->function = fun;
|
ptimer->function = fun;
|
||||||
@@ -121,43 +101,6 @@ static inline void rtllib_networks_initialize(struct rtllib_device *ieee)
|
|||||||
list_add_tail(&ieee->networks[i].list, &ieee->network_free_list);
|
list_add_tail(&ieee->networks[i].list, &ieee->network_free_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined CONFIG_CFG_80211
|
|
||||||
static bool rtllib_wdev_alloc(struct rtllib_device *ieee, int sizeof_priv)
|
|
||||||
{
|
|
||||||
int priv_size;
|
|
||||||
struct rtllib_device *rtllib = NULL;
|
|
||||||
|
|
||||||
priv_size = ALIGN(sizeof(struct rtllib_device),NETDEV_ALIGN) + sizeof_priv;
|
|
||||||
|
|
||||||
ieee->wdev.wiphy = wiphy_new(&rtllib_config_ops, priv_size);
|
|
||||||
if (!ieee->wdev.wiphy) {
|
|
||||||
RTLLIB_ERROR("Unable to allocate wiphy.\n");
|
|
||||||
goto out_err_new;
|
|
||||||
}
|
|
||||||
|
|
||||||
rtllib = (struct rtllib_device *)wiphy_priv(ieee->wdev.wiphy);
|
|
||||||
rtllib->dev = ieee->dev;
|
|
||||||
|
|
||||||
ieee->dev->ieee80211_ptr = &ieee->wdev;
|
|
||||||
ieee->wdev.iftype = NL80211_IFTYPE_STATION;
|
|
||||||
|
|
||||||
/* Fill-out wiphy structure bits we know... Not enough info
|
|
||||||
* here to call set_wiphy_dev or set MAC address or channel info
|
|
||||||
* -- have to do that in ->ndo_init... */
|
|
||||||
ieee->wdev.wiphy->privid = rtllib_wiphy_privid;
|
|
||||||
|
|
||||||
ieee->wdev.wiphy->max_scan_ssids = 1;
|
|
||||||
ieee->wdev.wiphy->max_scan_ie_len = 0;
|
|
||||||
ieee->wdev.wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
out_err_new:
|
|
||||||
wiphy_free(ieee->wdev.wiphy);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct net_device *alloc_rtllib(int sizeof_priv)
|
struct net_device *alloc_rtllib(int sizeof_priv)
|
||||||
{
|
{
|
||||||
struct rtllib_device *ieee = NULL;
|
struct rtllib_device *ieee = NULL;
|
||||||
@@ -175,10 +118,6 @@ struct net_device *alloc_rtllib(int sizeof_priv)
|
|||||||
memset(ieee, 0, sizeof(struct rtllib_device)+sizeof_priv);
|
memset(ieee, 0, sizeof(struct rtllib_device)+sizeof_priv);
|
||||||
ieee->dev = dev;
|
ieee->dev = dev;
|
||||||
|
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
if (!rtllib_wdev_alloc(ieee, sizeof_priv))
|
|
||||||
goto failed;
|
|
||||||
#endif
|
|
||||||
err = rtllib_networks_allocate(ieee);
|
err = rtllib_networks_allocate(ieee);
|
||||||
if (err) {
|
if (err) {
|
||||||
RTLLIB_ERROR("Unable to allocate beacon storage: %d\n",
|
RTLLIB_ERROR("Unable to allocate beacon storage: %d\n",
|
||||||
@@ -277,10 +216,6 @@ void free_rtllib(struct net_device *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
rtllib_networks_free(ieee);
|
rtllib_networks_free(ieee);
|
||||||
#ifdef CONFIG_CFG_80211
|
|
||||||
wiphy_unregister(ieee->wdev.wiphy);
|
|
||||||
wiphy_free(ieee->wdev.wiphy);
|
|
||||||
#endif
|
|
||||||
free_netdev(dev);
|
free_netdev(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -45,276 +45,6 @@
|
|||||||
#include "rtllib.h"
|
#include "rtllib.h"
|
||||||
#include "dot11d.h"
|
#include "dot11d.h"
|
||||||
|
|
||||||
#if defined CONFIG_CFG_80211
|
|
||||||
#include <linux/crc32.h>
|
|
||||||
|
|
||||||
struct ieee80211_channel *rtllib_get_channel(struct wiphy *wiphy,
|
|
||||||
int freq)
|
|
||||||
{
|
|
||||||
enum ieee80211_band band;
|
|
||||||
struct ieee80211_supported_band *sband;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
|
||||||
sband = wiphy->bands[band];
|
|
||||||
|
|
||||||
if (!sband)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
for (i = 0; i < sband->n_channels; i++) {
|
|
||||||
if (sband->channels[i].center_freq == freq)
|
|
||||||
return &sband->channels[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int rtllib_channel_to_frequency(int chan)
|
|
||||||
{
|
|
||||||
if (chan < 14)
|
|
||||||
return 2407 + chan * 5;
|
|
||||||
|
|
||||||
if (chan == 14)
|
|
||||||
return 2484;
|
|
||||||
|
|
||||||
/* FIXME: 802.11j 17.3.8.3.2 */
|
|
||||||
return (chan + 1000) * 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 rtllib_parse_elems_crc(u8 *start, size_t len,
|
|
||||||
struct ieee802_11_elems *elems,
|
|
||||||
u64 filter, u32 crc)
|
|
||||||
{
|
|
||||||
size_t left = len;
|
|
||||||
u8 *pos = start;
|
|
||||||
bool calc_crc = filter != 0;
|
|
||||||
|
|
||||||
memset(elems, 0, sizeof(*elems));
|
|
||||||
elems->ie_start = start;
|
|
||||||
elems->total_len = len;
|
|
||||||
|
|
||||||
while (left >= 2) {
|
|
||||||
u8 id, elen;
|
|
||||||
|
|
||||||
id = *pos++;
|
|
||||||
elen = *pos++;
|
|
||||||
left -= 2;
|
|
||||||
|
|
||||||
if (elen > left)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (calc_crc && id < 64 && (filter & BIT(id)))
|
|
||||||
crc = crc32_be(crc, pos - 2, elen + 2);
|
|
||||||
|
|
||||||
switch (id) {
|
|
||||||
case WLAN_EID_SSID:
|
|
||||||
elems->ssid = pos;
|
|
||||||
elems->ssid_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_SUPP_RATES:
|
|
||||||
elems->supp_rates = pos;
|
|
||||||
elems->supp_rates_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_FH_PARAMS:
|
|
||||||
elems->fh_params = pos;
|
|
||||||
elems->fh_params_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_DS_PARAMS:
|
|
||||||
elems->ds_params = pos;
|
|
||||||
elems->ds_params_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_CF_PARAMS:
|
|
||||||
elems->cf_params = pos;
|
|
||||||
elems->cf_params_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_TIM:
|
|
||||||
if (elen >= sizeof(struct ieee80211_tim_ie)) {
|
|
||||||
elems->tim = (void *)pos;
|
|
||||||
elems->tim_len = elen;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case WLAN_EID_IBSS_PARAMS:
|
|
||||||
elems->ibss_params = pos;
|
|
||||||
elems->ibss_params_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_CHALLENGE:
|
|
||||||
elems->challenge = pos;
|
|
||||||
elems->challenge_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_VENDOR_SPECIFIC:
|
|
||||||
if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 &&
|
|
||||||
pos[2] == 0xf2) {
|
|
||||||
/* Microsoft OUI (00:50:F2) */
|
|
||||||
|
|
||||||
if (calc_crc)
|
|
||||||
crc = crc32_be(crc, pos - 2, elen + 2);
|
|
||||||
|
|
||||||
if (pos[3] == 1) {
|
|
||||||
/* OUI Type 1 - WPA IE */
|
|
||||||
elems->wpa = pos;
|
|
||||||
elems->wpa_len = elen;
|
|
||||||
} else if (elen >= 5 && pos[3] == 2) {
|
|
||||||
/* OUI Type 2 - WMM IE */
|
|
||||||
if (pos[4] == 0) {
|
|
||||||
elems->wmm_info = pos;
|
|
||||||
elems->wmm_info_len = elen;
|
|
||||||
} else if (pos[4] == 1) {
|
|
||||||
elems->wmm_param = pos;
|
|
||||||
elems->wmm_param_len = elen;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case WLAN_EID_RSN:
|
|
||||||
elems->rsn = pos;
|
|
||||||
elems->rsn_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_ERP_INFO:
|
|
||||||
elems->erp_info = pos;
|
|
||||||
elems->erp_info_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_EXT_SUPP_RATES:
|
|
||||||
elems->ext_supp_rates = pos;
|
|
||||||
elems->ext_supp_rates_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_HT_CAPABILITY:
|
|
||||||
if (elen >= sizeof(struct ieee80211_ht_cap))
|
|
||||||
elems->ht_cap_elem = (void *)pos;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_HT_INFORMATION:
|
|
||||||
if (elen >= sizeof(struct ieee80211_ht_info))
|
|
||||||
elems->ht_info_elem = (void *)pos;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_MESH_ID:
|
|
||||||
elems->mesh_id = pos;
|
|
||||||
elems->mesh_id_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_MESH_CONFIG:
|
|
||||||
elems->mesh_config = pos;
|
|
||||||
elems->mesh_config_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_PEER_LINK:
|
|
||||||
elems->peer_link = pos;
|
|
||||||
elems->peer_link_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_PREQ:
|
|
||||||
elems->preq = pos;
|
|
||||||
elems->preq_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_PREP:
|
|
||||||
elems->prep = pos;
|
|
||||||
elems->prep_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_PERR:
|
|
||||||
elems->perr = pos;
|
|
||||||
elems->perr_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_CHANNEL_SWITCH:
|
|
||||||
elems->ch_switch_elem = pos;
|
|
||||||
elems->ch_switch_elem_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_QUIET:
|
|
||||||
if (!elems->quiet_elem) {
|
|
||||||
elems->quiet_elem = pos;
|
|
||||||
elems->quiet_elem_len = elen;
|
|
||||||
}
|
|
||||||
elems->num_of_quiet_elem++;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_COUNTRY:
|
|
||||||
elems->country_elem = pos;
|
|
||||||
elems->country_elem_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_PWR_CONSTRAINT:
|
|
||||||
elems->pwr_constr_elem = pos;
|
|
||||||
elems->pwr_constr_elem_len = elen;
|
|
||||||
break;
|
|
||||||
case WLAN_EID_TIMEOUT_INTERVAL:
|
|
||||||
elems->timeout_int = pos;
|
|
||||||
elems->timeout_int_len = elen;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
left -= elen;
|
|
||||||
pos += elen;
|
|
||||||
}
|
|
||||||
|
|
||||||
return crc;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtllib_parse_elems(u8 *start, size_t len,
|
|
||||||
struct ieee802_11_elems *elems)
|
|
||||||
{
|
|
||||||
rtllib_parse_elems_crc(start, len, elems, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ieee80211_scan_rx(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_status)
|
|
||||||
{
|
|
||||||
struct rtllib_hdr_4addr *header = (struct rtllib_hdr_4addr *)skb->data ;
|
|
||||||
struct ieee80211_mgmt *mgmt;
|
|
||||||
struct ieee80211_bss *bss;
|
|
||||||
u8 *elements;
|
|
||||||
struct ieee80211_channel *channel;
|
|
||||||
size_t baselen;
|
|
||||||
int freq;
|
|
||||||
__le16 fc;
|
|
||||||
bool presp, beacon = false;
|
|
||||||
struct ieee802_11_elems elems;
|
|
||||||
s32 signal = 0;
|
|
||||||
|
|
||||||
if (skb->len < 2)
|
|
||||||
return;
|
|
||||||
|
|
||||||
mgmt = (struct ieee80211_mgmt *) skb->data;
|
|
||||||
fc = mgmt->frame_control;
|
|
||||||
|
|
||||||
if (skb->len < 24)
|
|
||||||
return;
|
|
||||||
|
|
||||||
presp = (WLAN_FC_GET_STYPE(header->frame_ctl) == RTLLIB_STYPE_PROBE_RESP);
|
|
||||||
if (presp) {
|
|
||||||
/* ignore ProbeResp to foreign address */
|
|
||||||
if (memcmp(mgmt->da, ieee->dev->dev_addr, ETH_ALEN))
|
|
||||||
return ;;
|
|
||||||
|
|
||||||
presp = true;
|
|
||||||
elements = mgmt->u.probe_resp.variable;
|
|
||||||
baselen = offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
|
|
||||||
} else {
|
|
||||||
beacon = (WLAN_FC_GET_STYPE(header->frame_ctl) == RTLLIB_STYPE_BEACON);
|
|
||||||
baselen = offsetof(struct ieee80211_mgmt, u.beacon.variable);
|
|
||||||
elements = mgmt->u.beacon.variable;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!presp && !beacon)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (baselen > skb->len)
|
|
||||||
return;
|
|
||||||
|
|
||||||
rtllib_parse_elems(elements, skb->len - baselen, &elems);
|
|
||||||
|
|
||||||
if (elems.ds_params && elems.ds_params_len == 1)
|
|
||||||
freq = rtllib_channel_to_frequency(elems.ds_params[0]);
|
|
||||||
else
|
|
||||||
return;
|
|
||||||
|
|
||||||
channel = rtllib_get_channel(ieee->wdev.wiphy, freq);
|
|
||||||
|
|
||||||
if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
|
|
||||||
return;
|
|
||||||
|
|
||||||
signal = rx_status->signal * 100;
|
|
||||||
|
|
||||||
bss = (void *)cfg80211_inform_bss_frame(ieee->wdev.wiphy, channel,
|
|
||||||
mgmt, skb->len, signal, GFP_ATOMIC);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline void rtllib_monitor_rx(struct rtllib_device *ieee,
|
static inline void rtllib_monitor_rx(struct rtllib_device *ieee,
|
||||||
struct sk_buff *skb,struct rtllib_rx_stats *rx_status,
|
struct sk_buff *skb,struct rtllib_rx_stats *rx_status,
|
||||||
size_t hdr_length)
|
size_t hdr_length)
|
||||||
@@ -499,7 +229,6 @@ rtllib_rx_frame_mgmt(struct rtllib_device *ieee, struct sk_buff *skb,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_CFG_80211
|
|
||||||
/* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
|
/* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
|
||||||
/* Ethernet-II snap header (RFC1042 for most EtherTypes) */
|
/* Ethernet-II snap header (RFC1042 for most EtherTypes) */
|
||||||
static unsigned char rfc1042_header[] =
|
static unsigned char rfc1042_header[] =
|
||||||
@@ -508,7 +237,6 @@ static unsigned char rfc1042_header[] =
|
|||||||
static unsigned char bridge_tunnel_header[] =
|
static unsigned char bridge_tunnel_header[] =
|
||||||
{ 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 };
|
{ 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 };
|
||||||
/* No encapsulation header if EtherType < 0x600 (=length) */
|
/* No encapsulation header if EtherType < 0x600 (=length) */
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Called by rtllib_rx_frame_decrypt */
|
/* Called by rtllib_rx_frame_decrypt */
|
||||||
static int rtllib_is_eapol_frame(struct rtllib_device *ieee,
|
static int rtllib_is_eapol_frame(struct rtllib_device *ieee,
|
||||||
|
Reference in New Issue
Block a user