#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <time.h>
浏览源代码.
- 作者
- owen (ouzij.nosp@m.ian@.nosp@m.embed.nosp@m.sky..nosp@m.net)
- 版本
- 1.0
- 日期
- 2021-08-27
- 版权所有
- Copyright (c) 2023 广东省天嵌嵌入式技术股份有限公司
- 修改日志:
Date | Version | Author | Description |
2021-08-27 | 1.0 | owen | 第一次发布,封装对wpa_cli的底层操作 |
在文件 wpa_ctrl.h 中定义.
#define CONFIG_CTRL_IFACE_CLIENT_DIR "/tmp" |
#define CONFIG_CTRL_IFACE_CLIENT_PREFIX "wpa_ctrl_" |
int wpa_ctrl_attach |
( |
struct wpa_ctrl * |
ctrl | ) |
|
注册为控制接口的事件监视器
- 参数
-
ctrl | 由wpa_ctrl_open()返回的接口控制指针 |
- 返回
- int 成功时为0,失败时为-1,超时时为-2
此函数将控制接口连接注册为wpa_supplicant/hostapd事件的监视器。 成功调用wpa_ctrl_attach()后,控件接口连接开始接收可使用wpa_ctrl_recv()读取的事件消息。
void wpa_ctrl_close |
( |
struct wpa_ctrl * |
ctrl | ) |
|
关闭wpa_supplicant/hostapd的控制接口
- 参数
-
ctrl | 由wpa_ctrl_open()返回的接口控制指针 |
此功能用于关闭控制接口。
int wpa_ctrl_detach |
( |
struct wpa_ctrl * |
ctrl | ) |
|
从控制接口注销事件监视器
- 参数
-
ctrl | 由wpa_ctrl_open()返回的接口控制指针 |
- 返回
- int 成功时为0,失败时为-1,超时时为-2
此函数用于取消将控制接口连接注册为wpa_supplicant/hostapd事件的监视器,即取消使用wpa_ctrl_attach()完成的注册。
int wpa_ctrl_get_fd |
( |
struct wpa_ctrl * |
ctrl | ) |
|
获取控制接口使用的文件描述符
- 参数
-
ctrl | 由wpa_ctrl_open()返回的接口控制指针 |
- 返回
- int 用于连接的文件描述符
返回的文件描述符不得直接用于发送或接收数据包;相反,必须为此使用库函数wpa_ctrl_request()和wpa_ctrl_recv()。
struct wpa_ctrl* wpa_ctrl_open |
( |
const char * |
ctrl_path | ) |
|
打开wpa_supplicant/hostapd的控制接口
- 参数
-
ctrl_path | UNIX域套接字的路径;如果使用UDP套接字,则忽略。 |
- 返回
- struct wpa_ctrl* 指向抽象控制接口数据的指针,失败时为NULL
此函数用于打开wpa_supplicant/hostapd的控制接口。 ctrl_path通常是/var/run/wpa_supplicant或/var/run/hostapd。 此路径在wpa_-supplicant/hostapd中配置,其他使用控制接口的程序需要使用匹配的路径配置。
int wpa_ctrl_pending |
( |
struct wpa_ctrl * |
ctrl | ) |
|
检查是否存在挂起(pending)的事件消息
- 参数
-
ctrl | 由wpa_ctrl_open()返回的接口控制指针 |
- 返回
- int 如果有挂起的消息,则返回1;如果没有,则返回0;如果出现错误,则返回-1
此函数将检查是否有任何挂起的控制接口消息可通过wpa_ctrl_recv()接收。 wpa_ctrl_pending()仅用于事件消息,即必须使用wpa_ctrl_attach()将控件接口注册为事件监视器。
int wpa_ctrl_recv |
( |
struct wpa_ctrl * |
ctrl, |
|
|
char * |
reply, |
|
|
size_t * |
reply_len |
|
) |
| |
接收挂起(pending)的控制接口消息
- 参数
-
ctrl | 由wpa_ctrl_open()返回的接口控制指针 |
reply | 消息数据缓冲区 |
reply_len | 接收缓存区长度 |
- 返回
- int 成功时为0,失败时为-1
此函数将接收挂起的控制接口消息。如果没有可用的消息,此功能将被阻止。 收到的响应将被写入reply,reply_len设置为回复的实际长度。 wpa_ctrl_recv()仅用于事件消息,即必须使用wpa_ctrl_attach()将控件接口注册为事件监视器。
int wpa_ctrl_request |
( |
struct wpa_ctrl * |
ctrl, |
|
|
const char * |
cmd, |
|
|
size_t |
cmd_len, |
|
|
char * |
reply, |
|
|
size_t * |
reply_len |
|
) |
| |
发送指令到wpa_supplicant/hostapd
- 参数
-
ctrl | 由wpa_ctrl_open()返回的接口控制指针 |
cmd | 指令;通常为ASCII文本,例如“PING” |
cmd_len | cmd的字节长度 |
reply | 接收缓存区 |
reply_len | 接收缓存区长度 |
- 返回
- int 成功时为0,错误时为-1(发送或接收失败),超时时为-2
此函数用于向wpa_supplicant/hostapd发送命令。 收到的响应将写入reply,reply_len设置为回复的实际长度。 在等待回复时,此功能最多会阻塞两秒钟。如果收到未经请求的消息,阻塞时间可能更长。
int wpa_ctrl_send |
( |
struct wpa_ctrl * |
ctrl, |
|
|
const char * |
cmd, |
|
|
size_t |
cmd_len |
|
) |
| |
向wpa_supplicant/hostapd发送命令,但不会等待响应
- 参数
-
ctrl | 由wpa_ctrl_open()返回的接口控制指针 |
cmd | 指令;通常为ASCII文本,例如“PING” |
cmd_len | cmd的字节长度 |
- 返回
- int 成功时为0,错误时为-1
此函数用于向wpa_supplicant/hostapd发送命令。但不会等待回复。