wifi2020. 2. 19. 14:07

/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"

Posted by easy16