wifi

.

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 \shexsrvTo_Internaljinglong.chenittiam.ko /system/lib/modules
adb push \shexsrvTo_Internaljinglong.chen2351_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
", __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[i].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() 
",  __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
", __FUNCTION__,__LINE__);
wpa_printf(MSG_ERROR, "%s() 
", __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
原文地址:https://www.cnblogs.com/to7str/p/3147546.html