mac80211: move interface type to vif structure
Drivers that support mixed AP/STA operation may well need to know the type of a virtual interface when iterating over them. The easiest way to support that is to move the interface type variable into the vif structure. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
32bfd35d4b
commit
51fb61e76d
|
@ -535,10 +535,12 @@ enum ieee80211_if_types {
|
||||||
* Data in this structure is continually present for driver
|
* Data in this structure is continually present for driver
|
||||||
* use during the life of a virtual interface.
|
* use during the life of a virtual interface.
|
||||||
*
|
*
|
||||||
|
* @type: type of this virtual interface
|
||||||
* @drv_priv: data area for driver use, will always be aligned to
|
* @drv_priv: data area for driver use, will always be aligned to
|
||||||
* sizeof(void *).
|
* sizeof(void *).
|
||||||
*/
|
*/
|
||||||
struct ieee80211_vif {
|
struct ieee80211_vif {
|
||||||
|
enum ieee80211_if_types type;
|
||||||
/* must be last */
|
/* must be last */
|
||||||
u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
|
u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
|
||||||
};
|
};
|
||||||
|
|
|
@ -91,7 +91,7 @@ static int ieee80211_change_iface(struct wiphy *wiphy, int ifindex,
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_VLAN)
|
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
ieee80211_if_reinit(dev);
|
ieee80211_if_reinit(dev);
|
||||||
|
|
|
@ -226,7 +226,7 @@ static void add_files(struct ieee80211_sub_if_data *sdata)
|
||||||
if (!sdata->debugfsdir)
|
if (!sdata->debugfsdir)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (sdata->type) {
|
switch (sdata->vif.type) {
|
||||||
case IEEE80211_IF_TYPE_STA:
|
case IEEE80211_IF_TYPE_STA:
|
||||||
case IEEE80211_IF_TYPE_IBSS:
|
case IEEE80211_IF_TYPE_IBSS:
|
||||||
add_sta_files(sdata);
|
add_sta_files(sdata);
|
||||||
|
@ -353,7 +353,7 @@ void ieee80211_debugfs_add_netdev(struct ieee80211_sub_if_data *sdata)
|
||||||
|
|
||||||
void ieee80211_debugfs_remove_netdev(struct ieee80211_sub_if_data *sdata)
|
void ieee80211_debugfs_remove_netdev(struct ieee80211_sub_if_data *sdata)
|
||||||
{
|
{
|
||||||
del_files(sdata, sdata->type);
|
del_files(sdata, sdata->vif.type);
|
||||||
debugfs_remove(sdata->debugfsdir);
|
debugfs_remove(sdata->debugfsdir);
|
||||||
sdata->debugfsdir = NULL;
|
sdata->debugfsdir = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,21 +177,21 @@ static int ieee80211_open(struct net_device *dev)
|
||||||
/*
|
/*
|
||||||
* check whether it may have the same address
|
* check whether it may have the same address
|
||||||
*/
|
*/
|
||||||
if (!identical_mac_addr_allowed(sdata->type,
|
if (!identical_mac_addr_allowed(sdata->vif.type,
|
||||||
nsdata->type))
|
nsdata->vif.type))
|
||||||
return -ENOTUNIQ;
|
return -ENOTUNIQ;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* can only add VLANs to enabled APs
|
* can only add VLANs to enabled APs
|
||||||
*/
|
*/
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_VLAN &&
|
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN &&
|
||||||
nsdata->type == IEEE80211_IF_TYPE_AP &&
|
nsdata->vif.type == IEEE80211_IF_TYPE_AP &&
|
||||||
netif_running(nsdata->dev))
|
netif_running(nsdata->dev))
|
||||||
sdata->u.vlan.ap = nsdata;
|
sdata->u.vlan.ap = nsdata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (sdata->type) {
|
switch (sdata->vif.type) {
|
||||||
case IEEE80211_IF_TYPE_WDS:
|
case IEEE80211_IF_TYPE_WDS:
|
||||||
if (is_zero_ether_addr(sdata->u.wds.remote_addr))
|
if (is_zero_ether_addr(sdata->u.wds.remote_addr))
|
||||||
return -ENOLINK;
|
return -ENOLINK;
|
||||||
|
@ -222,7 +222,7 @@ static int ieee80211_open(struct net_device *dev)
|
||||||
ieee80211_led_radio(local, local->hw.conf.radio_enabled);
|
ieee80211_led_radio(local, local->hw.conf.radio_enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (sdata->type) {
|
switch (sdata->vif.type) {
|
||||||
case IEEE80211_IF_TYPE_VLAN:
|
case IEEE80211_IF_TYPE_VLAN:
|
||||||
list_add(&sdata->u.vlan.list, &sdata->u.vlan.ap->u.ap.vlans);
|
list_add(&sdata->u.vlan.list, &sdata->u.vlan.ap->u.ap.vlans);
|
||||||
/* no need to tell driver */
|
/* no need to tell driver */
|
||||||
|
@ -244,7 +244,7 @@ static int ieee80211_open(struct net_device *dev)
|
||||||
/* fall through */
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
conf.vif = &sdata->vif;
|
conf.vif = &sdata->vif;
|
||||||
conf.type = sdata->type;
|
conf.type = sdata->vif.type;
|
||||||
conf.mac_addr = dev->dev_addr;
|
conf.mac_addr = dev->dev_addr;
|
||||||
res = local->ops->add_interface(local_to_hw(local), &conf);
|
res = local->ops->add_interface(local_to_hw(local), &conf);
|
||||||
if (res && !local->open_count && local->ops->stop)
|
if (res && !local->open_count && local->ops->stop)
|
||||||
|
@ -256,7 +256,7 @@ static int ieee80211_open(struct net_device *dev)
|
||||||
ieee80211_reset_erp_info(dev);
|
ieee80211_reset_erp_info(dev);
|
||||||
ieee80211_enable_keys(sdata);
|
ieee80211_enable_keys(sdata);
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA &&
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA &&
|
||||||
!(sdata->flags & IEEE80211_SDATA_USERSPACE_MLME))
|
!(sdata->flags & IEEE80211_SDATA_USERSPACE_MLME))
|
||||||
netif_carrier_off(dev);
|
netif_carrier_off(dev);
|
||||||
else
|
else
|
||||||
|
@ -322,7 +322,7 @@ static int ieee80211_stop(struct net_device *dev)
|
||||||
dev_mc_unsync(local->mdev, dev);
|
dev_mc_unsync(local->mdev, dev);
|
||||||
|
|
||||||
/* down all dependent devices, that is VLANs */
|
/* down all dependent devices, that is VLANs */
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_AP) {
|
if (sdata->vif.type == IEEE80211_IF_TYPE_AP) {
|
||||||
struct ieee80211_sub_if_data *vlan, *tmp;
|
struct ieee80211_sub_if_data *vlan, *tmp;
|
||||||
|
|
||||||
list_for_each_entry_safe(vlan, tmp, &sdata->u.ap.vlans,
|
list_for_each_entry_safe(vlan, tmp, &sdata->u.ap.vlans,
|
||||||
|
@ -333,7 +333,7 @@ static int ieee80211_stop(struct net_device *dev)
|
||||||
|
|
||||||
local->open_count--;
|
local->open_count--;
|
||||||
|
|
||||||
switch (sdata->type) {
|
switch (sdata->vif.type) {
|
||||||
case IEEE80211_IF_TYPE_VLAN:
|
case IEEE80211_IF_TYPE_VLAN:
|
||||||
list_del(&sdata->u.vlan.list);
|
list_del(&sdata->u.vlan.list);
|
||||||
sdata->u.vlan.ap = NULL;
|
sdata->u.vlan.ap = NULL;
|
||||||
|
@ -379,7 +379,7 @@ static int ieee80211_stop(struct net_device *dev)
|
||||||
/* fall through */
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
conf.vif = &sdata->vif;
|
conf.vif = &sdata->vif;
|
||||||
conf.type = sdata->type;
|
conf.type = sdata->vif.type;
|
||||||
conf.mac_addr = dev->dev_addr;
|
conf.mac_addr = dev->dev_addr;
|
||||||
/* disable all keys for as long as this netdev is down */
|
/* disable all keys for as long as this netdev is down */
|
||||||
ieee80211_disable_keys(sdata);
|
ieee80211_disable_keys(sdata);
|
||||||
|
@ -502,13 +502,13 @@ static int __ieee80211_if_config(struct net_device *dev,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
memset(&conf, 0, sizeof(conf));
|
memset(&conf, 0, sizeof(conf));
|
||||||
conf.type = sdata->type;
|
conf.type = sdata->vif.type;
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA ||
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_IBSS) {
|
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||||
conf.bssid = sdata->u.sta.bssid;
|
conf.bssid = sdata->u.sta.bssid;
|
||||||
conf.ssid = sdata->u.sta.ssid;
|
conf.ssid = sdata->u.sta.ssid;
|
||||||
conf.ssid_len = sdata->u.sta.ssid_len;
|
conf.ssid_len = sdata->u.sta.ssid_len;
|
||||||
} else if (sdata->type == IEEE80211_IF_TYPE_AP) {
|
} else if (sdata->vif.type == IEEE80211_IF_TYPE_AP) {
|
||||||
conf.ssid = sdata->u.ap.ssid;
|
conf.ssid = sdata->u.ap.ssid;
|
||||||
conf.ssid_len = sdata->u.ap.ssid_len;
|
conf.ssid_len = sdata->u.ap.ssid_len;
|
||||||
conf.beacon = beacon;
|
conf.beacon = beacon;
|
||||||
|
@ -703,7 +703,7 @@ static void ieee80211_tasklet_handler(unsigned long data)
|
||||||
case IEEE80211_RX_MSG:
|
case IEEE80211_RX_MSG:
|
||||||
/* status is in skb->cb */
|
/* status is in skb->cb */
|
||||||
memcpy(&rx_status, skb->cb, sizeof(rx_status));
|
memcpy(&rx_status, skb->cb, sizeof(rx_status));
|
||||||
/* Clear skb->type in order to not confuse kernel
|
/* Clear skb->pkt_type in order to not confuse kernel
|
||||||
* netstack. */
|
* netstack. */
|
||||||
skb->pkt_type = 0;
|
skb->pkt_type = 0;
|
||||||
__ieee80211_rx(local_to_hw(local), skb, &rx_status);
|
__ieee80211_rx(local_to_hw(local), skb, &rx_status);
|
||||||
|
@ -962,7 +962,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb,
|
||||||
if (!monitors || !skb)
|
if (!monitors || !skb)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_MNTR) {
|
if (sdata->vif.type == IEEE80211_IF_TYPE_MNTR) {
|
||||||
if (!netif_running(sdata->dev))
|
if (!netif_running(sdata->dev))
|
||||||
continue;
|
continue;
|
||||||
monitors--;
|
monitors--;
|
||||||
|
@ -1084,7 +1084,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
|
||||||
mdev->header_ops = &ieee80211_header_ops;
|
mdev->header_ops = &ieee80211_header_ops;
|
||||||
mdev->set_multicast_list = ieee80211_master_set_multicast_list;
|
mdev->set_multicast_list = ieee80211_master_set_multicast_list;
|
||||||
|
|
||||||
sdata->type = IEEE80211_IF_TYPE_AP;
|
sdata->vif.type = IEEE80211_IF_TYPE_AP;
|
||||||
sdata->dev = mdev;
|
sdata->dev = mdev;
|
||||||
sdata->local = local;
|
sdata->local = local;
|
||||||
sdata->u.ap.force_unicast_rateidx = -1;
|
sdata->u.ap.force_unicast_rateidx = -1;
|
||||||
|
|
|
@ -294,7 +294,6 @@ struct ieee80211_if_sta {
|
||||||
#define IEEE80211_SDATA_USERSPACE_MLME BIT(4)
|
#define IEEE80211_SDATA_USERSPACE_MLME BIT(4)
|
||||||
struct ieee80211_sub_if_data {
|
struct ieee80211_sub_if_data {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
enum ieee80211_if_types type;
|
|
||||||
|
|
||||||
struct wireless_dev wdev;
|
struct wireless_dev wdev;
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ int ieee80211_if_add(struct net_device *dev, const char *name,
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(ndev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(ndev);
|
||||||
ndev->ieee80211_ptr = &sdata->wdev;
|
ndev->ieee80211_ptr = &sdata->wdev;
|
||||||
sdata->wdev.wiphy = local->hw.wiphy;
|
sdata->wdev.wiphy = local->hw.wiphy;
|
||||||
sdata->type = IEEE80211_IF_TYPE_AP;
|
sdata->vif.type = IEEE80211_IF_TYPE_AP;
|
||||||
sdata->dev = ndev;
|
sdata->dev = ndev;
|
||||||
sdata->local = local;
|
sdata->local = local;
|
||||||
ieee80211_if_sdata_init(sdata);
|
ieee80211_if_sdata_init(sdata);
|
||||||
|
@ -98,7 +98,7 @@ fail:
|
||||||
void ieee80211_if_set_type(struct net_device *dev, int type)
|
void ieee80211_if_set_type(struct net_device *dev, int type)
|
||||||
{
|
{
|
||||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
int oldtype = sdata->type;
|
int oldtype = sdata->vif.type;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to call this function on the master interface
|
* We need to call this function on the master interface
|
||||||
|
@ -116,7 +116,7 @@ void ieee80211_if_set_type(struct net_device *dev, int type)
|
||||||
|
|
||||||
/* most have no BSS pointer */
|
/* most have no BSS pointer */
|
||||||
sdata->bss = NULL;
|
sdata->bss = NULL;
|
||||||
sdata->type = type;
|
sdata->vif.type = type;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case IEEE80211_IF_TYPE_WDS:
|
case IEEE80211_IF_TYPE_WDS:
|
||||||
|
@ -181,7 +181,7 @@ void ieee80211_if_reinit(struct net_device *dev)
|
||||||
|
|
||||||
ieee80211_if_sdata_deinit(sdata);
|
ieee80211_if_sdata_deinit(sdata);
|
||||||
|
|
||||||
switch (sdata->type) {
|
switch (sdata->vif.type) {
|
||||||
case IEEE80211_IF_TYPE_INVALID:
|
case IEEE80211_IF_TYPE_INVALID:
|
||||||
/* cannot happen */
|
/* cannot happen */
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
|
@ -279,7 +279,7 @@ int ieee80211_if_remove(struct net_device *dev, const char *name, int id)
|
||||||
ASSERT_RTNL();
|
ASSERT_RTNL();
|
||||||
|
|
||||||
list_for_each_entry_safe(sdata, n, &local->interfaces, list) {
|
list_for_each_entry_safe(sdata, n, &local->interfaces, list) {
|
||||||
if ((sdata->type == id || id == -1) &&
|
if ((sdata->vif.type == id || id == -1) &&
|
||||||
strcmp(name, sdata->dev->name) == 0 &&
|
strcmp(name, sdata->dev->name) == 0 &&
|
||||||
sdata->dev != local->mdev) {
|
sdata->dev != local->mdev) {
|
||||||
list_del_rcu(&sdata->list);
|
list_del_rcu(&sdata->list);
|
||||||
|
|
|
@ -112,8 +112,8 @@ static int ieee80211_ioctl_siwgenie(struct net_device *dev,
|
||||||
if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME)
|
if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA ||
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_IBSS) {
|
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||||
int ret = ieee80211_sta_set_extra_ie(dev, extra, data->length);
|
int ret = ieee80211_sta_set_extra_ie(dev, extra, data->length);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -232,7 +232,7 @@ static int ieee80211_ioctl_siwmode(struct net_device *dev,
|
||||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
int type;
|
int type;
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_VLAN)
|
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
switch (*mode) {
|
switch (*mode) {
|
||||||
|
@ -249,7 +249,7 @@ static int ieee80211_ioctl_siwmode(struct net_device *dev,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == sdata->type)
|
if (type == sdata->vif.type)
|
||||||
return 0;
|
return 0;
|
||||||
if (netif_running(dev))
|
if (netif_running(dev))
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
@ -268,7 +268,7 @@ static int ieee80211_ioctl_giwmode(struct net_device *dev,
|
||||||
struct ieee80211_sub_if_data *sdata;
|
struct ieee80211_sub_if_data *sdata;
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
switch (sdata->type) {
|
switch (sdata->vif.type) {
|
||||||
case IEEE80211_IF_TYPE_AP:
|
case IEEE80211_IF_TYPE_AP:
|
||||||
*mode = IW_MODE_MASTER;
|
*mode = IW_MODE_MASTER;
|
||||||
break;
|
break;
|
||||||
|
@ -336,13 +336,13 @@ static int ieee80211_ioctl_siwfreq(struct net_device *dev,
|
||||||
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
|
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
|
||||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA)
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA)
|
||||||
sdata->u.sta.flags &= ~IEEE80211_STA_AUTO_CHANNEL_SEL;
|
sdata->u.sta.flags &= ~IEEE80211_STA_AUTO_CHANNEL_SEL;
|
||||||
|
|
||||||
/* freq->e == 0: freq->m = channel; otherwise freq = m * 10^e */
|
/* freq->e == 0: freq->m = channel; otherwise freq = m * 10^e */
|
||||||
if (freq->e == 0) {
|
if (freq->e == 0) {
|
||||||
if (freq->m < 0) {
|
if (freq->m < 0) {
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA)
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA)
|
||||||
sdata->u.sta.flags |=
|
sdata->u.sta.flags |=
|
||||||
IEEE80211_STA_AUTO_CHANNEL_SEL;
|
IEEE80211_STA_AUTO_CHANNEL_SEL;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -388,8 +388,8 @@ static int ieee80211_ioctl_siwessid(struct net_device *dev,
|
||||||
len--;
|
len--;
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA ||
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_IBSS) {
|
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||||
int ret;
|
int ret;
|
||||||
if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME) {
|
if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME) {
|
||||||
if (len > IEEE80211_MAX_SSID_LEN)
|
if (len > IEEE80211_MAX_SSID_LEN)
|
||||||
|
@ -409,7 +409,7 @@ static int ieee80211_ioctl_siwessid(struct net_device *dev,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_AP) {
|
if (sdata->vif.type == IEEE80211_IF_TYPE_AP) {
|
||||||
memcpy(sdata->u.ap.ssid, ssid, len);
|
memcpy(sdata->u.ap.ssid, ssid, len);
|
||||||
memset(sdata->u.ap.ssid + len, 0,
|
memset(sdata->u.ap.ssid + len, 0,
|
||||||
IEEE80211_MAX_SSID_LEN - len);
|
IEEE80211_MAX_SSID_LEN - len);
|
||||||
|
@ -428,8 +428,8 @@ static int ieee80211_ioctl_giwessid(struct net_device *dev,
|
||||||
|
|
||||||
struct ieee80211_sub_if_data *sdata;
|
struct ieee80211_sub_if_data *sdata;
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA ||
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_IBSS) {
|
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||||
int res = ieee80211_sta_get_ssid(dev, ssid, &len);
|
int res = ieee80211_sta_get_ssid(dev, ssid, &len);
|
||||||
if (res == 0) {
|
if (res == 0) {
|
||||||
data->length = len;
|
data->length = len;
|
||||||
|
@ -439,7 +439,7 @@ static int ieee80211_ioctl_giwessid(struct net_device *dev,
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_AP) {
|
if (sdata->vif.type == IEEE80211_IF_TYPE_AP) {
|
||||||
len = sdata->u.ap.ssid_len;
|
len = sdata->u.ap.ssid_len;
|
||||||
if (len > IW_ESSID_MAX_SIZE)
|
if (len > IW_ESSID_MAX_SIZE)
|
||||||
len = IW_ESSID_MAX_SIZE;
|
len = IW_ESSID_MAX_SIZE;
|
||||||
|
@ -459,8 +459,8 @@ static int ieee80211_ioctl_siwap(struct net_device *dev,
|
||||||
struct ieee80211_sub_if_data *sdata;
|
struct ieee80211_sub_if_data *sdata;
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA ||
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_IBSS) {
|
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||||
int ret;
|
int ret;
|
||||||
if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME) {
|
if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME) {
|
||||||
memcpy(sdata->u.sta.bssid, (u8 *) &ap_addr->sa_data,
|
memcpy(sdata->u.sta.bssid, (u8 *) &ap_addr->sa_data,
|
||||||
|
@ -479,7 +479,7 @@ static int ieee80211_ioctl_siwap(struct net_device *dev,
|
||||||
return ret;
|
return ret;
|
||||||
ieee80211_sta_req_auth(dev, &sdata->u.sta);
|
ieee80211_sta_req_auth(dev, &sdata->u.sta);
|
||||||
return 0;
|
return 0;
|
||||||
} else if (sdata->type == IEEE80211_IF_TYPE_WDS) {
|
} else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) {
|
||||||
if (memcmp(sdata->u.wds.remote_addr, (u8 *) &ap_addr->sa_data,
|
if (memcmp(sdata->u.wds.remote_addr, (u8 *) &ap_addr->sa_data,
|
||||||
ETH_ALEN) == 0)
|
ETH_ALEN) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -497,12 +497,12 @@ static int ieee80211_ioctl_giwap(struct net_device *dev,
|
||||||
struct ieee80211_sub_if_data *sdata;
|
struct ieee80211_sub_if_data *sdata;
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA ||
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_IBSS) {
|
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||||
ap_addr->sa_family = ARPHRD_ETHER;
|
ap_addr->sa_family = ARPHRD_ETHER;
|
||||||
memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
|
memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
|
||||||
return 0;
|
return 0;
|
||||||
} else if (sdata->type == IEEE80211_IF_TYPE_WDS) {
|
} else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) {
|
||||||
ap_addr->sa_family = ARPHRD_ETHER;
|
ap_addr->sa_family = ARPHRD_ETHER;
|
||||||
memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN);
|
memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -524,11 +524,10 @@ static int ieee80211_ioctl_siwscan(struct net_device *dev,
|
||||||
if (!netif_running(dev))
|
if (!netif_running(dev))
|
||||||
return -ENETDOWN;
|
return -ENETDOWN;
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA &&
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA &&
|
||||||
sdata->type != IEEE80211_IF_TYPE_IBSS &&
|
sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||||
sdata->type != IEEE80211_IF_TYPE_AP) {
|
sdata->vif.type != IEEE80211_IF_TYPE_AP)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
|
||||||
|
|
||||||
/* if SSID was specified explicitly then use that */
|
/* if SSID was specified explicitly then use that */
|
||||||
if (wrqu->data.length == sizeof(struct iw_scan_req) &&
|
if (wrqu->data.length == sizeof(struct iw_scan_req) &&
|
||||||
|
@ -606,7 +605,7 @@ static int ieee80211_ioctl_giwrate(struct net_device *dev,
|
||||||
struct ieee80211_sub_if_data *sdata;
|
struct ieee80211_sub_if_data *sdata;
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA)
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA)
|
||||||
sta = sta_info_get(local, sdata->u.sta.bssid);
|
sta = sta_info_get(local, sdata->u.sta.bssid);
|
||||||
else
|
else
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
@ -820,8 +819,8 @@ static int ieee80211_ioctl_siwmlme(struct net_device *dev,
|
||||||
struct iw_mlme *mlme = (struct iw_mlme *) extra;
|
struct iw_mlme *mlme = (struct iw_mlme *) extra;
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA &&
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA &&
|
||||||
sdata->type != IEEE80211_IF_TYPE_IBSS)
|
sdata->vif.type != IEEE80211_IF_TYPE_IBSS)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
switch (mlme->cmd) {
|
switch (mlme->cmd) {
|
||||||
|
@ -938,7 +937,7 @@ static int ieee80211_ioctl_siwauth(struct net_device *dev,
|
||||||
sdata->drop_unencrypted = !!data->value;
|
sdata->drop_unencrypted = !!data->value;
|
||||||
break;
|
break;
|
||||||
case IW_AUTH_PRIVACY_INVOKED:
|
case IW_AUTH_PRIVACY_INVOKED:
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA)
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
else {
|
else {
|
||||||
sdata->u.sta.flags &= ~IEEE80211_STA_PRIVACY_INVOKED;
|
sdata->u.sta.flags &= ~IEEE80211_STA_PRIVACY_INVOKED;
|
||||||
|
@ -953,8 +952,8 @@ static int ieee80211_ioctl_siwauth(struct net_device *dev,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IW_AUTH_80211_AUTH_ALG:
|
case IW_AUTH_80211_AUTH_ALG:
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA ||
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_IBSS)
|
sdata->vif.type == IEEE80211_IF_TYPE_IBSS)
|
||||||
sdata->u.sta.auth_algs = data->value;
|
sdata->u.sta.auth_algs = data->value;
|
||||||
else
|
else
|
||||||
ret = -EOPNOTSUPP;
|
ret = -EOPNOTSUPP;
|
||||||
|
@ -974,8 +973,8 @@ static struct iw_statistics *ieee80211_get_wireless_stats(struct net_device *dev
|
||||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
struct sta_info *sta = NULL;
|
struct sta_info *sta = NULL;
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA ||
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_IBSS)
|
sdata->vif.type == IEEE80211_IF_TYPE_IBSS)
|
||||||
sta = sta_info_get(local, sdata->u.sta.bssid);
|
sta = sta_info_get(local, sdata->u.sta.bssid);
|
||||||
if (!sta) {
|
if (!sta) {
|
||||||
wstats->discard.fragment = 0;
|
wstats->discard.fragment = 0;
|
||||||
|
@ -1003,8 +1002,8 @@ static int ieee80211_ioctl_giwauth(struct net_device *dev,
|
||||||
|
|
||||||
switch (data->flags & IW_AUTH_INDEX) {
|
switch (data->flags & IW_AUTH_INDEX) {
|
||||||
case IW_AUTH_80211_AUTH_ALG:
|
case IW_AUTH_80211_AUTH_ALG:
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA ||
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_IBSS)
|
sdata->vif.type == IEEE80211_IF_TYPE_IBSS)
|
||||||
data->value = sdata->u.sta.auth_algs;
|
data->value = sdata->u.sta.auth_algs;
|
||||||
else
|
else
|
||||||
ret = -EOPNOTSUPP;
|
ret = -EOPNOTSUPP;
|
||||||
|
|
|
@ -471,7 +471,7 @@ static void ieee80211_set_associated(struct net_device *dev,
|
||||||
ifsta->flags |= IEEE80211_STA_ASSOCIATED;
|
ifsta->flags |= IEEE80211_STA_ASSOCIATED;
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA)
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bss = ieee80211_rx_bss_get(dev, ifsta->bssid,
|
bss = ieee80211_rx_bss_get(dev, ifsta->bssid,
|
||||||
|
@ -1025,7 +1025,7 @@ static void ieee80211_send_addba_resp(struct net_device *dev, u8 *da, u16 tid,
|
||||||
memset(mgmt, 0, 24);
|
memset(mgmt, 0, 24);
|
||||||
memcpy(mgmt->da, da, ETH_ALEN);
|
memcpy(mgmt->da, da, ETH_ALEN);
|
||||||
memcpy(mgmt->sa, dev->dev_addr, ETH_ALEN);
|
memcpy(mgmt->sa, dev->dev_addr, ETH_ALEN);
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_AP)
|
if (sdata->vif.type == IEEE80211_IF_TYPE_AP)
|
||||||
memcpy(mgmt->bssid, dev->dev_addr, ETH_ALEN);
|
memcpy(mgmt->bssid, dev->dev_addr, ETH_ALEN);
|
||||||
else
|
else
|
||||||
memcpy(mgmt->bssid, ifsta->bssid, ETH_ALEN);
|
memcpy(mgmt->bssid, ifsta->bssid, ETH_ALEN);
|
||||||
|
@ -1184,7 +1184,7 @@ void ieee80211_send_delba(struct net_device *dev, const u8 *da, u16 tid,
|
||||||
memset(mgmt, 0, 24);
|
memset(mgmt, 0, 24);
|
||||||
memcpy(mgmt->da, da, ETH_ALEN);
|
memcpy(mgmt->da, da, ETH_ALEN);
|
||||||
memcpy(mgmt->sa, dev->dev_addr, ETH_ALEN);
|
memcpy(mgmt->sa, dev->dev_addr, ETH_ALEN);
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_AP)
|
if (sdata->vif.type == IEEE80211_IF_TYPE_AP)
|
||||||
memcpy(mgmt->bssid, dev->dev_addr, ETH_ALEN);
|
memcpy(mgmt->bssid, dev->dev_addr, ETH_ALEN);
|
||||||
else
|
else
|
||||||
memcpy(mgmt->bssid, ifsta->bssid, ETH_ALEN);
|
memcpy(mgmt->bssid, ifsta->bssid, ETH_ALEN);
|
||||||
|
@ -1329,7 +1329,7 @@ static void ieee80211_rx_mgmt_auth(struct net_device *dev,
|
||||||
DECLARE_MAC_BUF(mac);
|
DECLARE_MAC_BUF(mac);
|
||||||
|
|
||||||
if (ifsta->state != IEEE80211_AUTHENTICATE &&
|
if (ifsta->state != IEEE80211_AUTHENTICATE &&
|
||||||
sdata->type != IEEE80211_IF_TYPE_IBSS) {
|
sdata->vif.type != IEEE80211_IF_TYPE_IBSS) {
|
||||||
printk(KERN_DEBUG "%s: authentication frame received from "
|
printk(KERN_DEBUG "%s: authentication frame received from "
|
||||||
"%s, but not in authenticate state - ignored\n",
|
"%s, but not in authenticate state - ignored\n",
|
||||||
dev->name, print_mac(mac, mgmt->sa));
|
dev->name, print_mac(mac, mgmt->sa));
|
||||||
|
@ -1343,7 +1343,7 @@ static void ieee80211_rx_mgmt_auth(struct net_device *dev,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_IBSS &&
|
if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||||
memcmp(ifsta->bssid, mgmt->sa, ETH_ALEN) != 0) {
|
memcmp(ifsta->bssid, mgmt->sa, ETH_ALEN) != 0) {
|
||||||
printk(KERN_DEBUG "%s: authentication frame received from "
|
printk(KERN_DEBUG "%s: authentication frame received from "
|
||||||
"unknown AP (SA=%s BSSID=%s) - "
|
"unknown AP (SA=%s BSSID=%s) - "
|
||||||
|
@ -1352,7 +1352,7 @@ static void ieee80211_rx_mgmt_auth(struct net_device *dev,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_IBSS &&
|
if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||||
memcmp(ifsta->bssid, mgmt->bssid, ETH_ALEN) != 0) {
|
memcmp(ifsta->bssid, mgmt->bssid, ETH_ALEN) != 0) {
|
||||||
printk(KERN_DEBUG "%s: authentication frame received from "
|
printk(KERN_DEBUG "%s: authentication frame received from "
|
||||||
"unknown BSSID (SA=%s BSSID=%s) - "
|
"unknown BSSID (SA=%s BSSID=%s) - "
|
||||||
|
@ -1370,7 +1370,7 @@ static void ieee80211_rx_mgmt_auth(struct net_device *dev,
|
||||||
dev->name, print_mac(mac, mgmt->sa), auth_alg,
|
dev->name, print_mac(mac, mgmt->sa), auth_alg,
|
||||||
auth_transaction, status_code);
|
auth_transaction, status_code);
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_IBSS) {
|
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||||
/* IEEE 802.11 standard does not require authentication in IBSS
|
/* IEEE 802.11 standard does not require authentication in IBSS
|
||||||
* networks and most implementations do not seem to use it.
|
* networks and most implementations do not seem to use it.
|
||||||
* However, try to reply to authentication attempts if someone
|
* However, try to reply to authentication attempts if someone
|
||||||
|
@ -1849,7 +1849,7 @@ static void ieee80211_rx_bss_info(struct net_device *dev,
|
||||||
|
|
||||||
timestamp = le64_to_cpu(mgmt->u.beacon.timestamp);
|
timestamp = le64_to_cpu(mgmt->u.beacon.timestamp);
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_IBSS && beacon &&
|
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS && beacon &&
|
||||||
memcmp(mgmt->bssid, sdata->u.sta.bssid, ETH_ALEN) == 0) {
|
memcmp(mgmt->bssid, sdata->u.sta.bssid, ETH_ALEN) == 0) {
|
||||||
#ifdef CONFIG_MAC80211_IBSS_DEBUG
|
#ifdef CONFIG_MAC80211_IBSS_DEBUG
|
||||||
static unsigned long last_tsf_debug = 0;
|
static unsigned long last_tsf_debug = 0;
|
||||||
|
@ -1874,7 +1874,7 @@ static void ieee80211_rx_bss_info(struct net_device *dev,
|
||||||
|
|
||||||
ieee802_11_parse_elems(mgmt->u.beacon.variable, len - baselen, &elems);
|
ieee802_11_parse_elems(mgmt->u.beacon.variable, len - baselen, &elems);
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_IBSS && elems.supp_rates &&
|
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS && elems.supp_rates &&
|
||||||
memcmp(mgmt->bssid, sdata->u.sta.bssid, ETH_ALEN) == 0 &&
|
memcmp(mgmt->bssid, sdata->u.sta.bssid, ETH_ALEN) == 0 &&
|
||||||
(sta = sta_info_get(local, mgmt->sa))) {
|
(sta = sta_info_get(local, mgmt->sa))) {
|
||||||
struct ieee80211_hw_mode *mode;
|
struct ieee80211_hw_mode *mode;
|
||||||
|
@ -2103,7 +2103,7 @@ static void ieee80211_rx_mgmt_beacon(struct net_device *dev,
|
||||||
ieee80211_rx_bss_info(dev, mgmt, len, rx_status, 1);
|
ieee80211_rx_bss_info(dev, mgmt, len, rx_status, 1);
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA)
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||||
return;
|
return;
|
||||||
ifsta = &sdata->u.sta;
|
ifsta = &sdata->u.sta;
|
||||||
|
|
||||||
|
@ -2163,7 +2163,7 @@ static void ieee80211_rx_mgmt_probe_req(struct net_device *dev,
|
||||||
DECLARE_MAC_BUF(mac3);
|
DECLARE_MAC_BUF(mac3);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_IBSS ||
|
if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS ||
|
||||||
ifsta->state != IEEE80211_IBSS_JOINED ||
|
ifsta->state != IEEE80211_IBSS_JOINED ||
|
||||||
len < 24 + 2 || !ifsta->probe_resp)
|
len < 24 + 2 || !ifsta->probe_resp)
|
||||||
return;
|
return;
|
||||||
|
@ -2474,10 +2474,10 @@ void ieee80211_sta_work(struct work_struct *work)
|
||||||
if (local->sta_sw_scanning || local->sta_hw_scanning)
|
if (local->sta_sw_scanning || local->sta_hw_scanning)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA &&
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA &&
|
||||||
sdata->type != IEEE80211_IF_TYPE_IBSS) {
|
sdata->vif.type != IEEE80211_IF_TYPE_IBSS) {
|
||||||
printk(KERN_DEBUG "%s: ieee80211_sta_work: non-STA interface "
|
printk(KERN_DEBUG "%s: ieee80211_sta_work: non-STA interface "
|
||||||
"(type=%d)\n", dev->name, sdata->type);
|
"(type=%d)\n", dev->name, sdata->vif.type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ifsta = &sdata->u.sta;
|
ifsta = &sdata->u.sta;
|
||||||
|
@ -2572,7 +2572,7 @@ void ieee80211_sta_req_auth(struct net_device *dev,
|
||||||
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
|
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
|
||||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA)
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((ifsta->flags & (IEEE80211_STA_BSSID_SET |
|
if ((ifsta->flags & (IEEE80211_STA_BSSID_SET |
|
||||||
|
@ -3039,7 +3039,7 @@ int ieee80211_sta_set_ssid(struct net_device *dev, char *ssid, size_t len)
|
||||||
ifsta->flags |= IEEE80211_STA_SSID_SET;
|
ifsta->flags |= IEEE80211_STA_SSID_SET;
|
||||||
else
|
else
|
||||||
ifsta->flags &= ~IEEE80211_STA_SSID_SET;
|
ifsta->flags &= ~IEEE80211_STA_SSID_SET;
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_IBSS &&
|
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS &&
|
||||||
!(ifsta->flags & IEEE80211_STA_BSSID_SET)) {
|
!(ifsta->flags & IEEE80211_STA_BSSID_SET)) {
|
||||||
ifsta->ibss_join_req = jiffies;
|
ifsta->ibss_join_req = jiffies;
|
||||||
ifsta->state = IEEE80211_IBSS_SEARCH;
|
ifsta->state = IEEE80211_IBSS_SEARCH;
|
||||||
|
@ -3157,7 +3157,7 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw)
|
||||||
if (sdata->dev == local->mdev)
|
if (sdata->dev == local->mdev)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA) {
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA) {
|
||||||
if (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED)
|
if (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED)
|
||||||
ieee80211_send_nullfunc(local, sdata, 0);
|
ieee80211_send_nullfunc(local, sdata, 0);
|
||||||
ieee80211_sta_timer((unsigned long)sdata);
|
ieee80211_sta_timer((unsigned long)sdata);
|
||||||
|
@ -3169,7 +3169,7 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw)
|
||||||
|
|
||||||
done:
|
done:
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_IBSS) {
|
if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||||
struct ieee80211_if_sta *ifsta = &sdata->u.sta;
|
struct ieee80211_if_sta *ifsta = &sdata->u.sta;
|
||||||
if (!(ifsta->flags & IEEE80211_STA_BSSID_SET) ||
|
if (!(ifsta->flags & IEEE80211_STA_BSSID_SET) ||
|
||||||
(!ifsta->state == IEEE80211_IBSS_JOINED &&
|
(!ifsta->state == IEEE80211_IBSS_JOINED &&
|
||||||
|
@ -3204,7 +3204,7 @@ void ieee80211_sta_scan_work(struct work_struct *work)
|
||||||
skip = !(local->enabled_modes & (1 << mode->mode));
|
skip = !(local->enabled_modes & (1 << mode->mode));
|
||||||
chan = &mode->channels[local->scan_channel_idx];
|
chan = &mode->channels[local->scan_channel_idx];
|
||||||
if (!(chan->flag & IEEE80211_CHAN_W_SCAN) ||
|
if (!(chan->flag & IEEE80211_CHAN_W_SCAN) ||
|
||||||
(sdata->type == IEEE80211_IF_TYPE_IBSS &&
|
(sdata->vif.type == IEEE80211_IF_TYPE_IBSS &&
|
||||||
!(chan->flag & IEEE80211_CHAN_W_IBSS)) ||
|
!(chan->flag & IEEE80211_CHAN_W_IBSS)) ||
|
||||||
(local->hw_modes & local->enabled_modes &
|
(local->hw_modes & local->enabled_modes &
|
||||||
(1 << MODE_IEEE80211G) && mode->mode == MODE_IEEE80211B))
|
(1 << MODE_IEEE80211G) && mode->mode == MODE_IEEE80211B))
|
||||||
|
@ -3312,7 +3312,7 @@ static int ieee80211_sta_start_scan(struct net_device *dev,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
netif_stop_queue(sdata->dev);
|
netif_stop_queue(sdata->dev);
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA &&
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA &&
|
||||||
(sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED))
|
(sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED))
|
||||||
ieee80211_send_nullfunc(local, sdata, 1);
|
ieee80211_send_nullfunc(local, sdata, 1);
|
||||||
}
|
}
|
||||||
|
@ -3353,7 +3353,7 @@ int ieee80211_sta_req_scan(struct net_device *dev, u8 *ssid, size_t ssid_len)
|
||||||
struct ieee80211_if_sta *ifsta = &sdata->u.sta;
|
struct ieee80211_if_sta *ifsta = &sdata->u.sta;
|
||||||
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
|
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA)
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||||
return ieee80211_sta_start_scan(dev, ssid, ssid_len);
|
return ieee80211_sta_start_scan(dev, ssid, ssid_len);
|
||||||
|
|
||||||
if (local->sta_sw_scanning || local->sta_hw_scanning) {
|
if (local->sta_sw_scanning || local->sta_hw_scanning) {
|
||||||
|
@ -3576,8 +3576,8 @@ int ieee80211_sta_deauthenticate(struct net_device *dev, u16 reason)
|
||||||
printk(KERN_DEBUG "%s: deauthenticate(reason=%d)\n",
|
printk(KERN_DEBUG "%s: deauthenticate(reason=%d)\n",
|
||||||
dev->name, reason);
|
dev->name, reason);
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA &&
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA &&
|
||||||
sdata->type != IEEE80211_IF_TYPE_IBSS)
|
sdata->vif.type != IEEE80211_IF_TYPE_IBSS)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
ieee80211_send_deauth(dev, ifsta, reason);
|
ieee80211_send_deauth(dev, ifsta, reason);
|
||||||
|
@ -3594,7 +3594,7 @@ int ieee80211_sta_disassociate(struct net_device *dev, u16 reason)
|
||||||
printk(KERN_DEBUG "%s: disassociate(reason=%d)\n",
|
printk(KERN_DEBUG "%s: disassociate(reason=%d)\n",
|
||||||
dev->name, reason);
|
dev->name, reason);
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA)
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (!(ifsta->flags & IEEE80211_STA_ASSOCIATED))
|
if (!(ifsta->flags & IEEE80211_STA_ASSOCIATED))
|
||||||
|
|
|
@ -49,8 +49,8 @@ static const u8 *get_mac_for_key(struct ieee80211_key *key)
|
||||||
* address to indicate a transmit-only key.
|
* address to indicate a transmit-only key.
|
||||||
*/
|
*/
|
||||||
if (key->conf.alg != ALG_WEP &&
|
if (key->conf.alg != ALG_WEP &&
|
||||||
(key->sdata->type == IEEE80211_IF_TYPE_AP ||
|
(key->sdata->vif.type == IEEE80211_IF_TYPE_AP ||
|
||||||
key->sdata->type == IEEE80211_IF_TYPE_VLAN))
|
key->sdata->vif.type == IEEE80211_IF_TYPE_VLAN))
|
||||||
addr = zero_addr;
|
addr = zero_addr;
|
||||||
|
|
||||||
if (key->sta)
|
if (key->sta)
|
||||||
|
@ -172,7 +172,7 @@ struct ieee80211_key *ieee80211_key_alloc(struct ieee80211_sub_if_data *sdata,
|
||||||
if (sta->flags & WLAN_STA_WME)
|
if (sta->flags & WLAN_STA_WME)
|
||||||
key->conf.flags |= IEEE80211_KEY_FLAG_WMM_STA;
|
key->conf.flags |= IEEE80211_KEY_FLAG_WMM_STA;
|
||||||
} else {
|
} else {
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_STA) {
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA) {
|
||||||
struct sta_info *ap;
|
struct sta_info *ap;
|
||||||
|
|
||||||
/* same here, the AP could be using QoS */
|
/* same here, the AP could be using QoS */
|
||||||
|
|
|
@ -223,7 +223,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
|
||||||
if (!netif_running(sdata->dev))
|
if (!netif_running(sdata->dev))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_MNTR)
|
if (sdata->vif.type != IEEE80211_IF_TYPE_MNTR)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (prev_dev) {
|
if (prev_dev) {
|
||||||
|
@ -419,7 +419,7 @@ ieee80211_rx_h_check(struct ieee80211_txrx_data *rx)
|
||||||
if (unlikely(((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA ||
|
if (unlikely(((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA ||
|
||||||
((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_CTL &&
|
((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_CTL &&
|
||||||
(rx->fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_PSPOLL)) &&
|
(rx->fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_PSPOLL)) &&
|
||||||
rx->sdata->type != IEEE80211_IF_TYPE_IBSS &&
|
rx->sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||||
(!rx->sta || !(rx->sta->flags & WLAN_STA_ASSOC)))) {
|
(!rx->sta || !(rx->sta->flags & WLAN_STA_ASSOC)))) {
|
||||||
if ((!(rx->fc & IEEE80211_FCTL_FROMDS) &&
|
if ((!(rx->fc & IEEE80211_FCTL_FROMDS) &&
|
||||||
!(rx->fc & IEEE80211_FCTL_TODS) &&
|
!(rx->fc & IEEE80211_FCTL_TODS) &&
|
||||||
|
@ -639,14 +639,14 @@ ieee80211_rx_h_sta_process(struct ieee80211_txrx_data *rx)
|
||||||
/* Update last_rx only for IBSS packets which are for the current
|
/* Update last_rx only for IBSS packets which are for the current
|
||||||
* BSSID to avoid keeping the current IBSS network alive in cases where
|
* BSSID to avoid keeping the current IBSS network alive in cases where
|
||||||
* other STAs are using different BSSID. */
|
* other STAs are using different BSSID. */
|
||||||
if (rx->sdata->type == IEEE80211_IF_TYPE_IBSS) {
|
if (rx->sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
|
||||||
u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len,
|
u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len,
|
||||||
IEEE80211_IF_TYPE_IBSS);
|
IEEE80211_IF_TYPE_IBSS);
|
||||||
if (compare_ether_addr(bssid, rx->sdata->u.sta.bssid) == 0)
|
if (compare_ether_addr(bssid, rx->sdata->u.sta.bssid) == 0)
|
||||||
sta->last_rx = jiffies;
|
sta->last_rx = jiffies;
|
||||||
} else
|
} else
|
||||||
if (!is_multicast_ether_addr(hdr->addr1) ||
|
if (!is_multicast_ether_addr(hdr->addr1) ||
|
||||||
rx->sdata->type == IEEE80211_IF_TYPE_STA) {
|
rx->sdata->vif.type == IEEE80211_IF_TYPE_STA) {
|
||||||
/* Update last_rx only for unicast frames in order to prevent
|
/* Update last_rx only for unicast frames in order to prevent
|
||||||
* the Probe Request frames (the only broadcast frames from a
|
* the Probe Request frames (the only broadcast frames from a
|
||||||
* STA in infrastructure mode) from keeping a connection alive.
|
* STA in infrastructure mode) from keeping a connection alive.
|
||||||
|
@ -901,8 +901,8 @@ ieee80211_rx_h_ps_poll(struct ieee80211_txrx_data *rx)
|
||||||
!(rx->flags & IEEE80211_TXRXD_RXRA_MATCH)))
|
!(rx->flags & IEEE80211_TXRXD_RXRA_MATCH)))
|
||||||
return TXRX_CONTINUE;
|
return TXRX_CONTINUE;
|
||||||
|
|
||||||
if ((sdata->type != IEEE80211_IF_TYPE_AP) &&
|
if ((sdata->vif.type != IEEE80211_IF_TYPE_AP) &&
|
||||||
(sdata->type != IEEE80211_IF_TYPE_VLAN))
|
(sdata->vif.type != IEEE80211_IF_TYPE_VLAN))
|
||||||
return TXRX_DROP;
|
return TXRX_DROP;
|
||||||
|
|
||||||
skb = skb_dequeue(&rx->sta->tx_filtered);
|
skb = skb_dequeue(&rx->sta->tx_filtered);
|
||||||
|
@ -1058,8 +1058,8 @@ ieee80211_data_to_8023(struct ieee80211_txrx_data *rx)
|
||||||
memcpy(dst, hdr->addr3, ETH_ALEN);
|
memcpy(dst, hdr->addr3, ETH_ALEN);
|
||||||
memcpy(src, hdr->addr2, ETH_ALEN);
|
memcpy(src, hdr->addr2, ETH_ALEN);
|
||||||
|
|
||||||
if (unlikely(sdata->type != IEEE80211_IF_TYPE_AP &&
|
if (unlikely(sdata->vif.type != IEEE80211_IF_TYPE_AP &&
|
||||||
sdata->type != IEEE80211_IF_TYPE_VLAN)) {
|
sdata->vif.type != IEEE80211_IF_TYPE_VLAN)) {
|
||||||
if (net_ratelimit())
|
if (net_ratelimit())
|
||||||
printk(KERN_DEBUG "%s: dropped ToDS frame "
|
printk(KERN_DEBUG "%s: dropped ToDS frame "
|
||||||
"(BSSID=%s SA=%s DA=%s)\n",
|
"(BSSID=%s SA=%s DA=%s)\n",
|
||||||
|
@ -1075,7 +1075,7 @@ ieee80211_data_to_8023(struct ieee80211_txrx_data *rx)
|
||||||
memcpy(dst, hdr->addr3, ETH_ALEN);
|
memcpy(dst, hdr->addr3, ETH_ALEN);
|
||||||
memcpy(src, hdr->addr4, ETH_ALEN);
|
memcpy(src, hdr->addr4, ETH_ALEN);
|
||||||
|
|
||||||
if (unlikely(sdata->type != IEEE80211_IF_TYPE_WDS)) {
|
if (unlikely(sdata->vif.type != IEEE80211_IF_TYPE_WDS)) {
|
||||||
if (net_ratelimit())
|
if (net_ratelimit())
|
||||||
printk(KERN_DEBUG "%s: dropped FromDS&ToDS "
|
printk(KERN_DEBUG "%s: dropped FromDS&ToDS "
|
||||||
"frame (RA=%s TA=%s DA=%s SA=%s)\n",
|
"frame (RA=%s TA=%s DA=%s SA=%s)\n",
|
||||||
|
@ -1092,7 +1092,7 @@ ieee80211_data_to_8023(struct ieee80211_txrx_data *rx)
|
||||||
memcpy(dst, hdr->addr1, ETH_ALEN);
|
memcpy(dst, hdr->addr1, ETH_ALEN);
|
||||||
memcpy(src, hdr->addr3, ETH_ALEN);
|
memcpy(src, hdr->addr3, ETH_ALEN);
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_STA ||
|
if (sdata->vif.type != IEEE80211_IF_TYPE_STA ||
|
||||||
(is_multicast_ether_addr(dst) &&
|
(is_multicast_ether_addr(dst) &&
|
||||||
!compare_ether_addr(src, dev->dev_addr)))
|
!compare_ether_addr(src, dev->dev_addr)))
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1102,7 +1102,7 @@ ieee80211_data_to_8023(struct ieee80211_txrx_data *rx)
|
||||||
memcpy(dst, hdr->addr1, ETH_ALEN);
|
memcpy(dst, hdr->addr1, ETH_ALEN);
|
||||||
memcpy(src, hdr->addr2, ETH_ALEN);
|
memcpy(src, hdr->addr2, ETH_ALEN);
|
||||||
|
|
||||||
if (sdata->type != IEEE80211_IF_TYPE_IBSS) {
|
if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS) {
|
||||||
if (net_ratelimit()) {
|
if (net_ratelimit()) {
|
||||||
printk(KERN_DEBUG "%s: dropped IBSS frame "
|
printk(KERN_DEBUG "%s: dropped IBSS frame "
|
||||||
"(DA=%s SA=%s BSSID=%s)\n",
|
"(DA=%s SA=%s BSSID=%s)\n",
|
||||||
|
@ -1190,8 +1190,8 @@ ieee80211_deliver_skb(struct ieee80211_txrx_data *rx)
|
||||||
skb = rx->skb;
|
skb = rx->skb;
|
||||||
xmit_skb = NULL;
|
xmit_skb = NULL;
|
||||||
|
|
||||||
if (local->bridge_packets && (sdata->type == IEEE80211_IF_TYPE_AP ||
|
if (local->bridge_packets && (sdata->vif.type == IEEE80211_IF_TYPE_AP ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_VLAN) &&
|
sdata->vif.type == IEEE80211_IF_TYPE_VLAN) &&
|
||||||
(rx->flags & IEEE80211_TXRXD_RXRA_MATCH)) {
|
(rx->flags & IEEE80211_TXRXD_RXRA_MATCH)) {
|
||||||
if (is_multicast_ether_addr(ehdr->h_dest)) {
|
if (is_multicast_ether_addr(ehdr->h_dest)) {
|
||||||
/*
|
/*
|
||||||
|
@ -1435,8 +1435,8 @@ ieee80211_rx_h_mgmt(struct ieee80211_txrx_data *rx)
|
||||||
return TXRX_DROP;
|
return TXRX_DROP;
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(rx->dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(rx->dev);
|
||||||
if ((sdata->type == IEEE80211_IF_TYPE_STA ||
|
if ((sdata->vif.type == IEEE80211_IF_TYPE_STA ||
|
||||||
sdata->type == IEEE80211_IF_TYPE_IBSS) &&
|
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) &&
|
||||||
!(sdata->flags & IEEE80211_SDATA_USERSPACE_MLME))
|
!(sdata->flags & IEEE80211_SDATA_USERSPACE_MLME))
|
||||||
ieee80211_sta_rx_mgmt(rx->dev, rx->skb, rx->u.rx.status);
|
ieee80211_sta_rx_mgmt(rx->dev, rx->skb, rx->u.rx.status);
|
||||||
else
|
else
|
||||||
|
@ -1528,7 +1528,7 @@ static void ieee80211_rx_michael_mic_report(struct net_device *dev,
|
||||||
goto ignore;
|
goto ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rx->sdata->type == IEEE80211_IF_TYPE_AP && keyidx) {
|
if (rx->sdata->vif.type == IEEE80211_IF_TYPE_AP && keyidx) {
|
||||||
/*
|
/*
|
||||||
* APs with pairwise keys should never receive Michael MIC
|
* APs with pairwise keys should never receive Michael MIC
|
||||||
* errors for non-zero keyidx because these are reserved for
|
* errors for non-zero keyidx because these are reserved for
|
||||||
|
@ -1590,7 +1590,7 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata,
|
||||||
{
|
{
|
||||||
int multicast = is_multicast_ether_addr(hdr->addr1);
|
int multicast = is_multicast_ether_addr(hdr->addr1);
|
||||||
|
|
||||||
switch (sdata->type) {
|
switch (sdata->vif.type) {
|
||||||
case IEEE80211_IF_TYPE_STA:
|
case IEEE80211_IF_TYPE_STA:
|
||||||
if (!bssid)
|
if (!bssid)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1738,10 +1738,10 @@ void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, struct sk_buff *skb,
|
||||||
if (!netif_running(sdata->dev))
|
if (!netif_running(sdata->dev))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_MNTR)
|
if (sdata->vif.type == IEEE80211_IF_TYPE_MNTR)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bssid = ieee80211_get_bssid(hdr, skb->len, sdata->type);
|
bssid = ieee80211_get_bssid(hdr, skb->len, sdata->vif.type);
|
||||||
rx.flags |= IEEE80211_TXRXD_RXRA_MATCH;
|
rx.flags |= IEEE80211_TXRXD_RXRA_MATCH;
|
||||||
prepares = prepare_for_handlers(sdata, bssid, &rx, hdr);
|
prepares = prepare_for_handlers(sdata, bssid, &rx, hdr);
|
||||||
/* prepare_for_handlers can change sta */
|
/* prepare_for_handlers can change sta */
|
||||||
|
|
|
@ -181,7 +181,7 @@ struct sta_info * sta_info_add(struct ieee80211_local *local,
|
||||||
struct ieee80211_sub_if_data *sdata;
|
struct ieee80211_sub_if_data *sdata;
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_VLAN)
|
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN)
|
||||||
sdata = sdata->u.vlan.ap;
|
sdata = sdata->u.vlan.ap;
|
||||||
|
|
||||||
local->ops->sta_notify(local_to_hw(local), &sdata->vif,
|
local->ops->sta_notify(local_to_hw(local), &sdata->vif,
|
||||||
|
@ -259,7 +259,7 @@ void sta_info_free(struct sta_info *sta)
|
||||||
|
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(sta->dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(sta->dev);
|
||||||
|
|
||||||
if (sdata->type == IEEE80211_IF_TYPE_VLAN)
|
if (sdata->vif.type == IEEE80211_IF_TYPE_VLAN)
|
||||||
sdata = sdata->u.vlan.ap;
|
sdata = sdata->u.vlan.ap;
|
||||||
|
|
||||||
local->ops->sta_notify(local_to_hw(local), &sdata->vif,
|
local->ops->sta_notify(local_to_hw(local), &sdata->vif,
|
||||||
|
|
|
@ -237,7 +237,7 @@ ieee80211_tx_h_check_assoc(struct ieee80211_txrx_data *tx)
|
||||||
|
|
||||||
if (likely(tx->flags & IEEE80211_TXRXD_TXUNICAST)) {
|
if (likely(tx->flags & IEEE80211_TXRXD_TXUNICAST)) {
|
||||||
if (unlikely(!(sta_flags & WLAN_STA_ASSOC) &&
|
if (unlikely(!(sta_flags & WLAN_STA_ASSOC) &&
|
||||||
tx->sdata->type != IEEE80211_IF_TYPE_IBSS &&
|
tx->sdata->vif.type != IEEE80211_IF_TYPE_IBSS &&
|
||||||
(tx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) {
|
(tx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) {
|
||||||
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
|
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
|
||||||
DECLARE_MAC_BUF(mac);
|
DECLARE_MAC_BUF(mac);
|
||||||
|
@ -251,7 +251,7 @@ ieee80211_tx_h_check_assoc(struct ieee80211_txrx_data *tx)
|
||||||
} else {
|
} else {
|
||||||
if (unlikely((tx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
|
if (unlikely((tx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
|
||||||
tx->local->num_sta == 0 &&
|
tx->local->num_sta == 0 &&
|
||||||
tx->sdata->type != IEEE80211_IF_TYPE_IBSS)) {
|
tx->sdata->vif.type != IEEE80211_IF_TYPE_IBSS)) {
|
||||||
/*
|
/*
|
||||||
* No associated STAs - no need to send multicast
|
* No associated STAs - no need to send multicast
|
||||||
* frames.
|
* frames.
|
||||||
|
@ -294,7 +294,7 @@ static void purge_old_ps_buffers(struct ieee80211_local *local)
|
||||||
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
||||||
struct ieee80211_if_ap *ap;
|
struct ieee80211_if_ap *ap;
|
||||||
if (sdata->dev == local->mdev ||
|
if (sdata->dev == local->mdev ||
|
||||||
sdata->type != IEEE80211_IF_TYPE_AP)
|
sdata->vif.type != IEEE80211_IF_TYPE_AP)
|
||||||
continue;
|
continue;
|
||||||
ap = &sdata->u.ap;
|
ap = &sdata->u.ap;
|
||||||
skb = skb_dequeue(&ap->ps_bc_buf);
|
skb = skb_dequeue(&ap->ps_bc_buf);
|
||||||
|
@ -949,7 +949,7 @@ __ieee80211_tx_prepare(struct ieee80211_txrx_data *tx,
|
||||||
|
|
||||||
/* process and remove the injection radiotap header */
|
/* process and remove the injection radiotap header */
|
||||||
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
if (unlikely(sdata->type == IEEE80211_IF_TYPE_MNTR)) {
|
if (unlikely(sdata->vif.type == IEEE80211_IF_TYPE_MNTR)) {
|
||||||
if (__ieee80211_parse_tx_radiotap(tx, skb) == TXRX_DROP)
|
if (__ieee80211_parse_tx_radiotap(tx, skb) == TXRX_DROP)
|
||||||
return TXRX_DROP;
|
return TXRX_DROP;
|
||||||
|
|
||||||
|
@ -1252,7 +1252,7 @@ int ieee80211_master_start_xmit(struct sk_buff *skb,
|
||||||
}
|
}
|
||||||
|
|
||||||
control.vif = &osdata->vif;
|
control.vif = &osdata->vif;
|
||||||
control.type = osdata->type;
|
control.type = osdata->vif.type;
|
||||||
if (pkt_data->flags & IEEE80211_TXPD_REQ_TX_STATUS)
|
if (pkt_data->flags & IEEE80211_TXPD_REQ_TX_STATUS)
|
||||||
control.flags |= IEEE80211_TXCTL_REQ_TX_STATUS;
|
control.flags |= IEEE80211_TXCTL_REQ_TX_STATUS;
|
||||||
if (pkt_data->flags & IEEE80211_TXPD_DO_NOT_ENCRYPT)
|
if (pkt_data->flags & IEEE80211_TXPD_DO_NOT_ENCRYPT)
|
||||||
|
@ -1371,7 +1371,7 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||||
ethertype = (skb->data[12] << 8) | skb->data[13];
|
ethertype = (skb->data[12] << 8) | skb->data[13];
|
||||||
fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA;
|
fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA;
|
||||||
|
|
||||||
switch (sdata->type) {
|
switch (sdata->vif.type) {
|
||||||
case IEEE80211_IF_TYPE_AP:
|
case IEEE80211_IF_TYPE_AP:
|
||||||
case IEEE80211_IF_TYPE_VLAN:
|
case IEEE80211_IF_TYPE_VLAN:
|
||||||
fc |= IEEE80211_FCTL_FROMDS;
|
fc |= IEEE80211_FCTL_FROMDS;
|
||||||
|
@ -1707,7 +1707,7 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
|
||||||
bdev = sdata->dev;
|
bdev = sdata->dev;
|
||||||
ap = &sdata->u.ap;
|
ap = &sdata->u.ap;
|
||||||
|
|
||||||
if (!ap || sdata->type != IEEE80211_IF_TYPE_AP ||
|
if (!ap || sdata->vif.type != IEEE80211_IF_TYPE_AP ||
|
||||||
!ap->beacon_head) {
|
!ap->beacon_head) {
|
||||||
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
|
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
|
||||||
if (net_ratelimit())
|
if (net_ratelimit())
|
||||||
|
@ -1819,7 +1819,8 @@ ieee80211_get_buffered_bc(struct ieee80211_hw *hw,
|
||||||
sdata = vif_to_sdata(vif);
|
sdata = vif_to_sdata(vif);
|
||||||
bdev = sdata->dev;
|
bdev = sdata->dev;
|
||||||
|
|
||||||
if (!bss || sdata->type != IEEE80211_IF_TYPE_AP || !bss->beacon_head)
|
if (!bss || sdata->vif.type != IEEE80211_IF_TYPE_AP ||
|
||||||
|
!bss->beacon_head)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (bss->dtim_count != 0)
|
if (bss->dtim_count != 0)
|
||||||
|
|
|
@ -471,7 +471,7 @@ void ieee80211_iterate_active_interfaces(
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
|
|
||||||
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
||||||
switch (sdata->type) {
|
switch (sdata->vif.type) {
|
||||||
case IEEE80211_IF_TYPE_INVALID:
|
case IEEE80211_IF_TYPE_INVALID:
|
||||||
case IEEE80211_IF_TYPE_MNTR:
|
case IEEE80211_IF_TYPE_MNTR:
|
||||||
case IEEE80211_IF_TYPE_VLAN:
|
case IEEE80211_IF_TYPE_VLAN:
|
||||||
|
|
Loading…
Reference in New Issue