android wifi-wpa_supplicant_源码分析(三)

9 篇文章 0 订阅
5 篇文章 1 订阅

三、wpa_driver_ops内部定义很多函数指针,通过这些定义的函数指针,WPAS能隔离上层使用者和具体的driver。
    const struct wpa_driver_ops wpa_driver_nl80211_ops = {
        .name = "nl80211",        //driver wrapper的名称
        .desc = "Linux nl80211/cfg80211",    //描述信息
        .get_bssid = wpa_driver_nl80211_get_bssid,    //用于获取 bssid
        .get_ssid = wpa_driver_nl80211_get_ssid,
        .set_key = driver_nl80211_set_key,
        .scan2 = driver_nl80211_scan2,    //扫描函数
        .sched_scan = wpa_driver_nl80211_sched_scan,
        .stop_sched_scan = wpa_driver_nl80211_stop_sched_scan,
        .get_scan_results2 = wpa_driver_nl80211_get_scan_results,    //获取扫描结果
        .deauthenticate = driver_nl80211_deauthenticate,
        .authenticate = driver_nl80211_authenticate,    //触发 authentication 操作
        .associate = wpa_driver_nl80211_associate,    //触发 association 操作
        .global_init = nl80211_global_init,    //driver wrapper 全局初始化函数,该函数的返回值保存在 wpa_global 成员变量 drv_pri 数组中
        .global_deinit = nl80211_global_deinit,
        .init2 = wpa_driver_nl80211_init,    //driver wrapper 初始化函数
        .deinit = driver_nl80211_deinit,
        .get_capa = wpa_driver_nl80211_get_capa,
        .set_operstate = wpa_driver_nl80211_set_operstate,
        .set_supp_port = wpa_driver_nl80211_set_supp_port,
        .set_country = wpa_driver_nl80211_set_country,
        .get_country = wpa_driver_nl80211_get_country,
        .set_ap = wpa_driver_nl80211_set_ap,
        .set_acl = wpa_driver_nl80211_set_acl,
        .if_add = wpa_driver_nl80211_if_add,
        .if_remove = driver_nl80211_if_remove,
        .send_mlme = driver_nl80211_send_mlme,
        .get_hw_feature_data = wpa_driver_nl80211_get_hw_feature_data,
        .sta_add = wpa_driver_nl80211_sta_add,
        .sta_remove = driver_nl80211_sta_remove,
        .hapd_send_eapol = wpa_driver_nl80211_hapd_send_eapol,
        .sta_set_flags = wpa_driver_nl80211_sta_set_flags,
        .hapd_init = i802_init,
        .hapd_deinit = i802_deinit,
        .set_wds_sta = i802_set_wds_sta,
        .get_seqnum = i802_get_seqnum,
        .flush = i802_flush,
        .get_inact_sec = i802_get_inact_sec,
        .sta_clear_stats = i802_sta_clear_stats,
        .set_rts = i802_set_rts,
        .set_frag = i802_set_frag,
        .set_tx_queue_params = i802_set_tx_queue_params,
        .set_sta_vlan = driver_nl80211_set_sta_vlan,
        .sta_deauth = i802_sta_deauth,
        .sta_disassoc = i802_sta_disassoc,
        .read_sta_data = driver_nl80211_read_sta_data,
        .set_freq = i802_set_freq,
        .send_action = driver_nl80211_send_action,
        .send_action_cancel_wait = wpa_driver_nl80211_send_action_cancel_wait,
        .remain_on_channel = wpa_driver_nl80211_remain_on_channel,
        .cancel_remain_on_channel =    wpa_driver_nl80211_cancel_remain_on_channel,
        .probe_req_report = driver_nl80211_probe_req_report,
        .deinit_ap = wpa_driver_nl80211_deinit_ap,
        .deinit_p2p_cli = wpa_driver_nl80211_deinit_p2p_cli,
        .resume = wpa_driver_nl80211_resume,
        .send_ft_action = nl80211_send_ft_action,
        .signal_monitor = nl80211_signal_monitor,
        .signal_poll = nl80211_signal_poll,
        .send_frame = nl80211_send_frame,
        .shared_freq = wpa_driver_nl80211_shared_freq,
        .set_param = nl80211_set_param,
        .get_radio_name = nl80211_get_radio_name,
        .add_pmkid = nl80211_add_pmkid,
        .remove_pmkid = nl80211_remove_pmkid,
        .flush_pmkid = nl80211_flush_pmkid,
        .set_rekey_info = nl80211_set_rekey_info,
        .poll_client = nl80211_poll_client,
        .set_p2p_powersave = nl80211_set_p2p_powersave,
        .start_dfs_cac = nl80211_start_radar_detection,
        .stop_ap = wpa_driver_nl80211_stop_ap,
    #ifdef CONFIG_TDLS
        .send_tdls_mgmt = nl80211_send_tdls_mgmt,
        .tdls_oper = nl80211_tdls_oper,
    #endif /* CONFIG_TDLS */
        .update_ft_ies = wpa_driver_nl80211_update_ft_ies,
        .get_mac_addr = wpa_driver_nl80211_get_macaddr,
        .get_survey = wpa_driver_nl80211_get_survey,
        .status = wpa_driver_nl80211_status,
        .switch_channel = nl80211_switch_channel,
    #ifdef ANDROID_P2P
        .set_noa = wpa_driver_set_p2p_noa,
        .get_noa = wpa_driver_get_p2p_noa,
        .set_ap_wps_ie = wpa_driver_set_ap_wps_p2p_ie,
    #endif /* ANDROID_P2P */
    #ifdef ANDROID
        .driver_cmd = wpa_driver_nl80211_driver_cmd,    //用于处理和具体驱动相关的命令
    #endif /* ANDROID */
        .vendor_cmd = nl80211_vendor_cmd,
        .set_qos_map = nl80211_set_qos_map,
        .set_wowlan = nl80211_set_wowlan,
        .roaming = nl80211_roaming,
        .set_mac_addr = nl80211_set_mac_addr,
    };

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android中调试WiFi,通常会使用wpa_supplicantwpa_cli。下面是一些总结和步骤: 1. 在设备上运行wpa_supplicant 在设备上运行wpa_supplicant,它是一个用于处理WiFi连接的后台进程。可以在终端中使用以下命令启动它: ``` wpa_supplicant -iwlan0 -Dwext -c /data/misc/wifi/wpa_supplicant.conf ``` 其中,`wlan0` 是设备的WiFi接口名称,`wext` 是驱动程序的类型,`/data/misc/wifi/wpa_supplicant.conf` 是包含WiFi配置信息的文件路径。 2. 使用wpa_cli进行WiFi连接 wpa_cli是一个命令行工具,用于与wpa_supplicant进行交互并管理WiFi连接。可以在终端中使用以下命令启动它: ``` wpa_cli -iwlan0 ``` 此时会进入wpa_cli交互模式。可以使用以下命令执行一些操作: - `scan` 扫描可用的WiFi网络 - `scan_results` 查看扫描结果 - `add_network` 添加一个新的WiFi网络配置 - `set_network` 设置WiFi网络配置 - `enable_network` 启用WiFi网络 - `disable_network` 禁用WiFi网络 - `status` 查看当前连接状态 例如,如果要连接到名为“mywifi”的WiFi网络,可以执行以下步骤: 1. 扫描可用的WiFi网络 ``` > scan ``` 2. 查看扫描结果 ``` > scan_results ``` 会显示可用的WiFi网络列表,找到名为“mywifi”的网络并记下其network id。 3. 添加一个新的WiFi网络配置 ``` > add_network ``` 会返回一个新的network id。 4. 设置WiFi网络配置 ``` > set_network <network_id> ssid "mywifi" > set_network <network_id> psk "mypassword" ``` 其中,`<network_id>` 是上一步中返回的新的network id,`mywifi` 是WiFi网络的SSID,`mypassword` 是WiFi网络的密码。 5. 启用WiFi网络 ``` > enable_network <network_id> ``` 6. 查看连接状态 ``` > status ``` 如果连接成功,会显示类似于以下内容的信息: ``` wpa_state=COMPLETED ip_address=192.168.1.100 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值