无线网络接口(WAPI)API
wapi_* 系列接口基于 Linux Wireless Extensions(WEXT)封装,提供无线网络配置、扫描、关联、功率管理、区域代码和 PMKSA 缓存等能力。
头文件:#include <wireless/wapi.h>
openvela 实现说明
- 底层机制:基于 Linux Wireless Extensions(WEXT)的 ioctl 协议与 Wi-Fi 驱动通信
- 支持场景:Station(客户端)模式、AP 模式、混杂模式(由驱动支持程度决定)
- 配置依赖:需启用 CONFIG_WIRELESS_WAPI 及对应的 Wi-Fi 芯片驱动
- 典型用法:
- wapi_set_ifup/wapi_set_ifdown 控制接口启停
- wapi_set_essid + wapi_set_mode 配置连接目标
- wapi_scan_* / wapi_escan_* 扫描周围 AP
- wapi_load_config / wapi_save_config 持久化配置
- 扩展能力:通过 wapi_extend_params / wapi_set_pmksa 等接口与驱动私有特性交互
无线网络接口
头文件:#include <wireless/wapi.h>
wapi 提供无线网络配置接口,包括 SSID 扫描、连接、频率设置等。
连接管理
wapi_get_ifup
int wapi_get_ifup(int sock, const char *ifname, int *is_up);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称.
- is_up 接口状态,0 表示启用,1 表示禁用。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_ifup
int wapi_set_ifup(int sock, const char *ifname);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称.
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_ifdown
int wapi_set_ifdown(int sock, const char *ifname);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称,将被关闭。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_get_ip
int wapi_get_ip(int sock, const char *ifname, struct in_addr *addr);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称.
- addr 输出参数。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_ip
int wapi_set_ip(int sock, const char *ifname, const struct in_addr *addr);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称,其 IP 地址
- addr 指向包含新 IP 地址的结构体。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_get_netmask
int wapi_get_netmask(int sock, const char *ifname, struct in_addr *addr);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称.
- addr 输出参数。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_netmask
int wapi_set_netmask(int sock, const char *ifname, const struct in_addr *addr);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称.
- addr 指向包含新子网掩码的结构体。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_add_route_gw
int wapi_add_route_gw(int sock, enum wapi_route_target_e targettype, const struct in_addr *target, const struct in_addr *netmask, const struct in_addr *gw);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- targettype 目标类型。
- target 指向目标 IP 地址。
- netmask 指向目标地址对应的子网掩码。
- gw 指向对应的网关(路由器)IP 地址,用于
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_del_route_gw
int wapi_del_route_gw(int sock, enum wapi_route_target_e targettype, const struct in_addr *target, const struct in_addr *netmask, const struct in_addr *gw);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- targettype 目标类型。
- target 指向路由的目标 IP 地址
- netmask 指向目标地址对应的子网掩码。
- gw 指向对应的网关(路由器)IP 地址,用于
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_get_freq
int wapi_get_freq(int sock, const char *ifname, double *freq, enum wapi_freq_flag_e *flag);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- freq 输出参数。
- flag 输出参数。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_freq
int wapi_set_freq(int sock, const char *ifname, double freq, enum wapi_freq_flag_e flag);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- freq 频率值。
- flag 频率值。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_freq2chan
int wapi_freq2chan(int sock, const char *ifname, double freq, int *chan);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- freq 频率(Hz),将被转换为信道编号。
- chan 输出参数。
wapi_chan2freq
int wapi_chan2freq(int sock, const char *ifname, int chan, double *freq);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 信道。
- chan 信道编号,将被转换为频率。
- freq 输出参数。
wapi_get_essid
int wapi_get_essid(int sock, const char *ifname, char *essid, enum wapi_essid_flag_e *flag);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- essid 用于存储结果。
- flag 输出参数。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_essid
int wapi_set_essid(int sock, const char *ifname, const char *essid, enum wapi_essid_flag_e flag);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- essid 指向一个以 \0 结尾的 ESSID 字符串
- flag 控制标志。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_get_mode
int wapi_get_mode(int sock, const char *ifname, enum wapi_mode_e *mode);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- mode 输出参数。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_mode
int wapi_set_mode(int sock, const char *ifname, enum wapi_mode_e mode);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- mode 输出参数。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_make_broad_ether
int wapi_make_broad_ether(struct ether_addr *sa);
参数:
- sa 输出参数。
返回值:
返回底层 wapi_make_ether() 调用的结果。
wapi_make_null_ether
int wapi_make_null_ether(struct ether_addr *sa);
参数:
- sa 输出参数。
返回值:
返回底层 wapi_make_ether() 调用的结果。
wapi_get_ap
int wapi_get_ap(int sock, const char *ifname, struct ether_addr *ap);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- ap 要设置的地址。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_ap
int wapi_set_ap(int sock, const char *ifname, const struct ether_addr *ap);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- ap 接入点的 MAC 地址。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_get_bitrate
int wapi_get_bitrate(int sock, const char *ifname, int *bitrate, enum wapi_bitrate_flag_e *flag);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- bitrate 输出参数,用于存储查询到的比特率。
- flag 输出参数,用于存储比特率标志位。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_bitrate
int wapi_set_bitrate(int sock, const char *ifname, int bitrate, enum wapi_bitrate_flag_e flag);
参数:
- sock 套接字描述符(用于 ioctl 操作)。
- ifname 网络接口名称。
- bitrate 比特率 .
- flag 比特率 flag.
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_dbm2mwatt
int wapi_dbm2mwatt(int dbm);
参数:
- dbm 要转换的 dBm 值。
返回值:
转换后的毫瓦值。
wapi_mwatt2dbm
int wapi_mwatt2dbm(int mwatt);
参数:
- mwatt 毫瓦值。
返回值:
转换后的 dBm 值。
wapi_get_txpower
int wapi_get_txpower(int sock, const char *ifname, int *power, enum wapi_txpower_flag_e *flag);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
- power 输出参数,用于存储发射功率值。
- flag 输出参数,用于存储发射功率的单位。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_txpower
int wapi_set_txpower(int sock, const char *ifname, int power, enum wapi_txpower_flag_e flag);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
- power 发射功率。
- flag 发射功率。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_make_socket
int wapi_make_socket(void);
wapi_scan_init
int wapi_scan_init(int sock, const char *ifname, const char *essid);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
- essid 要扫描的 ESSID。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_scan_channel_init
int wapi_scan_channel_init(int sock, const char *ifname, const char *essid, uint8_t *channels, int num_channels);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
- essid 要扫描的 ESSID。
- channels 要扫描的信道编号数组。
- num_channels 信道。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_escan_init
int wapi_escan_init(int sock, const char *ifname, uint8_t scan_type, const char *essid);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
- scan_type 扫描类型。
- essid 要扫描的 ESSID。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_escan_channel_init
int wapi_escan_channel_init(int sock, const char *ifname, uint8_t scan_type, const char *essid, uint8_t *channels, int num_channels);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
- scan_type 扫描类型。
- essid 要扫描的 ESSID。
- channels 要扫描的信道编号数组。
- num_channels 信道。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_scan_stat
int wapi_scan_stat(int sock, const char *ifname);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
wapi_scan_coll
int wapi_scan_coll(int sock, const char *ifname, struct wapi_list_s *aps);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
- aps 收集的扫描结果列表。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_scan_coll_free
void wapi_scan_coll_free(struct wapi_list_s *aps);
参数:
- aps 要释放的扫描结果列表。
wapi_set_country
int wapi_set_country(int sock, const char *ifname, const char *country);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
- country 指向双字符字符串,表示要设置的
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_get_country
int wapi_get_country(int sock, const char *ifname, char *country);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
- country 指向调用方提供的缓冲区,用于接收
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_get_sensitivity
int wapi_get_sensitivity(int sock, const char *ifname, int *sense);
参数:
- sock 套接字描述符.
- ifname 网络接口名称。
- sense 指向调用方提供的整型变量,用于接收
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_load_config
void *wapi_load_config(const char *ifname, const char *confname, struct wpa_wconfig_s *conf);
参数:
- ifname 网络接口名称。
- confname 路径。
- conf 指向调用方提供的结构体,用于填入
wapi_unload_config
void wapi_unload_config(void *load);
参数:
- load 配置资源句柄。
wapi_save_config
int wapi_save_config(const char *ifname, const char *confname, const struct wpa_wconfig_s *conf);
参数:
- ifname 网络接口名称。
- confname 路径。
- conf 指向包含配置信息的结构体
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_pta_prio
int wapi_set_pta_prio(int sock, const char *ifname, enum wapi_pta_prio_e pta_prio);
参数:
- sock 文件描述符。
- ifname 网络接口名称。
- pta_prio PTA 优先级。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_get_pta_prio
int wapi_get_pta_prio(int sock, const char *ifname, enum wapi_pta_prio_e *pta_prio);
参数:
- sock 文件描述符。
- ifname 网络接口名称。
- pta_prio 指向用于接收当前 PTA 优先级的变量
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_pmksa
int wapi_set_pmksa(int sock, const char *ifname, const uint8_t *pmk, int len);
参数:
- sock 文件描述符。
- ifname 网络接口名称。
- pmk 指向包含 PMKSA 数据的缓冲区
- len 长度。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_get_pmksa
int wapi_get_pmksa(int sock, const char *ifname, uint8_t *pmk, int len);
参数:
- sock 文件描述符。
- ifname 网络接口名称。
- pmk 指向用于接收查询到的 PMKSA 数据的缓冲区
- len 缓冲区大小。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_extend_params
int wapi_extend_params(int sock, int cmd, struct iwreq *wrq);
参数:
- sock 文件描述符。
- cmd 私有 ioctl 命令码。
- wrq 指向 iwreq 结构体,调用方需预先
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_set_power_save
int wapi_set_power_save(int sock, const char *ifname, bool on);
参数:
- sock 文件描述符。
- ifname 网络接口名称。
- on 控制标志。
返回值:
成功时返回 0,失败时返回负的错误码。
wapi_get_power_save
int wapi_get_power_save(int sock, const char *ifname, bool *on);
参数:
- sock 文件描述符。
- ifname 网络接口名称。
- on 指向用于接收当前状态的布尔变量
返回值:
成功时返回 0,失败时返回负的错误码。