设为首页 收藏本站
查看: 2413|回复: 0

[经验分享] wifi

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-30 11:26:11 | 显示全部楼层 |阅读模式
  .



adb shell tcpdump -i wlan0 -p -s 0 -w /sdcard/trout3.pcap
【#1】-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
echo 8 > /proc/sys/kernel/printk
adb pull /system/etc/wifi/2351_wifi_configure.ini .
adb push \\shexsrv\To_Internal\jinglong.chen\ittiam.ko /system/lib/modules
adb push \\shexsrv\To_Internal\jinglong.chen\2351_wifi_configure.ini  /productinfo/
insmod /system/lib/modules/ittiam.ko
ifconfig wlan0 up
iwnpi wlan0 start
iwnpi wlan0 set_channel 1
iwnpi wlan0 set_rate 54
iwnpi wlan0 tx_start
iwnpi wlan0 get_reg phy0 0x70 2
iwnpi wlan0 set_channel 1
iwnpi wlan0 tx_start
rmmod ittiam.ko
npi_start_cmd-->itm_wlan_mac_open_cmd
eng_vdiag_thread-->eng_diag-->eng_diag_parse-->is_ap_at_cmd_need_to_handle(解析出type)
eng_vdiag_thread-->eng_diag-->eng_diag_user_handle-->eng_diag_apcmd_hdlr-->eng_linuxcmd_hdlr-->eng_linuxcmd[cmd]-->eng_linuxcmd_wifieutmode-->eng_atdiag_euthdlr(通过eut_cmds[]解析出cmd)-->wifi_eutops[]                                                      

【#2】-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
packages/apps/Settings/src/com/android/settings/wifi
frameworks/base/wifi/java/android/net/wifi
frameworks/base/services/java/com/android/server
jni代码 android_net_wifi_Wifi.cpp wifi_itm.c
wpa_supplicant下行代码:driver_nl80211.c  driver_cmd_nl80211.c
kernel wifi公共代码:nl80211.c  net/wireless/core.c itm_cfg80211.c
out/target/product/sp8830ec/obj/EXECUTABLES/wpa_supplicant_intermediates/
insmod /system/lib/modules/ittiam.ko
wpa_supplicant -Dnl80211 -dd  -iwlan0  -c/data/misc/wifi/wpa_supplicant.conf  -C/data/misc/wifi/wpa_supplicant &
wpa_cli -p/data/misc/wifi/wpa_supplicant -iwlan0
scan_results
set_network 0 ssid "1102"
set_network 0 key_mgmt NONE
enable_network 1
logcat -s WifiHW
logcat -s wpa_supplicant
wpa_printf(MSG_ERROR, "%s(), line:%d\n", __FUNCTION__,__LINE__);
int wpa_debug_level = MSG_INFO; //MSG_DEBUG

ADD_NETWORK
SET_NETWORK 3 ssid "testap-2"
SET_NETWORK 3 key_mgmt WPA-PSK
SET_NETWORK 3 psk "fgfffffffgffff"
SET_NETWORK 3 priority 0
ENABLE_NETWORK 3
【c/s建立链接】
main-->wpa_supplicant_add_iface-->wpa_supplicant_init_iface-->wpa_supplicant_ctrl_iface_init
wpa_supplicant_ctrl_iface_init-->socket(PF_UNIX, SOCK_DGRAM, 0);
-->fname = wpa_supplicant_ctrl_iface_path(wpa_s);//
                              -->bind
