/**************************************************************************** * wpa_supplicant drivers 查看跟踪 * 说明: * 最近调试wifi的时候由于wpa_supplicant仅仅支持wext,但是芯片移植手册上 * 却要使用nl80211模式,总是找不到查询方法,于是今天跟wpa_supplicant代码的 * 时候发现通过-h参数就可以查看到。 * * 2016-6-29 深圳 南山平山村 曾剑锋 ****************************************************************************/ static void usage(void) { int i; printf("%s\n\n%s\n" "usage:\n" " wpa_supplicant [-BddhKLqqstuvW] [-P<pid file>] " "[-g<global ctrl>] \\\n" " -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] " "[-p<driver_param>] \\\n" " [-b<br_ifname>] [-f<debug file>] [-e<entropy file>] " "\\\n" " [-o<override driver>] [-O<override ctrl>] \\\n" " [-N -i<ifname> -c<conf> [-C<ctrl>] " "[-D<driver>] \\\n" " [-p<driver_param>] [-b<br_ifname>] ...]\n" "\n" "drivers:\n", wpa_supplicant_version, wpa_supplicant_license); for (i = 0; wpa_drivers[i]; i++) { ------------------------------+ printf(" %s = %s\n", | wpa_drivers[i]->name, | wpa_drivers[i]->desc); | } | | #ifndef CONFIG_NO_STDOUT_DEBUG | printf("options:\n" | " -b = optional bridge interface name\n" | " -B = run daemon in the background\n" | " -c = Configuration file\n" | " -C = ctrl_interface parameter (only used if -c is not)\n" | " -i = interface name\n" | " -d = increase debugging verbosity (-dd even more)\n" | " -D = driver name (can be multiple drivers: nl80211,wext)\n" | " -e = entropy file\n"); | #ifdef CONFIG_DEBUG_FILE | printf(" -f = log output to debug file instead of stdout\n"); | #endif /* CONFIG_DEBUG_FILE */ | printf(" -g = global ctrl_interface\n" | " -K = include keys (passwords, etc.) in debug output\n"); | #ifdef CONFIG_DEBUG_SYSLOG | printf(" -s = log output to syslog instead of stdout\n"); | #endif /* CONFIG_DEBUG_SYSLOG */ | #ifdef CONFIG_DEBUG_LINUX_TRACING | printf(" -T = record to Linux tracing in addition to logging\n"); | printf(" (records all messages regardless of debug verbosity)\n"); | #endif /* CONFIG_DEBUG_LINUX_TRACING */ | printf(" -t = include timestamp in debug messages\n" | " -h = show this help text\n" | " -L = show license (BSD)\n" | " -o = override driver parameter for new interfaces\n" | " -O = override ctrl_interface parameter for new interfaces\n" | " -p = driver parameters\n" | " -P = PID file\n" | " -q = decrease debugging verbosity (-qq even less)\n"); | #ifdef CONFIG_DBUS | printf(" -u = enable DBus control interface\n"); | #endif /* CONFIG_DBUS */ | printf(" -v = show version\n" | " -W = wait for a control interface monitor before starting\n" | " -N = start describing new interface\n"); | | printf("example:\n" | " wpa_supplicant -D%s -iwlan0 -c/etc/wpa_supplicant.conf\n", | wpa_drivers[i] ? wpa_drivers[i]->name : "wext"); | #endif /* CONFIG_NO_STDOUT_DEBUG */ | } | | | struct wpa_driver_ops *wpa_drivers[] = <------------------------------+ { #ifdef CONFIG_DRIVER_WEXT &wpa_driver_wext_ops, ------+ #endif /* CONFIG_DRIVER_WEXT */ | #ifdef CONFIG_DRIVER_NL80211 | &wpa_driver_nl80211_ops, ------*-------------------------------------+ #endif /* CONFIG_DRIVER_NL80211 */ | | ...... | | NULL | | }; | | | | #ifdef CONFIG_DRIVER_WEXT V | extern struct wpa_driver_ops wpa_driver_wext_ops; /* driver_wext.c */ ----+ | #endif /* CONFIG_DRIVER_WEXT */ | | #ifdef CONFIG_DRIVER_NL80211 v-----------------------------------*-+ extern struct wpa_driver_ops wpa_driver_nl80211_ops; /* driver_nl80211.c */ | | #endif /* CONFIG_DRIVER_NL80211 */ | | | | const struct wpa_driver_ops wpa_driver_wext_ops = { <--------------+ | .name = "wext", | .desc = "Linux wireless extensions (generic)", | .get_bssid = wpa_driver_wext_get_bssid, | .get_ssid = wpa_driver_wext_get_ssid, | .set_key = wpa_driver_wext_set_key, | .set_countermeasures = wpa_driver_wext_set_countermeasures, | .scan2 = wpa_driver_wext_scan, | .get_scan_results2 = wpa_driver_wext_get_scan_results, | .deauthenticate = wpa_driver_wext_deauthenticate, | .disassociate = wpa_driver_wext_disassociate, | .associate = wpa_driver_wext_associate, | .init = wpa_driver_wext_init, | .deinit = wpa_driver_wext_deinit, | .add_pmkid = wpa_driver_wext_add_pmkid, | .remove_pmkid = wpa_driver_wext_remove_pmkid, | .flush_pmkid = wpa_driver_wext_flush_pmkid, | .get_capa = wpa_driver_wext_get_capa, | .set_operstate = wpa_driver_wext_set_operstate, | .get_radio_name = wext_get_radio_name, | #ifdef ANDROID | .sched_scan = wext_sched_scan, | .stop_sched_scan = wext_stop_sched_scan, | #endif /* ANDROID */ | }; | | const struct wpa_driver_ops wpa_driver_nl80211_ops = { <---------------+ .name = "nl80211", .desc = "Linux nl80211/cfg80211", .get_bssid = wpa_driver_nl80211_get_bssid, .get_ssid = wpa_driver_nl80211_get_ssid, .set_key = wpa_driver_nl80211_set_key, .scan2 = wpa_driver_nl80211_scan, .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 = wpa_driver_nl80211_deauthenticate, .disassociate = wpa_driver_nl80211_disassociate, .authenticate = wpa_driver_nl80211_authenticate, .associate = wpa_driver_nl80211_associate, .global_init = nl80211_global_init, .global_deinit = nl80211_global_deinit, .init2 = wpa_driver_nl80211_init, .deinit = wpa_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, .set_ap = wpa_driver_nl80211_set_ap, .if_add = wpa_driver_nl80211_if_add, .if_remove = wpa_driver_nl80211_if_remove, .send_mlme = wpa_driver_nl80211_send_mlme, .get_hw_feature_data = wpa_driver_nl80211_get_hw_feature_data, .sta_add = wpa_driver_nl80211_sta_add, .sta_remove = wpa_driver_nl80211_sta_remove, .hapd_send_eapol = wpa_driver_nl80211_hapd_send_eapol, .sta_set_flags = wpa_driver_nl80211_sta_set_flags, #ifdef HOSTAPD .hapd_init = i802_init, .hapd_deinit = i802_deinit, .set_wds_sta = i802_set_wds_sta, #endif /* HOSTAPD */ #if defined(HOSTAPD) || defined(CONFIG_AP) .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 = i802_set_sta_vlan, .sta_deauth = i802_sta_deauth, .sta_disassoc = i802_sta_disassoc, #endif /* HOSTAPD || CONFIG_AP */ .read_sta_data = i802_read_sta_data, .set_freq = i802_set_freq, .send_action = wpa_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 = wpa_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, #ifdef CONFIG_TDLS .send_tdls_mgmt = nl80211_send_tdls_mgmt, .tdls_oper = nl80211_tdls_oper, #endif /* CONFIG_TDLS */ #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 #ifdef ANDROID .driver_cmd = wpa_driver_nl80211_driver_cmd, #endif }; /** * * root@android:/ # wpa_supplicant * wpa_supplicant v2.0-devel-4.2.2_rtw_r8680.20130821 * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi> and contributors * * This software may be distributed under the terms of the BSD license. * See README for more details. * * This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/) * * usage: * wpa_supplicant [-BddhKLqqstuvW] [-P<pid file>] [-g<global ctrl>] \ * -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \ * [-b<br_ifname>] [-f<debug file>] [-e<entropy file>] \ * [-o<override driver>] [-O<override ctrl>] \ * [-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \ * [-p<driver_param>] [-b<br_ifname>] ...] * * drivers: * wext = Linux wireless extensions (generic) <------------------- * nl80211 = Linux nl80211/cfg80211 <------------------- * options: * -b = optional bridge interface name * -B = run daemon in the background * -c = Configuration file * -C = ctrl_interface parameter (only used if -c is not) * -i = interface name * -d = increase debugging verbosity (-dd even more) * -D = driver name (can be multiple drivers: nl80211,wext) * -e = entropy file * -g = global ctrl_interface * -K = include keys (passwords, etc.) in debug output * -t = include timestamp in debug messages * -h = show this help text * -L = show license (BSD) * -o = override driver parameter for new interfaces * -O = override ctrl_interface parameter for new interfaces * -p = driver parameters * -P = PID file * -q = decrease debugging verbosity (-qq even less) * -v = show version * -W = wait for a control interface monitor before starting * -N = start describing new interface * example: * wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf * 255|root@android:/ # * */