wifi的扫描调用过程(从supplicant到kernel)

supplicant扫描的调用过程(使用nl80211)

supplicant接收到”SCAN”命令后,由wpa_supplicant_ctrl_iface_process处理。 
wpa_supplicant_ctrl_iface_process 
wpas_ctrl_scan              // 处理扫描命令 
wpa_supplicant_req_scan 
wpa_supplicant_scan 
wpa_supplicant_trigger_scan 
wpas_trigger_scan_cb 
wpa_drv_scan            // wpa_s->driver->scan2调用到driver_nl80211_scan2 
driver_nl80211_scan2 
    wpa_driver_nl80211_scan 
        nl80211_scan_common 
        send_and_recv_msgs

 

触发扫描的内核调用过程

SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags) 
__sys_sendmsg       (net\socket.c) 
sock_sendmsg 
__sock_sendmsg 
__sock_sendmsg_nosec  (sock->ops->sendmsg调用netlink_sendmsg) 
netlink_sendmsg 
netlink_unicast 
netlink_unicast_kernel  (nlk->netlink_rcv调用genl_rcv) 
genl_rcv                    (cb 为genl_rcv_msg) 
genl_rcv_msg            (ops->doit调用到nl80211_trigger_scan) 
nl80211_trigger_scan        (net\wireless\nl80211.c)

 

Wifi驱动的扫描行为

◆上层发起一次scan命令->wifi进行各个信道的sacn->驱动包扫描结果存储在scanned_queue->扫面完成->通过rtw_cfg80211_surveydone_event_callback(cfg80211_inform_bss_frame)把扫描的ap结果通知内核net/wireless/scan.c->通过rtw_indicate_scan_done(cfg80211_scan_done)通知内核、上层扫描结束。 
◆Wifi驱动每次发起扫面前,都会检查上次扫描到的ap到现在的时间是否超过20s(SCANQUEUE_LIFETIME),若超过20s,就会调用rtw_list_delete把ap从scanned_queue中去掉,接下来再扫面到新的ap时,再加入scanned_queue。 
◆每次扫描完所有信道后,会再次扫描一个信道,连接ap的情况下,扫描的信道为所连接ap的信道,没连接ap的情况下,为最后一个扫描信道。 
◆对于接收到的beacon帧,由OnBeacon处理,只有在扫描状态的时候,beacon的ap才会被加入到scanned_queue,其它情况根据WIFI_FW状态进行不同操作,有触发start_clnt_auth,有更新ap信息等操作。 
◆net/wireless中使用bss_list保存扫描到的ap结果,扫描结束后,应用层通过NL80211_CMD_GET_SCAN命令,由内核nl80211_dump_scan函数把结果发送给应用层,内核中保存ap有效时间为3s,超过3s该ap的信息会从bss_lis移除。 
◆supplicant中通过wpa_s->bss保存扫描的ap,如果一个ap在180s(DEFAULT_BSS_EXPIRATION_AGE)内没有更新,就会删除该ap,每10s进行一次检测,由wpa_bss_timeout函数检查。
————————————————
版权声明:本文为CSDN博主「简单的过客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zjli321/article/details/52004521

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值