-->eloop_register_read_sock(priv->sock, wpa_supplicant_ctrl_iface_receive, wpa_s, priv);-->wpa_supplicant_ctrl_iface_process//!!!!!!控制接口
wifi_connect_on_socket_path-->wpa_ctrl_open-->bind/connect
【eloop】
eloop_register_sock
eloop_run-->eloop_sock_table_dispatch
wpa_supplicant_init_iface-->wpa_supplicant_init_eapol-->eapol_sm_init-->eloop_register_timeout(1, 0, eapol_port_timers_tick, NULL, sm);
wpa_supplicant_init-->eloop_init(global)
【接口绑定】
wpa_drivers
wpa_supplicant_add_iface-->wpa_supplicant_init_iface-->wpa_supplicant_set_driver-->select_driver-->wpa_drivers.global_init();
【netlink机制】
(1)kernel部分
genl_register_family_with_ops(&nl80211_fam, nl80211_ops, ARRAY_SIZE(nl80211_ops));
(2)wpa部分
wpa_driver_nl80211_ops.nl80211_global_init-->netlink_init-->socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
-->bind
-->eloop_register_read_sock(netlink->sock, netlink_receive, netlink,  NULL);-->netlink_receive-->wpa_driver_nl80211_event_rtm_newlink
【scan过程】
(1)app部分
drv对app提供的接口定义在driver_i.h
wpa_supplicant_req_scan-->wpa_supplicant_scan-->wpa_supplicant_trigger_scan-->wpa_drv_scan-->wpa_driver_nl80211_ops.scan2 = wpa_driver_nl80211_scan-->nl80211_cmd(drv, msg, 0, NL80211_CMD_TRIGGER_SCAN);
(2)kernel部分
nl80211_ops.nl80211_trigger_scan-->rdev->ops->scan(&rdev->wiphy, dev, request);-->itm_cfg80211_ops.itm_wlan_cfg80211_scan
-->nl80211_send_scan_start
【open式认证】
_wpa_supplicant_event_scan_results-->wpa_supplicant_connect-->wpa_supplicant_associate-->wpa_driver_nl80211_connect
wpa_driver_nl80211_event_receive-->process_global_event-->do_process_drv_event-->mlme_event_connect-->wpa_supplicant_event-->wpa_supplicant_event_assoc
【wpa-psk认证】
eapol_supp_sm.c
preauth.c
.set_operstate = wpa_driver_nl80211_set_operstate,
.set_supp_port = wpa_driver_nl80211_set_supp_port,
wpa_supplicant_ctrl_iface_add_network
wpa_supplicant_ctrl_iface_enable_network-->wpa_supplicant_enable_network-->wpa_supplicant_req_scan
process_global_event-->do_process_drv_event-->send_scan_event
send_scan_event-->wpa_supplicant_event-->wpa_supplicant_event_scan_results-->_wpa_supplicant_event_scan_results
-->wpa_supplicant_rsn_preauth_scan_results
-->wpa_supplicant_pick_network
-->wpa_supplicant_connect-->wpa_supplicant_associate-->wpa_drv_associate-->wpa_driver_nl80211_associate-->wpa_driver_nl80211_connect
-->wpa_supplicant_initiate_eapol
wpa_driver_nl80211_associate(函数中!WPA_DRIVER_FLAGS_SME(wpa_driver_nl80211_capa获得),关联认证不分开,程序走到 wpa_driver_nl80211_connect,)   
nl80211_global_init-->wpa_driver_nl80211_init_nl_global-->wpa_driver_nl80211_event_receive
nl_cb_set(global->nl_cb, NL_CB_VALID, NL_CB_CUSTOM,process_global_event, global);                                                                                                                           
wpa_driver_nl80211_event_receive->process_global_event-->do_process_drv_event-->mlme_event_connect-->wpa_supplicant_event-->wpa_supplicant_event_assoc
l2_packet_receive-->wpa_supplicant_rx_eapol-->wpa_sm_rx_eapol
wpa_eapol_key_send-->wpa_sm_ether_send-->supp_ether_send-->l2_packet_send
wpa_supplicant_process_1_of_4
wpa_supplicant_send_2_of_4
nl_send_auto_complete                                                                                                                                                                                                                                                        
wpa_driver_nl80211_set_mode-->nl80211_mgmt_subscribe_non_ap-->nl80211_register_action_frame


