您的位置:首页 > 运维架构

iw 连接open AP失败的问题分析

2017-06-22 09:31 399 查看

iw 连接open AP失败的问题分析

iw 连接open AP 问题

adb shell iw dev wlan0 connect -w “ssid” “frequece” “bssid”

返回结果:

wlan0 (phy #0): failed to connect to “ssid” status: 1: Unspecified failure

iw connect 连接流程

首先分析并扩展一下Connect.c中的宏定义

TOPLEVEL(connect, “[-w] [] [] [key 0:abcde d:1:6162636465]”, 0, 0, CIB_NETDEV, iw_connect, “dddd.”);    ====>

struct cmd \

__section_connect \

__attribute__((used)) __attribute__((section(“__cmd”))) = { \

.name = (“connect”), \

.args = (“[-w] [] [] [key 0:abcde d:1:6162636465]”), \

.cmd = (0), \

.nl_msg_flags = (0), \

.idby = (CIB_NETDEV), \

.handler = (iw_connect), \

.help = (“dddd”), \

}

HIDDEN(connect, establish, “”, NL80211_CMD_CONNECT, 0, CIB_NETDEV, iw_conn); ====>

static struct cmd \

__cmd_establish_iw_conn_NL80211_CMD_CONNECT_CIB_NETDEV_1\

__attribute__((used)) __attribute__((section(“__cmd”))) = { \

.name = (“establish”), \

.args = (“”), \

.cmd = (NL80211_CMD_CONNECT), \

.nl_msg_flags = (0), \

.hidden = (1), \

.idby = (CIB_NETDEV), \

.handler = (iw_conn), \

.help = (NULL), \

.parent = __section_connect, \

.selector = (NULL), \

}

connect命令在iw中的流程



connect open AP在iw中的关键步骤

msg = nlmsg_alloc();

genlmsg_put(msg, 0, 0, state->nl80211_id, 0, cmd->nl_msg_flags, cmd->cmd, 0);

//establish 的cmd是:NL80211_CMD_CONNECT

NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, devidx);

NLA_PUT(msg, NL80211_ATTR_SSID, strlen(argv[0]), argv[0]);

NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq);

NLA_PUT(msg, NL80211_ATTR_MAC, 6, bssid);

从代码逻辑看一切正常,没有问题呀!?,为什么连接不上呢?

正常连接logde关键步骤:

在external/wpa_supplicant_8/src/drivers/driver_nl80211.c中查看wpa_driver_nl80211_connect源码,对应log:

1. 设置cmd, ifindex:

wpa_supplicant: nl80211: Connect (ifindex=24)

2. 设置bssid, bssid_hint

wpa_supplicant: * bssid=a0:8d:16:a7:fb:4d

wpa_supplicant: * bssid_hint=a0:8d:16:a7:fb:4d

3. 设置freq, freq_hint

wpa_supplicant: * freq=2412

wpa_supplicant: * freq_hint=2412

4. 设置IEs

wpa_supplicant: * IEs - hexdump(len=8): 7f 06 00 00 0a 82 01 40

5. 设置Auth Type

wpa_supplicant: * Auth Type 0

结合iw中连接步骤,继续分析

大部分都一样,但少了一步Auth Type的设置!

试着加上这一步看看!

竟然成功连接上了:

wlan0 (phy #0): connected to a0:8d:16:a7:fb:4d, 搞定收工!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