You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
mac80211: use nl80211 interface types
There's really no reason for mac80211 to be using its own interface type defines. Use the nl80211 types and simplify the configuration code a bit: there's no need to translate them any more now. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
96dd22ac06
commit
05c914fe33
+23
-34
@@ -24,26 +24,19 @@ struct ieee80211_hw *wiphy_to_hw(struct wiphy *wiphy)
|
||||
}
|
||||
EXPORT_SYMBOL(wiphy_to_hw);
|
||||
|
||||
static enum ieee80211_if_types
|
||||
nl80211_type_to_mac80211_type(enum nl80211_iftype type)
|
||||
static bool nl80211_type_check(enum nl80211_iftype type)
|
||||
{
|
||||
switch (type) {
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
return IEEE80211_IF_TYPE_STA;
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
return IEEE80211_IF_TYPE_IBSS;
|
||||
case NL80211_IFTYPE_STATION:
|
||||
return IEEE80211_IF_TYPE_STA;
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
return IEEE80211_IF_TYPE_MNTR;
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
return IEEE80211_IF_TYPE_MESH_POINT;
|
||||
#endif
|
||||
case NL80211_IFTYPE_WDS:
|
||||
return IEEE80211_IF_TYPE_WDS;
|
||||
return true;
|
||||
default:
|
||||
return IEEE80211_IF_TYPE_INVALID;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,17 +45,15 @@ static int ieee80211_add_iface(struct wiphy *wiphy, char *name,
|
||||
struct vif_params *params)
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
enum ieee80211_if_types itype;
|
||||
struct net_device *dev;
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
int err;
|
||||
|
||||
itype = nl80211_type_to_mac80211_type(type);
|
||||
if (itype == IEEE80211_IF_TYPE_INVALID)
|
||||
if (!nl80211_type_check(type))
|
||||
return -EINVAL;
|
||||
|
||||
err = ieee80211_if_add(local, name, &dev, itype, params);
|
||||
if (err || itype != IEEE80211_IF_TYPE_MNTR || !flags)
|
||||
err = ieee80211_if_add(local, name, &dev, type, params);
|
||||
if (err || type != NL80211_IFTYPE_MONITOR || !flags)
|
||||
return err;
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
@@ -93,7 +84,6 @@ static int ieee80211_change_iface(struct wiphy *wiphy, int ifindex,
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
struct net_device *dev;
|
||||
enum ieee80211_if_types itype;
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
int ret;
|
||||
|
||||
@@ -102,8 +92,7 @@ static int ieee80211_change_iface(struct wiphy *wiphy, int ifindex,
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
itype = nl80211_type_to_mac80211_type(type);
|
||||
if (itype == IEEE80211_IF_TYPE_INVALID)
|
||||
if (!nl80211_type_check(type))
|
||||
return -EINVAL;
|
||||
|
||||
if (dev == local->mdev)
|
||||
@@ -111,7 +100,7 @@ static int ieee80211_change_iface(struct wiphy *wiphy, int ifindex,
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
ret = ieee80211_if_change_type(sdata, itype);
|
||||
ret = ieee80211_if_change_type(sdata, type);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -120,7 +109,7 @@ static int ieee80211_change_iface(struct wiphy *wiphy, int ifindex,
|
||||
params->mesh_id_len,
|
||||
params->mesh_id);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_MNTR || !flags)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_MONITOR || !flags)
|
||||
return 0;
|
||||
|
||||
sdata->u.mntr_flags = *flags;
|
||||
@@ -516,7 +505,7 @@ static int ieee80211_add_beacon(struct wiphy *wiphy, struct net_device *dev,
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_AP)
|
||||
return -EINVAL;
|
||||
|
||||
old = sdata->u.ap.beacon;
|
||||
@@ -539,7 +528,7 @@ static int ieee80211_set_beacon(struct wiphy *wiphy, struct net_device *dev,
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_AP)
|
||||
return -EINVAL;
|
||||
|
||||
old = sdata->u.ap.beacon;
|
||||
@@ -561,7 +550,7 @@ static int ieee80211_del_beacon(struct wiphy *wiphy, struct net_device *dev)
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_AP)
|
||||
return -EINVAL;
|
||||
|
||||
old = sdata->u.ap.beacon;
|
||||
@@ -716,8 +705,8 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
|
||||
if (params->vlan) {
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_VLAN &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
|
||||
sdata->vif.type != NL80211_IFTYPE_AP)
|
||||
return -EINVAL;
|
||||
} else
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
@@ -747,8 +736,8 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
|
||||
sdata->vif.type == NL80211_IFTYPE_AP)
|
||||
ieee80211_send_layer2_update(sta);
|
||||
|
||||
rcu_read_unlock();
|
||||
@@ -812,8 +801,8 @@ static int ieee80211_change_station(struct wiphy *wiphy,
|
||||
if (params->vlan && params->vlan != sta->sdata->dev) {
|
||||
vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
|
||||
|
||||
if (vlansdata->vif.type != IEEE80211_IF_TYPE_VLAN &&
|
||||
vlansdata->vif.type != IEEE80211_IF_TYPE_AP) {
|
||||
if (vlansdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
|
||||
vlansdata->vif.type != NL80211_IFTYPE_AP) {
|
||||
rcu_read_unlock();
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -847,7 +836,7 @@ static int ieee80211_add_mpath(struct wiphy *wiphy, struct net_device *dev,
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_MESH_POINT)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
|
||||
return -ENOTSUPP;
|
||||
|
||||
rcu_read_lock();
|
||||
@@ -903,7 +892,7 @@ static int ieee80211_change_mpath(struct wiphy *wiphy,
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_MESH_POINT)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
|
||||
return -ENOTSUPP;
|
||||
|
||||
rcu_read_lock();
|
||||
@@ -978,7 +967,7 @@ static int ieee80211_get_mpath(struct wiphy *wiphy, struct net_device *dev,
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_MESH_POINT)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
|
||||
return -ENOTSUPP;
|
||||
|
||||
rcu_read_lock();
|
||||
@@ -1006,7 +995,7 @@ static int ieee80211_dump_mpath(struct wiphy *wiphy, struct net_device *dev,
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_MESH_POINT)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
|
||||
return -ENOTSUPP;
|
||||
|
||||
rcu_read_lock();
|
||||
@@ -1035,7 +1024,7 @@ static int ieee80211_change_bss(struct wiphy *wiphy,
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_AP)
|
||||
return -EINVAL;
|
||||
|
||||
if (params->use_cts_prot >= 0) {
|
||||
|
||||
@@ -345,26 +345,26 @@ static void add_files(struct ieee80211_sub_if_data *sdata)
|
||||
return;
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
add_mesh_stats(sdata);
|
||||
add_mesh_config(sdata);
|
||||
#endif
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
add_sta_files(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case NL80211_IFTYPE_AP:
|
||||
add_ap_files(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
add_wds_files(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
add_monitor_files(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
add_vlan_files(sdata);
|
||||
break;
|
||||
default:
|
||||
@@ -482,26 +482,26 @@ static void del_files(struct ieee80211_sub_if_data *sdata)
|
||||
return;
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
del_mesh_stats(sdata);
|
||||
del_mesh_config(sdata);
|
||||
#endif
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
del_sta_files(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case NL80211_IFTYPE_AP:
|
||||
del_ap_files(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
del_wds_files(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
del_monitor_files(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
del_vlan_files(sdata);
|
||||
break;
|
||||
default:
|
||||
|
||||
+3
-3
@@ -89,7 +89,7 @@ static void ieee80211_send_addba_request(struct ieee80211_sub_if_data *sdata,
|
||||
memset(mgmt, 0, 24);
|
||||
memcpy(mgmt->da, da, ETH_ALEN);
|
||||
memcpy(mgmt->sa, sdata->dev->dev_addr, ETH_ALEN);
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP)
|
||||
memcpy(mgmt->bssid, sdata->dev->dev_addr, ETH_ALEN);
|
||||
else
|
||||
memcpy(mgmt->bssid, ifsta->bssid, ETH_ALEN);
|
||||
@@ -139,7 +139,7 @@ static void ieee80211_send_addba_resp(struct ieee80211_sub_if_data *sdata, u8 *d
|
||||
memset(mgmt, 0, 24);
|
||||
memcpy(mgmt->da, da, ETH_ALEN);
|
||||
memcpy(mgmt->sa, sdata->dev->dev_addr, ETH_ALEN);
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP)
|
||||
memcpy(mgmt->bssid, sdata->dev->dev_addr, ETH_ALEN);
|
||||
else
|
||||
memcpy(mgmt->bssid, ifsta->bssid, ETH_ALEN);
|
||||
@@ -185,7 +185,7 @@ static void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata,
|
||||
memset(mgmt, 0, 24);
|
||||
memcpy(mgmt->da, da, ETH_ALEN);
|
||||
memcpy(mgmt->sa, sdata->dev->dev_addr, ETH_ALEN);
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP)
|
||||
memcpy(mgmt->bssid, sdata->dev->dev_addr, ETH_ALEN);
|
||||
else
|
||||
memcpy(mgmt->bssid, ifsta->bssid, ETH_ALEN);
|
||||
|
||||
@@ -954,10 +954,10 @@ void ieee80211_rx_bss_put(struct ieee80211_local *local,
|
||||
/* interface handling */
|
||||
void ieee80211_if_setup(struct net_device *dev);
|
||||
int ieee80211_if_add(struct ieee80211_local *local, const char *name,
|
||||
struct net_device **new_dev, enum ieee80211_if_types type,
|
||||
struct net_device **new_dev, enum nl80211_iftype type,
|
||||
struct vif_params *params);
|
||||
int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata,
|
||||
enum ieee80211_if_types type);
|
||||
enum nl80211_iftype type);
|
||||
void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata);
|
||||
void ieee80211_remove_interfaces(struct ieee80211_local *local);
|
||||
|
||||
@@ -1001,7 +1001,7 @@ extern void *mac80211_wiphy_privid; /* for wiphy privid */
|
||||
extern const unsigned char rfc1042_header[6];
|
||||
extern const unsigned char bridge_tunnel_header[6];
|
||||
u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len,
|
||||
enum ieee80211_if_types type);
|
||||
enum nl80211_iftype type);
|
||||
int ieee80211_frame_duration(struct ieee80211_local *local, size_t len,
|
||||
int rate, int erp, int short_preamble);
|
||||
void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx,
|
||||
|
||||
+21
-19
@@ -41,7 +41,7 @@ static void ieee80211_teardown_sdata(struct net_device *dev)
|
||||
sdata->fragment_next = 0;
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case NL80211_IFTYPE_AP:
|
||||
beacon = sdata->u.ap.beacon;
|
||||
rcu_assign_pointer(sdata->u.ap.beacon, NULL);
|
||||
synchronize_rcu();
|
||||
@@ -53,22 +53,23 @@ static void ieee80211_teardown_sdata(struct net_device *dev)
|
||||
}
|
||||
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
if (ieee80211_vif_is_mesh(&sdata->vif))
|
||||
mesh_rmc_free(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
kfree(sdata->u.sta.extra_ie);
|
||||
kfree(sdata->u.sta.assocreq_ies);
|
||||
kfree(sdata->u.sta.assocresp_ies);
|
||||
kfree_skb(sdata->u.sta.probe_resp);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_INVALID:
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
case __NL80211_IFTYPE_AFTER_LAST:
|
||||
BUG();
|
||||
break;
|
||||
}
|
||||
@@ -81,7 +82,7 @@ static void ieee80211_teardown_sdata(struct net_device *dev)
|
||||
* Helper function to initialise an interface to a specific type.
|
||||
*/
|
||||
static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
|
||||
enum ieee80211_if_types type)
|
||||
enum nl80211_iftype type)
|
||||
{
|
||||
/* clear type-dependent union */
|
||||
memset(&sdata->u, 0, sizeof(sdata->u));
|
||||
@@ -93,28 +94,29 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
|
||||
sdata->dev->type = ARPHRD_ETHER;
|
||||
|
||||
switch (type) {
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case NL80211_IFTYPE_AP:
|
||||
skb_queue_head_init(&sdata->u.ap.ps_bc_buf);
|
||||
INIT_LIST_HEAD(&sdata->u.ap.vlans);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
ieee80211_sta_setup_sdata(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
if (ieee80211_vif_is_mesh(&sdata->vif))
|
||||
ieee80211_mesh_init_sdata(sdata);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP;
|
||||
sdata->dev->hard_start_xmit = ieee80211_monitor_start_xmit;
|
||||
sdata->u.mntr_flags = MONITOR_FLAG_CONTROL |
|
||||
MONITOR_FLAG_OTHER_BSS;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_INVALID:
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
case __NL80211_IFTYPE_AFTER_LAST:
|
||||
BUG();
|
||||
break;
|
||||
}
|
||||
@@ -123,7 +125,7 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
|
||||
}
|
||||
|
||||
int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata,
|
||||
enum ieee80211_if_types type)
|
||||
enum nl80211_iftype type)
|
||||
{
|
||||
ASSERT_RTNL();
|
||||
|
||||
@@ -153,7 +155,7 @@ int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata,
|
||||
}
|
||||
|
||||
int ieee80211_if_add(struct ieee80211_local *local, const char *name,
|
||||
struct net_device **new_dev, enum ieee80211_if_types type,
|
||||
struct net_device **new_dev, enum nl80211_iftype type,
|
||||
struct vif_params *params)
|
||||
{
|
||||
struct net_device *ndev;
|
||||
|
||||
+3
-3
@@ -118,8 +118,8 @@ static const u8 *get_mac_for_key(struct ieee80211_key *key)
|
||||
* address to indicate a transmit-only key.
|
||||
*/
|
||||
if (key->conf.alg != ALG_WEP &&
|
||||
(key->sdata->vif.type == IEEE80211_IF_TYPE_AP ||
|
||||
key->sdata->vif.type == IEEE80211_IF_TYPE_VLAN))
|
||||
(key->sdata->vif.type == NL80211_IFTYPE_AP ||
|
||||
key->sdata->vif.type == NL80211_IFTYPE_AP_VLAN))
|
||||
addr = zero_addr;
|
||||
|
||||
if (key->sta)
|
||||
@@ -331,7 +331,7 @@ void ieee80211_key_link(struct ieee80211_key *key,
|
||||
*/
|
||||
key->conf.flags |= IEEE80211_KEY_FLAG_PAIRWISE;
|
||||
} else {
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION) {
|
||||
struct sta_info *ap;
|
||||
|
||||
/*
|
||||
|
||||
+44
-45
@@ -146,7 +146,7 @@ static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)
|
||||
int meshhdrlen;
|
||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
meshhdrlen = (sdata->vif.type == IEEE80211_IF_TYPE_MESH_POINT) ? 5 : 0;
|
||||
meshhdrlen = (sdata->vif.type == NL80211_IFTYPE_MESH_POINT) ? 5 : 0;
|
||||
|
||||
/* FIX: what would be proper limits for MTU?
|
||||
* This interface uses 802.3 frames. */
|
||||
@@ -164,18 +164,16 @@ static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)
|
||||
|
||||
static inline int identical_mac_addr_allowed(int type1, int type2)
|
||||
{
|
||||
return (type1 == IEEE80211_IF_TYPE_MNTR ||
|
||||
type2 == IEEE80211_IF_TYPE_MNTR ||
|
||||
(type1 == IEEE80211_IF_TYPE_AP &&
|
||||
type2 == IEEE80211_IF_TYPE_WDS) ||
|
||||
(type1 == IEEE80211_IF_TYPE_WDS &&
|
||||
(type2 == IEEE80211_IF_TYPE_WDS ||
|
||||
type2 == IEEE80211_IF_TYPE_AP)) ||
|
||||
(type1 == IEEE80211_IF_TYPE_AP &&
|
||||
type2 == IEEE80211_IF_TYPE_VLAN) ||
|
||||
(type1 == IEEE80211_IF_TYPE_VLAN &&
|
||||
(type2 == IEEE80211_IF_TYPE_AP ||
|
||||
type2 == IEEE80211_IF_TYPE_VLAN)));
|
||||
return type1 == NL80211_IFTYPE_MONITOR ||
|
||||
type2 == NL80211_IFTYPE_MONITOR ||
|
||||
(type1 == NL80211_IFTYPE_AP && type2 == NL80211_IFTYPE_WDS) ||
|
||||
(type1 == NL80211_IFTYPE_WDS &&
|
||||
(type2 == NL80211_IFTYPE_WDS ||
|
||||
type2 == NL80211_IFTYPE_AP)) ||
|
||||
(type1 == NL80211_IFTYPE_AP && type2 == NL80211_IFTYPE_AP_VLAN) ||
|
||||
(type1 == NL80211_IFTYPE_AP_VLAN &&
|
||||
(type2 == NL80211_IFTYPE_AP ||
|
||||
type2 == NL80211_IFTYPE_AP_VLAN));
|
||||
}
|
||||
|
||||
static int ieee80211_open(struct net_device *dev)
|
||||
@@ -211,8 +209,8 @@ static int ieee80211_open(struct net_device *dev)
|
||||
* belonging to the same hardware. Then, however, we're
|
||||
* faced with having to adopt two different TSF timers...
|
||||
*/
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS &&
|
||||
nsdata->vif.type == IEEE80211_IF_TYPE_IBSS)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_ADHOC &&
|
||||
nsdata->vif.type == NL80211_IFTYPE_ADHOC)
|
||||
return -EBUSY;
|
||||
|
||||
/*
|
||||
@@ -232,37 +230,38 @@ static int ieee80211_open(struct net_device *dev)
|
||||
/*
|
||||
* can only add VLANs to enabled APs
|
||||
*/
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN &&
|
||||
nsdata->vif.type == IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
|
||||
nsdata->vif.type == NL80211_IFTYPE_AP)
|
||||
sdata->bss = &nsdata->u.ap;
|
||||
}
|
||||
}
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
if (!is_valid_ether_addr(sdata->u.wds.remote_addr))
|
||||
return -ENOLINK;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
if (!sdata->bss)
|
||||
return -ENOLINK;
|
||||
list_add(&sdata->u.vlan.list, &sdata->bss->vlans);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case NL80211_IFTYPE_AP:
|
||||
sdata->bss = &sdata->u.ap;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
if (!ieee80211_vif_is_mesh(&sdata->vif))
|
||||
break;
|
||||
/* mesh ifaces must set allmulti to forward mcast traffic */
|
||||
atomic_inc(&local->iff_allmultis);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
/* no special treatment */
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_INVALID:
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
case __NL80211_IFTYPE_AFTER_LAST:
|
||||
/* cannot happen */
|
||||
WARN_ON(1);
|
||||
break;
|
||||
@@ -309,10 +308,10 @@ static int ieee80211_open(struct net_device *dev)
|
||||
}
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
/* no need to tell driver */
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) {
|
||||
local->cooked_mntrs++;
|
||||
break;
|
||||
@@ -336,8 +335,8 @@ static int ieee80211_open(struct net_device *dev)
|
||||
ieee80211_configure_filter(local);
|
||||
netif_addr_unlock_bh(local->mdev);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
sdata->u.sta.flags &= ~IEEE80211_STA_PREV_BSSID_SET;
|
||||
/* fall through */
|
||||
default:
|
||||
@@ -354,14 +353,14 @@ static int ieee80211_open(struct net_device *dev)
|
||||
ieee80211_bss_info_change_notify(sdata, changed);
|
||||
ieee80211_enable_keys(sdata);
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA &&
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION &&
|
||||
!(sdata->flags & IEEE80211_SDATA_USERSPACE_MLME))
|
||||
netif_carrier_off(dev);
|
||||
else
|
||||
netif_carrier_on(dev);
|
||||
}
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_WDS) {
|
||||
/* Create STA entry for the WDS peer */
|
||||
sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr,
|
||||
GFP_KERNEL);
|
||||
@@ -417,8 +416,8 @@ static int ieee80211_open(struct net_device *dev)
|
||||
* yet be effective. Trigger execution of ieee80211_sta_work
|
||||
* to fix this.
|
||||
*/
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION ||
|
||||
sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
struct ieee80211_if_sta *ifsta = &sdata->u.sta;
|
||||
queue_work(local->hw.workqueue, &ifsta->work);
|
||||
}
|
||||
@@ -433,7 +432,7 @@ static int ieee80211_open(struct net_device *dev)
|
||||
local->ops->stop(local_to_hw(local));
|
||||
err_del_bss:
|
||||
sdata->bss = NULL;
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||
list_del(&sdata->u.vlan.list);
|
||||
return res;
|
||||
}
|
||||
@@ -496,7 +495,7 @@ static int ieee80211_stop(struct net_device *dev)
|
||||
dev_mc_unsync(local->mdev, dev);
|
||||
|
||||
/* APs need special treatment */
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_AP) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
struct ieee80211_sub_if_data *vlan, *tmp;
|
||||
struct beacon_data *old_beacon = sdata->u.ap.beacon;
|
||||
|
||||
@@ -515,11 +514,11 @@ static int ieee80211_stop(struct net_device *dev)
|
||||
local->open_count--;
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
list_del(&sdata->u.vlan.list);
|
||||
/* no need to tell driver */
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) {
|
||||
local->cooked_mntrs--;
|
||||
break;
|
||||
@@ -542,8 +541,8 @@ static int ieee80211_stop(struct net_device *dev)
|
||||
ieee80211_configure_filter(local);
|
||||
netif_addr_unlock_bh(local->mdev);
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
sdata->u.sta.state = IEEE80211_STA_MLME_DISABLED;
|
||||
memset(sdata->u.sta.bssid, 0, ETH_ALEN);
|
||||
del_timer_sync(&sdata->u.sta.timer);
|
||||
@@ -569,7 +568,7 @@ static int ieee80211_stop(struct net_device *dev)
|
||||
sdata->u.sta.extra_ie = NULL;
|
||||
sdata->u.sta.extra_ie_len = 0;
|
||||
/* fall through */
|
||||
case IEEE80211_IF_TYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
if (ieee80211_vif_is_mesh(&sdata->vif)) {
|
||||
/* allmulti is always set on mesh ifaces */
|
||||
atomic_dec(&local->iff_allmultis);
|
||||
@@ -698,12 +697,12 @@ int ieee80211_if_config(struct ieee80211_sub_if_data *sdata, u32 changed)
|
||||
memset(&conf, 0, sizeof(conf));
|
||||
conf.changed = changed;
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION ||
|
||||
sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
conf.bssid = sdata->u.sta.bssid;
|
||||
conf.ssid = sdata->u.sta.ssid;
|
||||
conf.ssid_len = sdata->u.sta.ssid_len;
|
||||
} else if (sdata->vif.type == IEEE80211_IF_TYPE_AP) {
|
||||
} else if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
conf.bssid = sdata->dev->dev_addr;
|
||||
conf.ssid = sdata->u.ap.ssid;
|
||||
conf.ssid_len = sdata->u.ap.ssid_len;
|
||||
@@ -1204,7 +1203,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_MNTR) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
|
||||
if (!netif_running(sdata->dev))
|
||||
continue;
|
||||
|
||||
@@ -1450,7 +1449,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
|
||||
|
||||
/* add one default STA interface */
|
||||
result = ieee80211_if_add(local, "wlan%d", NULL,
|
||||
IEEE80211_IF_TYPE_STA, NULL);
|
||||
NL80211_IFTYPE_STATION, NULL);
|
||||
if (result)
|
||||
printk(KERN_WARNING "%s: Failed to add default virtual iface\n",
|
||||
wiphy_name(local->hw.wiphy));
|
||||
|
||||
+20
-20
@@ -678,7 +678,7 @@ static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
ifsta->flags |= IEEE80211_STA_ASSOCIATED;
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||
return;
|
||||
|
||||
bss = ieee80211_rx_bss_get(local, ifsta->bssid,
|
||||
@@ -1002,17 +1002,17 @@ static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata,
|
||||
DECLARE_MAC_BUF(mac);
|
||||
|
||||
if (ifsta->state != IEEE80211_STA_MLME_AUTHENTICATE &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_IBSS)
|
||||
sdata->vif.type != NL80211_IFTYPE_ADHOC)
|
||||
return;
|
||||
|
||||
if (len < 24 + 6)
|
||||
return;
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||
if (sdata->vif.type != NL80211_IFTYPE_ADHOC &&
|
||||
memcmp(ifsta->bssid, mgmt->sa, ETH_ALEN) != 0)
|
||||
return;
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||
if (sdata->vif.type != NL80211_IFTYPE_ADHOC &&
|
||||
memcmp(ifsta->bssid, mgmt->bssid, ETH_ALEN) != 0)
|
||||
return;
|
||||
|
||||
@@ -1020,7 +1020,7 @@ static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata,
|
||||
auth_transaction = le16_to_cpu(mgmt->u.auth.auth_transaction);
|
||||
status_code = le16_to_cpu(mgmt->u.auth.status_code);
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
/*
|
||||
* IEEE 802.11 standard does not require authentication in IBSS
|
||||
* networks and most implementations do not seem to use it.
|
||||
@@ -1487,7 +1487,7 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
|
||||
if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
|
||||
return;
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS && elems->supp_rates &&
|
||||
if (sdata->vif.type == NL80211_IFTYPE_ADHOC && elems->supp_rates &&
|
||||
memcmp(mgmt->bssid, sdata->u.sta.bssid, ETH_ALEN) == 0) {
|
||||
supp_rates = ieee80211_sta_get_rates(local, elems, band);
|
||||
|
||||
@@ -1532,14 +1532,14 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
|
||||
* In STA mode, the remaining parameters should not be overridden
|
||||
* by beacons because they're not necessarily accurate there.
|
||||
*/
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||
if (sdata->vif.type != NL80211_IFTYPE_ADHOC &&
|
||||
bss->last_probe_resp && beacon) {
|
||||
ieee80211_rx_bss_put(local, bss);
|
||||
return;
|
||||
}
|
||||
|
||||
/* check if we need to merge IBSS */
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS && beacon &&
|
||||
if (sdata->vif.type == NL80211_IFTYPE_ADHOC && beacon &&
|
||||
bss->capability & WLAN_CAPABILITY_IBSS &&
|
||||
bss->freq == local->oper_channel->center_freq &&
|
||||
elems->ssid_len == sdata->u.sta.ssid_len &&
|
||||
@@ -1649,7 +1649,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, true);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||
return;
|
||||
ifsta = &sdata->u.sta;
|
||||
|
||||
@@ -1700,7 +1700,7 @@ static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata,
|
||||
DECLARE_MAC_BUF(mac3);
|
||||
#endif
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS ||
|
||||
if (sdata->vif.type != NL80211_IFTYPE_ADHOC ||
|
||||
ifsta->state != IEEE80211_STA_MLME_IBSS_JOINED ||
|
||||
len < 24 + 2 || !ifsta->probe_resp)
|
||||
return;
|
||||
@@ -2212,8 +2212,8 @@ static void ieee80211_sta_work(struct work_struct *work)
|
||||
if (local->sw_scanning || local->hw_scanning)
|
||||
return;
|
||||
|
||||
if (WARN_ON(sdata->vif.type != IEEE80211_IF_TYPE_STA &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_IBSS))
|
||||
if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION &&
|
||||
sdata->vif.type != NL80211_IFTYPE_ADHOC))
|
||||
return;
|
||||
ifsta = &sdata->u.sta;
|
||||
|
||||
@@ -2273,7 +2273,7 @@ static void ieee80211_sta_work(struct work_struct *work)
|
||||
|
||||
static void ieee80211_restart_sta_timer(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION)
|
||||
queue_work(sdata->local->hw.workqueue,
|
||||
&sdata->u.sta.work);
|
||||
}
|
||||
@@ -2355,7 +2355,7 @@ void ieee80211_sta_req_auth(struct ieee80211_sub_if_data *sdata,
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||
return;
|
||||
|
||||
if ((ifsta->flags & (IEEE80211_STA_BSSID_SET |
|
||||
@@ -2407,7 +2407,7 @@ int ieee80211_sta_set_ssid(struct ieee80211_sub_if_data *sdata, char *ssid, size
|
||||
else
|
||||
ifsta->flags &= ~IEEE80211_STA_SSID_SET;
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS &&
|
||||
if (sdata->vif.type == NL80211_IFTYPE_ADHOC &&
|
||||
!(ifsta->flags & IEEE80211_STA_BSSID_SET)) {
|
||||
ifsta->ibss_join_req = jiffies;
|
||||
ifsta->state = IEEE80211_STA_MLME_IBSS_SEARCH;
|
||||
@@ -2482,8 +2482,8 @@ int ieee80211_sta_deauthenticate(struct ieee80211_sub_if_data *sdata, u16 reason
|
||||
printk(KERN_DEBUG "%s: deauthenticating by local choice (reason=%d)\n",
|
||||
sdata->dev->name, reason);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_IBSS)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION &&
|
||||
sdata->vif.type != NL80211_IFTYPE_ADHOC)
|
||||
return -EINVAL;
|
||||
|
||||
ieee80211_set_disassoc(sdata, ifsta, true, true, reason);
|
||||
@@ -2497,7 +2497,7 @@ int ieee80211_sta_disassociate(struct ieee80211_sub_if_data *sdata, u16 reason)
|
||||
printk(KERN_DEBUG "%s: disassociating by local choice (reason=%d)\n",
|
||||
sdata->dev->name, reason);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||
return -EINVAL;
|
||||
|
||||
if (!(ifsta->flags & IEEE80211_STA_ASSOCIATED))
|
||||
@@ -2513,7 +2513,7 @@ void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local)
|
||||
struct ieee80211_sub_if_data *sdata = local->scan_sdata;
|
||||
struct ieee80211_if_sta *ifsta;
|
||||
|
||||
if (sdata && sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
if (sdata && sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
ifsta = &sdata->u.sta;
|
||||
if (!(ifsta->flags & IEEE80211_STA_BSSID_SET) ||
|
||||
(!(ifsta->state == IEEE80211_STA_MLME_IBSS_JOINED) &&
|
||||
@@ -2539,7 +2539,7 @@ void ieee80211_notify_mac(struct ieee80211_hw *hw,
|
||||
case IEEE80211_NOTIFY_RE_ASSOC:
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||
continue;
|
||||
|
||||
ieee80211_sta_req_auth(sdata, &sdata->u.sta);
|
||||
|
||||
+33
-32
@@ -295,7 +295,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
|
||||
if (!netif_running(sdata->dev))
|
||||
continue;
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_MNTR)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_MONITOR)
|
||||
continue;
|
||||
|
||||
if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES)
|
||||
@@ -512,7 +512,7 @@ ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
|
||||
|
||||
if (unlikely((ieee80211_is_data(hdr->frame_control) ||
|
||||
ieee80211_is_pspoll(hdr->frame_control)) &&
|
||||
rx->sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||
rx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&
|
||||
(!rx->sta || !test_sta_flags(rx->sta, WLAN_STA_ASSOC)))) {
|
||||
if ((!ieee80211_has_fromds(hdr->frame_control) &&
|
||||
!ieee80211_has_tods(hdr->frame_control) &&
|
||||
@@ -724,14 +724,14 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
|
||||
/* Update last_rx only for IBSS packets which are for the current
|
||||
* BSSID to avoid keeping the current IBSS network alive in cases where
|
||||
* other STAs are using different BSSID. */
|
||||
if (rx->sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len,
|
||||
IEEE80211_IF_TYPE_IBSS);
|
||||
NL80211_IFTYPE_ADHOC);
|
||||
if (compare_ether_addr(bssid, rx->sdata->u.sta.bssid) == 0)
|
||||
sta->last_rx = jiffies;
|
||||
} else
|
||||
if (!is_multicast_ether_addr(hdr->addr1) ||
|
||||
rx->sdata->vif.type == IEEE80211_IF_TYPE_STA) {
|
||||
rx->sdata->vif.type == NL80211_IFTYPE_STATION) {
|
||||
/* Update last_rx only for unicast frames in order to prevent
|
||||
* the Probe Request frames (the only broadcast frames from a
|
||||
* STA in infrastructure mode) from keeping a connection alive.
|
||||
@@ -751,8 +751,8 @@ ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
|
||||
sta->last_noise = rx->status->noise;
|
||||
|
||||
if (!ieee80211_has_morefrags(hdr->frame_control) &&
|
||||
(rx->sdata->vif.type == IEEE80211_IF_TYPE_AP ||
|
||||
rx->sdata->vif.type == IEEE80211_IF_TYPE_VLAN)) {
|
||||
(rx->sdata->vif.type == NL80211_IFTYPE_AP ||
|
||||
rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) {
|
||||
/* Change STA power saving mode only in the end of a frame
|
||||
* exchange sequence */
|
||||
if (test_sta_flags(sta, WLAN_STA_PS) &&
|
||||
@@ -982,8 +982,8 @@ ieee80211_rx_h_ps_poll(struct ieee80211_rx_data *rx)
|
||||
!(rx->flags & IEEE80211_RX_RA_MATCH)))
|
||||
return RX_CONTINUE;
|
||||
|
||||
if ((sdata->vif.type != IEEE80211_IF_TYPE_AP) &&
|
||||
(sdata->vif.type != IEEE80211_IF_TYPE_VLAN))
|
||||
if ((sdata->vif.type != NL80211_IFTYPE_AP) &&
|
||||
(sdata->vif.type != NL80211_IFTYPE_AP_VLAN))
|
||||
return RX_DROP_UNUSABLE;
|
||||
|
||||
skb = skb_dequeue(&rx->sta->tx_filtered);
|
||||
@@ -1131,23 +1131,23 @@ ieee80211_data_to_8023(struct ieee80211_rx_data *rx)
|
||||
switch (hdr->frame_control &
|
||||
cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) {
|
||||
case __constant_cpu_to_le16(IEEE80211_FCTL_TODS):
|
||||
if (unlikely(sdata->vif.type != IEEE80211_IF_TYPE_AP &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_VLAN))
|
||||
if (unlikely(sdata->vif.type != NL80211_IFTYPE_AP &&
|
||||
sdata->vif.type != NL80211_IFTYPE_AP_VLAN))
|
||||
return -1;
|
||||
break;
|
||||
case __constant_cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS):
|
||||
if (unlikely(sdata->vif.type != IEEE80211_IF_TYPE_WDS &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_MESH_POINT))
|
||||
if (unlikely(sdata->vif.type != NL80211_IFTYPE_WDS &&
|
||||
sdata->vif.type != NL80211_IFTYPE_MESH_POINT))
|
||||
return -1;
|
||||
break;
|
||||
case __constant_cpu_to_le16(IEEE80211_FCTL_FROMDS):
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA ||
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION ||
|
||||
(is_multicast_ether_addr(dst) &&
|
||||
!compare_ether_addr(src, dev->dev_addr)))
|
||||
return -1;
|
||||
break;
|
||||
case __constant_cpu_to_le16(0):
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_ADHOC)
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
@@ -1221,8 +1221,8 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
|
||||
skb = rx->skb;
|
||||
xmit_skb = NULL;
|
||||
|
||||
if ((sdata->vif.type == IEEE80211_IF_TYPE_AP ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_VLAN) &&
|
||||
if ((sdata->vif.type == NL80211_IFTYPE_AP ||
|
||||
sdata->vif.type == NL80211_IFTYPE_AP_VLAN) &&
|
||||
!(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) &&
|
||||
(rx->flags & IEEE80211_RX_RA_MATCH)) {
|
||||
if (is_multicast_ether_addr(ehdr->h_dest)) {
|
||||
@@ -1536,8 +1536,8 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
|
||||
* FIXME: revisit this, I'm sure we should handle most
|
||||
* of these frames in other modes as well!
|
||||
*/
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_IBSS)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION &&
|
||||
sdata->vif.type != NL80211_IFTYPE_ADHOC)
|
||||
return RX_DROP_MONITOR;
|
||||
|
||||
switch (mgmt->u.action.category) {
|
||||
@@ -1595,8 +1595,8 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx)
|
||||
if (ieee80211_vif_is_mesh(&sdata->vif))
|
||||
return ieee80211_mesh_rx_mgmt(sdata, rx->skb, rx->status);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_IBSS)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION &&
|
||||
sdata->vif.type != NL80211_IFTYPE_ADHOC)
|
||||
return RX_DROP_MONITOR;
|
||||
|
||||
if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME)
|
||||
@@ -1632,7 +1632,7 @@ static void ieee80211_rx_michael_mic_report(struct net_device *dev,
|
||||
if (!ieee80211_has_protected(hdr->frame_control))
|
||||
goto ignore;
|
||||
|
||||
if (rx->sdata->vif.type == IEEE80211_IF_TYPE_AP && keyidx) {
|
||||
if (rx->sdata->vif.type == NL80211_IFTYPE_AP && keyidx) {
|
||||
/*
|
||||
* APs with pairwise keys should never receive Michael MIC
|
||||
* errors for non-zero keyidx because these are reserved for
|
||||
@@ -1702,7 +1702,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx)
|
||||
if (!netif_running(sdata->dev))
|
||||
continue;
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_MNTR ||
|
||||
if (sdata->vif.type != NL80211_IFTYPE_MONITOR ||
|
||||
!(sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES))
|
||||
continue;
|
||||
|
||||
@@ -1801,7 +1801,7 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata,
|
||||
int multicast = is_multicast_ether_addr(hdr->addr1);
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
if (!bssid)
|
||||
return 0;
|
||||
if (!ieee80211_bssid_match(bssid, sdata->u.sta.bssid)) {
|
||||
@@ -1816,7 +1816,7 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata,
|
||||
rx->flags &= ~IEEE80211_RX_RA_MATCH;
|
||||
}
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
if (!bssid)
|
||||
return 0;
|
||||
if (ieee80211_is_beacon(hdr->frame_control)) {
|
||||
@@ -1837,7 +1837,7 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata,
|
||||
bssid, hdr->addr2,
|
||||
BIT(rx->status->rate_idx));
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
if (!multicast &&
|
||||
compare_ether_addr(sdata->dev->dev_addr,
|
||||
hdr->addr1) != 0) {
|
||||
@@ -1847,8 +1847,8 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata,
|
||||
rx->flags &= ~IEEE80211_RX_RA_MATCH;
|
||||
}
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
case NL80211_IFTYPE_AP:
|
||||
if (!bssid) {
|
||||
if (compare_ether_addr(sdata->dev->dev_addr,
|
||||
hdr->addr1))
|
||||
@@ -1860,16 +1860,17 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata,
|
||||
rx->flags &= ~IEEE80211_RX_RA_MATCH;
|
||||
}
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
if (bssid || !ieee80211_is_data(hdr->frame_control))
|
||||
return 0;
|
||||
if (compare_ether_addr(sdata->u.wds.remote_addr, hdr->addr2))
|
||||
return 0;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
/* take everything */
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_INVALID:
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
case __NL80211_IFTYPE_AFTER_LAST:
|
||||
/* should never get here */
|
||||
WARN_ON(1);
|
||||
break;
|
||||
@@ -1930,7 +1931,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
|
||||
if (!netif_running(sdata->dev))
|
||||
continue;
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_MNTR)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_MONITOR)
|
||||
continue;
|
||||
|
||||
bssid = ieee80211_get_bssid(hdr, skb->len, sdata->vif.type);
|
||||
|
||||
+4
-4
@@ -475,7 +475,7 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw)
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
||||
/* Tell AP we're back */
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION) {
|
||||
if (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED) {
|
||||
ieee80211_send_nullfunc(local, sdata, 0);
|
||||
netif_tx_wake_all_queues(sdata->dev);
|
||||
@@ -539,7 +539,7 @@ void ieee80211_scan_work(struct work_struct *work)
|
||||
chan = &sband->channels[local->scan_channel_idx];
|
||||
|
||||
if (chan->flags & IEEE80211_CHAN_DISABLED ||
|
||||
(sdata->vif.type == IEEE80211_IF_TYPE_IBSS &&
|
||||
(sdata->vif.type == NL80211_IFTYPE_ADHOC &&
|
||||
chan->flags & IEEE80211_CHAN_NO_IBSS))
|
||||
skip = 1;
|
||||
|
||||
@@ -638,7 +638,7 @@ int ieee80211_start_scan(struct ieee80211_sub_if_data *scan_sdata,
|
||||
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION) {
|
||||
if (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED) {
|
||||
netif_tx_stop_all_queues(sdata->dev);
|
||||
ieee80211_send_nullfunc(local, sdata, 1);
|
||||
@@ -681,7 +681,7 @@ int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct ieee80211_if_sta *ifsta;
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||
return ieee80211_start_scan(sdata, ssid, ssid_len);
|
||||
|
||||
/*
|
||||
|
||||
@@ -319,7 +319,7 @@ int sta_info_insert(struct sta_info *sta)
|
||||
|
||||
/* notify driver */
|
||||
if (local->ops->sta_notify) {
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||
sdata = container_of(sdata->bss,
|
||||
struct ieee80211_sub_if_data,
|
||||
u.ap);
|
||||
@@ -456,7 +456,7 @@ static void __sta_info_unlink(struct sta_info **sta)
|
||||
local->num_sta--;
|
||||
|
||||
if (local->ops->sta_notify) {
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||
sdata = container_of(sdata->bss,
|
||||
struct ieee80211_sub_if_data,
|
||||
u.ap);
|
||||
|
||||
+14
-14
@@ -226,7 +226,7 @@ ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx)
|
||||
!ieee80211_is_probe_req(hdr->frame_control))
|
||||
return TX_DROP;
|
||||
|
||||
if (tx->sdata->vif.type == IEEE80211_IF_TYPE_MESH_POINT)
|
||||
if (tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT)
|
||||
return TX_CONTINUE;
|
||||
|
||||
if (tx->flags & IEEE80211_TX_PS_BUFFERED)
|
||||
@@ -236,7 +236,7 @@ ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx)
|
||||
|
||||
if (likely(tx->flags & IEEE80211_TX_UNICAST)) {
|
||||
if (unlikely(!(sta_flags & WLAN_STA_ASSOC) &&
|
||||
tx->sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||
tx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&
|
||||
ieee80211_is_data(hdr->frame_control))) {
|
||||
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
|
||||
DECLARE_MAC_BUF(mac);
|
||||
@@ -250,7 +250,7 @@ ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx)
|
||||
} else {
|
||||
if (unlikely(ieee80211_is_data(hdr->frame_control) &&
|
||||
tx->local->num_sta == 0 &&
|
||||
tx->sdata->vif.type != IEEE80211_IF_TYPE_IBSS)) {
|
||||
tx->sdata->vif.type != NL80211_IFTYPE_ADHOC)) {
|
||||
/*
|
||||
* No associated STAs - no need to send multicast
|
||||
* frames.
|
||||
@@ -281,7 +281,7 @@ static void purge_old_ps_buffers(struct ieee80211_local *local)
|
||||
|
||||
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
||||
struct ieee80211_if_ap *ap;
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_AP)
|
||||
continue;
|
||||
ap = &sdata->u.ap;
|
||||
skb = skb_dequeue(&ap->ps_bc_buf);
|
||||
@@ -979,7 +979,7 @@ __ieee80211_tx_prepare(struct ieee80211_tx_data *tx,
|
||||
|
||||
/* process and remove the injection radiotap header */
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
if (unlikely(sdata->vif.type == IEEE80211_IF_TYPE_MNTR)) {
|
||||
if (unlikely(sdata->vif.type == NL80211_IFTYPE_MONITOR)) {
|
||||
if (__ieee80211_parse_tx_radiotap(tx, skb) == TX_DROP)
|
||||
return TX_DROP;
|
||||
|
||||
@@ -1457,8 +1457,8 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||
fc = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA);
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case NL80211_IFTYPE_AP:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS);
|
||||
/* DA BSSID SA */
|
||||
memcpy(hdr.addr1, skb->data, ETH_ALEN);
|
||||
@@ -1466,7 +1466,7 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||
memcpy(hdr.addr3, skb->data + ETH_ALEN, ETH_ALEN);
|
||||
hdrlen = 24;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS);
|
||||
/* RA TA DA SA */
|
||||
memcpy(hdr.addr1, sdata->u.wds.remote_addr, ETH_ALEN);
|
||||
@@ -1476,7 +1476,7 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||
hdrlen = 30;
|
||||
break;
|
||||
#ifdef CONFIG_MAC80211_MESH
|
||||
case IEEE80211_IF_TYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS);
|
||||
/* RA TA DA SA */
|
||||
memset(hdr.addr1, 0, ETH_ALEN);
|
||||
@@ -1493,7 +1493,7 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||
hdrlen = 30;
|
||||
break;
|
||||
#endif
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
fc |= cpu_to_le16(IEEE80211_FCTL_TODS);
|
||||
/* BSSID SA DA */
|
||||
memcpy(hdr.addr1, sdata->u.sta.bssid, ETH_ALEN);
|
||||
@@ -1501,7 +1501,7 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||
memcpy(hdr.addr3, skb->data, ETH_ALEN);
|
||||
hdrlen = 24;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
/* DA SA BSSID */
|
||||
memcpy(hdr.addr1, skb->data, ETH_ALEN);
|
||||
memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN);
|
||||
@@ -1812,7 +1812,7 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
|
||||
sdata = vif_to_sdata(vif);
|
||||
bdev = sdata->dev;
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_AP) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
ap = &sdata->u.ap;
|
||||
beacon = rcu_dereference(ap->beacon);
|
||||
if (ap && beacon) {
|
||||
@@ -1854,7 +1854,7 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
|
||||
num_beacons = &ap->num_beacons;
|
||||
} else
|
||||
goto out;
|
||||
} else if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
} else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
struct ieee80211_hdr *hdr;
|
||||
ifsta = &sdata->u.sta;
|
||||
|
||||
@@ -1999,7 +1999,7 @@ ieee80211_get_buffered_bc(struct ieee80211_hw *hw,
|
||||
rcu_read_lock();
|
||||
beacon = rcu_dereference(bss->beacon);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_AP || !beacon || !beacon->head)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_AP || !beacon || !beacon->head)
|
||||
goto out;
|
||||
|
||||
if (bss->dtim_count != 0)
|
||||
|
||||
+23
-21
@@ -43,7 +43,7 @@ const unsigned char bridge_tunnel_header[] __aligned(2) =
|
||||
|
||||
|
||||
u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len,
|
||||
enum ieee80211_if_types type)
|
||||
enum nl80211_iftype type)
|
||||
{
|
||||
__le16 fc = hdr->frame_control;
|
||||
|
||||
@@ -77,10 +77,10 @@ u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len,
|
||||
|
||||
if (ieee80211_is_back_req(fc)) {
|
||||
switch (type) {
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
return hdr->addr2;
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case NL80211_IFTYPE_AP:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
return hdr->addr1;
|
||||
default:
|
||||
break; /* fall through to the return */
|
||||
@@ -376,15 +376,16 @@ void ieee80211_iterate_active_interfaces(
|
||||
|
||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_INVALID:
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case __NL80211_IFTYPE_AFTER_LAST:
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
continue;
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
case IEEE80211_IF_TYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_AP:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
break;
|
||||
}
|
||||
if (netif_running(sdata->dev))
|
||||
@@ -409,15 +410,16 @@ void ieee80211_iterate_active_interfaces_atomic(
|
||||
|
||||
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_INVALID:
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case __NL80211_IFTYPE_AFTER_LAST:
|
||||
case NL80211_IFTYPE_UNSPECIFIED:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
continue;
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
case IEEE80211_IF_TYPE_MESH_POINT:
|
||||
case NL80211_IFTYPE_AP:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
break;
|
||||
}
|
||||
if (netif_running(sdata->dev))
|
||||
@@ -622,7 +624,7 @@ int ieee80211_set_freq(struct ieee80211_sub_if_data *sdata, int freqMHz)
|
||||
chan = ieee80211_get_channel(local->hw.wiphy, freqMHz);
|
||||
|
||||
if (chan && !(chan->flags & IEEE80211_CHAN_DISABLED)) {
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS &&
|
||||
if (sdata->vif.type == NL80211_IFTYPE_ADHOC &&
|
||||
chan->flags & IEEE80211_CHAN_NO_IBSS) {
|
||||
printk(KERN_DEBUG "%s: IBSS not allowed on frequency "
|
||||
"%d MHz\n", sdata->dev->name, chan->center_freq);
|
||||
|
||||
+42
-42
@@ -122,8 +122,8 @@ static int ieee80211_ioctl_siwgenie(struct net_device *dev,
|
||||
if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION ||
|
||||
sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
int ret = ieee80211_sta_set_extra_ie(sdata, extra, data->length);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -273,21 +273,21 @@ static int ieee80211_ioctl_siwmode(struct net_device *dev,
|
||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
int type;
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
switch (*mode) {
|
||||
case IW_MODE_INFRA:
|
||||
type = IEEE80211_IF_TYPE_STA;
|
||||
type = NL80211_IFTYPE_STATION;
|
||||
break;
|
||||
case IW_MODE_ADHOC:
|
||||
type = IEEE80211_IF_TYPE_IBSS;
|
||||
type = NL80211_IFTYPE_ADHOC;
|
||||
break;
|
||||
case IW_MODE_REPEAT:
|
||||
type = IEEE80211_IF_TYPE_WDS;
|
||||
type = NL80211_IFTYPE_WDS;
|
||||
break;
|
||||
case IW_MODE_MONITOR:
|
||||
type = IEEE80211_IF_TYPE_MNTR;
|
||||
type = NL80211_IFTYPE_MONITOR;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
@@ -305,22 +305,22 @@ static int ieee80211_ioctl_giwmode(struct net_device *dev,
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
switch (sdata->vif.type) {
|
||||
case IEEE80211_IF_TYPE_AP:
|
||||
case NL80211_IFTYPE_AP:
|
||||
*mode = IW_MODE_MASTER;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_STA:
|
||||
case NL80211_IFTYPE_STATION:
|
||||
*mode = IW_MODE_INFRA;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_IBSS:
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
*mode = IW_MODE_ADHOC;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_MNTR:
|
||||
case NL80211_IFTYPE_MONITOR:
|
||||
*mode = IW_MODE_MONITOR;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_WDS:
|
||||
case NL80211_IFTYPE_WDS:
|
||||
*mode = IW_MODE_REPEAT;
|
||||
break;
|
||||
case IEEE80211_IF_TYPE_VLAN:
|
||||
case NL80211_IFTYPE_AP_VLAN:
|
||||
*mode = IW_MODE_SECOND; /* FIXME */
|
||||
break;
|
||||
default:
|
||||
@@ -336,13 +336,13 @@ static int ieee80211_ioctl_siwfreq(struct net_device *dev,
|
||||
{
|
||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION)
|
||||
sdata->u.sta.flags &= ~IEEE80211_STA_AUTO_CHANNEL_SEL;
|
||||
|
||||
/* freq->e == 0: freq->m = channel; otherwise freq = m * 10^e */
|
||||
if (freq->e == 0) {
|
||||
if (freq->m < 0) {
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION)
|
||||
sdata->u.sta.flags |=
|
||||
IEEE80211_STA_AUTO_CHANNEL_SEL;
|
||||
return 0;
|
||||
@@ -386,8 +386,8 @@ static int ieee80211_ioctl_siwessid(struct net_device *dev,
|
||||
len--;
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION ||
|
||||
sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
int ret;
|
||||
if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME) {
|
||||
if (len > IEEE80211_MAX_SSID_LEN)
|
||||
@@ -407,7 +407,7 @@ static int ieee80211_ioctl_siwessid(struct net_device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_AP) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
memcpy(sdata->u.ap.ssid, ssid, len);
|
||||
memset(sdata->u.ap.ssid + len, 0,
|
||||
IEEE80211_MAX_SSID_LEN - len);
|
||||
@@ -426,8 +426,8 @@ static int ieee80211_ioctl_giwessid(struct net_device *dev,
|
||||
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION ||
|
||||
sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
int res = ieee80211_sta_get_ssid(sdata, ssid, &len);
|
||||
if (res == 0) {
|
||||
data->length = len;
|
||||
@@ -437,7 +437,7 @@ static int ieee80211_ioctl_giwessid(struct net_device *dev,
|
||||
return res;
|
||||
}
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_AP) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
len = sdata->u.ap.ssid_len;
|
||||
if (len > IW_ESSID_MAX_SIZE)
|
||||
len = IW_ESSID_MAX_SIZE;
|
||||
@@ -457,8 +457,8 @@ static int ieee80211_ioctl_siwap(struct net_device *dev,
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION ||
|
||||
sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
int ret;
|
||||
if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME) {
|
||||
memcpy(sdata->u.sta.bssid, (u8 *) &ap_addr->sa_data,
|
||||
@@ -477,7 +477,7 @@ static int ieee80211_ioctl_siwap(struct net_device *dev,
|
||||
return ret;
|
||||
ieee80211_sta_req_auth(sdata, &sdata->u.sta);
|
||||
return 0;
|
||||
} else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) {
|
||||
} else if (sdata->vif.type == NL80211_IFTYPE_WDS) {
|
||||
/*
|
||||
* If it is necessary to update the WDS peer address
|
||||
* while the interface is running, then we need to do
|
||||
@@ -505,8 +505,8 @@ static int ieee80211_ioctl_giwap(struct net_device *dev,
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION ||
|
||||
sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
if (sdata->u.sta.state == IEEE80211_STA_MLME_ASSOCIATED ||
|
||||
sdata->u.sta.state == IEEE80211_STA_MLME_IBSS_JOINED) {
|
||||
ap_addr->sa_family = ARPHRD_ETHER;
|
||||
@@ -516,7 +516,7 @@ static int ieee80211_ioctl_giwap(struct net_device *dev,
|
||||
memset(&ap_addr->sa_data, 0, ETH_ALEN);
|
||||
return 0;
|
||||
}
|
||||
} else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) {
|
||||
} else if (sdata->vif.type == NL80211_IFTYPE_WDS) {
|
||||
ap_addr->sa_family = ARPHRD_ETHER;
|
||||
memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN);
|
||||
return 0;
|
||||
@@ -538,10 +538,10 @@ static int ieee80211_ioctl_siwscan(struct net_device *dev,
|
||||
if (!netif_running(dev))
|
||||
return -ENETDOWN;
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_MESH_POINT &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_AP)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION &&
|
||||
sdata->vif.type != NL80211_IFTYPE_ADHOC &&
|
||||
sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
|
||||
sdata->vif.type != NL80211_IFTYPE_AP)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* if SSID was specified explicitly then use that */
|
||||
@@ -627,7 +627,7 @@ static int ieee80211_ioctl_giwrate(struct net_device *dev,
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
|
||||
@@ -858,8 +858,8 @@ static int ieee80211_ioctl_siwmlme(struct net_device *dev,
|
||||
struct iw_mlme *mlme = (struct iw_mlme *) extra;
|
||||
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA &&
|
||||
sdata->vif.type != IEEE80211_IF_TYPE_IBSS)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION &&
|
||||
sdata->vif.type != NL80211_IFTYPE_ADHOC)
|
||||
return -EINVAL;
|
||||
|
||||
switch (mlme->cmd) {
|
||||
@@ -954,7 +954,7 @@ static int ieee80211_ioctl_giwencode(struct net_device *dev,
|
||||
erq->length = sdata->keys[idx]->conf.keylen;
|
||||
erq->flags |= IW_ENCODE_ENABLED;
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA) {
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION) {
|
||||
struct ieee80211_if_sta *ifsta = &sdata->u.sta;
|
||||
switch (ifsta->auth_alg) {
|
||||
case WLAN_AUTH_OPEN:
|
||||
@@ -1028,7 +1028,7 @@ static int ieee80211_ioctl_siwauth(struct net_device *dev,
|
||||
sdata->drop_unencrypted = !!data->value;
|
||||
break;
|
||||
case IW_AUTH_PRIVACY_INVOKED:
|
||||
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||
ret = -EINVAL;
|
||||
else {
|
||||
sdata->u.sta.flags &= ~IEEE80211_STA_PRIVACY_INVOKED;
|
||||
@@ -1043,8 +1043,8 @@ static int ieee80211_ioctl_siwauth(struct net_device *dev,
|
||||
}
|
||||
break;
|
||||
case IW_AUTH_80211_AUTH_ALG:
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION ||
|
||||
sdata->vif.type == NL80211_IFTYPE_ADHOC)
|
||||
sdata->u.sta.auth_algs = data->value;
|
||||
else
|
||||
ret = -EOPNOTSUPP;
|
||||
@@ -1066,8 +1066,8 @@ static struct iw_statistics *ieee80211_get_wireless_stats(struct net_device *dev
|
||||
|
||||
rcu_read_lock();
|
||||
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION ||
|
||||
sdata->vif.type == NL80211_IFTYPE_ADHOC)
|
||||
sta = sta_info_get(local, sdata->u.sta.bssid);
|
||||
if (!sta) {
|
||||
wstats->discard.fragment = 0;
|
||||
@@ -1097,8 +1097,8 @@ static int ieee80211_ioctl_giwauth(struct net_device *dev,
|
||||
|
||||
switch (data->flags & IW_AUTH_INDEX) {
|
||||
case IW_AUTH_80211_AUTH_ALG:
|
||||
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS)
|
||||
if (sdata->vif.type == NL80211_IFTYPE_STATION ||
|
||||
sdata->vif.type == NL80211_IFTYPE_ADHOC)
|
||||
data->value = sdata->u.sta.auth_algs;
|
||||
else
|
||||
ret = -EOPNOTSUPP;
|
||||
|
||||
Reference in New Issue
Block a user