android屏幕中100db,android wifi信号低于-100db不连接

本文详细解析了Wi-Fi连接过程中的关键函数wpa_supplicant_pick_network和wpa_supplicant_select_bss的工作原理,并通过实际日志展示了不同场景下(如选择网络、匹配SSID等)的具体行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 当手动选择网络进行连接及自动重连时会进入wpa_supplicant_pick_network,该函数的作用是从wpa_ssid中选择wpa_bss。

struct wpa_bss * wpa_supplicant_pick_network(struct wpa_supplicant *wpa_s,

struct wpa_ssid **selected_ssid)

{

struct wpa_bss *selected = NULL;

int prio;

struct wpa_ssid *next_ssid = NULL;

while (selected == NULL) {

//conf是struct wpa_supplicant中表示wpa_supplicant.conf文件的struct wpa_config

//num_prio表示wpa_config中wpa_ssid中的优先级有几种类型,有可能一个优先级下面挂有多个wpa_ssid

for (prio = 0; prio < wpa_s->conf->num_prio; prio++) {

if (next_ssid && next_ssid->priority ==

//pssid表示wpa_config中按prio排列的wpa_ssid链表的头节点

wpa_s->conf->pssid[prio]->priority) {

//only_first_ssid = 1表示从last selected的优先级最高的排在优先级链表第一位的ssid中选择bss

selected = wpa_supplicant_select_bss(

wpa_s, next_ssid, selected_ssid, 1);

if (selected)

break;

}

//only_first_ssid = 0表示从整个优先级链表中选择bss

selected = wpa_supplicant_select_bss(

wpa_s, wpa_s->conf->pssid[prio], selected_ssid, 0);

if (selected) break;

}

}

return selected;

}  2

wpa_supplicant_select_bss具体处理如何从priority group中选择bss

static struct wpa_bss *

wpa_supplicant_select_bss(struct wpa_supplicant *wpa_s,

struct wpa_ssid *group,

struct wpa_ssid **selected_ssid,

int only_first_ssid)

{

unsigned int i;

if (only_first_ssid)

wpa_dbg(wpa_s, MSG_DEBUG, "Try to find BSS matching pre-selected network id=%d", group->id);

else

wpa_dbg(wpa_s, MSG_DEBUG, "Selecting BSS from priority group %d", group->priority);

//last_scan_res_used表示上次扫描的bss的个数

for (i = 0; i < wpa_s->last_scan_res_used; i++) {

struct wpa_bss *bss = wpa_s->last_scan_res[i];

*selected_ssid = wpa_scan_res_match(wpa_s, i, bss, group,

only_first_ssid);

//selected_ssid不等于NULL表示调用成功,真正的返回值是wpa_bss

if (!*selected_ssid)

continue;

return bss;

}

return NULL;

}  对应的log如下

05-27 18:55:26.008 I/wpa_supplicant( 9661): Selecting BSS from priority group 35

05-27 18:55:26.008 I/wpa_supplicant( 9661): 58:1f:28:69:ec:96  enter wpa_scan_res_match

05-27 18:55:26.009 I/wpa_supplicant( 9661): selected BSS c4:14:3c:29:45:c4 ssid='PHONE-CTS' freq=2462, rssi=-59

05-27 18:55:26.009 I/wpa_supplicant( 9661): c4:14:3c:29:45:c4  enter wpa_supplicant_pick_network

05-27 18:55:29.528 I/wpa_supplicant( 9661): Selecting BSS from priority group 35

05-27 18:55:29.528 I/wpa_supplicant( 9661): 58:1f:28:69:ec:96  enter wpa_scan_res_match

05-27 18:55:29.529 I/wpa_supplicant( 9661): selected BSS c4:14:3c:29:45:c4 ssid='PHONE-CTS' freq=2462, rssi=-56

05-27 18:55:29.529 I/wpa_supplicant( 9661): c4:14:3c:29:45:c4  enter wpa_supplicant_pick_network

05-27 18:55:33.588 I/wpa_supplicant( 9661): Selecting BSS from priority group 35

05-27 18:55:33.591 I/wpa_supplicant( 9661): 58:1f:28:69:ec:96  enter wpa_scan_res_match

05-27 18:55:33.596 I/wpa_supplicant( 9661): Selecting BSS from priority group 32

05-27 18:55:33.597 I/wpa_supplicant( 9661): 58:1f:28:69:ec:96  enter wpa_scan_res_match

05-27 18:55:33.603 I/wpa_supplicant( 9661): Selecting BSS from priority group 31

05-27 18:55:33.604 I/wpa_supplicant( 9661): 58:1f:28:69:ec:96  enter wpa_scan_res_match

05-27 18:55:33.604 I/wpa_supplicant( 9661): selected BSS 58:1f:28:69:ec:96 ssid='\xe7\xa7\xbb\xe5\x8a\xa8\xe7\x83\xad\xe7\x82\xb9xuhao' freq=2462, rssi=-56

05-27 18:55:33.604 I/wpa_supplicant( 9661): 58:1f:28:69:ec:9633 enter wpa_supplicant_pick_network 3 接下来的wpa_scan_res_match用来匹配SSID,加密方式等。

static struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,

int i, struct wpa_bss *bss,

struct wpa_ssid *group,

int only_first_ssid)

{

for (ssid = group; ssid; ssid = only_first_ssid ? NULL : ssid->pnext) {

if (wpas_network_disabled(wpa_s, ssid)) {

wpa_dbg(wpa_s, MSG_DEBUG, " skip - disabled");

continue;

}

char wifi_connect_threshold[10];

property_get("wifi.connect.threshold", wifi_connect_threshold, "-100");

if (bss->level > 0 && bss->level - 256 < atoi(wifi_connect_threshold)) {

wpa_printf(MSG_DEBUG, "connect threshold %d",atoi(wifi_connect_threshold));

wpa_printf(MSG_DEBUG, " skip - rssi weak %d",bss->level - 256);

//弱信号不考虑,直接返回

continue;

} else if (bss->level < 0 && bss->level < atoi(wifi_connect_threshold)) {

}

if (check_ssid &&

(bss->ssid_len != ssid->ssid_len ||

os_memcmp(bss->ssid, ssid->ssid, bss->ssid_len) != 0)) {

wpa_dbg(wpa_s, MSG_DEBUG, " skip - SSID mismatch");

continue;

}

if (!osen && !wpa &&

!(ssid->key_mgmt & WPA_KEY_MGMT_NONE) &&

!(ssid->key_mgmt & WPA_KEY_MGMT_WPS) &&

!(ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA)) {

wpa_dbg(wpa_s, MSG_DEBUG, " skip - non-WPA network "

"not allowed");

continue;

}

/* Matching configuration found */

return ssid;

}

/* No matching configuration found */

return NULL;

}   未选择网络时的log

//

05-27 20:42:13.882 I/wpa_supplicant( 9661): Selecting BSS from priority group 10

05-27 20:42:13.882 I/wpa_supplicant( 9661): c4:14:3c:ca:31:d2 skip - disabled, bss->ssid = TCL-Guest

05-27 20:42:13.883 I/wpa_supplicant( 9661): c4:14:3c:ca:31:d1 skip - disabled, bss->ssid = Phone-WIFI

05-27 20:42:13.883 I/wpa_supplicant( 9661): c4:14:3c:ca:31:d0 skip - disabled, bss->ssid = TCL-lnternal

选择网络输入错误密码时的log

05-27 20:51:16.596 I/wpa_supplicant(11265): wlan0: CTRL-EVENT-SCAN-STARTED

05-27 20:51:17.332 I/wpa_supplicant(11265): Selecting BSS from priority group 40

//此行表示选择的网络

05-27 20:51:17.333 I/wpa_supplicant(11265): skip - SSID mismatch, bss->ssid = Phone-IPV6

//此行表示不匹配的网络

05-27 20:51:17.333 I/wpa_supplicant(11265): skip - SSID mismatch, bss->ssid = \xe7\xa7\xbb\xe5\x8a\xa8\xe7\x83\xad\xe7\x82\xb9xuhao

05-27 20:51:17.333 I/wpa_supplicant(11265): skip - SSID mismatch, bss->ssid = Phone-IPV6

05-27 20:51:17.333 I/wpa_supplicant(11265): skip - SSID mismatch, bss->ssid = wlan-test

05-27 20:51:17.333 I/wpa_supplicant(11265): skip - SSID mismatch, bss->ssid = Phone-IPV6

05-27 20:51:17.333 I/wpa_supplicant(11265): skip - SSID mismatch, bss->ssid = PHONE-WIFI2

05-27 20:51:17.335 D/wpa_supplicant(11265): wlan0: selected BSS c4:14:3c:29:45:cb ssid='Phone-IPV6'

05-27 20:51:17.335 I/wpa_supplicant(11265): selected BSS c4:14:3c:29:45:cb ssid='Phone-IPV6' freq=2462, rssi=-58

05-27 20:51:17.336 I/wpa_supplicant(11265): c4:14:3c:29:45:cb enter wpa_supplicant_pick_network  选择网络输入正确密码的log

05-27 20:46:29.604 I/wpa_supplicant(11265): Selecting BSS from priority group 36

05-27 20:46:29.609 I/wpa_supplicant(11265): Selecting BSS from priority group 35

05-27 20:46:29.617 I/wpa_supplicant(11265): Selecting BSS from priority group 32

05-27 20:46:29.623 I/wpa_supplicant(11265): Selecting BSS from priority group 16

05-27 20:46:29.643 I/wpa_supplicant(11265): Selecting BSS from priority group 13

05-27 20:46:38.278 I/wpa_supplicant(11265): wlan0: CTRL-EVENT-SCAN-STARTED

05-27 20:46:39.031 I/wpa_supplicant(11265): Selecting BSS from priority group 37

05-27 20:46:39.031 I/wpa_supplicant(11265): selected BSS 58:1f:28:69:ec:96 ssid='\xe7\xa7\xbb\xe5\x8a\xa8\xe7\x83\xad\xe7\x82\xb9xuhao' freq=2462, rssi=-53

05-27 20:46:39.031 I/wpa_supplicant(11265): 58:1f:28:69:ec:9633 enter wpa_supplicant_pick_network

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值