xref: /wlan-dirver/utils/sigma-dut/sigma_dut.h (revision 437476ee29398aab6fffda8072992035ca0ad8fe)
1cd4e3c3eSJouni Malinen /*
2cd4e3c3eSJouni Malinen  * Sigma Control API DUT (station/AP)
3cd4e3c3eSJouni Malinen  * Copyright (c) 2010-2011, Atheros Communications, Inc.
49c381f59SAmarnath Hullur Subramanyam  * Copyright (c) 2011-2017, Qualcomm Atheros, Inc.
50fee701cSJouni Malinen  * Copyright (c) 2018-2019, The Linux Foundation
6cd4e3c3eSJouni Malinen  * All Rights Reserved.
7cd4e3c3eSJouni Malinen  * Licensed under the Clear BSD license. See README for more details.
8cd4e3c3eSJouni Malinen  */
9cd4e3c3eSJouni Malinen 
10cd4e3c3eSJouni Malinen #ifndef SIGMA_DUT_H
11cd4e3c3eSJouni Malinen #define SIGMA_DUT_H
12cd4e3c3eSJouni Malinen 
139981b511SLior David #ifdef __GNUC__
149981b511SLior David #define _GNU_SOURCE	1
159981b511SLior David #endif
169981b511SLior David 
17cd4e3c3eSJouni Malinen #include <stdlib.h>
18cd4e3c3eSJouni Malinen #include <stdio.h>
19cd4e3c3eSJouni Malinen #include <stdarg.h>
20cd4e3c3eSJouni Malinen #include <string.h>
21cd4e3c3eSJouni Malinen #include <errno.h>
22cd4e3c3eSJouni Malinen #include <unistd.h>
23cd4e3c3eSJouni Malinen #include <time.h>
24cd4e3c3eSJouni Malinen #include <sys/time.h>
25cd4e3c3eSJouni Malinen #include <sys/types.h>
26cd4e3c3eSJouni Malinen #include <sys/socket.h>
27cd4e3c3eSJouni Malinen #include <net/if.h>
28cd4e3c3eSJouni Malinen #ifdef __QNXNTO__
29cd4e3c3eSJouni Malinen #include <sys/select.h>
30cd4e3c3eSJouni Malinen #include <net/if_ether.h>
31cd4e3c3eSJouni Malinen #endif /* __QNXNTO__ */
32cd4e3c3eSJouni Malinen #include <netinet/in.h>
33cd4e3c3eSJouni Malinen #include <arpa/inet.h>
34cd4e3c3eSJouni Malinen #ifdef CONFIG_TRAFFIC_AGENT
35cd4e3c3eSJouni Malinen #include <pthread.h>
36cd4e3c3eSJouni Malinen #endif /* CONFIG_TRAFFIC_AGENT */
37291d97daSPeng Xu #ifdef NL80211_SUPPORT
38291d97daSPeng Xu #include <netlink/genl/family.h>
39291d97daSPeng Xu #include <netlink/genl/ctrl.h>
40291d97daSPeng Xu #include <netlink/genl/genl.h>
41291d97daSPeng Xu #include "qca-vendor_copy.h"
42291d97daSPeng Xu #include "nl80211_copy.h"
43291d97daSPeng Xu #endif /* NL80211_SUPPORT */
442dfb1daeSVinay Gannevaram #ifdef ANDROID_WIFI_HAL
45*437476eeSSunil Dutt /* avoid duplicate definitions from wifi_hal.h causing issues */
46*437476eeSSunil Dutt #define u32 wifi_hal_u32
47*437476eeSSunil Dutt #define u16 wifi_hal_u16
48*437476eeSSunil Dutt #define u8 wifi_hal_u8
492dfb1daeSVinay Gannevaram #include "wifi_hal.h"
50*437476eeSSunil Dutt #undef u32
51*437476eeSSunil Dutt #undef u16
52*437476eeSSunil Dutt #undef u8
532dfb1daeSVinay Gannevaram #endif /*ANDROID_WIFI_HAL*/
54cd4e3c3eSJouni Malinen 
55764553e3SVeerendranath Jakkam #ifdef NL80211_SUPPORT
56764553e3SVeerendranath Jakkam #ifndef NL_CAPABILITY_VERSION_3_5_0
57764553e3SVeerendranath Jakkam #define nla_nest_start(msg, attrtype) \
58764553e3SVeerendranath Jakkam 	nla_nest_start(msg, NLA_F_NESTED | (attrtype))
59764553e3SVeerendranath Jakkam #endif
60764553e3SVeerendranath Jakkam #endif
61cd4e3c3eSJouni Malinen 
62cd4e3c3eSJouni Malinen #ifdef __GNUC__
63cd4e3c3eSJouni Malinen #define PRINTF_FORMAT(a,b) __attribute__ ((format (printf, (a), (b))))
64cd4e3c3eSJouni Malinen #else
65cd4e3c3eSJouni Malinen #define PRINTF_FORMAT(a,b)
66cd4e3c3eSJouni Malinen #endif
67cd4e3c3eSJouni Malinen 
68da5f35bcSJouni Malinen #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
69da5f35bcSJouni Malinen 
70cd4e3c3eSJouni Malinen #ifndef SIGMA_TMPDIR
71cd4e3c3eSJouni Malinen #define SIGMA_TMPDIR "/tmp"
72cd4e3c3eSJouni Malinen #endif /* SIGMA_TMPDIR */
73cd4e3c3eSJouni Malinen 
74cd4e3c3eSJouni Malinen #ifndef SIGMA_DUT_VER
75cd4e3c3eSJouni Malinen #define SIGMA_DUT_VER "(unknown)"
76cd4e3c3eSJouni Malinen #endif /* SIGMA_DUT_VER */
77cd4e3c3eSJouni Malinen 
78cd4e3c3eSJouni Malinen #ifndef ETH_ALEN
79cd4e3c3eSJouni Malinen #define ETH_ALEN 6
80cd4e3c3eSJouni Malinen #endif
81cd4e3c3eSJouni Malinen 
82d0ad6ef7SVeerendranath Jakkam #ifndef BIT_ULL
83d0ad6ef7SVeerendranath Jakkam #define BIT_ULL(nr)		(1ULL << (nr))
84d0ad6ef7SVeerendranath Jakkam #endif
85d0ad6ef7SVeerendranath Jakkam 
86cd4e3c3eSJouni Malinen #ifndef ETH_P_ARP
87cd4e3c3eSJouni Malinen #define ETH_P_ARP 0x0806
88cd4e3c3eSJouni Malinen #endif
89cd4e3c3eSJouni Malinen 
90a90032d3SAlexei Avshalom Lazar #ifndef ARRAY_SIZE
91a90032d3SAlexei Avshalom Lazar #define ARRAY_SIZE(x) (sizeof((x)) / (sizeof(((x)[0]))))
92a90032d3SAlexei Avshalom Lazar #endif
93a90032d3SAlexei Avshalom Lazar 
9447d709baSPeng Xu #define IPV6_ADDR_LEN 16
9547d709baSPeng Xu 
96cd4e3c3eSJouni Malinen struct sigma_dut;
97cd4e3c3eSJouni Malinen 
98cd4e3c3eSJouni Malinen #define MAX_PARAMS 100
99363f5584SAlejandro Vasquez #define MAX_RADIO 3
100cd4e3c3eSJouni Malinen 
101c2ae961eSAjit Vaishya #define NAN_AWARE_IFACE "wifi-aware0"
102c2ae961eSAjit Vaishya 
103cd4e3c3eSJouni Malinen /* Set default operating channel width 80 MHz */
104cd4e3c3eSJouni Malinen #define VHT_DEFAULT_OPER_CHWIDTH AP_80_VHT_OPER_CHWIDTH
105cd4e3c3eSJouni Malinen 
106cd4e3c3eSJouni Malinen typedef unsigned int u32;
1071bde7947SAnkita Bajaj typedef uint16_t u16;
108cd4e3c3eSJouni Malinen typedef unsigned char u8;
109cd4e3c3eSJouni Malinen 
110a90032d3SAlexei Avshalom Lazar struct ieee80211_hdr_3addr {
111a90032d3SAlexei Avshalom Lazar 	uint16_t frame_control;
112a90032d3SAlexei Avshalom Lazar 	uint16_t duration_id;
113a90032d3SAlexei Avshalom Lazar 	uint8_t addr1[ETH_ALEN];
114a90032d3SAlexei Avshalom Lazar 	uint8_t addr2[ETH_ALEN];
115a90032d3SAlexei Avshalom Lazar 	uint8_t addr3[ETH_ALEN];
116a90032d3SAlexei Avshalom Lazar 	uint16_t seq_ctrl;
117a90032d3SAlexei Avshalom Lazar } __attribute__((packed));
118a90032d3SAlexei Avshalom Lazar 
119a90032d3SAlexei Avshalom Lazar struct wfa_p2p_attribute {
120a90032d3SAlexei Avshalom Lazar 	uint8_t id;
121a90032d3SAlexei Avshalom Lazar 	uint16_t len;
122a90032d3SAlexei Avshalom Lazar 	uint8_t variable[0];
123a90032d3SAlexei Avshalom Lazar } __attribute__((packed));
124a90032d3SAlexei Avshalom Lazar 
1252e2097d0SLavanya Suresh struct dut_hw_modes {
1262e2097d0SLavanya Suresh 	u16 ht_capab;
1272e2097d0SLavanya Suresh 	u8 mcs_set[16];
1282e2097d0SLavanya Suresh 	u8 ampdu_params;
1292e2097d0SLavanya Suresh 	u32 vht_capab;
1302e2097d0SLavanya Suresh 	u8 vht_mcs_set[8];
1312e2097d0SLavanya Suresh };
1322e2097d0SLavanya Suresh 
133cd4e3c3eSJouni Malinen #define WPA_GET_BE32(a) ((((u32) (a)[0]) << 24) | (((u32) (a)[1]) << 16) | \
134cd4e3c3eSJouni Malinen 			 (((u32) (a)[2]) << 8) | ((u32) (a)[3]))
135cd4e3c3eSJouni Malinen #define WPA_PUT_BE32(a, val)					\
136cd4e3c3eSJouni Malinen 	do {							\
137cd4e3c3eSJouni Malinen 		(a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff);	\
138cd4e3c3eSJouni Malinen 		(a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff);	\
139cd4e3c3eSJouni Malinen 		(a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff);	\
140cd4e3c3eSJouni Malinen 		(a)[3] = (u8) (((u32) (val)) & 0xff);		\
141cd4e3c3eSJouni Malinen 	} while (0)
142cd4e3c3eSJouni Malinen 
143cd4e3c3eSJouni Malinen struct sigma_cmd {
144cd4e3c3eSJouni Malinen 	char *params[MAX_PARAMS];
145cd4e3c3eSJouni Malinen 	char *values[MAX_PARAMS];
146cd4e3c3eSJouni Malinen 	int count;
147cd4e3c3eSJouni Malinen };
148cd4e3c3eSJouni Malinen 
1493410aa5bSAlejandro Vasquez #define MAX_CMD_LEN 4096
150cd4e3c3eSJouni Malinen 
151cd4e3c3eSJouni Malinen struct sigma_conn {
152cd4e3c3eSJouni Malinen 	int s;
153cd4e3c3eSJouni Malinen 	struct sockaddr_in addr;
154cd4e3c3eSJouni Malinen 	socklen_t addrlen;
155cd4e3c3eSJouni Malinen 	char buf[MAX_CMD_LEN + 5];
156cd4e3c3eSJouni Malinen 	int pos;
157cd4e3c3eSJouni Malinen 	int waiting_completion;
158cd4e3c3eSJouni Malinen };
159cd4e3c3eSJouni Malinen 
1600e29cf2dSJouni Malinen enum sigma_cmd_result {
16153264f63SJouni Malinen 	STATUS_SENT_ERROR = -3,
1620e29cf2dSJouni Malinen 	ERROR_SEND_STATUS = -2,
1630e29cf2dSJouni Malinen 	INVALID_SEND_STATUS = -1,
1640e29cf2dSJouni Malinen 	STATUS_SENT = 0,
1650e29cf2dSJouni Malinen 	SUCCESS_SEND_STATUS = 1
1660e29cf2dSJouni Malinen };
167cd4e3c3eSJouni Malinen 
168cd4e3c3eSJouni Malinen struct sigma_cmd_handler {
169cd4e3c3eSJouni Malinen 	struct sigma_cmd_handler *next;
170cd4e3c3eSJouni Malinen 	char *cmd;
171cd4e3c3eSJouni Malinen 	int (*validate)(struct sigma_cmd *cmd);
172cd4e3c3eSJouni Malinen 	/* process return value:
173cd4e3c3eSJouni Malinen 	 * -2 = failed, caller will send status,ERROR
174cd4e3c3eSJouni Malinen 	 * -1 = failed, caller will send status,INVALID
1750e29cf2dSJouni Malinen 	 * 0 = response already sent
176cd4e3c3eSJouni Malinen 	 * 1 = success, caller will send status,COMPLETE
177cd4e3c3eSJouni Malinen 	 */
17826a5b76dSJouni Malinen 	enum sigma_cmd_result (*process)(struct sigma_dut *dut,
17926a5b76dSJouni Malinen 					 struct sigma_conn *conn,
180cd4e3c3eSJouni Malinen 					 struct sigma_cmd *cmd);
181cd4e3c3eSJouni Malinen };
182cd4e3c3eSJouni Malinen 
183cd4e3c3eSJouni Malinen #define P2P_GRP_ID_LEN 128
184cd4e3c3eSJouni Malinen #define IP_ADDR_STR_LEN 16
185cd4e3c3eSJouni Malinen 
186cd4e3c3eSJouni Malinen struct wfa_cs_p2p_group {
187cd4e3c3eSJouni Malinen 	struct wfa_cs_p2p_group *next;
188cd4e3c3eSJouni Malinen 	char ifname[IFNAMSIZ];
189cd4e3c3eSJouni Malinen 	int go;
190cd4e3c3eSJouni Malinen 	char grpid[P2P_GRP_ID_LEN];
191cd4e3c3eSJouni Malinen 	char ssid[33];
192cd4e3c3eSJouni Malinen };
193cd4e3c3eSJouni Malinen 
194cd4e3c3eSJouni Malinen #ifdef CONFIG_TRAFFIC_AGENT
195cd4e3c3eSJouni Malinen 
196cd4e3c3eSJouni Malinen #define MAX_SIGMA_STREAMS 16
197cd4e3c3eSJouni Malinen #define MAX_SIGMA_STATS 6000
198cd4e3c3eSJouni Malinen 
199cd4e3c3eSJouni Malinen struct sigma_frame_stats {
200cd4e3c3eSJouni Malinen 	unsigned int seqnum;
201cd4e3c3eSJouni Malinen 	unsigned int local_sec;
202cd4e3c3eSJouni Malinen 	unsigned int local_usec;
203cd4e3c3eSJouni Malinen 	unsigned int remote_sec;
204cd4e3c3eSJouni Malinen 	unsigned int remote_usec;
205cd4e3c3eSJouni Malinen };
206cd4e3c3eSJouni Malinen 
207cd4e3c3eSJouni Malinen struct sigma_stream {
208cd4e3c3eSJouni Malinen 	enum sigma_stream_profile {
209cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_FILE_TRANSFER,
210cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_MULTICAST,
211cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_IPTV,
212cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_TRANSACTION,
213cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_START_SYNC,
214cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_UAPSD
215cd4e3c3eSJouni Malinen 	} profile;
216cd4e3c3eSJouni Malinen 	int sender;
217cd4e3c3eSJouni Malinen 	struct in_addr dst;
218cd4e3c3eSJouni Malinen 	int dst_port;
219cd4e3c3eSJouni Malinen 	struct in_addr src;
220cd4e3c3eSJouni Malinen 	int src_port;
221cd4e3c3eSJouni Malinen 	int frame_rate;
222cd4e3c3eSJouni Malinen 	int duration;
223c2493f83SJouni Malinen 	unsigned int payload_size;
224cd4e3c3eSJouni Malinen 	int start_delay;
225cd4e3c3eSJouni Malinen 	int max_cnt;
226cd4e3c3eSJouni Malinen 	enum sigma_traffic_class {
227cd4e3c3eSJouni Malinen 		SIGMA_TC_VOICE,
228cd4e3c3eSJouni Malinen 		SIGMA_TC_VIDEO,
229cd4e3c3eSJouni Malinen 		SIGMA_TC_BACKGROUND,
230cd4e3c3eSJouni Malinen 		SIGMA_TC_BEST_EFFORT
231cd4e3c3eSJouni Malinen 	} tc;
232cd4e3c3eSJouni Malinen 	int user_priority;
233cd4e3c3eSJouni Malinen 	int user_priority_set;
234cd4e3c3eSJouni Malinen 	int started;
235cd4e3c3eSJouni Malinen 	int no_timestamps;
236cd4e3c3eSJouni Malinen 
237cd4e3c3eSJouni Malinen 	int sock;
238cd4e3c3eSJouni Malinen 	pthread_t thr;
239cd4e3c3eSJouni Malinen 	int stop;
240cd4e3c3eSJouni Malinen 	int ta_send_in_progress;
241cd4e3c3eSJouni Malinen 	int trans_proto;
242cd4e3c3eSJouni Malinen 
243cd4e3c3eSJouni Malinen 	/* Statistics */
244cd4e3c3eSJouni Malinen 	int tx_act_frames; /*
245cd4e3c3eSJouni Malinen 			    * Number of frames generated by the traffic
246cd4e3c3eSJouni Malinen 			    * generator application. The name is defined in the
247cd4e3c3eSJouni Malinen 			    * Sigma CAPI spec.
248cd4e3c3eSJouni Malinen 			    */
249cd4e3c3eSJouni Malinen 	int tx_frames;
250cd4e3c3eSJouni Malinen 	int rx_frames;
251cd4e3c3eSJouni Malinen 	unsigned long long tx_payload_bytes;
252cd4e3c3eSJouni Malinen 	unsigned long long rx_payload_bytes;
253cd4e3c3eSJouni Malinen 	int out_of_seq_frames;
254cd4e3c3eSJouni Malinen 	struct sigma_frame_stats *stats;
255cd4e3c3eSJouni Malinen 	unsigned int num_stats;
256cd4e3c3eSJouni Malinen 	unsigned int stream_id;
257cd4e3c3eSJouni Malinen 
258cd4e3c3eSJouni Malinen 	/* U-APSD */
259cd4e3c3eSJouni Malinen 	unsigned int sta_id;
260cd4e3c3eSJouni Malinen 	unsigned int rx_cookie;
261cd4e3c3eSJouni Malinen 	unsigned int uapsd_sta_tc;
262cd4e3c3eSJouni Malinen 	unsigned int uapsd_rx_state;
263cd4e3c3eSJouni Malinen 	unsigned int uapsd_tx_state;
264cd4e3c3eSJouni Malinen 	unsigned int tx_stop_cnt;
265cd4e3c3eSJouni Malinen 	unsigned int tx_hello_cnt;
266cd4e3c3eSJouni Malinen 	pthread_t uapsd_send_thr;
267cd4e3c3eSJouni Malinen 	pthread_cond_t tx_thr_cond;
268cd4e3c3eSJouni Malinen 	pthread_mutex_t tx_thr_mutex;
269cd4e3c3eSJouni Malinen 	int reset_rx;
270cd4e3c3eSJouni Malinen 	int num_retry;
271cd4e3c3eSJouni Malinen 	char ifname[IFNAMSIZ]; /* ifname from the command */
272cd4e3c3eSJouni Malinen 	struct sigma_dut *dut; /* for traffic agent thread to access context */
27379594049SPradeep Reddy POTTETI 	/* console */
27479594049SPradeep Reddy POTTETI 	char test_name[9]; /* test case name */
27579594049SPradeep Reddy POTTETI 	int can_quit;
27679594049SPradeep Reddy POTTETI 	int reset;
277cd4e3c3eSJouni Malinen };
278cd4e3c3eSJouni Malinen 
279cd4e3c3eSJouni Malinen #endif /* CONFIG_TRAFFIC_AGENT */
280cd4e3c3eSJouni Malinen 
281bc180dc5SAlexei Avshalom Lazar /* extended scheduling test */
282bc180dc5SAlexei Avshalom Lazar enum sigma_ese_type {
283bc180dc5SAlexei Avshalom Lazar 	ESE_CBAP,
284bc180dc5SAlexei Avshalom Lazar 	ESE_SP,
285bc180dc5SAlexei Avshalom Lazar };
286bc180dc5SAlexei Avshalom Lazar 
287bc180dc5SAlexei Avshalom Lazar struct sigma_ese_alloc {
288bc180dc5SAlexei Avshalom Lazar 	unsigned int percent_bi;
289bc180dc5SAlexei Avshalom Lazar 	enum sigma_ese_type type;
290bc180dc5SAlexei Avshalom Lazar 	unsigned int src_aid, dst_aid;
291bc180dc5SAlexei Avshalom Lazar };
292bc180dc5SAlexei Avshalom Lazar 
293bc180dc5SAlexei Avshalom Lazar #define ESE_BCAST_AID	255
294bc180dc5SAlexei Avshalom Lazar #define MAX_ESE_ALLOCS	4
295cd4e3c3eSJouni Malinen 
296cd4e3c3eSJouni Malinen #define NUM_AP_AC 4
297cd4e3c3eSJouni Malinen #define AP_AC_BE 0
298cd4e3c3eSJouni Malinen #define AP_AC_BK 1
299cd4e3c3eSJouni Malinen #define AP_AC_VI 2
300cd4e3c3eSJouni Malinen #define AP_AC_VO 3
301cd4e3c3eSJouni Malinen 
302b7b297f2SAdil Saeed Musthafa #define MAX_WLAN_TAGS 3
30369063725SAdil Saeed Musthafa #define MBO_MAX_PREF_BSSIDS 10
3044ec61bd9SAdil Saeed Musthafa #define MAX_FT_BSS_LIST 10
305b7b297f2SAdil Saeed Musthafa 
3068863ec7cSPeng Xu #define TRANSPORT_PROTO_TYPE_TCP 0x06
3078863ec7cSPeng Xu #define TRANSPORT_PROTO_TYPE_UDP 0x11
3088863ec7cSPeng Xu #define NAN_TRANSPORT_PORT_DEFAULT 7000
3098863ec7cSPeng Xu #define NAN_TRANSPORT_PROTOCOL_DEFAULT TRANSPORT_PROTO_TYPE_TCP
3108863ec7cSPeng Xu 
31157fa3d83SJouni Malinen enum value_not_set_enabled_disabled {
31257fa3d83SJouni Malinen 	VALUE_NOT_SET,
31357fa3d83SJouni Malinen 	VALUE_ENABLED,
31457fa3d83SJouni Malinen 	VALUE_DISABLED
31557fa3d83SJouni Malinen };
31657fa3d83SJouni Malinen 
3174b0cdee4SPradeep Reddy Potteti enum sec_ch_offset {
3184b0cdee4SPradeep Reddy Potteti 	SEC_CH_NO,
3194b0cdee4SPradeep Reddy Potteti 	SEC_CH_40ABOVE,
3204b0cdee4SPradeep Reddy Potteti 	SEC_CH_40BELOW
3214b0cdee4SPradeep Reddy Potteti };
3224b0cdee4SPradeep Reddy Potteti 
32369063725SAdil Saeed Musthafa struct mbo_pref_ap {
32469063725SAdil Saeed Musthafa 	int ap_ne_class;
32569063725SAdil Saeed Musthafa 	int ap_ne_op_ch;
32669063725SAdil Saeed Musthafa 	int ap_ne_pref;
32769063725SAdil Saeed Musthafa 	unsigned char mac_addr[ETH_ALEN];
32869063725SAdil Saeed Musthafa };
32969063725SAdil Saeed Musthafa 
330291d97daSPeng Xu #ifdef NL80211_SUPPORT
331291d97daSPeng Xu #define SOCK_BUF_SIZE (32 * 1024)
332291d97daSPeng Xu struct nl80211_ctx {
333291d97daSPeng Xu 	struct nl_sock *sock;
334291d97daSPeng Xu 	int netlink_familyid;
335291d97daSPeng Xu 	int nlctrl_familyid;
336291d97daSPeng Xu 	size_t sock_buf_size;
337291d97daSPeng Xu };
338291d97daSPeng Xu #endif /* NL80211_SUPPORT */
339291d97daSPeng Xu 
34033f700cfSAlexei Avshalom Lazar /* hardcoded long WSC IE values to force fragmentation */
34133f700cfSAlexei Avshalom Lazar #define WPS_LONG_DEVICE_NAME	"Qti1234511adtest1234567890123456"
34233f700cfSAlexei Avshalom Lazar #define WPS_LONG_MANUFACTURER	"Qti1234511adQti1234511adQti1234511adQti1234511adQti1234511ad"
34333f700cfSAlexei Avshalom Lazar #define WPS_LONG_MODEL_NAME	"Qti1234511adtest1234567890123456"
34433f700cfSAlexei Avshalom Lazar #define WPS_LONG_MODEL_NUMBER	"11111111111111111111111111111111"
34533f700cfSAlexei Avshalom Lazar #define WPS_LONG_SERIAL_NUMBER	"22222222222222222222222222222222"
34633f700cfSAlexei Avshalom Lazar 
347e4fde73dSJouni Malinen enum akm_suite_values {
348e4fde73dSJouni Malinen 	AKM_WPA_EAP = 1,
349e4fde73dSJouni Malinen 	AKM_WPA_PSK = 2,
350e4fde73dSJouni Malinen 	AKM_FT_EAP = 3,
351e4fde73dSJouni Malinen 	AKM_FT_PSK = 4,
352e4fde73dSJouni Malinen 	AKM_EAP_SHA256 = 5,
353e4fde73dSJouni Malinen 	AKM_PSK_SHA256 = 6,
354e4fde73dSJouni Malinen 	AKM_SAE = 8,
355e4fde73dSJouni Malinen 	AKM_FT_SAE = 9,
356e4fde73dSJouni Malinen 	AKM_SUITE_B = 12,
357e4fde73dSJouni Malinen 	AKM_FT_SUITE_B = 13,
358e4fde73dSJouni Malinen 	AKM_FILS_SHA256 = 14,
359e4fde73dSJouni Malinen 	AKM_FILS_SHA384 = 15,
360e4fde73dSJouni Malinen 	AKM_FT_FILS_SHA256 = 16,
361e4fde73dSJouni Malinen 	AKM_FT_FILS_SHA384 = 17,
362e4fde73dSJouni Malinen 
363e4fde73dSJouni Malinen };
364e4fde73dSJouni Malinen 
365cd4e3c3eSJouni Malinen struct sigma_dut {
366d2095485SJouni Malinen 	const char *main_ifname;
367b21f0542SJouni Malinen 	char *main_ifname_2g;
368b21f0542SJouni Malinen 	char *main_ifname_5g;
369d2095485SJouni Malinen 	const char *station_ifname;
370b21f0542SJouni Malinen 	char *station_ifname_2g;
371b21f0542SJouni Malinen 	char *station_ifname_5g;
3721f76fa6dSJouni Malinen 	char *p2p_ifname_buf;
373b21f0542SJouni Malinen 	int use_5g;
37478217db5SJouni Malinen 	int sta_2g_started;
37578217db5SJouni Malinen 	int sta_5g_started;
376d2095485SJouni Malinen 
377cd4e3c3eSJouni Malinen 	int s; /* server TCP socket */
378cd4e3c3eSJouni Malinen 	int debug_level;
379cd4e3c3eSJouni Malinen 	int stdout_debug;
380cd4e3c3eSJouni Malinen 	struct sigma_cmd_handler *cmds;
3810fee701cSJouni Malinen 	int response_sent;
382cd4e3c3eSJouni Malinen 
383c9bc15d1SAlexei Avshalom Lazar 	const char *sigma_tmpdir;
384c9bc15d1SAlexei Avshalom Lazar 
385cd4e3c3eSJouni Malinen 	/* Default timeout value (seconds) for commands */
386cd4e3c3eSJouni Malinen 	unsigned int default_timeout;
387f7a2cbf9SVinita S. Maloo 	unsigned int user_config_timeout;
388cd4e3c3eSJouni Malinen 
389cd4e3c3eSJouni Malinen 	int next_streamid;
390cd4e3c3eSJouni Malinen 
391cd4e3c3eSJouni Malinen 	const char *bridge; /* bridge interface to use in AP mode */
392cd4e3c3eSJouni Malinen 
393cd4e3c3eSJouni Malinen 	enum sigma_mode {
394cd4e3c3eSJouni Malinen 		SIGMA_MODE_UNKNOWN,
395cd4e3c3eSJouni Malinen 		SIGMA_MODE_STATION,
396cd4e3c3eSJouni Malinen 		SIGMA_MODE_AP,
397cd4e3c3eSJouni Malinen 		SIGMA_MODE_SNIFFER
398cd4e3c3eSJouni Malinen 	} mode;
399cd4e3c3eSJouni Malinen 
400cd4e3c3eSJouni Malinen 	/*
401cd4e3c3eSJouni Malinen 	 * Local cached values to handle API that does not provide all the
402cd4e3c3eSJouni Malinen 	 * needed information with commands that actually trigger some
403cd4e3c3eSJouni Malinen 	 * operations.
404cd4e3c3eSJouni Malinen 	 */
405cd4e3c3eSJouni Malinen 	int listen_chn;
406cd4e3c3eSJouni Malinen 	int persistent;
407cd4e3c3eSJouni Malinen 	int intra_bss;
408cd4e3c3eSJouni Malinen 	int noa_duration;
409cd4e3c3eSJouni Malinen 	int noa_interval;
410cd4e3c3eSJouni Malinen 	int noa_count;
411cd4e3c3eSJouni Malinen 	enum wfa_cs_wps_method {
412cd4e3c3eSJouni Malinen 		WFA_CS_WPS_NOT_READY,
413cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PBC,
414cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PIN_DISPLAY,
415cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PIN_LABEL,
416cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PIN_KEYPAD
417cd4e3c3eSJouni Malinen 	} wps_method;
418cd4e3c3eSJouni Malinen 	char wps_pin[9];
419cd4e3c3eSJouni Malinen 
420cd4e3c3eSJouni Malinen 	struct wfa_cs_p2p_group *groups;
421cd4e3c3eSJouni Malinen 
422cd4e3c3eSJouni Malinen 	char infra_ssid[33];
423cd4e3c3eSJouni Malinen 	int infra_network_id;
424cd4e3c3eSJouni Malinen 
425cd4e3c3eSJouni Malinen 	enum p2p_mode {
426cd4e3c3eSJouni Malinen 		P2P_IDLE, P2P_DISCOVER, P2P_LISTEN, P2P_DISABLE
427cd4e3c3eSJouni Malinen 	} p2p_mode;
428cd4e3c3eSJouni Malinen 
429cd4e3c3eSJouni Malinen 	int go;
430cd4e3c3eSJouni Malinen 	int p2p_client;
431016ae6c8SJouni Malinen 	const char *p2p_ifname;
432cd4e3c3eSJouni Malinen 
433cd4e3c3eSJouni Malinen 	int client_uapsd;
434cd4e3c3eSJouni Malinen 
435cd4e3c3eSJouni Malinen 	char arp_ipaddr[IP_ADDR_STR_LEN];
436cd4e3c3eSJouni Malinen 	char arp_ifname[IFNAMSIZ + 1];
437cd4e3c3eSJouni Malinen 
438cd4e3c3eSJouni Malinen 	enum sta_pmf {
439cd4e3c3eSJouni Malinen 		STA_PMF_DISABLED,
440cd4e3c3eSJouni Malinen 		STA_PMF_OPTIONAL,
441cd4e3c3eSJouni Malinen 		STA_PMF_REQUIRED
442cd4e3c3eSJouni Malinen 	} sta_pmf;
443cd4e3c3eSJouni Malinen 
4446a7c9b48SJouni Malinen 	int sta_ft_ds;
4456a7c9b48SJouni Malinen 
446cd4e3c3eSJouni Malinen 	int no_tpk_expiration;
447cd4e3c3eSJouni Malinen 
448cd4e3c3eSJouni Malinen 	int er_oper_performed;
449cd4e3c3eSJouni Malinen 	char er_oper_bssid[20];
450cd4e3c3eSJouni Malinen 	int amsdu_size;
451cd4e3c3eSJouni Malinen 	int back_rcv_buf;
452cd4e3c3eSJouni Malinen 
453cd4e3c3eSJouni Malinen 	int testbed_flag_txsp;
454cd4e3c3eSJouni Malinen 	int testbed_flag_rxsp;
455cd4e3c3eSJouni Malinen 	int chwidth;
456cd4e3c3eSJouni Malinen 
4578179fee6SJouni Malinen 	unsigned int akm_values;
4588179fee6SJouni Malinen 
459cd4e3c3eSJouni Malinen 	/* AP configuration */
460cd4e3c3eSJouni Malinen 	char ap_ssid[33];
461b7b297f2SAdil Saeed Musthafa 	/*
462b7b297f2SAdil Saeed Musthafa 	 * WLAN-TAG of 1 will use 'ap_' variables;
463b7b297f2SAdil Saeed Musthafa 	 * tag higher than 1 will use 'ap_tag_' variables.
464b7b297f2SAdil Saeed Musthafa 	 */
465b7b297f2SAdil Saeed Musthafa 	char ap_tag_ssid[MAX_WLAN_TAGS - 1][33];
466cd4e3c3eSJouni Malinen 	enum ap_mode {
467cd4e3c3eSJouni Malinen 		AP_11a,
468cd4e3c3eSJouni Malinen 		AP_11g,
469cd4e3c3eSJouni Malinen 		AP_11b,
470cd4e3c3eSJouni Malinen 		AP_11na,
471cd4e3c3eSJouni Malinen 		AP_11ng,
472cd4e3c3eSJouni Malinen 		AP_11ac,
4732712cc86SAlexei Avshalom Lazar 		AP_11ad,
4744401ceebSPriyadharshini Gowthaman 		AP_11ax,
475cd4e3c3eSJouni Malinen 		AP_inval
476cd4e3c3eSJouni Malinen 	} ap_mode;
477cd4e3c3eSJouni Malinen 	int ap_channel;
478cd4e3c3eSJouni Malinen 	int ap_rts;
479cd4e3c3eSJouni Malinen 	int ap_frgmnt;
480cd4e3c3eSJouni Malinen 	int ap_bcnint;
481d2e9bb3eSJouni Malinen 	int ap_start_disabled;
482cd4e3c3eSJouni Malinen 	struct qos_params {
483cd4e3c3eSJouni Malinen 		int ac;
484cd4e3c3eSJouni Malinen 		int cwmin;
485cd4e3c3eSJouni Malinen 		int cwmax;
486cd4e3c3eSJouni Malinen 		int aifs;
487cd4e3c3eSJouni Malinen 		int txop;
488cd4e3c3eSJouni Malinen 		int acm;
489cd4e3c3eSJouni Malinen 	} ap_qos[NUM_AP_AC], ap_sta_qos[NUM_AP_AC];
49057fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_noack;
49157fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_ampdu;
49257fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_amsdu;
49357fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_rx_amsdu;
494cd4e3c3eSJouni Malinen 	int ap_ampdu_exp;
495baae968eSPravas Kumar Panda 	int ap_max_mpdu_len;
49657fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_addba_reject;
497cd4e3c3eSJouni Malinen 	int ap_fixed_rate;
498cd4e3c3eSJouni Malinen 	int ap_mcs;
499cd4e3c3eSJouni Malinen 	int ap_rx_streams;
500cd4e3c3eSJouni Malinen 	int ap_tx_streams;
501cd4e3c3eSJouni Malinen 	unsigned int ap_vhtmcs_map;
50257fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_ldpc;
50357fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_sig_rts;
504cd4e3c3eSJouni Malinen 	enum ap_chwidth {
505cd4e3c3eSJouni Malinen 		AP_20,
506cd4e3c3eSJouni Malinen 		AP_40,
507cd4e3c3eSJouni Malinen 		AP_80,
508cd4e3c3eSJouni Malinen 		AP_160,
50963ab8483Spriyadharshini gowthaman 		AP_80_80,
510cd4e3c3eSJouni Malinen 		AP_AUTO
511cd4e3c3eSJouni Malinen 	} ap_chwidth;
512bf8af292SPradeep Reddy Potteti 	enum ap_chwidth default_11na_ap_chwidth;
513bf8af292SPradeep Reddy Potteti 	enum ap_chwidth default_11ng_ap_chwidth;
514cd4e3c3eSJouni Malinen 	int ap_tx_stbc;
51557fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_dyn_bw_sig;
516cd4e3c3eSJouni Malinen 	int ap_sgi80;
517cd4e3c3eSJouni Malinen 	int ap_p2p_mgmt;
518cd4e3c3eSJouni Malinen 	enum ap_key_mgmt {
519cd4e3c3eSJouni Malinen 		AP_OPEN,
520cd4e3c3eSJouni Malinen 		AP_WPA2_PSK,
521cd4e3c3eSJouni Malinen 		AP_WPA_PSK,
522cd4e3c3eSJouni Malinen 		AP_WPA2_EAP,
523cd4e3c3eSJouni Malinen 		AP_WPA_EAP,
524cd4e3c3eSJouni Malinen 		AP_WPA2_EAP_MIXED,
52530824df7SJouni Malinen 		AP_WPA2_PSK_MIXED,
52630824df7SJouni Malinen 		AP_WPA2_SAE,
52730824df7SJouni Malinen 		AP_WPA2_PSK_SAE,
528ad395a20SJouni Malinen 		AP_SUITEB,
529147b3c39SJouni Malinen 		AP_WPA2_OWE,
5304cf699f1SJouni Malinen 		AP_WPA2_EAP_OSEN,
5316be21c87SJouni Malinen 		AP_WPA2_FT_EAP,
5326be21c87SJouni Malinen 		AP_WPA2_FT_PSK,
5336be21c87SJouni Malinen 		AP_WPA2_EAP_SHA256,
5346be21c87SJouni Malinen 		AP_WPA2_PSK_SHA256,
5356be21c87SJouni Malinen 		AP_WPA2_ENT_FT_EAP,
536c2b9121eSJouni Malinen 		AP_OSEN,
537cd4e3c3eSJouni Malinen 	} ap_key_mgmt;
538b7b297f2SAdil Saeed Musthafa 	enum ap_tag_key_mgmt {
539cd4e3c3eSJouni Malinen 		AP2_OPEN,
540b7b297f2SAdil Saeed Musthafa 		AP2_OSEN,
541353ba8b1SJouni Malinen 		AP2_WPA2_PSK,
542353ba8b1SJouni Malinen 		AP2_WPA2_OWE,
543b7b297f2SAdil Saeed Musthafa 	} ap_tag_key_mgmt[MAX_WLAN_TAGS - 1];
544cd4e3c3eSJouni Malinen 	int ap_add_sha256;
545de81f395Spriyadharshini gowthaman 	int ap_add_sha384;
54624dc7e40SSarvepalli, Rajesh Babu 	int ap_rsn_preauth;
547cd4e3c3eSJouni Malinen 	enum ap_pmf {
548cd4e3c3eSJouni Malinen 		AP_PMF_DISABLED,
549cd4e3c3eSJouni Malinen 		AP_PMF_OPTIONAL,
550cd4e3c3eSJouni Malinen 		AP_PMF_REQUIRED
551cd4e3c3eSJouni Malinen 	} ap_pmf;
552cd4e3c3eSJouni Malinen 	enum ap_cipher {
5532ba24498SJouni Malinen 		AP_NO_GROUP_CIPHER_SET,
554cd4e3c3eSJouni Malinen 		AP_CCMP,
555cd4e3c3eSJouni Malinen 		AP_TKIP,
556cd4e3c3eSJouni Malinen 		AP_WEP,
557cd4e3c3eSJouni Malinen 		AP_PLAIN,
558ad395a20SJouni Malinen 		AP_CCMP_TKIP,
559ad395a20SJouni Malinen 		AP_GCMP_256,
5603d633daeSJouni Malinen 		AP_GCMP_128,
5613d633daeSJouni Malinen 		AP_CCMP_256,
562d538c78eSJouni Malinen 		AP_CCMP_128_GCMP_256,
5632ba24498SJouni Malinen 	} ap_cipher, ap_group_cipher;
5643d633daeSJouni Malinen 	enum ap_group_mgmt_cipher {
5653d633daeSJouni Malinen 		AP_NO_GROUP_MGMT_CIPHER_SET,
5663d633daeSJouni Malinen 		AP_BIP_GMAC_256,
5673d633daeSJouni Malinen 		AP_BIP_CMAC_256,
5683d633daeSJouni Malinen 		AP_BIP_GMAC_128,
5693d633daeSJouni Malinen 		AP_BIP_CMAC_128,
5703d633daeSJouni Malinen 	} ap_group_mgmt_cipher;
571ed670f4cSJouni Malinen 	char *ap_sae_groups;
5722f524ce8SJouni Malinen 	int sae_anti_clogging_threshold;
573b347db0fSJouni Malinen 	int sae_reflection;
5740a9876c1SJouni Malinen 	int ap_sae_commit_status;
5750a9876c1SJouni Malinen 	int ap_sae_pk_omit;
5763c740ab7SJouni Malinen 	int sae_confirm_immediate;
5772126f422SJouni Malinen 	char ap_passphrase[101];
57863370625SJouni Malinen 	char ap_psk[65];
57909550de6SJouni Malinen 	char *ap_sae_passwords;
58059fab0f4SJouni Malinen 	char *ap_sae_pk_modifier;
58159fab0f4SJouni Malinen 	char *ap_sae_pk_keypair;
582fbf12efeSJouni Malinen 	char *ap_sae_pk_keypair_sig;
58359fab0f4SJouni Malinen 	int ap_sae_pk;
584cd4e3c3eSJouni Malinen 	char ap_wepkey[27];
585cd4e3c3eSJouni Malinen 	char ap_radius_ipaddr[20];
586cd4e3c3eSJouni Malinen 	int ap_radius_port;
587cd4e3c3eSJouni Malinen 	char ap_radius_password[200];
588cd4e3c3eSJouni Malinen 	char ap2_radius_ipaddr[20];
589cd4e3c3eSJouni Malinen 	int ap2_radius_port;
590cd4e3c3eSJouni Malinen 	char ap2_radius_password[200];
591cd4e3c3eSJouni Malinen 	int ap_tdls_prohibit;
592cd4e3c3eSJouni Malinen 	int ap_tdls_prohibit_chswitch;
593cd4e3c3eSJouni Malinen 	int ap_hs2;
594cd4e3c3eSJouni Malinen 	int ap_dgaf_disable;
595cd4e3c3eSJouni Malinen 	int ap_p2p_cross_connect;
596cd4e3c3eSJouni Malinen 	int ap_oper_name;
597cd4e3c3eSJouni Malinen 	int ap_wan_metrics;
598cd4e3c3eSJouni Malinen 	int ap_conn_capab;
599cd4e3c3eSJouni Malinen 	int ap_oper_class;
600cd4e3c3eSJouni Malinen 
601cd4e3c3eSJouni Malinen 	int ap_interworking;
602cd4e3c3eSJouni Malinen 	int ap_access_net_type;
603cd4e3c3eSJouni Malinen 	int ap_internet;
604cd4e3c3eSJouni Malinen 	int ap_venue_group;
605cd4e3c3eSJouni Malinen 	int ap_venue_type;
606cd4e3c3eSJouni Malinen 	char ap_hessid[20];
607cd4e3c3eSJouni Malinen 	char ap_roaming_cons[100];
608cd4e3c3eSJouni Malinen 	int ap_venue_name;
609cd4e3c3eSJouni Malinen 	int ap_net_auth_type;
610cd4e3c3eSJouni Malinen 	int ap_nai_realm_list;
611cd4e3c3eSJouni Malinen 	char ap_domain_name_list[1000];
612cd4e3c3eSJouni Malinen 	int ap_ip_addr_type_avail;
613cd4e3c3eSJouni Malinen 	char ap_plmn_mcc[10][4];
614cd4e3c3eSJouni Malinen 	char ap_plmn_mnc[10][4];
615cd4e3c3eSJouni Malinen 	int ap_gas_cb_delay;
616cd4e3c3eSJouni Malinen 	int ap_proxy_arp;
617cd4e3c3eSJouni Malinen 	int ap2_proxy_arp;
618dbbc2c48SJouni Malinen 	int ap2_osu;
619cd4e3c3eSJouni Malinen 	int ap_l2tif;
620cd4e3c3eSJouni Malinen 	int ap_anqpserver;
621cd4e3c3eSJouni Malinen 	int ap_anqpserver_on;
622cd4e3c3eSJouni Malinen 	int ap_osu_provider_list;
62393a837f9SJouni Malinen 	int ap_osu_provider_nai_list;
624cd4e3c3eSJouni Malinen 	int ap_qos_map_set;
625cd4e3c3eSJouni Malinen 	int ap_bss_load;
626cd4e3c3eSJouni Malinen 	char ap_osu_server_uri[10][256];
627cd4e3c3eSJouni Malinen 	char ap_osu_ssid[33];
628cd4e3c3eSJouni Malinen 	int ap_osu_method[10];
629cd4e3c3eSJouni Malinen 	int ap_osu_icon_tag;
63054a89b08SJouni Malinen 	int ap_venue_url;
631f7ff42b7SJouni Malinen 	int ap_advice_of_charge;
632ac10453cSJouni Malinen 	int ap_oper_icon_metadata;
633ac367141SJouni Malinen 	int ap_tnc_file_name;
634ac367141SJouni Malinen 	unsigned int ap_tnc_time_stamp;
635cd4e3c3eSJouni Malinen 
636cd4e3c3eSJouni Malinen 	int ap_fake_pkhash;
637cd4e3c3eSJouni Malinen 	int ap_disable_protection;
638cd4e3c3eSJouni Malinen 	int ap_allow_vht_wep;
639cd4e3c3eSJouni Malinen 	int ap_allow_vht_tkip;
640cd4e3c3eSJouni Malinen 
641cd4e3c3eSJouni Malinen 	enum ap_vht_chwidth {
642cd4e3c3eSJouni Malinen 		AP_20_40_VHT_OPER_CHWIDTH,
643cd4e3c3eSJouni Malinen 		AP_80_VHT_OPER_CHWIDTH,
644cd4e3c3eSJouni Malinen 		AP_160_VHT_OPER_CHWIDTH
645cd4e3c3eSJouni Malinen 	} ap_vht_chwidth;
646cd4e3c3eSJouni Malinen 	int ap_txBF;
647cd4e3c3eSJouni Malinen 	int ap_mu_txBF;
648fba27db5SPradeep Reddy POTTETI 	enum ap_regulatory_mode {
649fba27db5SPradeep Reddy POTTETI 		AP_80211D_MODE_DISABLED,
650fba27db5SPradeep Reddy POTTETI 		AP_80211D_MODE_ENABLED,
651fba27db5SPradeep Reddy POTTETI 	} ap_regulatory_mode;
652fba27db5SPradeep Reddy POTTETI 	enum ap_dfs_mode {
653fba27db5SPradeep Reddy POTTETI 		AP_DFS_MODE_DISABLED,
654fba27db5SPradeep Reddy POTTETI 		AP_DFS_MODE_ENABLED,
655fba27db5SPradeep Reddy POTTETI 	} ap_dfs_mode;
656264d544aSpriyadharshini gowthaman 	int ap_ndpa_frame;
657cd4e3c3eSJouni Malinen 
6588e26ff4aSpriyadharshini gowthaman 	int ap_lci;
6598e26ff4aSpriyadharshini gowthaman 	char ap_val_lci[33];
660c2357bdcSpriyadharshini gowthaman 	char ap_infoz[17];
6618e26ff4aSpriyadharshini gowthaman 	int ap_lcr;
6628e26ff4aSpriyadharshini gowthaman 	char ap_val_lcr[400];
6638e26ff4aSpriyadharshini gowthaman 	int ap_rrm;
6648e26ff4aSpriyadharshini gowthaman 	int ap_rtt;
6658e26ff4aSpriyadharshini gowthaman 	int ap_neighap; /* number of configured neighbor APs */
6668e26ff4aSpriyadharshini gowthaman 	unsigned char ap_val_neighap[3][6];
6678e26ff4aSpriyadharshini gowthaman 	int ap_opchannel; /* number of oper channels */
6688e26ff4aSpriyadharshini gowthaman 	int ap_val_opchannel[3];
6698e26ff4aSpriyadharshini gowthaman 	int ap_scan;
670c2357bdcSpriyadharshini gowthaman 	int ap_fqdn_held;
671c2357bdcSpriyadharshini gowthaman 	int ap_fqdn_supl;
672a27b5b6eSpriyadharshini gowthaman 	int ap_msnt_type;
673a27b5b6eSpriyadharshini gowthaman 
674b4e05fc1Spriyadharshini gowthaman 	int ap_mbo;
675b4e05fc1Spriyadharshini gowthaman 	int ap_ne_class;
676b4e05fc1Spriyadharshini gowthaman 	int ap_ne_op_ch;
677b4e05fc1Spriyadharshini gowthaman 	int ap_set_bssidpref;
678b4e05fc1Spriyadharshini gowthaman 	int ap_btmreq_disassoc_imnt;
679b4e05fc1Spriyadharshini gowthaman 	int ap_btmreq_term_bit;
6807d9ae389SAdil Saeed Musthafa 	int ap_disassoc_timer;
6817d9ae389SAdil Saeed Musthafa 	int ap_btmreq_bss_term_dur;
682604c8261SAdil Saeed Musthafa 	enum reg_domain {
683604c8261SAdil Saeed Musthafa 		REG_DOMAIN_NOT_SET,
684604c8261SAdil Saeed Musthafa 		REG_DOMAIN_LOCAL,
685604c8261SAdil Saeed Musthafa 		REG_DOMAIN_GLOBAL
686604c8261SAdil Saeed Musthafa 	} ap_reg_domain;
687cf752fa7SAdil Saeed Musthafa 	char ap_mobility_domain[10];
688023108aeSAdil Saeed Musthafa 	unsigned char ap_cell_cap_pref;
6894ec61bd9SAdil Saeed Musthafa 	int ap_ft_oa;
6909f943317SJouni Malinen 	enum value_not_set_enabled_disabled ap_ft_ds;
6914ec61bd9SAdil Saeed Musthafa 	int ap_name;
69209d613e1Spriyadharshini gowthaman 	int ap_interface_5g;
69309d613e1Spriyadharshini gowthaman 	int ap_interface_2g;
694776562e2Spriyadharshini gowthaman 	int ap_assoc_delay;
69594062b58Spriyadharshini gowthaman 	int ap_btmreq_bss_term_tsf;
69600798a21Spriyadharshini gowthaman 	int ap_fils_dscv_int;
69700798a21Spriyadharshini gowthaman 	int ap_nairealm_int;
69800798a21Spriyadharshini gowthaman 	char ap_nairealm[33];
69900798a21Spriyadharshini gowthaman 	int ap_blechanutil;
70000798a21Spriyadharshini gowthaman 	int ap_ble_admit_cap;
70100798a21Spriyadharshini gowthaman 	int ap_datappdudura;
70200798a21Spriyadharshini gowthaman 	int ap_airtimefract;
70300798a21Spriyadharshini gowthaman 	char ap_dhcpserv_ipaddr[20];
70400798a21Spriyadharshini gowthaman 	int ap_dhcp_stop;
70500798a21Spriyadharshini gowthaman 	int ap_bawinsize;
70600798a21Spriyadharshini gowthaman 	int ap_blestacnt;
707cb22e43aSpriyadharshini gowthaman 	int ap_ul_availcap;
708cb22e43aSpriyadharshini gowthaman 	int ap_dl_availcap;
709de81f395Spriyadharshini gowthaman 	int ap_akm;
710da5f35bcSJouni Malinen 	unsigned int ap_akm_values;
711de81f395Spriyadharshini gowthaman 	int ap_pmksa;
712de81f395Spriyadharshini gowthaman 	int ap_pmksa_caching;
71305d005a3SJouni Malinen 	int ap_beacon_prot;
714c098c442SJouni Malinen 	u8 ap_transition_disable;
71563ab8483Spriyadharshini gowthaman 	int ap_80plus80;
7169149afc1Spriyadharshini gowthaman 	int ap_oper_chn;
7174ec61bd9SAdil Saeed Musthafa 
71869063725SAdil Saeed Musthafa 	struct mbo_pref_ap mbo_pref_aps[MBO_MAX_PREF_BSSIDS];
71969063725SAdil Saeed Musthafa 	struct mbo_pref_ap mbo_self_ap_tuple;
72069063725SAdil Saeed Musthafa 	int mbo_pref_ap_cnt;
7214ec61bd9SAdil Saeed Musthafa 	unsigned char ft_bss_mac_list[MAX_FT_BSS_LIST][ETH_ALEN];
7224ec61bd9SAdil Saeed Musthafa 	int ft_bss_mac_cnt;
723b4e05fc1Spriyadharshini gowthaman 
724c067edfbSPriyadharshini Gowthaman 	char *ar_ltf;
725c067edfbSPriyadharshini Gowthaman 
726bc948896SPriyadharshini Gowthaman 	int ap_numsounddim;
72778ee2ef2SPriyadharshini Gowthaman 	unsigned int he_mcsnssmap;
72878ee2ef2SPriyadharshini Gowthaman 	int he_ul_mcs;
72921f7440cSPriyadharshini Gowthaman 	int he_mmss;
73088d55c87SPriyadharshini Gowthaman 	int he_srctrl_allow;
731bc948896SPriyadharshini Gowthaman 
732ce7ba82fSPriyadharshini Gowthaman 	int ap_ocvc;
733ce7ba82fSPriyadharshini Gowthaman 
73400798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_oce;
73500798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_filsdscv;
73600798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_filshlp;
73700798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_broadcast_ssid;
73800798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_rnr;
73900798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_esp;
74000798a21Spriyadharshini gowthaman 
741c067edfbSPriyadharshini Gowthaman 	enum value_not_set_enabled_disabled ap_he_ulofdma;
742fe60c504SPriyadharshini Gowthaman 	enum value_not_set_enabled_disabled ap_he_dlofdma;
743670b3237SPriyadharshini Gowthaman 	enum value_not_set_enabled_disabled ap_bcc;
7446bc4c1eeSPriyadharshini Gowthaman 	enum value_not_set_enabled_disabled ap_he_frag;
74521895a57SPriyadharshini Gowthaman 	enum value_not_set_enabled_disabled ap_mu_edca;
74643d6b417SPriyadharshini Gowthaman 	enum value_not_set_enabled_disabled ap_he_rtsthrshld;
7478018c98dSPriyadharshini Gowthaman 	enum value_not_set_enabled_disabled ap_mbssid;
748ae0a605cSPriyadharshini Gowthaman 	enum value_not_set_enabled_disabled ap_twtresp;
74996d542e0SPriyadharshini Gowthaman 	enum value_not_set_enabled_disabled he_sounding;
7509b7dbe1aSPriyadharshini Gowthaman 	enum value_not_set_enabled_disabled he_set_sta_1x1;
751c067edfbSPriyadharshini Gowthaman 
752350f1913Spriyadharshini gowthaman 	enum ppdu {
753350f1913Spriyadharshini gowthaman 		PPDU_NOT_SET,
754350f1913Spriyadharshini gowthaman 		PPDU_MU,
755350f1913Spriyadharshini gowthaman 		PPDU_SU,
756350f1913Spriyadharshini gowthaman 		PPDU_ER,
757350f1913Spriyadharshini gowthaman 		PPDU_TB,
758fe60c504SPriyadharshini Gowthaman 		PPDU_HESU,
759350f1913Spriyadharshini gowthaman 	} ap_he_ppdu;
760350f1913Spriyadharshini gowthaman 
7611a686bd3SPriyadharshini Gowthaman 	enum bufsize {
7621a686bd3SPriyadharshini Gowthaman 		BA_BUFSIZE_NOT_SET,
7631a686bd3SPriyadharshini Gowthaman 		BA_BUFSIZE_64,
7641a686bd3SPriyadharshini Gowthaman 		BA_BUFSIZE_256,
7651a686bd3SPriyadharshini Gowthaman 	} ap_ba_bufsize;
7661a686bd3SPriyadharshini Gowthaman 
767dee79e2aSPriyadharshini Gowthaman 	enum mimo {
768dee79e2aSPriyadharshini Gowthaman 		MIMO_NOT_SET,
769dee79e2aSPriyadharshini Gowthaman 		MIMO_DL,
770dee79e2aSPriyadharshini Gowthaman 		MIMO_UL,
771dee79e2aSPriyadharshini Gowthaman 	} ap_he_mimo;
772dee79e2aSPriyadharshini Gowthaman 
773bc180dc5SAlexei Avshalom Lazar 	struct sigma_ese_alloc ap_ese_allocs[MAX_ESE_ALLOCS];
774bc180dc5SAlexei Avshalom Lazar 	int ap_num_ese_allocs;
775bc180dc5SAlexei Avshalom Lazar 
776cd4e3c3eSJouni Malinen 	const char *hostapd_debug_log;
7773e8267ecSAlexei Avshalom Lazar 	const char *wpa_supplicant_debug_log;
778cd4e3c3eSJouni Malinen 
779cd4e3c3eSJouni Malinen #ifdef CONFIG_TRAFFIC_AGENT
780cd4e3c3eSJouni Malinen 	/* Traffic Agent */
781cd4e3c3eSJouni Malinen 	struct sigma_stream streams[MAX_SIGMA_STREAMS];
782cd4e3c3eSJouni Malinen 	int stream_id;
783cd4e3c3eSJouni Malinen 	int num_streams;
784cd4e3c3eSJouni Malinen 	pthread_t thr;
785cd4e3c3eSJouni Malinen #endif /* CONFIG_TRAFFIC_AGENT */
786cd4e3c3eSJouni Malinen 
787c2493f83SJouni Malinen 	unsigned int throughput_pktsize; /* If non-zero, override pktsize for
788c2493f83SJouni Malinen 					  * throughput tests */
789cd4e3c3eSJouni Malinen 	int no_timestamps;
790cd4e3c3eSJouni Malinen 
791cd4e3c3eSJouni Malinen 	const char *sniffer_ifname;
792cd4e3c3eSJouni Malinen 	const char *set_macaddr;
793cd4e3c3eSJouni Malinen 	int tmp_mac_addr;
794cd4e3c3eSJouni Malinen 	int ap_is_dual;
795cd4e3c3eSJouni Malinen 	enum ap_mode ap_mode_1;
796cd4e3c3eSJouni Malinen 	enum ap_chwidth ap_chwidth_1;
797cd4e3c3eSJouni Malinen 	int ap_channel_1;
798cd4e3c3eSJouni Malinen 	char ap_countrycode[3];
799cd4e3c3eSJouni Malinen 
800cd4e3c3eSJouni Malinen 	int ap_wpsnfc;
801cd4e3c3eSJouni Malinen 
8020d3db632SPradeep Reddy POTTETI 	enum ap_wme {
8030d3db632SPradeep Reddy POTTETI 		AP_WME_OFF,
8040d3db632SPradeep Reddy POTTETI 		AP_WME_ON,
8050d3db632SPradeep Reddy POTTETI 	} ap_wme;
8060d3db632SPradeep Reddy POTTETI 
80702e3b826SMohammed Shafi Shajakhan 	enum ap_wmmps {
80802e3b826SMohammed Shafi Shajakhan 		AP_WMMPS_OFF,
80902e3b826SMohammed Shafi Shajakhan 		AP_WMMPS_ON,
81002e3b826SMohammed Shafi Shajakhan 	} ap_wmmps;
81102e3b826SMohammed Shafi Shajakhan 
8124b0cdee4SPradeep Reddy Potteti 	enum sec_ch_offset ap_chwidth_offset;
8134b0cdee4SPradeep Reddy Potteti 
814ba4f2d42SJouni Malinen 	char *ap_dpp_conf_addr;
815ba4f2d42SJouni Malinen 	char *ap_dpp_conf_pkhash;
816ba4f2d42SJouni Malinen 
817cd4e3c3eSJouni Malinen #ifdef CONFIG_SNIFFER
818cd4e3c3eSJouni Malinen 	pid_t sniffer_pid;
819cd4e3c3eSJouni Malinen 	char sniffer_filename[200];
820cd4e3c3eSJouni Malinen #endif /* CONFIG_SNIFFER */
821cd4e3c3eSJouni Malinen 
822cd4e3c3eSJouni Malinen 	int last_set_ip_config_ipv6;
8239c381f59SAmarnath Hullur Subramanyam #ifdef MIRACAST
8249c381f59SAmarnath Hullur Subramanyam 	pthread_t rtsp_thread_handle;
8259c381f59SAmarnath Hullur Subramanyam 	int wfd_device_type; /* 0 for source, 1 for sink */
8269c381f59SAmarnath Hullur Subramanyam 	char peer_mac_address[32];
827bf9bcdf6SSunil Dutt 	char modified_peer_mac_address[32];
8289c381f59SAmarnath Hullur Subramanyam 	void *miracast_lib;
8299c381f59SAmarnath Hullur Subramanyam 	const char *miracast_lib_path;
8309c381f59SAmarnath Hullur Subramanyam 	char mdns_instance_name[64];
8319c381f59SAmarnath Hullur Subramanyam #endif /* MIRACAST */
832cd4e3c3eSJouni Malinen 
833cd4e3c3eSJouni Malinen 	int tid_to_handle[8]; /* Mapping of TID to handle */
834cd4e3c3eSJouni Malinen 	int dialog_token; /* Used for generating unique handle for an addTs */
835cd4e3c3eSJouni Malinen 
836cd4e3c3eSJouni Malinen 	enum sigma_program {
837cd4e3c3eSJouni Malinen 		PROGRAM_UNKNOWN = 0,
838cd4e3c3eSJouni Malinen 		PROGRAM_TDLS,
839cd4e3c3eSJouni Malinen 		PROGRAM_HS2,
840cd4e3c3eSJouni Malinen 		PROGRAM_HS2_R2,
841cd4e3c3eSJouni Malinen 		PROGRAM_WFD,
842659a34c4SAmarnath Hullur Subramanyam 		PROGRAM_DISPLAYR2,
843cd4e3c3eSJouni Malinen 		PROGRAM_PMF,
844cd4e3c3eSJouni Malinen 		PROGRAM_WPS,
845cd4e3c3eSJouni Malinen 		PROGRAM_60GHZ,
846cd4e3c3eSJouni Malinen 		PROGRAM_HT,
847cd4e3c3eSJouni Malinen 		PROGRAM_VHT,
848cd4e3c3eSJouni Malinen 		PROGRAM_NAN,
84912dd4145Spriyadharshini gowthaman 		PROGRAM_LOC,
85033ea287aSAdil Saeed Musthafa 		PROGRAM_MBO,
8515c3813a7SJouni Malinen 		PROGRAM_IOTLP,
8525c3813a7SJouni Malinen 		PROGRAM_DPP,
853a2cb567bSAnkita Bajaj 		PROGRAM_OCE,
8540e209fccSpriyadharshini gowthaman 		PROGRAM_WPA3,
8558f9c8687SAmarnath Hullur Subramanyam 		PROGRAM_HE,
856ba630459SJouni Malinen 		PROGRAM_HS2_R3,
857f642d6adSVamsi Krishna 		PROGRAM_QM,
858cd4e3c3eSJouni Malinen 	} program;
859cd4e3c3eSJouni Malinen 
860cd4e3c3eSJouni Malinen 	enum device_type {
861cd4e3c3eSJouni Malinen 		device_type_unknown,
862cd4e3c3eSJouni Malinen 		AP_unknown,
863cd4e3c3eSJouni Malinen 		AP_testbed,
864cd4e3c3eSJouni Malinen 		AP_dut,
865cd4e3c3eSJouni Malinen 		STA_unknown,
866cd4e3c3eSJouni Malinen 		STA_testbed,
867cd4e3c3eSJouni Malinen 		STA_dut
868cd4e3c3eSJouni Malinen 	} device_type;
869cd4e3c3eSJouni Malinen 
870cd4e3c3eSJouni Malinen 	enum {
871cd4e3c3eSJouni Malinen 		DEVROLE_UNKNOWN = 0,
872cd4e3c3eSJouni Malinen 		DEVROLE_STA,
873cd4e3c3eSJouni Malinen 		DEVROLE_PCP,
8742712cc86SAlexei Avshalom Lazar 		DEVROLE_STA_CFON,
8752712cc86SAlexei Avshalom Lazar 		DEVROLE_AP,
876cd4e3c3eSJouni Malinen 	} dev_role;
877cd4e3c3eSJouni Malinen 
87833f700cfSAlexei Avshalom Lazar 	enum wps_band {
87933f700cfSAlexei Avshalom Lazar 		WPS_BAND_NON_60G = 0,
88033f700cfSAlexei Avshalom Lazar 		WPS_BAND_60G,
88133f700cfSAlexei Avshalom Lazar 	} band;
88233f700cfSAlexei Avshalom Lazar 
883eee9ab0aSAlexei Avshalom Lazar 	int wps_disable; /* Used for 60G to disable PCP from sending WPS IE */
88433f700cfSAlexei Avshalom Lazar 	int wsc_fragment; /* simulate WSC IE fragmentation */
8852eccf4d4SAlexei Avshalom Lazar 	int eap_fragment; /* simulate EAP fragmentation */
886744ae8abSAlexei Avshalom Lazar 	int wps_forced_version; /* Used to force reported WPS version */
887b094bf08SAlexei Avshalom Lazar 	enum {
888b094bf08SAlexei Avshalom Lazar 		/* no change */
889b094bf08SAlexei Avshalom Lazar 		FORCE_RSN_IE_NONE = 0,
890b094bf08SAlexei Avshalom Lazar 		/* if exists, remove and clear privacy bit */
891b094bf08SAlexei Avshalom Lazar 		FORCE_RSN_IE_REMOVE,
892b094bf08SAlexei Avshalom Lazar 		/* if not exists, add and set privacy bit */
893b094bf08SAlexei Avshalom Lazar 		FORCE_RSN_IE_ADD,
894b094bf08SAlexei Avshalom Lazar 	} force_rsn_ie; /* override RSN IE in association request */
89533f700cfSAlexei Avshalom Lazar 
896cd4e3c3eSJouni Malinen 	const char *version;
897cd4e3c3eSJouni Malinen 	int no_ip_addr_set;
898cd4e3c3eSJouni Malinen 	int sta_channel;
899cd4e3c3eSJouni Malinen 
900cd4e3c3eSJouni Malinen 	const char *summary_log;
901cd4e3c3eSJouni Malinen 	const char *hostapd_entropy_log;
902cd4e3c3eSJouni Malinen 
903cd4e3c3eSJouni Malinen 	int iface_down_on_reset;
904cd4e3c3eSJouni Malinen 	int write_stats; /* traffic stream e2e*.txt files */
90573d7af09SBala Krishna Bhamidipati 	int sim_no_username; /* do not set SIM username to use real SIM */
9065db3b104SJouni Malinen 
9075db3b104SJouni Malinen 	const char *vendor_name; /* device_get_info vendor override */
9085db3b104SJouni Malinen 	const char *model_name; /* device_get_info model override */
9095db3b104SJouni Malinen 	const char *version_name; /* device_get_info version override */
9100128bf99SKiran Kumar Lokere 	const char *log_file_dir; /* Directory to generate log file */
9110128bf99SKiran Kumar Lokere 	FILE *log_file_fd; /* Pointer to log file */
9127d37f411SRakesh Sunki 
91314cfcd25SRakesh Sunki 	int ndp_enable; /* Flag which is set once the NDP is setup */
91414cfcd25SRakesh Sunki 
9158863ec7cSPeng Xu 	int ndpe; /* Flag indicating NDPE is supported */
9168863ec7cSPeng Xu 	u16 trans_port; /* transport port number for TCP/UDP connection */
9178863ec7cSPeng Xu 	u8 trans_proto; /* transport protocol, 0x06: TCP, 0x11: UDP */
91847d709baSPeng Xu 	u8 nan_ipv6_addr[IPV6_ADDR_LEN]; /* NAN IPv6 address */
91947d709baSPeng Xu 	u8 nan_ipv6_len; /* NAN IPv6 address length */
9208863ec7cSPeng Xu 
9217d37f411SRakesh Sunki 	/* Length of nan_pmk in octets */
9227d37f411SRakesh Sunki 	u8 nan_pmk_len;
9237d37f411SRakesh Sunki 
9247d37f411SRakesh Sunki 	/*
9257d37f411SRakesh Sunki 	 * PMK: Info is optional in Discovery phase. PMK info can
9267d37f411SRakesh Sunki 	 *  be passed during the NDP session.
9277d37f411SRakesh Sunki 	 */
9287d37f411SRakesh Sunki 	u8 nan_pmk[32];
92933ea287aSAdil Saeed Musthafa 
93033ea287aSAdil Saeed Musthafa 	enum value_not_set_enabled_disabled wnm_bss_max_feature;
93133ea287aSAdil Saeed Musthafa 	int wnm_bss_max_idle_time;
93233ea287aSAdil Saeed Musthafa 	enum value_not_set_enabled_disabled wnm_bss_max_protection;
9330040258bSAshwini Patil 
9340040258bSAshwini Patil 	char *non_pref_ch_list; /* MBO: non-preferred channel report */
9355acd738cSAshwini Patil 	char *btm_query_cand_list; /* Candidate list for BTM Query */
9363c367e8dSJouni Malinen 
9376814313dSJouni Malinen 	char *sae_commit_override;
9383c367e8dSJouni Malinen 	char *rsne_override;
9397960e3adSJouni Malinen 	char *rsnxe_override_eapol;
940134fe3c3SJouni Malinen 	int sta_associate_wait_connect;
941134fe3c3SJouni Malinen 	char server_cert_hash[65];
94237d5c69eSJouni Malinen 	int server_cert_tod;
943134fe3c3SJouni Malinen 	int sta_tod_policy;
944d6bf1b4aSJouni Malinen 	const char *hostapd_bin;
945d6bf1b4aSJouni Malinen 	int use_hostapd_pid_file;
946d6bf1b4aSJouni Malinen 	const char *hostapd_ifname;
947d86e5828SJouni Malinen 	int hostapd_running;
948d86e5828SJouni Malinen 
949b1dd21f8SJouni Malinen 	char *dpp_peer_uri;
950d86e5828SJouni Malinen 	int dpp_local_bootstrap;
951d86e5828SJouni Malinen 	int dpp_conf_id;
9521dabb5a6SJouni Malinen 	int dpp_network_id;
9531bde7947SAnkita Bajaj 
9541bde7947SAnkita Bajaj 	u8 fils_hlp;
9551bde7947SAnkita Bajaj 	pthread_t hlp_thread;
956291d97daSPeng Xu 
957291d97daSPeng Xu #ifdef NL80211_SUPPORT
958291d97daSPeng Xu 	struct nl80211_ctx *nl_ctx;
959076081f1SSunil Dutt 	int config_rsnie;
960291d97daSPeng Xu #endif /* NL80211_SUPPORT */
961ac6c511cSArif Hussain 
962ac6c511cSArif Hussain 	int sta_nss;
9632052daa2SAnurag Das 
9642052daa2SAnurag Das #ifdef ANDROID
9652052daa2SAnurag Das 	int nanservicediscoveryinprogress;
9662052daa2SAnurag Das #endif /* ANDROID */
967d06f100bSPriyadharshini Gowthaman 
968d06f100bSPriyadharshini Gowthaman 	const char *priv_cmd; /* iwpriv / cfg80211tool command name */
9690128bf99SKiran Kumar Lokere 
9700128bf99SKiran Kumar Lokere 	unsigned int wpa_log_size;
9710128bf99SKiran Kumar Lokere 	char dev_start_test_runtime_id[100];
9722dfb1daeSVinay Gannevaram #ifdef ANDROID_WIFI_HAL
9732dfb1daeSVinay Gannevaram 	wifi_interface_handle wifi_hal_iface_handle;
9742dfb1daeSVinay Gannevaram 	wifi_handle wifi_hal_handle;
9752dfb1daeSVinay Gannevaram 	bool wifi_hal_initialized;
9762dfb1daeSVinay Gannevaram #endif /*ANDROID_WIFI_HAL*/
97711e5521bSJouni Malinen 
97811e5521bSJouni Malinen 	int sae_h2e_default;
97911e5521bSJouni Malinen 	enum {
98011e5521bSJouni Malinen 		SAE_PWE_DEFAULT,
98111e5521bSJouni Malinen 		SAE_PWE_LOOP,
98211e5521bSJouni Malinen 		SAE_PWE_H2E
98311e5521bSJouni Malinen 	} sae_pwe;
9846010ce7dSHu Wang 	int owe_ptk_workaround;
9852e2097d0SLavanya Suresh 	struct dut_hw_modes hw_modes;
986c1633d27SVamsi Krishna 	int ocvc;
987c1f71b67SVeerendranath Jakkam 	int beacon_prot;
98867433fc6SJouni Malinen 	int client_privacy;
98947867204SVeerendranath Jakkam 	int client_privacy_default;
99054ddc35cSVeerendranath Jakkam 	int saquery_oci_freq;
991f0f8805aSVenkateswara Naralasetty 	char device_driver[32];
992cd4e3c3eSJouni Malinen };
993cd4e3c3eSJouni Malinen 
994cd4e3c3eSJouni Malinen 
995cd4e3c3eSJouni Malinen enum sigma_dut_print_level {
996cd4e3c3eSJouni Malinen 	DUT_MSG_DEBUG, DUT_MSG_INFO, DUT_MSG_ERROR
997cd4e3c3eSJouni Malinen };
998cd4e3c3eSJouni Malinen 
999cd4e3c3eSJouni Malinen void sigma_dut_print(struct sigma_dut *dut, int level, const char *fmt, ...)
1000cd4e3c3eSJouni Malinen PRINTF_FORMAT(3, 4);
1001cd4e3c3eSJouni Malinen 
1002cd4e3c3eSJouni Malinen void sigma_dut_summary(struct sigma_dut *dut, const char *fmt, ...)
1003cd4e3c3eSJouni Malinen PRINTF_FORMAT(2, 3);
1004cd4e3c3eSJouni Malinen 
1005cd4e3c3eSJouni Malinen 
1006cd4e3c3eSJouni Malinen enum sigma_status {
1007cd4e3c3eSJouni Malinen 	SIGMA_RUNNING, SIGMA_INVALID, SIGMA_ERROR, SIGMA_COMPLETE
1008cd4e3c3eSJouni Malinen };
1009cd4e3c3eSJouni Malinen 
1010cd4e3c3eSJouni Malinen void send_resp(struct sigma_dut *dut, struct sigma_conn *conn,
101176401f50SJouni Malinen 	       enum sigma_status status, const char *buf);
1012cd4e3c3eSJouni Malinen 
1013cd4e3c3eSJouni Malinen const char * get_param(struct sigma_cmd *cmd, const char *name);
1014bc180dc5SAlexei Avshalom Lazar const char * get_param_indexed(struct sigma_cmd *cmd, const char *name,
1015bc180dc5SAlexei Avshalom Lazar 			       int index);
1016cd4e3c3eSJouni Malinen 
1017cd4e3c3eSJouni Malinen int sigma_dut_reg_cmd(const char *cmd,
1018cd4e3c3eSJouni Malinen 		      int (*validate)(struct sigma_cmd *cmd),
101926a5b76dSJouni Malinen 		      enum sigma_cmd_result (*process)(struct sigma_dut *dut,
1020cd4e3c3eSJouni Malinen 						       struct sigma_conn *conn,
1021cd4e3c3eSJouni Malinen 						       struct sigma_cmd *cmd));
1022cd4e3c3eSJouni Malinen 
1023cd4e3c3eSJouni Malinen void sigma_dut_register_cmds(void);
1024cd4e3c3eSJouni Malinen 
1025a485fd1dSJouni Malinen enum sigma_cmd_result cmd_sta_send_frame(struct sigma_dut *dut,
1026a485fd1dSJouni Malinen 					 struct sigma_conn *conn,
1027cd4e3c3eSJouni Malinen 					 struct sigma_cmd *cmd);
1028cd4e3c3eSJouni Malinen int cmd_sta_set_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
1029cd4e3c3eSJouni Malinen 			  struct sigma_cmd *cmd);
1030a485fd1dSJouni Malinen enum sigma_cmd_result cmd_ap_send_frame(struct sigma_dut *dut,
1031a485fd1dSJouni Malinen 					struct sigma_conn *conn,
1032cd4e3c3eSJouni Malinen 					struct sigma_cmd *cmd);
1033a485fd1dSJouni Malinen enum sigma_cmd_result cmd_wlantest_send_frame(struct sigma_dut *dut,
1034a485fd1dSJouni Malinen 					      struct sigma_conn *conn,
1035cd4e3c3eSJouni Malinen 					      struct sigma_cmd *cmd);
10360d5825b5SAnkita Bajaj int sta_cfon_set_wireless(struct sigma_dut *dut, struct sigma_conn *conn,
10370d5825b5SAnkita Bajaj 			  struct sigma_cmd *cmd);
10380d5825b5SAnkita Bajaj int sta_cfon_get_mac_address(struct sigma_dut *dut, struct sigma_conn *conn,
10390d5825b5SAnkita Bajaj 			     struct sigma_cmd *cmd);
10400d5825b5SAnkita Bajaj int sta_cfon_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
10410d5825b5SAnkita Bajaj 			   struct sigma_cmd *cmd);
1042cd4e3c3eSJouni Malinen 
1043cd4e3c3eSJouni Malinen enum driver_type {
1044cd4e3c3eSJouni Malinen 	DRIVER_NOT_SET,
1045cd4e3c3eSJouni Malinen 	DRIVER_ATHEROS,
1046cd4e3c3eSJouni Malinen 	DRIVER_WCN,
1047cd4e3c3eSJouni Malinen 	DRIVER_MAC80211,
1048cd4e3c3eSJouni Malinen 	DRIVER_AR6003,
1049cd4e3c3eSJouni Malinen 	DRIVER_WIL6210,
1050cd4e3c3eSJouni Malinen 	DRIVER_QNXNTO,
1051b692f107SSreelakshmi Konamki 	DRIVER_OPENWRT,
1052b692f107SSreelakshmi Konamki 	DRIVER_LINUX_WCN,
1053cd4e3c3eSJouni Malinen };
1054cd4e3c3eSJouni Malinen 
1055cd4e3c3eSJouni Malinen enum openwrt_driver_type {
1056cd4e3c3eSJouni Malinen 	OPENWRT_DRIVER_NOT_SET,
1057cd4e3c3eSJouni Malinen 	OPENWRT_DRIVER_ATHEROS
1058cd4e3c3eSJouni Malinen };
1059cd4e3c3eSJouni Malinen 
1060cd4e3c3eSJouni Malinen #define DRIVER_NAME_60G "wil6210"
1061cd4e3c3eSJouni Malinen 
1062cd4e3c3eSJouni Malinen int set_wifi_chip(const char *chip_type);
1063016ae6c8SJouni Malinen enum driver_type get_driver_type(struct sigma_dut *dut);
1064cd4e3c3eSJouni Malinen enum openwrt_driver_type get_openwrt_driver_type(void);
1065f0f8805aSVenkateswara Naralasetty void sigma_dut_get_device_driver_name(const char *ifname, char *name,
1066f0f8805aSVenkateswara Naralasetty 				      size_t size);
1067cd4e3c3eSJouni Malinen int file_exists(const char *fname);
1068cd4e3c3eSJouni Malinen 
1069cd4e3c3eSJouni Malinen struct wpa_ctrl;
1070cd4e3c3eSJouni Malinen 
1071cd4e3c3eSJouni Malinen int wps_connection_event(struct sigma_dut *dut, struct sigma_conn *conn,
1072cd4e3c3eSJouni Malinen 			 struct wpa_ctrl *ctrl, const char *intf, int p2p_resp);
1073cd4e3c3eSJouni Malinen int ascii2hexstr(const char *str, char *hex);
1074cd4e3c3eSJouni Malinen void disconnect_station(struct sigma_dut *dut);
1075cd4e3c3eSJouni Malinen void nfc_status(struct sigma_dut *dut, const char *state, const char *oper);
1076cd4e3c3eSJouni Malinen int get_ip_config(struct sigma_dut *dut, const char *ifname, char *buf,
1077cd4e3c3eSJouni Malinen 		  size_t buf_len);
1078cd4e3c3eSJouni Malinen int ath6kl_client_uapsd(struct sigma_dut *dut, const char *intf, int uapsd);
1079cd4e3c3eSJouni Malinen int is_ip_addr(const char *str);
1080cd4e3c3eSJouni Malinen int run_system(struct sigma_dut *dut, const char *cmd);
10815f793f0dSAdil Saeed Musthafa int run_system_wrapper(struct sigma_dut *dut, const char *cmd, ...);
1082d06f100bSPriyadharshini Gowthaman int run_iwpriv(struct sigma_dut *dut, const char *ifname, const char *cmd, ...);
1083a485fd1dSJouni Malinen enum sigma_cmd_result cmd_wlantest_set_channel(struct sigma_dut *dut,
1084a485fd1dSJouni Malinen 					       struct sigma_conn *conn,
1085cd4e3c3eSJouni Malinen 					       struct sigma_cmd *cmd);
1086a2df7db5SJouni Malinen void wlantest_register_cmds(void);
1087cd4e3c3eSJouni Malinen void sniffer_close(struct sigma_dut *dut);
1088cd4e3c3eSJouni Malinen 
10892dfb1daeSVinay Gannevaram /* sigma_dut.c */
10902dfb1daeSVinay Gannevaram int wifi_hal_initialize(struct sigma_dut *dut);
10912dfb1daeSVinay Gannevaram 
1092cd4e3c3eSJouni Malinen /* ap.c */
1093a2df7db5SJouni Malinen void ap_register_cmds(void);
1094cd4e3c3eSJouni Malinen void ath_disable_txbf(struct sigma_dut *dut, const char *intf);
1095818afef5SPriyadharshini Gowthaman void ath_config_dyn_bw_sig(struct sigma_dut *dut, const char *ifname,
1096818afef5SPriyadharshini Gowthaman 			   const char *val);
10978c5b9a4cSPriyadharshini Gowthaman void novap_reset(struct sigma_dut *dut, const char *ifname, int reset);
10982e6ccc22SJouni Malinen int get_hwaddr(const char *ifname, unsigned char *hwaddr);
1099a485fd1dSJouni Malinen enum sigma_cmd_result cmd_ap_config_commit(struct sigma_dut *dut,
1100a485fd1dSJouni Malinen 					   struct sigma_conn *conn,
1101a326d7b5SJouni Malinen 					   struct sigma_cmd *cmd);
1102043230bdSAlexei Avshalom Lazar int ap_wps_registration(struct sigma_dut *dut, struct sigma_conn *conn,
1103043230bdSAlexei Avshalom Lazar 			struct sigma_cmd *cmd);
1104314b9c65SJouni Malinen const char * get_hostapd_ifname(struct sigma_dut *dut);
1105cd4e3c3eSJouni Malinen 
1106cd4e3c3eSJouni Malinen /* sta.c */
1107a2df7db5SJouni Malinen void sta_register_cmds(void);
1108cd4e3c3eSJouni Malinen int set_ps(const char *intf, struct sigma_dut *dut, int enabled);
1109cd4e3c3eSJouni Malinen void ath_set_zero_crc(struct sigma_dut *dut, const char *val);
1110cd4e3c3eSJouni Malinen void ath_set_cts_width(struct sigma_dut *dut, const char *ifname,
1111cd4e3c3eSJouni Malinen 		       const char *val);
1112cd4e3c3eSJouni Malinen int ath_set_width(struct sigma_dut *dut, struct sigma_conn *conn,
1113cd4e3c3eSJouni Malinen 		  const char *intf, const char *val);
111449498b8eSAlexei Avshalom Lazar int sta_set_60g_abft_len(struct sigma_dut *dut, struct sigma_conn *conn,
111549498b8eSAlexei Avshalom Lazar 			 int abft_len);
11160fe101e9SLior David int wil6210_send_frame_60g(struct sigma_dut *dut, struct sigma_conn *conn,
11170fe101e9SLior David 			   struct sigma_cmd *cmd);
11181bde7947SAnkita Bajaj int hwaddr_aton(const char *txt, unsigned char *addr);
11191bde7947SAnkita Bajaj int set_ipv4_addr(struct sigma_dut *dut, const char *ifname,
11201bde7947SAnkita Bajaj 		  const char *ip, const char *mask);
11211bde7947SAnkita Bajaj int set_ipv4_gw(struct sigma_dut *dut, const char *gw);
112279fa3fedSAlexei Avshalom Lazar int send_addba_60g(struct sigma_dut *dut, struct sigma_conn *conn,
112379fa3fedSAlexei Avshalom Lazar 		   struct sigma_cmd *cmd, const char *param);
1124bc180dc5SAlexei Avshalom Lazar int wil6210_set_ese(struct sigma_dut *dut, int count,
1125bc180dc5SAlexei Avshalom Lazar 		    struct sigma_ese_alloc *allocs);
1126bc180dc5SAlexei Avshalom Lazar int sta_extract_60g_ese(struct sigma_dut *dut, struct sigma_cmd *cmd,
1127bc180dc5SAlexei Avshalom Lazar 			struct sigma_ese_alloc *allocs, int *allocs_size);
1128aad97b04SAlexei Avshalom Lazar int wil6210_set_force_mcs(struct sigma_dut *dut, int force, int mcs);
1129b680697aSQiwei Cai int sta_set_addba_buf_size(struct sigma_dut *dut,
1130b680697aSQiwei Cai 			   const char *intf, int bufsize);
113126c0f86cSKiran Kumar Lokere #ifdef NL80211_SUPPORT
113226c0f86cSKiran Kumar Lokere int wcn_set_he_ltf(struct sigma_dut *dut, const char *intf,
113326c0f86cSKiran Kumar Lokere 		   enum qca_wlan_he_ltf_cfg ltf);
113426c0f86cSKiran Kumar Lokere #endif /* NL80211_SUPPORT */
1135cd4e3c3eSJouni Malinen 
1136cd4e3c3eSJouni Malinen /* p2p.c */
1137a2df7db5SJouni Malinen void p2p_register_cmds(void);
1138cd4e3c3eSJouni Malinen int p2p_cmd_sta_get_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
1139cd4e3c3eSJouni Malinen 			      struct sigma_cmd *cmd);
1140091e253dSPurushottam Kushwaha void p2p_create_event_thread(struct sigma_dut *dut);
1141091e253dSPurushottam Kushwaha void stop_event_thread(void);
114289b37cdcSAmarnath Hullur Subramanyam void start_dhcp(struct sigma_dut *dut, const char *group_ifname, int go);
114389b37cdcSAmarnath Hullur Subramanyam void stop_dhcp(struct sigma_dut *dut, const char *group_ifname, int go);
114489b37cdcSAmarnath Hullur Subramanyam int p2p_discover_peer(struct sigma_dut *dut, const char *ifname,
114589b37cdcSAmarnath Hullur Subramanyam 		      const char *peer, int full);
1146a0bf62a3SJouni Malinen enum sigma_cmd_result cmd_sta_p2p_reset(struct sigma_dut *dut,
1147a0bf62a3SJouni Malinen 					struct sigma_conn *conn,
1148a0bf62a3SJouni Malinen 					struct sigma_cmd *cmd);
1149cd4e3c3eSJouni Malinen 
1150c54710deSJouni Malinen /* basic.c */
1151a2df7db5SJouni Malinen void basic_register_cmds(void);
1152c54710deSJouni Malinen void get_ver(const char *cmd, char *buf, size_t buflen);
1153c54710deSJouni Malinen 
115472462ef3Spriyadharshini gowthaman /* utils.c */
1155cd4e3c3eSJouni Malinen enum sigma_program sigma_program_to_enum(const char *prog);
11569a4f98d9SAlexei Avshalom Lazar int hex_byte(const char *str);
115708cf231dSJouni Malinen int parse_hexstr(const char *hex, unsigned char *buf, size_t buflen);
115872462ef3Spriyadharshini gowthaman int parse_mac_address(struct sigma_dut *dut, const char *arg,
115972462ef3Spriyadharshini gowthaman 		      unsigned char *addr);
1160093569ffSAlexei Avshalom Lazar int is_60g_sigma_dut(struct sigma_dut *dut);
1161093569ffSAlexei Avshalom Lazar unsigned int channel_to_freq(struct sigma_dut *dut, unsigned int channel);
11627192dc42SRakesh Sunki unsigned int freq_to_channel(unsigned int freq);
1163525965bbSPeng Xu int is_ipv6_addr(const char *str);
11648f8e74b5SRakesh Sunki void convert_mac_addr_to_ipv6_lladdr(u8 *mac_addr, char *ipv6_buf,
11658f8e74b5SRakesh Sunki 				     size_t buf_len);
11668863ec7cSPeng Xu size_t convert_mac_addr_to_ipv6_linklocal(const u8 *mac_addr, u8 *ipv6);
1167cd4e3c3eSJouni Malinen 
1168769731a2SPeng Xu #ifndef ANDROID
1169769731a2SPeng Xu size_t strlcpy(char *dest, const char *src, size_t siz);
1170769731a2SPeng Xu size_t strlcat(char *dst, const char *str, size_t size);
1171769731a2SPeng Xu #endif /* ANDROID */
11721bde7947SAnkita Bajaj void hex_dump(struct sigma_dut *dut, u8 *data, size_t len);
11730dae51c5SAlexei Avshalom Lazar int get_wps_pin_from_mac(struct sigma_dut *dut, const char *macaddr,
11740dae51c5SAlexei Avshalom Lazar 			 char *pin, size_t len);
11756427969bSAlexei Avshalom Lazar void str_remove_chars(char *str, char ch);
1176769731a2SPeng Xu 
1177744ae8abSAlexei Avshalom Lazar int get_wps_forced_version(struct sigma_dut *dut, const char *str);
1178a37dc16cSAlexei Avshalom Lazar int base64_encode(const char *src, size_t len, char *out, size_t out_len);
1179a37dc16cSAlexei Avshalom Lazar int random_get_bytes(char *buf, size_t len);
11803c740ab7SJouni Malinen int get_enable_disable(const char *val);
118154b78cfdSVinita Maloo int wcn_driver_cmd(const char *ifname, char *buf);
1182769731a2SPeng Xu 
1183cd4e3c3eSJouni Malinen /* uapsd_stream.c */
1184cd4e3c3eSJouni Malinen void receive_uapsd(struct sigma_stream *s);
118579594049SPradeep Reddy POTTETI void send_uapsd_console(struct sigma_stream *s);
1186cd4e3c3eSJouni Malinen 
1187cd4e3c3eSJouni Malinen /* nan.c */
1188cd4e3c3eSJouni Malinen int nan_preset_testparameters(struct sigma_dut *dut, struct sigma_conn *conn,
1189cd4e3c3eSJouni Malinen 			      struct sigma_cmd *cmd);
1190cd4e3c3eSJouni Malinen int nan_cmd_sta_get_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
1191cd4e3c3eSJouni Malinen 			      struct sigma_cmd *cmd);
1192cd4e3c3eSJouni Malinen int nan_cmd_sta_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
1193cd4e3c3eSJouni Malinen 			    struct sigma_cmd *cmd);
1194cd4e3c3eSJouni Malinen int nan_cmd_sta_get_events(struct sigma_dut *dut, struct sigma_conn *conn,
1195cd4e3c3eSJouni Malinen 			   struct sigma_cmd *cmd);
1196cd4e3c3eSJouni Malinen int nan_cmd_sta_transmit_followup(struct sigma_dut *dut,
1197cd4e3c3eSJouni Malinen 				  struct sigma_conn *conn,
1198cd4e3c3eSJouni Malinen 				  struct sigma_cmd *cmd);
1199cd4e3c3eSJouni Malinen void nan_cmd_sta_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
1200cd4e3c3eSJouni Malinen 			       struct sigma_cmd *cmd);
1201cd4e3c3eSJouni Malinen int nan_cmd_sta_preset_testparameters(struct sigma_dut *dut,
1202cd4e3c3eSJouni Malinen 				      struct sigma_conn *conn,
1203cd4e3c3eSJouni Malinen 				      struct sigma_cmd *cmd);
1204cd4e3c3eSJouni Malinen 
1205d66913acSpriyadharshini gowthaman /* ftm.c */
1206d66913acSpriyadharshini gowthaman int loc_cmd_sta_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
1207d66913acSpriyadharshini gowthaman 			    struct sigma_cmd *cmd);
1208d66913acSpriyadharshini gowthaman int loc_cmd_sta_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
1209d66913acSpriyadharshini gowthaman 			   struct sigma_cmd *cmd);
1210d66913acSpriyadharshini gowthaman int loc_cmd_sta_preset_testparameters(struct sigma_dut *dut,
1211d66913acSpriyadharshini gowthaman 				      struct sigma_conn *conn,
1212d66913acSpriyadharshini gowthaman 				      struct sigma_cmd *cmd);
12133b9fdd38SVinay Gannevaram int lowi_cmd_sta_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
12143b9fdd38SVinay Gannevaram 			       struct sigma_cmd *cmd);
1215d66913acSpriyadharshini gowthaman 
1216d86e5828SJouni Malinen /* dpp.c */
121789cf6d64SJouni Malinen enum sigma_cmd_result dpp_dev_exec_action(struct sigma_dut *dut,
121889cf6d64SJouni Malinen 					  struct sigma_conn *conn,
1219d86e5828SJouni Malinen 					  struct sigma_cmd *cmd);
1220d86e5828SJouni Malinen 
12211bde7947SAnkita Bajaj /* dhcp.c */
12221bde7947SAnkita Bajaj void process_fils_hlp(struct sigma_dut *dut);
12231bde7947SAnkita Bajaj void hlp_thread_cleanup(struct sigma_dut *dut);
1224d86e5828SJouni Malinen 
1225291d97daSPeng Xu #ifdef NL80211_SUPPORT
1226291d97daSPeng Xu struct nl80211_ctx * nl80211_init(struct sigma_dut *dut);
1227291d97daSPeng Xu void nl80211_deinit(struct sigma_dut *dut, struct nl80211_ctx *ctx);
1228291d97daSPeng Xu struct nl_msg * nl80211_drv_msg(struct sigma_dut *dut, struct nl80211_ctx *ctx,
1229291d97daSPeng Xu 				int ifindex, int flags,
1230291d97daSPeng Xu 				uint8_t cmd);
1231291d97daSPeng Xu int send_and_recv_msgs(struct sigma_dut *dut, struct nl80211_ctx *ctx,
1232291d97daSPeng Xu 		       struct nl_msg *nlmsg,
1233291d97daSPeng Xu 		       int (*valid_handler)(struct nl_msg *, void *),
1234291d97daSPeng Xu 		       void *valid_data);
1235050b85a6SVeerendranath Jakkam int wcn_wifi_test_config_set_flag(struct sigma_dut *dut, const char *intf,
1236050b85a6SVeerendranath Jakkam 				  int attr_id);
1237050b85a6SVeerendranath Jakkam int wcn_wifi_test_config_set_u8(struct sigma_dut *dut, const char *intf,
1238050b85a6SVeerendranath Jakkam 				int attr_id, uint8_t val);
1239050b85a6SVeerendranath Jakkam int wcn_wifi_test_config_set_u16(struct sigma_dut *dut, const char *intf,
1240050b85a6SVeerendranath Jakkam 				 int attr_id, uint16_t val);
1241291d97daSPeng Xu #endif /* NL80211_SUPPORT */
1242291d97daSPeng Xu 
1243a2df7db5SJouni Malinen void traffic_register_cmds(void);
1244a2df7db5SJouni Malinen void traffic_agent_register_cmds(void);
1245a2df7db5SJouni Malinen void powerswitch_register_cmds(void);
1246a2df7db5SJouni Malinen void atheros_register_cmds(void);
1247a2df7db5SJouni Malinen void dev_register_cmds(void);
1248a2df7db5SJouni Malinen void sniffer_register_cmds(void);
1249a2df7db5SJouni Malinen void server_register_cmds(void);
1250a2df7db5SJouni Malinen void miracast_register_cmds(void);
1251176181c5SVeerendranath Jakkam int set_ipv6_addr(struct sigma_dut *dut, const char *ip, const char *mask,
1252176181c5SVeerendranath Jakkam 		  const char *ifname);
1253a2df7db5SJouni Malinen 
1254cd4e3c3eSJouni Malinen #endif /* SIGMA_DUT_H */
1255