概述
问题描述:
连接并保存两个及以上ap,在连接上的过程中进行切换到已保存ap(当前能扫到此ap),切换失败。
复现并分析:
尝试了如下几种切换连接的情况,首先保证保存了两个及两个以上的能单独连接的上的ap:
- 连接ap前,保证断开上一次连接断开 结果:此种方式切换都可成功
- 连接ap前,不断开上一次连接,直接进行已保存且能够扫描到的ap切换 结果:切换不成功
- 在已经连接上ap情况下,去连接新的ap,会出现连接不成功(设备显示不成功是因为密码错误,其实输入密码是正确的),如图:
分析:
我在复现的过程中出现了低概率切换成功的情况,所以需要抓到特定问题的日志,我对日志简单的进行了选取:
network state changed...
NETWORK_STATE_CHANGED_ACTION,changed=true,mLastConnected=true,isMobileNetEnable=false
wpa_supplicant: wlan0: Associated with d2:ab:d5:be:09:1f
wpa_supplicant: wlan0: WPA: RX message 1 of 4-Way Handshake from d2:ab:d5:be:09:1f (ver=2)
wpa_supplicant: wlan0: WPA: Sending EAPOL-Key 2/4
wpa_supplicant: l2_packet_send - sendto: No buffer space available
wpa_supplicant: wlan0: WPA: 4-Way Handshake failed - pre-shared key may be incorrect
wpa_supplicant: wlan0: CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid="yoyo" auth_failures=1 duration=10 reason=WRONG_KEY
从日志看,是因为在第二次握手阶段,No buffer space available,这是问题的关键。
解决方法:
在kernel/msm-4.19 / net/sched/sch_generic.c中:
static void dev_deactivate_queue(struct net_device *dev,
struct netdev_queue *dev_queue,
void *_qdisc_default)
{
struct Qdisc *qdisc = rtnl_dereference(dev_queue->qdisc);
++ struct Qdisc *qdisc_default = _qdisc_default;
if (qdisc) {
if (!(qdisc->flags & TCQ_F_BUILTIN))
set_bit(__QDISC_STATE_DEACTIVATED, &qdisc->state);
++ rcu_assign_pointer(dev_queue->qdisc, qdisc_default);
}
}
需要添加上面代码中有“++”符号的代码解决buff问题
最后
以上就是自信网络为你收集整理的andriod R wifi切换ap失败,并连接上最近一次连接的ap的全部内容,希望文章能够帮你解决andriod R wifi切换ap失败,并连接上最近一次连接的ap所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复