src/rsn_supp/preauth.c
src/rsn_supp/wpa.c
src/rsn_supp/peerkey.c
src/commmon/wpa_common.c
wpa_supplicant/scan.c
wpa_supplicant/wpa_supplicant.c #
wpa_supplicant/ctrl_iface.c   #
wap_supplicant/events.c
wap_supplicant/scan.c
wap_supplicant/sme.c
src/l2_packet/l2_packet_linux.c
src/drivers/driver_nl80211.c
wpa_supplicant/wpa_supplicant.c
wpa_supplicant/sme.c
通过 SIOCGIFHWADDR 获得 mac addr (记住在这里获得mac地址)
netlink_send_oper_ifla
/sys/class/net/wlan0/operstate
【driver】
printk("%s() \n",  __func__);
drivers/net/wireless/ittiam/itm_cfg80211.c
drivers/net/wireless/ittiam/itm_main.c
drivers/net/wireless/ittiam/itm_sipc.c
net/wireless/core.c
net/wireless/nl80211.c
nl80211_connect-->itm_wlan_cfg80211_connect
genlmsg_multicast_netns
【802.1x相关】
eapol_supp_sm.c
wpa_supplicant_init_eapol-->eapol_sm_init
#define SM_STATE(machine, state) static void sm_ ## machine ## _ ## state ## _Enter(STATE_MACHINE_DATA *sm, int global)
#define SM_ENTER(machine, state) sm_ ## machine ## _ ## state ## _Enter(sm, 0)
#define SM_STEP(machine)  static void sm_ ## machine ## _Step(STATE_MACHINE_DATA *sm)
#define SM_STEP_RUN(machine) sm_ ## machine ## _Step(sm)
【反馈扫描结果】
(1)kernel  
itm_cfg80211_report_scan_done-->cfg80211_inform_bss_frame-->cfg80211_bss_update-->(list_add_tail(&res->list, &dev->bss_list);)
-->cfg80211_scan_done-->nl80211_send_scan_done(NL80211_CMD_NEW_SCAN_RESULTS)
(2)wpa_supplicant
do_process_drv_event-->send_scan_event-->wpa_supplicant_event(EVENT_SCAN_RESULTS)-->wpa_supplicant_event_scan_results-->_wpa_supplicant_event_scan_results-->wpa_supplicant_get_scan_results-->wpa_driver_nl80211_get_scan_results-->nl80211_get_scan_results-->nl80211_cmd(NL80211_CMD_GET_SCAN);send_and_recv_msgs(drv, msg, bss_info_handler, &arg);
(3)kernel
NL80211_CMD_GET_SCAN.nl80211_dump_scan-->list_for_each_entry(scan, &rdev->bss_list, list)-->nl80211_send_bss
(4)wpa_supplicant
bss_info_handler

wpa_supplicant_ctrl_iface_scan_results
【定时扫描】
scan_interval SCAN_INTERVAL
_wpa_supplicant_event_scan_results --> {int timeout_sec = wpa_s->scan_interval;}
-------------------P2P kernel--------------------------------
nl80211_ops.NL80211_CMD_REMAIN_ON_CHANNEL-->nl80211_remain_on_channel
nl80211_tx_mgmt(NL80211_CMD_FRAME)-->cfg80211_mlme_mgmt_tx-->(rdev->ops->mgmt_tx)
------------------------------------P2P wpa_supplicant----------------------------------
p2p_find()-->(p2p->cfg->p2p_scan)==wpas_p2p_scan()-->p2p_scan_ie
p2p_listen
p2p_ctrl_listen-->wpas_p2p_listen-->p2p_listen-->wpas_start_listen-->wpa_drv_remain_on_channel-->wpa_driver_nl80211_remain_on_channel
nl80211_send_frame-->nl80211_send_frame_cmd(NL80211_CMD_FRAME)

【管理帧处理】
wpa_supplicant_event(EVENT_RX_MGMT)-->wpas_p2p_rx_action-->p2p_process_presence_resp

【p2p功能的支持】
wiphy_info_handler-->(capa->flags |= WPA_DRIVER_FLAGS_P2P_CAPABLE;)
【设置模式】
wpa_supplicant
wpa_driver_nl80211_set_mode-->nl80211_set_mode(NL80211_CMD_SET_INTERFACE)
kernel
NL80211_CMD_SET_INTERFACE.nl80211_set_interface-->cfg80211_change_iface-->(rdev->ops->change_virtual_intf).itm_wlan_cfg80211_change_iface-->itm_wlan_change_mode
【p2p启动】
wpa_supplicant -iwlan0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf  -puse_p2p_group_interface=1 -C/data/misc/wifi/wpa_supplicant &
wpa_cli -p/data/misc/wifi/wpa_supplicant -iwlan0
wpa_printf(MSG_ERROR, "%s(), line:%d\n", __FUNCTION__,__LINE__);
wpa_printf(MSG_ERROR, "%s() \n", __FUNCTION__);
【p2p_find】
p2p_find-->wpas_p2p_scan-->wpa_driver_nl80211_scan
do_process_drv_event(NL80211_CMD_NEW_SCAN_RESULTS)-->send_scan_event-->wpa_supplicant_event(EVENT_SCAN_RESULTS)-->wpa_supplicant_event_scan_results-->_wpa_supplicant_event_scan_results-->wpas_p2p_scan_res_handler-->p2p_scan_res_handler-->p2p_add_device
p2p_add_device-->p2p_parse_ies-->p2p_parse_wps_ie

wpa_supplicant_event(EVENT_P2P_DEV_FOUND)
p2p_connect f6:05:35:a9:3f:ff pbc auth go_intent=7
  
  
  
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120879-1-1.html 上篇帖子: wifi reaver 下篇帖子: Google WiFi 定位的原理 (转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表