/common/BoardConfig.mk:38:BOARD_WPA_SUPPLICANT_DRIVER := NL80211
//supplicant 는 NL80211 driver를 사용한다.
ifneq ($(BOARD_WPA_SUPPLICANT_DRIVER),)
CONFIG_DRIVER_$(BOARD_WPA_SUPPLICANT_DRIVER) := y => CONFIG_DRIVER_NL80211 define됨.
endif
//wpa supplicant
setPowerSave(boolean enabled)
doBooleanCommand("SET ps 1");
wpa_driver_nl80211_ops //struct wpa_driver_ops
.set_p2p_powersave = nl80211_set_p2p_powersave //NL80211_CMD_SET_POWER_SAVE "src/drivers/driver_nl80211_event.c" 2297L, 67745C
nl80211_set_power_save(struct i802_bss *bss, int enabled)
NL80211_CMD_SET_POWER_SAVE NL80211_PS_ENABLED : NL80211_PS_DISABLED
...
nl80211_cmd
//bcmdhd
java framework:
setSuspendOptimizationsNative
setSuspendOptimizations //WifiNative.cpp
doBooleanCommand("DRIVER SETSUSPENDMODE 1")
wpa_suppilcant:
wpa_supplicant_init
wpa_supplicant_global_ctrl_iface_init
wpa_supplicant_global_ctrl_iface_open_sock
android_get_control_socket //ctrl_iface_unix.c
bind(prive_sock)
register_global_ctrl_iface_process
wpa_supplicant_global_ctrl_iface_process
PING
INTERFACE_ADD
DRIVER
... etc
wpa_supplicant_ctrl_iface_init
wpa_ctrl_iface_open_sock
android_get_control_socket
wpa_supplicant_ctrl_iface_receive
bcmdhd driver :
dhd_module_init
dhd_wifi_platform_register_drv
dhd_wifi_platform_dev_driver
bcmdhd_wifi_plat_dev_drv_probe
dhd_wifi_platform_load
dhd_wifi_platform_load
dhd_wifi_platform_load_usb
dhd_dbus_probe_cb
dhd_attach
dhd_register_if
dhd_ioctl_entry
wl_android_priv_cmd(net_device *net … )
wl_handle_private_cmd(struct net_device *net, char *command, u32 cmd_len)
case: CMD_SETSUSPENDMOD
wl_android_set_suspendmode
net_os_set_suspend
dhd_set_suspend
dbus_attach
[dhd_linux.c]
dhd_register_if
net->netdev_ops = &dhd_ops_pri;
[lib_driver_cmd_bcmdhd]
wpa_driver_nl80211_driver_cmd
ret = ioctl(drv->global->ioctl_sock, SIOCDEVPRIVATE + 1, &ifr)
//wpa_driver_nl80211_data *drv *drv??
struct nl80211_global *global
ioctl_sock??
[wpa_supplicant]
wpa_driver_nl80211_ops
wpa_driver_nl80211_get_ssid
driver_nl80211_authenticate
wpa_driver_nl80211_associate
//ANDROID
wpa_driver_nl80211_driver_cmd
[wpa_supplicant/src/drivers/driver_nl80211.c]
nl80211_global_init
global->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
netlink_init
netlink->sock = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
3790 void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
3791 union wpa_event_data *data)
struct wpa_supplicant *wpa_s = ctx;
wpa_s = wpa_supplicant_get_iface(ctx, data->interface_status.ifname);
[wpa_supplicant/wpa_supplicant.c]
/**
* wpa_supplicant_get_iface - Get a new network interface
* @global: Pointer to global data from wpa_supplicant_init()
* @ifname: Interface name
* Returns: Pointer to the interface or %NULL if not found
*/
struct wpa_supplicant * wpa_supplicant_get_iface(struct wpa_global *global,
const char *ifname)
{
struct wpa_supplicant *wpa_s;
for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) {
if (os_strcmp(wpa_s->ifname, ifname) == 0)
return wpa_s;
}
return NULL;
}
Simple command path for wifi.
framework : wifi_navtive.cpp
hal : wifi_hal.cpp
libnl : nl_sock을 이용하여 command를 주고 받음.
wpa_supplicant: wpa_supplicant_android.c
via ioctl(SIOCDEVPRIVATE+1)
bcmdhd : wl_android.c
#define CMD_SETSUSPENDMODE "SETSUSPENDMODE"
'wifi' 카테고리의 다른 글
| wpa_cli connection 및 ping test 예제 (0) | 2022.07.01 |
|---|---|
| A3004NS-Dual 연결 끊김 관련 tip (0) | 2019.12.06 |
| android wifi manager API test (0) | 2019.11.26 |
| monitor mode 지원 usb lan card 리스트 (0) | 2019.11.12 |
| WPS (Wifi Protected Setup) deprecated in Android P. (0) | 2019.10.15 |