wpa_supplicant的HAL层

Wpa_supplicant实现了一个由外部程序控制wpa_supplicant daemon进程的操作以及如何获得状态、事件通知等控制接口。可以用wpa_ctrl.c提供的函数来使用这个控制接口。比如:wpa_cli.cwpa_gui就是这样实现的。

需要两个步骤:

    1、wpa_ctrl_openwpa_supplicant控制接口的链接。

    2、通过wpa_ctrl_request来发送命令。

Wpa_supplicant使用控制接口可以进行2种通信:命令、主动发送事件信息。

1) 命令包含外部程序的请求以及wpa_supplicant的响应。

2) Wpa_supplicant发送到控制接口的,外部程序需通过wpa_ctrl_attach连接到控制接口来接收这些消息。

当应用程序不需要与控制接口的连接时,调用wpa_ctrl_close来关闭这个连接。若是处理事件消息的连接,应先调用wpa_ctrl_detach断开。

      Wifi HAL是对wpa_supplicant的封装,它来和wpa_supplicant daemon进行通信,并向上层提供操作wpa_supplicant的接口。需要使用wpa_ctrl提供的wpa_supplicant接口。

Wifi.h中定义了wifiHAL层接口:

Wifi_load_driver()wifi_unload_driver()wifi_start_supplicant,wifi_stop_supplicant, wifi_connect_to_supplicant ,wifi_wait_for_eventwifi_commanddo_dhcp_request ,get_dhcp_error_string等。

Wifi_wait_for_event接收wpa_supplicant上报的事件,wifi_commandwpa_supplicant进程发命令。

Wifi_wait_for_event会使用wpa_ctrl中的wpa_ctrl_recv接口来接收事件然后返回。

Wifi_command会调用wifi_send_command实现命令发送.

Wifi_connect_to_supplicant调用wpa_ctrl_open创建两个socket

一个是ctrl interface(static struct wpa_ctrl *ctrl_conn)

另一个是monitor interface(static struct wpa_ctrl *mon_conn)Monitor interface检测从wpa_supplicant发来的eventMonitor interface会调wpa_ctrl_attachwpa_supplicant模块,wpa_supplicant收到后,会将该clientsocket记下来,用于之后发送事件用。

        Wifi Hal是wpa_supplicant的上层调用者,主要是wifi.c和wifi.h两个文件。

你可能感兴趣的:(wifi协议)