diff options
Diffstat (limited to 'qcwcn/wifi_hal/wifi_hal_ctrl/wifi_hal_ctrl.h')
-rw-r--r-- | qcwcn/wifi_hal/wifi_hal_ctrl/wifi_hal_ctrl.h | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/qcwcn/wifi_hal/wifi_hal_ctrl/wifi_hal_ctrl.h b/qcwcn/wifi_hal/wifi_hal_ctrl/wifi_hal_ctrl.h new file mode 100644 index 0000000..dbfba56 --- /dev/null +++ b/qcwcn/wifi_hal/wifi_hal_ctrl/wifi_hal_ctrl.h @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2019 The Linux Foundation. All rights reserved. + * + * wpa_supplicant/hostapd control interface library + * Copyright (c) 2004-2006, Jouni Malinen <j@w1.fi> + * + * This software may be distributed under the terms of the BSD license. + * redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name(s) of the above-listed copyright holder(s) nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef WIFIHAL_CTRL_H +#define WIFIHAL_CTRL_H + +#include <sys/un.h> +#include <unistd.h> +#include <fcntl.h> + +#include "stdlib.h" + +#ifdef ANDROID +#include <dirent.h> +#include <grp.h> +#include <pwd.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <cutils/sockets.h> +#endif /* ANDROID */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * struct wifihal_ctrl - Internal structure for control interface library + * + * This structure is used by the clients to interface with WiFi Hal + * library to store internal data. Programs using the library should not touch + * this data directly. They can only use the pointer to the data structure as + * an identifier for the control interface connection and use this as one of + * the arguments for most of the control interface library functions. + */ + +struct wifihal_ctrl { + int s; + struct sockaddr_un local; + struct sockaddr_un dest; +}; + +#ifndef CONFIG_CTRL_IFACE_CLIENT_DIR +#define CONFIG_CTRL_IFACE_CLIENT_DIR "/dev/socket/wifihal" +#endif /* CONFIG_CTRL_IFACE_CLIENT_DIR */ +#ifndef CONFIG_CTRL_IFACE_CLIENT_PREFIX +#define CONFIG_CTRL_IFACE_CLIENT_PREFIX "wifihal_ctrl_cli_" +#endif /* CONFIG_CTRL_IFACE_CLIENT_PREFIX */ + +#define DEFAULT_PAGE_SIZE 4096 + +enum nl_family_type +{ + //! gen netlink family + GENERIC_NL_FAMILY = 1, + //! Cld80211 family + CLD80211_FAMILY +}; + + +enum wifihal_ctrl_cmd +{ + /** attach monitor sock */ + WIFIHAL_CTRL_MONITOR_ATTACH, + /** dettach monitor sock */ + WIFIHAL_CTRL_MONITOR_DETTACH, + /** Send data over Netlink Sock */ + WIFIHAL_CTRL_SEND_NL_DATA, +}; + +//! WIFIHAL Control Request +typedef struct wifihal_ctrl_req_s { + //! ctrl command + uint32_t ctrl_cmd; + //! Family name + uint32_t family_name; + //! command ID + uint32_t cmd_id; + //! monitor sock len + uint32_t monsock_len; + //! monitor sock + struct sockaddr_un monsock; + //! data buff length + uint32_t data_len; + //! reserved + uint32_t reserved[4]; + //! data + char data[0]; +}wifihal_ctrl_req_t; + + +//! WIFIHAL Sync Response +typedef struct wifihal_ctrl_sync_rsp_s { + //! ctrl command + uint32_t ctrl_cmd; + //! Family name + uint32_t family_name; + //! command ID + uint32_t cmd_id; + //! status for the request + int status; + //! reserved + uint32_t reserved[4]; +}wifihal_ctrl_sync_rsp_t; + +//! WIFIHAL Async Response +typedef struct wifihal_ctrl_event_s { + //! Family name + uint32_t family_name; + //! command ID + uint32_t cmd_id; + //! data buff length + uint32_t data_len; + //! reserved + uint32_t reserved; + //! data + char data[0]; +}wifihal_ctrl_event_t; + +/* WiFi Hal control interface access */ + +/** + * wifihal_ctrl_open - Open a control interface to WiFi-Hal + * @ctrl_path: 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 WiFi-Hal. + * ctrl_path is usually /var/run/wifihal. This path + * is configured in WiFi-Hal and other programs using the control + * interface need to use matching path configuration. + */ +struct wifihal_ctrl * wifihal_ctrl_open(const char *ctrl_path); + +/** + * wifihal_ctrl_open2 - Open a control interface to wifihal + * @ctrl_path: Path for UNIX domain sockets; ignored if UDP sockets are used. + * @cli_path: Path for client UNIX domain sockets; ignored if UDP socket + * is used. + * Returns: Pointer to abstract control interface data or %NULL on failure + * + * This function is used to open a control interface to wifihal + * when the socket path for client need to be specified explicitly. Default + * ctrl_path is usually /var/run/wifihal and client + * socket path is /tmp. + */ +struct wifihal_ctrl * wifihal_ctrl_open2(const char *ctrl_path, const char *cli_path); + + +/** + * wifihal_ctrl_close - Close a control interface to wifihal + * @ctrl: Control interface data from wifihal_ctrl_open() + * + * This function is used to close a control interface. + */ +void wifihal_ctrl_close(struct wifihal_ctrl *ctrl); + + +/** + * wifihal_ctrl_request - Send a command to wifihal + * @ctrl: Control interface data from wifihal_ctrl_open() + * @cmd: Command; usually, ASCII text, e.g., "PING" + * @cmd_len: Length of the cmd in bytes + * @reply: Buffer for the response + * @reply_len: Reply buffer length + * @msg_cb: 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 wifihal. 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 wifihal_ctrl_request() is called at the same time as + * wifihal is sending such a message. + * FIXME : Change the comment below. + * 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. + */ +int wifihal_ctrl_request(struct wifihal_ctrl *ctrl, const char *cmd, size_t cmd_len, + char *reply, size_t *reply_len); + + +#ifdef __cplusplus +} +#endif + +#endif |