[ English | 简体中文 ]
无线网络接口(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_*扫描周围 APwapi_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_prioPTA 优先级。
返回值:
成功时返回 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,失败时返回负的错误码。