Commit 48c2fc59 authored by Tomas Winkler's avatar Tomas Winkler Committed by John W. Linville

mac80211: cleanup mlme state namespace

This patch move add STA_MLME to station mlme state defines.
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Acked-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 06303352
...@@ -292,17 +292,33 @@ struct mesh_config { ...@@ -292,17 +292,33 @@ struct mesh_config {
#define IEEE80211_STA_AUTO_BSSID_SEL BIT(11) #define IEEE80211_STA_AUTO_BSSID_SEL BIT(11)
#define IEEE80211_STA_AUTO_CHANNEL_SEL BIT(12) #define IEEE80211_STA_AUTO_CHANNEL_SEL BIT(12)
#define IEEE80211_STA_PRIVACY_INVOKED BIT(13) #define IEEE80211_STA_PRIVACY_INVOKED BIT(13)
/* flags for MLME request*/
#define IEEE80211_STA_REQ_SCAN 0
#define IEEE80211_STA_REQ_AUTH 1
#define IEEE80211_STA_REQ_RUN 2
/* flags used for setting mlme state */
enum ieee80211_sta_mlme_state {
IEEE80211_STA_MLME_DISABLED,
IEEE80211_STA_MLME_AUTHENTICATE,
IEEE80211_STA_MLME_ASSOCIATE,
IEEE80211_STA_MLME_ASSOCIATED,
IEEE80211_STA_MLME_IBSS_SEARCH,
IEEE80211_STA_MLME_IBSS_JOINED,
IEEE80211_STA_MLME_MESH_UP
};
/* bitfield of allowed auth algs */
#define IEEE80211_AUTH_ALG_OPEN BIT(0)
#define IEEE80211_AUTH_ALG_SHARED_KEY BIT(1)
#define IEEE80211_AUTH_ALG_LEAP BIT(2)
struct ieee80211_if_sta { struct ieee80211_if_sta {
struct timer_list timer; struct timer_list timer;
struct work_struct work; struct work_struct work;
u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN]; u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN];
u8 ssid[IEEE80211_MAX_SSID_LEN]; u8 ssid[IEEE80211_MAX_SSID_LEN];
enum { enum ieee80211_sta_mlme_state state;
IEEE80211_DISABLED, IEEE80211_AUTHENTICATE,
IEEE80211_ASSOCIATE, IEEE80211_ASSOCIATED,
IEEE80211_IBSS_SEARCH, IEEE80211_IBSS_JOINED,
IEEE80211_MESH_UP
} state;
size_t ssid_len; size_t ssid_len;
u8 scan_ssid[IEEE80211_MAX_SSID_LEN]; u8 scan_ssid[IEEE80211_MAX_SSID_LEN];
size_t scan_ssid_len; size_t scan_ssid_len;
...@@ -352,13 +368,7 @@ struct ieee80211_if_sta { ...@@ -352,13 +368,7 @@ struct ieee80211_if_sta {
unsigned long last_probe; unsigned long last_probe;
unsigned int flags; unsigned int flags;
#define IEEE80211_STA_REQ_SCAN 0
#define IEEE80211_STA_REQ_AUTH 1
#define IEEE80211_STA_REQ_RUN 2
#define IEEE80211_AUTH_ALG_OPEN BIT(0)
#define IEEE80211_AUTH_ALG_SHARED_KEY BIT(1)
#define IEEE80211_AUTH_ALG_LEAP BIT(2)
unsigned int auth_algs; /* bitfield of allowed auth algs */ unsigned int auth_algs; /* bitfield of allowed auth algs */
int auth_alg; /* currently used IEEE 802.11 authentication algorithm */ int auth_alg; /* currently used IEEE 802.11 authentication algorithm */
int auth_transaction; int auth_transaction;
......
...@@ -539,7 +539,7 @@ static int ieee80211_stop(struct net_device *dev) ...@@ -539,7 +539,7 @@ static int ieee80211_stop(struct net_device *dev)
/* fall through */ /* fall through */
case IEEE80211_IF_TYPE_STA: case IEEE80211_IF_TYPE_STA:
case IEEE80211_IF_TYPE_IBSS: case IEEE80211_IF_TYPE_IBSS:
sdata->u.sta.state = IEEE80211_DISABLED; sdata->u.sta.state = IEEE80211_STA_MLME_DISABLED;
memset(sdata->u.sta.bssid, 0, ETH_ALEN); memset(sdata->u.sta.bssid, 0, ETH_ALEN);
del_timer_sync(&sdata->u.sta.timer); del_timer_sync(&sdata->u.sta.timer);
/* /*
......
...@@ -663,11 +663,11 @@ static void ieee80211_authenticate(struct ieee80211_sub_if_data *sdata, ...@@ -663,11 +663,11 @@ static void ieee80211_authenticate(struct ieee80211_sub_if_data *sdata,
printk(KERN_DEBUG "%s: authentication with AP %s" printk(KERN_DEBUG "%s: authentication with AP %s"
" timed out\n", " timed out\n",
sdata->dev->name, print_mac(mac, ifsta->bssid)); sdata->dev->name, print_mac(mac, ifsta->bssid));
ifsta->state = IEEE80211_DISABLED; ifsta->state = IEEE80211_STA_MLME_DISABLED;
return; return;
} }
ifsta->state = IEEE80211_AUTHENTICATE; ifsta->state = IEEE80211_STA_MLME_AUTHENTICATE;
printk(KERN_DEBUG "%s: authenticate with AP %s\n", printk(KERN_DEBUG "%s: authenticate with AP %s\n",
sdata->dev->name, print_mac(mac, ifsta->bssid)); sdata->dev->name, print_mac(mac, ifsta->bssid));
...@@ -1004,17 +1004,17 @@ static void ieee80211_associate(struct ieee80211_sub_if_data *sdata, ...@@ -1004,17 +1004,17 @@ static void ieee80211_associate(struct ieee80211_sub_if_data *sdata,
printk(KERN_DEBUG "%s: association with AP %s" printk(KERN_DEBUG "%s: association with AP %s"
" timed out\n", " timed out\n",
sdata->dev->name, print_mac(mac, ifsta->bssid)); sdata->dev->name, print_mac(mac, ifsta->bssid));
ifsta->state = IEEE80211_DISABLED; ifsta->state = IEEE80211_STA_MLME_DISABLED;
return; return;
} }
ifsta->state = IEEE80211_ASSOCIATE; ifsta->state = IEEE80211_STA_MLME_ASSOCIATE;
printk(KERN_DEBUG "%s: associate with AP %s\n", printk(KERN_DEBUG "%s: associate with AP %s\n",
sdata->dev->name, print_mac(mac, ifsta->bssid)); sdata->dev->name, print_mac(mac, ifsta->bssid));
if (ieee80211_privacy_mismatch(sdata, ifsta)) { if (ieee80211_privacy_mismatch(sdata, ifsta)) {
printk(KERN_DEBUG "%s: mismatch in privacy configuration and " printk(KERN_DEBUG "%s: mismatch in privacy configuration and "
"mixed-cell disabled - abort association\n", sdata->dev->name); "mixed-cell disabled - abort association\n", sdata->dev->name);
ifsta->state = IEEE80211_DISABLED; ifsta->state = IEEE80211_STA_MLME_DISABLED;
return; return;
} }
...@@ -1037,7 +1037,7 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata, ...@@ -1037,7 +1037,7 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata,
* for better APs. */ * for better APs. */
/* TODO: remove expired BSSes */ /* TODO: remove expired BSSes */
ifsta->state = IEEE80211_ASSOCIATED; ifsta->state = IEEE80211_STA_MLME_ASSOCIATED;
rcu_read_lock(); rcu_read_lock();
...@@ -1080,7 +1080,7 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata, ...@@ -1080,7 +1080,7 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata,
sta_info_destroy(sta); sta_info_destroy(sta);
if (disassoc) { if (disassoc) {
ifsta->state = IEEE80211_DISABLED; ifsta->state = IEEE80211_STA_MLME_DISABLED;
ieee80211_set_associated(sdata, ifsta, 0); ieee80211_set_associated(sdata, ifsta, 0);
} else { } else {
mod_timer(&ifsta->timer, jiffies + mod_timer(&ifsta->timer, jiffies +
...@@ -1838,7 +1838,7 @@ static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata, ...@@ -1838,7 +1838,7 @@ static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata,
u16 auth_alg, auth_transaction, status_code; u16 auth_alg, auth_transaction, status_code;
DECLARE_MAC_BUF(mac); DECLARE_MAC_BUF(mac);
if (ifsta->state != IEEE80211_AUTHENTICATE && if (ifsta->state != IEEE80211_STA_MLME_AUTHENTICATE &&
sdata->vif.type != IEEE80211_IF_TYPE_IBSS) sdata->vif.type != IEEE80211_IF_TYPE_IBSS)
return; return;
...@@ -1942,10 +1942,10 @@ static void ieee80211_rx_mgmt_deauth(struct ieee80211_sub_if_data *sdata, ...@@ -1942,10 +1942,10 @@ static void ieee80211_rx_mgmt_deauth(struct ieee80211_sub_if_data *sdata,
if (ifsta->flags & IEEE80211_STA_AUTHENTICATED) if (ifsta->flags & IEEE80211_STA_AUTHENTICATED)
printk(KERN_DEBUG "%s: deauthenticated\n", sdata->dev->name); printk(KERN_DEBUG "%s: deauthenticated\n", sdata->dev->name);
if (ifsta->state == IEEE80211_AUTHENTICATE || if (ifsta->state == IEEE80211_STA_MLME_AUTHENTICATE ||
ifsta->state == IEEE80211_ASSOCIATE || ifsta->state == IEEE80211_STA_MLME_ASSOCIATE ||
ifsta->state == IEEE80211_ASSOCIATED) { ifsta->state == IEEE80211_STA_MLME_ASSOCIATED) {
ifsta->state = IEEE80211_AUTHENTICATE; ifsta->state = IEEE80211_STA_MLME_AUTHENTICATE;
mod_timer(&ifsta->timer, jiffies + mod_timer(&ifsta->timer, jiffies +
IEEE80211_RETRY_AUTH_INTERVAL); IEEE80211_RETRY_AUTH_INTERVAL);
} }
...@@ -1974,8 +1974,8 @@ static void ieee80211_rx_mgmt_disassoc(struct ieee80211_sub_if_data *sdata, ...@@ -1974,8 +1974,8 @@ static void ieee80211_rx_mgmt_disassoc(struct ieee80211_sub_if_data *sdata,
if (ifsta->flags & IEEE80211_STA_ASSOCIATED) if (ifsta->flags & IEEE80211_STA_ASSOCIATED)
printk(KERN_DEBUG "%s: disassociated\n", sdata->dev->name); printk(KERN_DEBUG "%s: disassociated\n", sdata->dev->name);
if (ifsta->state == IEEE80211_ASSOCIATED) { if (ifsta->state == IEEE80211_STA_MLME_ASSOCIATED) {
ifsta->state = IEEE80211_ASSOCIATE; ifsta->state = IEEE80211_STA_MLME_ASSOCIATE;
mod_timer(&ifsta->timer, jiffies + mod_timer(&ifsta->timer, jiffies +
IEEE80211_RETRY_AUTH_INTERVAL); IEEE80211_RETRY_AUTH_INTERVAL);
} }
...@@ -2005,7 +2005,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata, ...@@ -2005,7 +2005,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
/* AssocResp and ReassocResp have identical structure, so process both /* AssocResp and ReassocResp have identical structure, so process both
* of them in this function. */ * of them in this function. */
if (ifsta->state != IEEE80211_ASSOCIATE) if (ifsta->state != IEEE80211_STA_MLME_ASSOCIATE)
return; return;
if (len < 24 + 6) if (len < 24 + 6)
...@@ -2487,7 +2487,7 @@ static int ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, ...@@ -2487,7 +2487,7 @@ static int ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
ieee80211_sta_def_wmm_params(sdata, bss, 1); ieee80211_sta_def_wmm_params(sdata, bss, 1);
ifsta->state = IEEE80211_IBSS_JOINED; ifsta->state = IEEE80211_STA_MLME_IBSS_JOINED;
mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL); mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL);
memset(&wrqu, 0, sizeof(wrqu)); memset(&wrqu, 0, sizeof(wrqu));
...@@ -2960,7 +2960,7 @@ static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata, ...@@ -2960,7 +2960,7 @@ static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata,
#endif #endif
if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS || if (sdata->vif.type != IEEE80211_IF_TYPE_IBSS ||
ifsta->state != IEEE80211_IBSS_JOINED || ifsta->state != IEEE80211_STA_MLME_IBSS_JOINED ||
len < 24 + 2 || !ifsta->probe_resp) len < 24 + 2 || !ifsta->probe_resp)
return; return;
...@@ -3279,7 +3279,7 @@ void ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata) ...@@ -3279,7 +3279,7 @@ void ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata)
{ {
struct ieee80211_if_sta *ifsta; struct ieee80211_if_sta *ifsta;
ifsta = &sdata->u.sta; ifsta = &sdata->u.sta;
ifsta->state = IEEE80211_MESH_UP; ifsta->state = IEEE80211_STA_MLME_MESH_UP;
ieee80211_sta_timer((unsigned long)sdata); ieee80211_sta_timer((unsigned long)sdata);
ieee80211_if_config(sdata, IEEE80211_IFCC_BEACON); ieee80211_if_config(sdata, IEEE80211_IFCC_BEACON);
} }
...@@ -3327,8 +3327,8 @@ void ieee80211_sta_work(struct work_struct *work) ...@@ -3327,8 +3327,8 @@ void ieee80211_sta_work(struct work_struct *work)
mesh_path_start_discovery(sdata); mesh_path_start_discovery(sdata);
#endif #endif
if (ifsta->state != IEEE80211_AUTHENTICATE && if (ifsta->state != IEEE80211_STA_MLME_AUTHENTICATE &&
ifsta->state != IEEE80211_ASSOCIATE && ifsta->state != IEEE80211_STA_MLME_ASSOCIATE &&
test_and_clear_bit(IEEE80211_STA_REQ_SCAN, &ifsta->request)) { test_and_clear_bit(IEEE80211_STA_REQ_SCAN, &ifsta->request)) {
if (ifsta->scan_ssid_len) if (ifsta->scan_ssid_len)
ieee80211_sta_start_scan(sdata, ifsta->scan_ssid, ifsta->scan_ssid_len); ieee80211_sta_start_scan(sdata, ifsta->scan_ssid, ifsta->scan_ssid_len);
...@@ -3345,25 +3345,25 @@ void ieee80211_sta_work(struct work_struct *work) ...@@ -3345,25 +3345,25 @@ void ieee80211_sta_work(struct work_struct *work)
return; return;
switch (ifsta->state) { switch (ifsta->state) {
case IEEE80211_DISABLED: case IEEE80211_STA_MLME_DISABLED:
break; break;
case IEEE80211_AUTHENTICATE: case IEEE80211_STA_MLME_AUTHENTICATE:
ieee80211_authenticate(sdata, ifsta); ieee80211_authenticate(sdata, ifsta);
break; break;
case IEEE80211_ASSOCIATE: case IEEE80211_STA_MLME_ASSOCIATE:
ieee80211_associate(sdata, ifsta); ieee80211_associate(sdata, ifsta);
break; break;
case IEEE80211_ASSOCIATED: case IEEE80211_STA_MLME_ASSOCIATED:
ieee80211_associated(sdata, ifsta); ieee80211_associated(sdata, ifsta);
break; break;
case IEEE80211_IBSS_SEARCH: case IEEE80211_STA_MLME_IBSS_SEARCH:
ieee80211_sta_find_ibss(sdata, ifsta); ieee80211_sta_find_ibss(sdata, ifsta);
break; break;
case IEEE80211_IBSS_JOINED: case IEEE80211_STA_MLME_IBSS_JOINED:
ieee80211_sta_merge_ibss(sdata, ifsta); ieee80211_sta_merge_ibss(sdata, ifsta);
break; break;
#ifdef CONFIG_MAC80211_MESH #ifdef CONFIG_MAC80211_MESH
case IEEE80211_MESH_UP: case IEEE80211_STA_MLME_MESH_UP:
ieee80211_mesh_housekeeping(sdata, ifsta); ieee80211_mesh_housekeeping(sdata, ifsta);
break; break;
#endif #endif
...@@ -3506,20 +3506,20 @@ static int ieee80211_sta_config_auth(struct ieee80211_sub_if_data *sdata, ...@@ -3506,20 +3506,20 @@ static int ieee80211_sta_config_auth(struct ieee80211_sub_if_data *sdata,
ieee80211_sta_set_bssid(sdata, selected->bssid); ieee80211_sta_set_bssid(sdata, selected->bssid);
ieee80211_sta_def_wmm_params(sdata, selected, 0); ieee80211_sta_def_wmm_params(sdata, selected, 0);
ieee80211_rx_bss_put(local, selected); ieee80211_rx_bss_put(local, selected);
ifsta->state = IEEE80211_AUTHENTICATE; ifsta->state = IEEE80211_STA_MLME_AUTHENTICATE;
ieee80211_sta_reset_auth(sdata, ifsta); ieee80211_sta_reset_auth(sdata, ifsta);
return 0; return 0;
} else { } else {
if (ifsta->state != IEEE80211_AUTHENTICATE) { if (ifsta->state != IEEE80211_STA_MLME_AUTHENTICATE) {
if (ifsta->flags & IEEE80211_STA_AUTO_SSID_SEL) if (ifsta->flags & IEEE80211_STA_AUTO_SSID_SEL)
ieee80211_sta_start_scan(sdata, NULL, 0); ieee80211_sta_start_scan(sdata, NULL, 0);
else else
ieee80211_sta_start_scan(sdata, ifsta->ssid, ieee80211_sta_start_scan(sdata, ifsta->ssid,
ifsta->ssid_len); ifsta->ssid_len);
ifsta->state = IEEE80211_AUTHENTICATE; ifsta->state = IEEE80211_STA_MLME_AUTHENTICATE;
set_bit(IEEE80211_STA_REQ_AUTH, &ifsta->request); set_bit(IEEE80211_STA_REQ_AUTH, &ifsta->request);
} else } else
ifsta->state = IEEE80211_DISABLED; ifsta->state = IEEE80211_STA_MLME_DISABLED;
} }
return -1; return -1;
} }
...@@ -3657,7 +3657,7 @@ dont_join: ...@@ -3657,7 +3657,7 @@ dont_join:
#endif /* CONFIG_MAC80211_IBSS_DEBUG */ #endif /* CONFIG_MAC80211_IBSS_DEBUG */
/* Selected IBSS not found in current scan results - try to scan */ /* Selected IBSS not found in current scan results - try to scan */
if (ifsta->state == IEEE80211_IBSS_JOINED && if (ifsta->state == IEEE80211_STA_MLME_IBSS_JOINED &&
!ieee80211_sta_active_ibss(sdata)) { !ieee80211_sta_active_ibss(sdata)) {
mod_timer(&ifsta->timer, jiffies + mod_timer(&ifsta->timer, jiffies +
IEEE80211_IBSS_MERGE_INTERVAL); IEEE80211_IBSS_MERGE_INTERVAL);
...@@ -3667,7 +3667,7 @@ dont_join: ...@@ -3667,7 +3667,7 @@ dont_join:
"join\n", sdata->dev->name); "join\n", sdata->dev->name);
return ieee80211_sta_req_scan(sdata, ifsta->ssid, return ieee80211_sta_req_scan(sdata, ifsta->ssid,
ifsta->ssid_len); ifsta->ssid_len);
} else if (ifsta->state != IEEE80211_IBSS_JOINED) { } else if (ifsta->state != IEEE80211_STA_MLME_IBSS_JOINED) {
int interval = IEEE80211_SCAN_INTERVAL; int interval = IEEE80211_SCAN_INTERVAL;
if (time_after(jiffies, ifsta->ibss_join_req + if (time_after(jiffies, ifsta->ibss_join_req +
...@@ -3687,7 +3687,7 @@ dont_join: ...@@ -3687,7 +3687,7 @@ dont_join:
interval = IEEE80211_SCAN_INTERVAL_SLOW; interval = IEEE80211_SCAN_INTERVAL_SLOW;
} }
ifsta->state = IEEE80211_IBSS_SEARCH; ifsta->state = IEEE80211_STA_MLME_IBSS_SEARCH;
mod_timer(&ifsta->timer, jiffies + interval); mod_timer(&ifsta->timer, jiffies + interval);
return 0; return 0;
} }
...@@ -3734,7 +3734,7 @@ int ieee80211_sta_set_ssid(struct ieee80211_sub_if_data *sdata, char *ssid, size ...@@ -3734,7 +3734,7 @@ int ieee80211_sta_set_ssid(struct ieee80211_sub_if_data *sdata, char *ssid, size
if (sdata->vif.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_STA_MLME_IBSS_SEARCH;
return ieee80211_sta_find_ibss(sdata, ifsta); return ieee80211_sta_find_ibss(sdata, ifsta);
} }
...@@ -3881,7 +3881,7 @@ done: ...@@ -3881,7 +3881,7 @@ done:
if (sdata->vif.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_STA_MLME_IBSS_JOINED) &&
!ieee80211_sta_active_ibss(sdata))) !ieee80211_sta_active_ibss(sdata)))
ieee80211_sta_find_ibss(sdata, ifsta); ieee80211_sta_find_ibss(sdata, ifsta);
} }
......
...@@ -535,8 +535,8 @@ static int ieee80211_ioctl_giwap(struct net_device *dev, ...@@ -535,8 +535,8 @@ static int ieee80211_ioctl_giwap(struct net_device *dev,
sdata = IEEE80211_DEV_TO_SUB_IF(dev); sdata = IEEE80211_DEV_TO_SUB_IF(dev);
if (sdata->vif.type == IEEE80211_IF_TYPE_STA || if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) { sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
if (sdata->u.sta.state == IEEE80211_ASSOCIATED || if (sdata->u.sta.state == IEEE80211_STA_MLME_ASSOCIATED ||
sdata->u.sta.state == IEEE80211_IBSS_JOINED) { sdata->u.sta.state == IEEE80211_STA_MLME_IBSS_JOINED) {
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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment