LMS 2012
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
wpa_ctrl.c File Reference
#include "includes.h"
#include <sys/un.h>
#include "wpa_ctrl.h"
#include "common.h"

Go to the source code of this file.

Data Structures

struct  wpa_ctrl
 

Macros

#define CONFIG_CTRL_IFACE
 
#define CONFIG_CTRL_IFACE_UNIX
 
#define CTRL_IFACE_SOCKET
 

Functions

struct wpa_ctrlwpa_ctrl_open (const char *ctrl_path)
 
void wpa_ctrl_close (struct wpa_ctrl *ctrl)
 
int wpa_ctrl_request (struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len, char *reply, size_t *reply_len, void(*msg_cb)(char *msg, size_t len))
 
int wpa_ctrl_attach (struct wpa_ctrl *ctrl)
 
int wpa_ctrl_detach (struct wpa_ctrl *ctrl)
 
int wpa_ctrl_recv (struct wpa_ctrl *ctrl, char *reply, size_t *reply_len)
 
int wpa_ctrl_pending (struct wpa_ctrl *ctrl)
 
int wpa_ctrl_get_fd (struct wpa_ctrl *ctrl)
 

Macro Definition Documentation

#define CONFIG_CTRL_IFACE

Definition at line 18 of file wpa_ctrl.c.

#define CONFIG_CTRL_IFACE_UNIX

Definition at line 19 of file wpa_ctrl.c.

#define CTRL_IFACE_SOCKET

Definition at line 32 of file wpa_ctrl.c.

Function Documentation

int wpa_ctrl_attach ( struct wpa_ctrl ctrl)

wpa_ctrl_attach - Register as an event monitor for the control interface : Control interface data from wpa_ctrl_open() Returns: 0 on success, -1 on failure, -2 on timeout

This function registers the control interface connection as a monitor for wpa_supplicant/hostapd events. After a success wpa_ctrl_attach() call, the control interface connection starts receiving event messages that can be read with wpa_ctrl_recv().

Definition at line 297 of file wpa_ctrl.c.

void wpa_ctrl_close ( struct wpa_ctrl ctrl)

wpa_ctrl_close - Close a control interface to wpa_supplicant/hostapd : Control interface data from wpa_ctrl_open()

This function is used to close a control interface.

Definition at line 137 of file wpa_ctrl.c.

int wpa_ctrl_detach ( struct wpa_ctrl ctrl)

wpa_ctrl_detach - Unregister event monitor from the control interface : Control interface data from wpa_ctrl_open() Returns: 0 on success, -1 on failure, -2 on timeout

This function unregisters the control interface connection as a monitor for wpa_supplicant/hostapd events, i.e., cancels the registration done with wpa_ctrl_attach().

Definition at line 303 of file wpa_ctrl.c.

int wpa_ctrl_get_fd ( struct wpa_ctrl ctrl)

wpa_ctrl_get_fd - Get file descriptor used by the control interface : Control interface data from wpa_ctrl_open() Returns: File descriptor used for the connection

This function can be used to get the file descriptor that is used for the control interface connection. The returned value can be used, e.g., with select() while waiting for multiple events.

The returned file descriptor must not be used directly for sending or receiving packets; instead, the library functions wpa_ctrl_request() and wpa_ctrl_recv() must be used for this.

Definition at line 336 of file wpa_ctrl.c.

struct wpa_ctrl* wpa_ctrl_open ( const char *  ctrl_path)

wpa_ctrl_open - Open a control interface to wpa_supplicant/hostapd : Path for UNIX domain sockets; ignored if UDP sockets are used. Returns: Pointer to abstract control interface data or NULL on failure

This function is used to open a control interface to wpa_supplicant/hostapd. ctrl_path is usually /var/run/wpa_supplicant or /var/run/hostapd. This path is configured in wpa_supplicant/hostapd and other programs using the control interface need to use matching path configuration.

Definition at line 65 of file wpa_ctrl.c.

int wpa_ctrl_pending ( struct wpa_ctrl ctrl)

wpa_ctrl_pending - Check whether there are pending event messages : Control interface data from wpa_ctrl_open() Returns: 1 if there are pending messages, 0 if no, or -1 on error

This function will check whether there are any pending control interface message available to be received with wpa_ctrl_recv(). wpa_ctrl_pending() is only used for event messages, i.e., wpa_ctrl_attach() must have been used to register the control interface as an event monitor.

Definition at line 323 of file wpa_ctrl.c.

int wpa_ctrl_recv ( struct wpa_ctrl ctrl,
char *  reply,
size_t *  reply_len 
)

wpa_ctrl_recv - Receive a pending control interface message : Control interface data from wpa_ctrl_open() : Buffer for the message data : Length of the reply buffer Returns: 0 on success, -1 on failure

This function will receive a pending control interface message. This function will block if no messages are available. The received response will be written to reply and reply_len is set to the actual length of the reply. wpa_ctrl_recv() is only used for event messages, i.e., wpa_ctrl_attach() must have been used to register the control interface as an event monitor.

Definition at line 311 of file wpa_ctrl.c.

int wpa_ctrl_request ( struct wpa_ctrl ctrl,
const char *  cmd,
size_t  cmd_len,
char *  reply,
size_t *  reply_len,
void(*)(char *msg, size_t len)  msg_cb 
)

wpa_ctrl_request - Send a command to wpa_supplicant/hostapd : Control interface data from wpa_ctrl_open() : Command; usually, ASCII text, e.g., "PING" : Length of the cmd in bytes : Buffer for the response : Reply buffer length : Callback function for unsolicited messages or NULL if not used Returns: 0 on success, -1 on error (send or receive failed), -2 on timeout

This function is used to send commands to wpa_supplicant/hostapd. Received response will be written to reply and reply_len is set to the actual length of the reply. This function will block for up to two seconds while waiting for the reply. If unsolicited messages are received, the blocking time may be longer.

msg_cb can be used to register a callback function that will be called for unsolicited messages received while waiting for the command response. These messages may be received if wpa_ctrl_request() is called at the same time as wpa_supplicant/hostapd is sending such a message. This can happen only if the program has used wpa_ctrl_attach() to register itself as a monitor for event messages. Alternatively to msg_cb, programs can register two control interface connections and use one of them for commands and the other one for receiving event messages, in other words, call wpa_ctrl_attach() only for the control interface connection that will be used for event messages.

Definition at line 208 of file wpa_ctrl.c.