xref: /wlan-dirver/utils/sigma-dut/sigma_dut.h (revision 63ab8483799c1e11603171648cda3907e57b7e56)
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.
5cd4e3c3eSJouni Malinen  * All Rights Reserved.
6cd4e3c3eSJouni Malinen  * Licensed under the Clear BSD license. See README for more details.
7cd4e3c3eSJouni Malinen  */
8cd4e3c3eSJouni Malinen 
9cd4e3c3eSJouni Malinen #ifndef SIGMA_DUT_H
10cd4e3c3eSJouni Malinen #define SIGMA_DUT_H
11cd4e3c3eSJouni Malinen 
129981b511SLior David #ifdef __GNUC__
139981b511SLior David #define _GNU_SOURCE	1
149981b511SLior David #endif
159981b511SLior David 
16cd4e3c3eSJouni Malinen #include <stdlib.h>
17cd4e3c3eSJouni Malinen #include <stdio.h>
18cd4e3c3eSJouni Malinen #include <stdarg.h>
19cd4e3c3eSJouni Malinen #include <string.h>
20cd4e3c3eSJouni Malinen #include <errno.h>
21cd4e3c3eSJouni Malinen #include <unistd.h>
22cd4e3c3eSJouni Malinen #include <time.h>
23cd4e3c3eSJouni Malinen #include <sys/time.h>
24cd4e3c3eSJouni Malinen #include <sys/types.h>
25cd4e3c3eSJouni Malinen #include <sys/socket.h>
26cd4e3c3eSJouni Malinen #include <net/if.h>
27cd4e3c3eSJouni Malinen #ifdef __QNXNTO__
28cd4e3c3eSJouni Malinen #include <sys/select.h>
29cd4e3c3eSJouni Malinen #include <net/if_ether.h>
30cd4e3c3eSJouni Malinen #endif /* __QNXNTO__ */
31cd4e3c3eSJouni Malinen #include <netinet/in.h>
32cd4e3c3eSJouni Malinen #include <arpa/inet.h>
33cd4e3c3eSJouni Malinen #ifdef CONFIG_TRAFFIC_AGENT
34cd4e3c3eSJouni Malinen #include <pthread.h>
35cd4e3c3eSJouni Malinen #endif /* CONFIG_TRAFFIC_AGENT */
36cd4e3c3eSJouni Malinen 
37cd4e3c3eSJouni Malinen 
38cd4e3c3eSJouni Malinen #ifdef __GNUC__
39cd4e3c3eSJouni Malinen #define PRINTF_FORMAT(a,b) __attribute__ ((format (printf, (a), (b))))
40cd4e3c3eSJouni Malinen #else
41cd4e3c3eSJouni Malinen #define PRINTF_FORMAT(a,b)
42cd4e3c3eSJouni Malinen #endif
43cd4e3c3eSJouni Malinen 
44cd4e3c3eSJouni Malinen #ifndef SIGMA_TMPDIR
45cd4e3c3eSJouni Malinen #define SIGMA_TMPDIR "/tmp"
46cd4e3c3eSJouni Malinen #endif /* SIGMA_TMPDIR */
47cd4e3c3eSJouni Malinen 
48cd4e3c3eSJouni Malinen #ifndef SIGMA_DUT_VER
49cd4e3c3eSJouni Malinen #define SIGMA_DUT_VER "(unknown)"
50cd4e3c3eSJouni Malinen #endif /* SIGMA_DUT_VER */
51cd4e3c3eSJouni Malinen 
52cd4e3c3eSJouni Malinen #ifndef ETH_ALEN
53cd4e3c3eSJouni Malinen #define ETH_ALEN 6
54cd4e3c3eSJouni Malinen #endif
55cd4e3c3eSJouni Malinen 
56cd4e3c3eSJouni Malinen #ifndef ETH_P_ARP
57cd4e3c3eSJouni Malinen #define ETH_P_ARP 0x0806
58cd4e3c3eSJouni Malinen #endif
59cd4e3c3eSJouni Malinen 
60cd4e3c3eSJouni Malinen struct sigma_dut;
61cd4e3c3eSJouni Malinen 
62cd4e3c3eSJouni Malinen #define MAX_PARAMS 100
63cd4e3c3eSJouni Malinen #define MAX_RADIO 2
64cd4e3c3eSJouni Malinen 
65cd4e3c3eSJouni Malinen /* Set default operating channel width 80 MHz */
66cd4e3c3eSJouni Malinen #define VHT_DEFAULT_OPER_CHWIDTH AP_80_VHT_OPER_CHWIDTH
67cd4e3c3eSJouni Malinen 
68cd4e3c3eSJouni Malinen typedef unsigned int u32;
69cd4e3c3eSJouni Malinen typedef unsigned char u8;
70cd4e3c3eSJouni Malinen 
71cd4e3c3eSJouni Malinen #define WPA_GET_BE32(a) ((((u32) (a)[0]) << 24) | (((u32) (a)[1]) << 16) | \
72cd4e3c3eSJouni Malinen 			 (((u32) (a)[2]) << 8) | ((u32) (a)[3]))
73cd4e3c3eSJouni Malinen #define WPA_PUT_BE32(a, val)					\
74cd4e3c3eSJouni Malinen 	do {							\
75cd4e3c3eSJouni Malinen 		(a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff);	\
76cd4e3c3eSJouni Malinen 		(a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff);	\
77cd4e3c3eSJouni Malinen 		(a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff);	\
78cd4e3c3eSJouni Malinen 		(a)[3] = (u8) (((u32) (val)) & 0xff);		\
79cd4e3c3eSJouni Malinen 	} while (0)
80cd4e3c3eSJouni Malinen 
81cd4e3c3eSJouni Malinen struct sigma_cmd {
82cd4e3c3eSJouni Malinen 	char *params[MAX_PARAMS];
83cd4e3c3eSJouni Malinen 	char *values[MAX_PARAMS];
84cd4e3c3eSJouni Malinen 	int count;
85cd4e3c3eSJouni Malinen };
86cd4e3c3eSJouni Malinen 
87cd4e3c3eSJouni Malinen #define MAX_CMD_LEN 2048
88cd4e3c3eSJouni Malinen 
89cd4e3c3eSJouni Malinen struct sigma_conn {
90cd4e3c3eSJouni Malinen 	int s;
91cd4e3c3eSJouni Malinen 	struct sockaddr_in addr;
92cd4e3c3eSJouni Malinen 	socklen_t addrlen;
93cd4e3c3eSJouni Malinen 	char buf[MAX_CMD_LEN + 5];
94cd4e3c3eSJouni Malinen 	int pos;
95cd4e3c3eSJouni Malinen 	int waiting_completion;
96cd4e3c3eSJouni Malinen };
97cd4e3c3eSJouni Malinen 
98cd4e3c3eSJouni Malinen #define SIGMA_DUT_ERROR_CALLER_SEND_STATUS -2
99cd4e3c3eSJouni Malinen #define SIGMA_DUT_INVALID_CALLER_SEND_STATUS -1
100cd4e3c3eSJouni Malinen #define SIGMA_DUT_SUCCESS_STATUS_SENT 0
101cd4e3c3eSJouni Malinen #define SIGMA_DUT_SUCCESS_CALLER_SEND_STATUS 1
102cd4e3c3eSJouni Malinen 
103cd4e3c3eSJouni Malinen struct sigma_cmd_handler {
104cd4e3c3eSJouni Malinen 	struct sigma_cmd_handler *next;
105cd4e3c3eSJouni Malinen 	char *cmd;
106cd4e3c3eSJouni Malinen 	int (*validate)(struct sigma_cmd *cmd);
107cd4e3c3eSJouni Malinen 	/* process return value:
108cd4e3c3eSJouni Malinen 	 * -2 = failed, caller will send status,ERROR
109cd4e3c3eSJouni Malinen 	 * -1 = failed, caller will send status,INVALID
110cd4e3c3eSJouni Malinen 	 * 0 = success, response already sent
111cd4e3c3eSJouni Malinen 	 * 1 = success, caller will send status,COMPLETE
112cd4e3c3eSJouni Malinen 	 */
113cd4e3c3eSJouni Malinen 	int (*process)(struct sigma_dut *dut, struct sigma_conn *conn,
114cd4e3c3eSJouni Malinen 		       struct sigma_cmd *cmd);
115cd4e3c3eSJouni Malinen };
116cd4e3c3eSJouni Malinen 
117cd4e3c3eSJouni Malinen #define P2P_GRP_ID_LEN 128
118cd4e3c3eSJouni Malinen #define IP_ADDR_STR_LEN 16
119cd4e3c3eSJouni Malinen 
120cd4e3c3eSJouni Malinen struct wfa_cs_p2p_group {
121cd4e3c3eSJouni Malinen 	struct wfa_cs_p2p_group *next;
122cd4e3c3eSJouni Malinen 	char ifname[IFNAMSIZ];
123cd4e3c3eSJouni Malinen 	int go;
124cd4e3c3eSJouni Malinen 	char grpid[P2P_GRP_ID_LEN];
125cd4e3c3eSJouni Malinen 	char ssid[33];
126cd4e3c3eSJouni Malinen };
127cd4e3c3eSJouni Malinen 
128cd4e3c3eSJouni Malinen #ifdef CONFIG_TRAFFIC_AGENT
129cd4e3c3eSJouni Malinen 
130cd4e3c3eSJouni Malinen #define MAX_SIGMA_STREAMS 16
131cd4e3c3eSJouni Malinen #define MAX_SIGMA_STATS 6000
132cd4e3c3eSJouni Malinen 
133cd4e3c3eSJouni Malinen struct sigma_frame_stats {
134cd4e3c3eSJouni Malinen 	unsigned int seqnum;
135cd4e3c3eSJouni Malinen 	unsigned int local_sec;
136cd4e3c3eSJouni Malinen 	unsigned int local_usec;
137cd4e3c3eSJouni Malinen 	unsigned int remote_sec;
138cd4e3c3eSJouni Malinen 	unsigned int remote_usec;
139cd4e3c3eSJouni Malinen };
140cd4e3c3eSJouni Malinen 
141cd4e3c3eSJouni Malinen struct sigma_stream {
142cd4e3c3eSJouni Malinen 	enum sigma_stream_profile {
143cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_FILE_TRANSFER,
144cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_MULTICAST,
145cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_IPTV,
146cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_TRANSACTION,
147cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_START_SYNC,
148cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_UAPSD
149cd4e3c3eSJouni Malinen 	} profile;
150cd4e3c3eSJouni Malinen 	int sender;
151cd4e3c3eSJouni Malinen 	struct in_addr dst;
152cd4e3c3eSJouni Malinen 	int dst_port;
153cd4e3c3eSJouni Malinen 	struct in_addr src;
154cd4e3c3eSJouni Malinen 	int src_port;
155cd4e3c3eSJouni Malinen 	int frame_rate;
156cd4e3c3eSJouni Malinen 	int duration;
157c2493f83SJouni Malinen 	unsigned int payload_size;
158cd4e3c3eSJouni Malinen 	int start_delay;
159cd4e3c3eSJouni Malinen 	int max_cnt;
160cd4e3c3eSJouni Malinen 	enum sigma_traffic_class {
161cd4e3c3eSJouni Malinen 		SIGMA_TC_VOICE,
162cd4e3c3eSJouni Malinen 		SIGMA_TC_VIDEO,
163cd4e3c3eSJouni Malinen 		SIGMA_TC_BACKGROUND,
164cd4e3c3eSJouni Malinen 		SIGMA_TC_BEST_EFFORT
165cd4e3c3eSJouni Malinen 	} tc;
166cd4e3c3eSJouni Malinen 	int user_priority;
167cd4e3c3eSJouni Malinen 	int user_priority_set;
168cd4e3c3eSJouni Malinen 	int started;
169cd4e3c3eSJouni Malinen 	int no_timestamps;
170cd4e3c3eSJouni Malinen 
171cd4e3c3eSJouni Malinen 	int sock;
172cd4e3c3eSJouni Malinen 	pthread_t thr;
173cd4e3c3eSJouni Malinen 	int stop;
174cd4e3c3eSJouni Malinen 	int ta_send_in_progress;
175cd4e3c3eSJouni Malinen 	int trans_proto;
176cd4e3c3eSJouni Malinen 
177cd4e3c3eSJouni Malinen 	/* Statistics */
178cd4e3c3eSJouni Malinen 	int tx_act_frames; /*
179cd4e3c3eSJouni Malinen 			    * Number of frames generated by the traffic
180cd4e3c3eSJouni Malinen 			    * generator application. The name is defined in the
181cd4e3c3eSJouni Malinen 			    * Sigma CAPI spec.
182cd4e3c3eSJouni Malinen 			    */
183cd4e3c3eSJouni Malinen 	int tx_frames;
184cd4e3c3eSJouni Malinen 	int rx_frames;
185cd4e3c3eSJouni Malinen 	unsigned long long tx_payload_bytes;
186cd4e3c3eSJouni Malinen 	unsigned long long rx_payload_bytes;
187cd4e3c3eSJouni Malinen 	int out_of_seq_frames;
188cd4e3c3eSJouni Malinen 	struct sigma_frame_stats *stats;
189cd4e3c3eSJouni Malinen 	unsigned int num_stats;
190cd4e3c3eSJouni Malinen 	unsigned int stream_id;
191cd4e3c3eSJouni Malinen 
192cd4e3c3eSJouni Malinen 	/* U-APSD */
193cd4e3c3eSJouni Malinen 	unsigned int sta_id;
194cd4e3c3eSJouni Malinen 	unsigned int rx_cookie;
195cd4e3c3eSJouni Malinen 	unsigned int uapsd_sta_tc;
196cd4e3c3eSJouni Malinen 	unsigned int uapsd_rx_state;
197cd4e3c3eSJouni Malinen 	unsigned int uapsd_tx_state;
198cd4e3c3eSJouni Malinen 	unsigned int tx_stop_cnt;
199cd4e3c3eSJouni Malinen 	unsigned int tx_hello_cnt;
200cd4e3c3eSJouni Malinen 	pthread_t uapsd_send_thr;
201cd4e3c3eSJouni Malinen 	pthread_cond_t tx_thr_cond;
202cd4e3c3eSJouni Malinen 	pthread_mutex_t tx_thr_mutex;
203cd4e3c3eSJouni Malinen 	int reset_rx;
204cd4e3c3eSJouni Malinen 	int num_retry;
205cd4e3c3eSJouni Malinen 	char ifname[IFNAMSIZ]; /* ifname from the command */
206cd4e3c3eSJouni Malinen 	struct sigma_dut *dut; /* for traffic agent thread to access context */
20779594049SPradeep Reddy POTTETI 	/* console */
20879594049SPradeep Reddy POTTETI 	char test_name[9]; /* test case name */
20979594049SPradeep Reddy POTTETI 	int can_quit;
21079594049SPradeep Reddy POTTETI 	int reset;
211cd4e3c3eSJouni Malinen };
212cd4e3c3eSJouni Malinen 
213cd4e3c3eSJouni Malinen #endif /* CONFIG_TRAFFIC_AGENT */
214cd4e3c3eSJouni Malinen 
215cd4e3c3eSJouni Malinen 
216cd4e3c3eSJouni Malinen #define NUM_AP_AC 4
217cd4e3c3eSJouni Malinen #define AP_AC_BE 0
218cd4e3c3eSJouni Malinen #define AP_AC_BK 1
219cd4e3c3eSJouni Malinen #define AP_AC_VI 2
220cd4e3c3eSJouni Malinen #define AP_AC_VO 3
221cd4e3c3eSJouni Malinen 
222b7b297f2SAdil Saeed Musthafa #define MAX_WLAN_TAGS 3
22369063725SAdil Saeed Musthafa #define MBO_MAX_PREF_BSSIDS 10
2244ec61bd9SAdil Saeed Musthafa #define MAX_FT_BSS_LIST 10
225b7b297f2SAdil Saeed Musthafa 
22657fa3d83SJouni Malinen enum value_not_set_enabled_disabled {
22757fa3d83SJouni Malinen 	VALUE_NOT_SET,
22857fa3d83SJouni Malinen 	VALUE_ENABLED,
22957fa3d83SJouni Malinen 	VALUE_DISABLED
23057fa3d83SJouni Malinen };
23157fa3d83SJouni Malinen 
2324b0cdee4SPradeep Reddy Potteti enum sec_ch_offset {
2334b0cdee4SPradeep Reddy Potteti 	SEC_CH_NO,
2344b0cdee4SPradeep Reddy Potteti 	SEC_CH_40ABOVE,
2354b0cdee4SPradeep Reddy Potteti 	SEC_CH_40BELOW
2364b0cdee4SPradeep Reddy Potteti };
2374b0cdee4SPradeep Reddy Potteti 
23869063725SAdil Saeed Musthafa struct mbo_pref_ap {
23969063725SAdil Saeed Musthafa 	int ap_ne_class;
24069063725SAdil Saeed Musthafa 	int ap_ne_op_ch;
24169063725SAdil Saeed Musthafa 	int ap_ne_pref;
24269063725SAdil Saeed Musthafa 	unsigned char mac_addr[ETH_ALEN];
24369063725SAdil Saeed Musthafa };
24469063725SAdil Saeed Musthafa 
245cd4e3c3eSJouni Malinen struct sigma_dut {
246cd4e3c3eSJouni Malinen 	int s; /* server TCP socket */
247cd4e3c3eSJouni Malinen 	int debug_level;
248cd4e3c3eSJouni Malinen 	int stdout_debug;
249cd4e3c3eSJouni Malinen 	struct sigma_cmd_handler *cmds;
250cd4e3c3eSJouni Malinen 
251cd4e3c3eSJouni Malinen 	/* Default timeout value (seconds) for commands */
252cd4e3c3eSJouni Malinen 	unsigned int default_timeout;
253cd4e3c3eSJouni Malinen 
254cd4e3c3eSJouni Malinen 	int next_streamid;
255cd4e3c3eSJouni Malinen 
256cd4e3c3eSJouni Malinen 	const char *bridge; /* bridge interface to use in AP mode */
257cd4e3c3eSJouni Malinen 
258cd4e3c3eSJouni Malinen 	enum sigma_mode {
259cd4e3c3eSJouni Malinen 		SIGMA_MODE_UNKNOWN,
260cd4e3c3eSJouni Malinen 		SIGMA_MODE_STATION,
261cd4e3c3eSJouni Malinen 		SIGMA_MODE_AP,
262cd4e3c3eSJouni Malinen 		SIGMA_MODE_SNIFFER
263cd4e3c3eSJouni Malinen 	} mode;
264cd4e3c3eSJouni Malinen 
265cd4e3c3eSJouni Malinen 	/*
266cd4e3c3eSJouni Malinen 	 * Local cached values to handle API that does not provide all the
267cd4e3c3eSJouni Malinen 	 * needed information with commands that actually trigger some
268cd4e3c3eSJouni Malinen 	 * operations.
269cd4e3c3eSJouni Malinen 	 */
270cd4e3c3eSJouni Malinen 	int listen_chn;
271cd4e3c3eSJouni Malinen 	int persistent;
272cd4e3c3eSJouni Malinen 	int intra_bss;
273cd4e3c3eSJouni Malinen 	int noa_duration;
274cd4e3c3eSJouni Malinen 	int noa_interval;
275cd4e3c3eSJouni Malinen 	int noa_count;
276cd4e3c3eSJouni Malinen 	enum wfa_cs_wps_method {
277cd4e3c3eSJouni Malinen 		WFA_CS_WPS_NOT_READY,
278cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PBC,
279cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PIN_DISPLAY,
280cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PIN_LABEL,
281cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PIN_KEYPAD
282cd4e3c3eSJouni Malinen 	} wps_method;
283cd4e3c3eSJouni Malinen 	char wps_pin[9];
284cd4e3c3eSJouni Malinen 
285cd4e3c3eSJouni Malinen 	struct wfa_cs_p2p_group *groups;
286cd4e3c3eSJouni Malinen 
287cd4e3c3eSJouni Malinen 	char infra_ssid[33];
288cd4e3c3eSJouni Malinen 	int infra_network_id;
289cd4e3c3eSJouni Malinen 
290cd4e3c3eSJouni Malinen 	enum p2p_mode {
291cd4e3c3eSJouni Malinen 		P2P_IDLE, P2P_DISCOVER, P2P_LISTEN, P2P_DISABLE
292cd4e3c3eSJouni Malinen 	} p2p_mode;
293cd4e3c3eSJouni Malinen 
294cd4e3c3eSJouni Malinen 	int go;
295cd4e3c3eSJouni Malinen 	int p2p_client;
296091e253dSPurushottam Kushwaha 	char *p2p_ifname;
297cd4e3c3eSJouni Malinen 
298cd4e3c3eSJouni Malinen 	int client_uapsd;
299cd4e3c3eSJouni Malinen 
300cd4e3c3eSJouni Malinen 	char arp_ipaddr[IP_ADDR_STR_LEN];
301cd4e3c3eSJouni Malinen 	char arp_ifname[IFNAMSIZ + 1];
302cd4e3c3eSJouni Malinen 
303cd4e3c3eSJouni Malinen 	enum sta_pmf {
304cd4e3c3eSJouni Malinen 		STA_PMF_DISABLED,
305cd4e3c3eSJouni Malinen 		STA_PMF_OPTIONAL,
306cd4e3c3eSJouni Malinen 		STA_PMF_REQUIRED
307cd4e3c3eSJouni Malinen 	} sta_pmf;
308cd4e3c3eSJouni Malinen 
309cd4e3c3eSJouni Malinen 	int no_tpk_expiration;
310cd4e3c3eSJouni Malinen 
311cd4e3c3eSJouni Malinen 	int er_oper_performed;
312cd4e3c3eSJouni Malinen 	char er_oper_bssid[20];
313cd4e3c3eSJouni Malinen 	int amsdu_size;
314cd4e3c3eSJouni Malinen 	int back_rcv_buf;
315cd4e3c3eSJouni Malinen 
316cd4e3c3eSJouni Malinen 	int testbed_flag_txsp;
317cd4e3c3eSJouni Malinen 	int testbed_flag_rxsp;
318cd4e3c3eSJouni Malinen 	int chwidth;
319cd4e3c3eSJouni Malinen 
320cd4e3c3eSJouni Malinen 	/* AP configuration */
321cd4e3c3eSJouni Malinen 	char ap_ssid[33];
322b7b297f2SAdil Saeed Musthafa 	/*
323b7b297f2SAdil Saeed Musthafa 	 * WLAN-TAG of 1 will use 'ap_' variables;
324b7b297f2SAdil Saeed Musthafa 	 * tag higher than 1 will use 'ap_tag_' variables.
325b7b297f2SAdil Saeed Musthafa 	 */
326b7b297f2SAdil Saeed Musthafa 	char ap_tag_ssid[MAX_WLAN_TAGS - 1][33];
327cd4e3c3eSJouni Malinen 	enum ap_mode {
328cd4e3c3eSJouni Malinen 		AP_11a,
329cd4e3c3eSJouni Malinen 		AP_11g,
330cd4e3c3eSJouni Malinen 		AP_11b,
331cd4e3c3eSJouni Malinen 		AP_11na,
332cd4e3c3eSJouni Malinen 		AP_11ng,
333cd4e3c3eSJouni Malinen 		AP_11ac,
334cd4e3c3eSJouni Malinen 		AP_inval
335cd4e3c3eSJouni Malinen 	} ap_mode;
336cd4e3c3eSJouni Malinen 	int ap_channel;
337cd4e3c3eSJouni Malinen 	int ap_rts;
338cd4e3c3eSJouni Malinen 	int ap_frgmnt;
339cd4e3c3eSJouni Malinen 	int ap_bcnint;
340cd4e3c3eSJouni Malinen 	struct qos_params {
341cd4e3c3eSJouni Malinen 		int ac;
342cd4e3c3eSJouni Malinen 		int cwmin;
343cd4e3c3eSJouni Malinen 		int cwmax;
344cd4e3c3eSJouni Malinen 		int aifs;
345cd4e3c3eSJouni Malinen 		int txop;
346cd4e3c3eSJouni Malinen 		int acm;
347cd4e3c3eSJouni Malinen 	} ap_qos[NUM_AP_AC], ap_sta_qos[NUM_AP_AC];
34857fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_noack;
34957fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_ampdu;
35057fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_amsdu;
35157fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_rx_amsdu;
352cd4e3c3eSJouni Malinen 	int ap_ampdu_exp;
35357fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_addba_reject;
354cd4e3c3eSJouni Malinen 	int ap_fixed_rate;
355cd4e3c3eSJouni Malinen 	int ap_mcs;
356cd4e3c3eSJouni Malinen 	int ap_rx_streams;
357cd4e3c3eSJouni Malinen 	int ap_tx_streams;
358cd4e3c3eSJouni Malinen 	unsigned int ap_vhtmcs_map;
35957fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_ldpc;
36057fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_sig_rts;
361cd4e3c3eSJouni Malinen 	enum ap_chwidth {
362cd4e3c3eSJouni Malinen 		AP_20,
363cd4e3c3eSJouni Malinen 		AP_40,
364cd4e3c3eSJouni Malinen 		AP_80,
365cd4e3c3eSJouni Malinen 		AP_160,
366*63ab8483Spriyadharshini gowthaman 		AP_80_80,
367cd4e3c3eSJouni Malinen 		AP_AUTO
368cd4e3c3eSJouni Malinen 	} ap_chwidth;
369bf8af292SPradeep Reddy Potteti 	enum ap_chwidth default_11na_ap_chwidth;
370bf8af292SPradeep Reddy Potteti 	enum ap_chwidth default_11ng_ap_chwidth;
371cd4e3c3eSJouni Malinen 	int ap_tx_stbc;
37257fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_dyn_bw_sig;
373cd4e3c3eSJouni Malinen 	int ap_sgi80;
374cd4e3c3eSJouni Malinen 	int ap_p2p_mgmt;
375cd4e3c3eSJouni Malinen 	enum ap_key_mgmt {
376cd4e3c3eSJouni Malinen 		AP_OPEN,
377cd4e3c3eSJouni Malinen 		AP_WPA2_PSK,
378cd4e3c3eSJouni Malinen 		AP_WPA_PSK,
379cd4e3c3eSJouni Malinen 		AP_WPA2_EAP,
380cd4e3c3eSJouni Malinen 		AP_WPA_EAP,
381cd4e3c3eSJouni Malinen 		AP_WPA2_EAP_MIXED,
38230824df7SJouni Malinen 		AP_WPA2_PSK_MIXED,
38330824df7SJouni Malinen 		AP_WPA2_SAE,
38430824df7SJouni Malinen 		AP_WPA2_PSK_SAE,
385ad395a20SJouni Malinen 		AP_SUITEB,
386147b3c39SJouni Malinen 		AP_WPA2_OWE,
387cd4e3c3eSJouni Malinen 	} ap_key_mgmt;
388b7b297f2SAdil Saeed Musthafa 	enum ap_tag_key_mgmt {
389cd4e3c3eSJouni Malinen 		AP2_OPEN,
390b7b297f2SAdil Saeed Musthafa 		AP2_OSEN,
391b7b297f2SAdil Saeed Musthafa 		AP2_WPA2_PSK
392b7b297f2SAdil Saeed Musthafa 	} ap_tag_key_mgmt[MAX_WLAN_TAGS - 1];
393cd4e3c3eSJouni Malinen 	int ap_add_sha256;
394de81f395Spriyadharshini gowthaman 	int ap_add_sha384;
39524dc7e40SSarvepalli, Rajesh Babu 	int ap_rsn_preauth;
396cd4e3c3eSJouni Malinen 	enum ap_pmf {
397cd4e3c3eSJouni Malinen 		AP_PMF_DISABLED,
398cd4e3c3eSJouni Malinen 		AP_PMF_OPTIONAL,
399cd4e3c3eSJouni Malinen 		AP_PMF_REQUIRED
400cd4e3c3eSJouni Malinen 	} ap_pmf;
401cd4e3c3eSJouni Malinen 	enum ap_cipher {
4022ba24498SJouni Malinen 		AP_NO_GROUP_CIPHER_SET,
403cd4e3c3eSJouni Malinen 		AP_CCMP,
404cd4e3c3eSJouni Malinen 		AP_TKIP,
405cd4e3c3eSJouni Malinen 		AP_WEP,
406cd4e3c3eSJouni Malinen 		AP_PLAIN,
407ad395a20SJouni Malinen 		AP_CCMP_TKIP,
408ad395a20SJouni Malinen 		AP_GCMP_256,
4093d633daeSJouni Malinen 		AP_GCMP_128,
4103d633daeSJouni Malinen 		AP_CCMP_256,
411d538c78eSJouni Malinen 		AP_CCMP_128_GCMP_256,
4122ba24498SJouni Malinen 	} ap_cipher, ap_group_cipher;
4133d633daeSJouni Malinen 	enum ap_group_mgmt_cipher {
4143d633daeSJouni Malinen 		AP_NO_GROUP_MGMT_CIPHER_SET,
4153d633daeSJouni Malinen 		AP_BIP_GMAC_256,
4163d633daeSJouni Malinen 		AP_BIP_CMAC_256,
4173d633daeSJouni Malinen 		AP_BIP_GMAC_128,
4183d633daeSJouni Malinen 		AP_BIP_CMAC_128,
4193d633daeSJouni Malinen 	} ap_group_mgmt_cipher;
420ed670f4cSJouni Malinen 	char *ap_sae_groups;
4212f524ce8SJouni Malinen 	int sae_anti_clogging_threshold;
422b347db0fSJouni Malinen 	int sae_reflection;
4232126f422SJouni Malinen 	char ap_passphrase[101];
42463370625SJouni Malinen 	char ap_psk[65];
425cd4e3c3eSJouni Malinen 	char ap_wepkey[27];
426cd4e3c3eSJouni Malinen 	char ap_radius_ipaddr[20];
427cd4e3c3eSJouni Malinen 	int ap_radius_port;
428cd4e3c3eSJouni Malinen 	char ap_radius_password[200];
429cd4e3c3eSJouni Malinen 	char ap2_radius_ipaddr[20];
430cd4e3c3eSJouni Malinen 	int ap2_radius_port;
431cd4e3c3eSJouni Malinen 	char ap2_radius_password[200];
432cd4e3c3eSJouni Malinen 	int ap_tdls_prohibit;
433cd4e3c3eSJouni Malinen 	int ap_tdls_prohibit_chswitch;
434cd4e3c3eSJouni Malinen 	int ap_hs2;
435cd4e3c3eSJouni Malinen 	int ap_dgaf_disable;
436cd4e3c3eSJouni Malinen 	int ap_p2p_cross_connect;
437cd4e3c3eSJouni Malinen 	int ap_oper_name;
438cd4e3c3eSJouni Malinen 	int ap_wan_metrics;
439cd4e3c3eSJouni Malinen 	int ap_conn_capab;
440cd4e3c3eSJouni Malinen 	int ap_oper_class;
441cd4e3c3eSJouni Malinen 
442cd4e3c3eSJouni Malinen 	int ap_interworking;
443cd4e3c3eSJouni Malinen 	int ap_access_net_type;
444cd4e3c3eSJouni Malinen 	int ap_internet;
445cd4e3c3eSJouni Malinen 	int ap_venue_group;
446cd4e3c3eSJouni Malinen 	int ap_venue_type;
447cd4e3c3eSJouni Malinen 	char ap_hessid[20];
448cd4e3c3eSJouni Malinen 	char ap_roaming_cons[100];
449cd4e3c3eSJouni Malinen 	int ap_venue_name;
450cd4e3c3eSJouni Malinen 	int ap_net_auth_type;
451cd4e3c3eSJouni Malinen 	int ap_nai_realm_list;
452cd4e3c3eSJouni Malinen 	char ap_domain_name_list[1000];
453cd4e3c3eSJouni Malinen 	int ap_ip_addr_type_avail;
454cd4e3c3eSJouni Malinen 	char ap_plmn_mcc[10][4];
455cd4e3c3eSJouni Malinen 	char ap_plmn_mnc[10][4];
456cd4e3c3eSJouni Malinen 	int ap_gas_cb_delay;
457cd4e3c3eSJouni Malinen 	int ap_proxy_arp;
458cd4e3c3eSJouni Malinen 	int ap2_proxy_arp;
459cd4e3c3eSJouni Malinen 	int ap_l2tif;
460cd4e3c3eSJouni Malinen 	int ap_anqpserver;
461cd4e3c3eSJouni Malinen 	int ap_anqpserver_on;
462cd4e3c3eSJouni Malinen 	int ap_osu_provider_list;
463cd4e3c3eSJouni Malinen 	int ap_qos_map_set;
464cd4e3c3eSJouni Malinen 	int ap_bss_load;
465cd4e3c3eSJouni Malinen 	char ap_osu_server_uri[10][256];
466cd4e3c3eSJouni Malinen 	char ap_osu_ssid[33];
467cd4e3c3eSJouni Malinen 	int ap_osu_method[10];
468cd4e3c3eSJouni Malinen 	int ap_osu_icon_tag;
469cd4e3c3eSJouni Malinen 
470cd4e3c3eSJouni Malinen 	int ap_fake_pkhash;
471cd4e3c3eSJouni Malinen 	int ap_disable_protection;
472cd4e3c3eSJouni Malinen 	int ap_allow_vht_wep;
473cd4e3c3eSJouni Malinen 	int ap_allow_vht_tkip;
474cd4e3c3eSJouni Malinen 
475cd4e3c3eSJouni Malinen 	enum ap_vht_chwidth {
476cd4e3c3eSJouni Malinen 		AP_20_40_VHT_OPER_CHWIDTH,
477cd4e3c3eSJouni Malinen 		AP_80_VHT_OPER_CHWIDTH,
478cd4e3c3eSJouni Malinen 		AP_160_VHT_OPER_CHWIDTH
479cd4e3c3eSJouni Malinen 	} ap_vht_chwidth;
480cd4e3c3eSJouni Malinen 	int ap_txBF;
481cd4e3c3eSJouni Malinen 	int ap_mu_txBF;
482fba27db5SPradeep Reddy POTTETI 	enum ap_regulatory_mode {
483fba27db5SPradeep Reddy POTTETI 		AP_80211D_MODE_DISABLED,
484fba27db5SPradeep Reddy POTTETI 		AP_80211D_MODE_ENABLED,
485fba27db5SPradeep Reddy POTTETI 	} ap_regulatory_mode;
486fba27db5SPradeep Reddy POTTETI 	enum ap_dfs_mode {
487fba27db5SPradeep Reddy POTTETI 		AP_DFS_MODE_DISABLED,
488fba27db5SPradeep Reddy POTTETI 		AP_DFS_MODE_ENABLED,
489fba27db5SPradeep Reddy POTTETI 	} ap_dfs_mode;
490264d544aSpriyadharshini gowthaman 	int ap_ndpa_frame;
491cd4e3c3eSJouni Malinen 
4928e26ff4aSpriyadharshini gowthaman 	int ap_lci;
4938e26ff4aSpriyadharshini gowthaman 	char ap_val_lci[33];
494c2357bdcSpriyadharshini gowthaman 	char ap_infoz[17];
4958e26ff4aSpriyadharshini gowthaman 	int ap_lcr;
4968e26ff4aSpriyadharshini gowthaman 	char ap_val_lcr[400];
4978e26ff4aSpriyadharshini gowthaman 	int ap_rrm;
4988e26ff4aSpriyadharshini gowthaman 	int ap_rtt;
4998e26ff4aSpriyadharshini gowthaman 	int ap_neighap; /* number of configured neighbor APs */
5008e26ff4aSpriyadharshini gowthaman 	unsigned char ap_val_neighap[3][6];
5018e26ff4aSpriyadharshini gowthaman 	int ap_opchannel; /* number of oper channels */
5028e26ff4aSpriyadharshini gowthaman 	int ap_val_opchannel[3];
5038e26ff4aSpriyadharshini gowthaman 	int ap_scan;
504c2357bdcSpriyadharshini gowthaman 	int ap_fqdn_held;
505c2357bdcSpriyadharshini gowthaman 	int ap_fqdn_supl;
506a27b5b6eSpriyadharshini gowthaman 	int ap_msnt_type;
507a27b5b6eSpriyadharshini gowthaman 
508b4e05fc1Spriyadharshini gowthaman 	int ap_mbo;
509b4e05fc1Spriyadharshini gowthaman 	int ap_ne_class;
510b4e05fc1Spriyadharshini gowthaman 	int ap_ne_op_ch;
511b4e05fc1Spriyadharshini gowthaman 	int ap_set_bssidpref;
512b4e05fc1Spriyadharshini gowthaman 	int ap_btmreq_disassoc_imnt;
513b4e05fc1Spriyadharshini gowthaman 	int ap_btmreq_term_bit;
5147d9ae389SAdil Saeed Musthafa 	int ap_disassoc_timer;
5157d9ae389SAdil Saeed Musthafa 	int ap_btmreq_bss_term_dur;
516604c8261SAdil Saeed Musthafa 	enum reg_domain {
517604c8261SAdil Saeed Musthafa 		REG_DOMAIN_NOT_SET,
518604c8261SAdil Saeed Musthafa 		REG_DOMAIN_LOCAL,
519604c8261SAdil Saeed Musthafa 		REG_DOMAIN_GLOBAL
520604c8261SAdil Saeed Musthafa 	} ap_reg_domain;
521cf752fa7SAdil Saeed Musthafa 	char ap_mobility_domain[10];
522023108aeSAdil Saeed Musthafa 	unsigned char ap_cell_cap_pref;
5234ec61bd9SAdil Saeed Musthafa 	int ap_ft_oa;
5244ec61bd9SAdil Saeed Musthafa 	int ap_name;
52509d613e1Spriyadharshini gowthaman 	int ap_interface_5g;
52609d613e1Spriyadharshini gowthaman 	int ap_interface_2g;
527776562e2Spriyadharshini gowthaman 	int ap_assoc_delay;
52894062b58Spriyadharshini gowthaman 	int ap_btmreq_bss_term_tsf;
52900798a21Spriyadharshini gowthaman 	int ap_fils_dscv_int;
53000798a21Spriyadharshini gowthaman 	int ap_nairealm_int;
53100798a21Spriyadharshini gowthaman 	char ap_nairealm[33];
53200798a21Spriyadharshini gowthaman 	int ap_blechanutil;
53300798a21Spriyadharshini gowthaman 	int ap_ble_admit_cap;
53400798a21Spriyadharshini gowthaman 	int ap_datappdudura;
53500798a21Spriyadharshini gowthaman 	int ap_airtimefract;
53600798a21Spriyadharshini gowthaman 	char ap_dhcpserv_ipaddr[20];
53700798a21Spriyadharshini gowthaman 	int ap_dhcp_stop;
53800798a21Spriyadharshini gowthaman 	int ap_bawinsize;
53900798a21Spriyadharshini gowthaman 	int ap_blestacnt;
540cb22e43aSpriyadharshini gowthaman 	int ap_ul_availcap;
541cb22e43aSpriyadharshini gowthaman 	int ap_dl_availcap;
542de81f395Spriyadharshini gowthaman 	int ap_akm;
543de81f395Spriyadharshini gowthaman 	int ap_pmksa;
544de81f395Spriyadharshini gowthaman 	int ap_pmksa_caching;
545*63ab8483Spriyadharshini gowthaman 	int ap_80plus80;
5464ec61bd9SAdil Saeed Musthafa 
54769063725SAdil Saeed Musthafa 	struct mbo_pref_ap mbo_pref_aps[MBO_MAX_PREF_BSSIDS];
54869063725SAdil Saeed Musthafa 	struct mbo_pref_ap mbo_self_ap_tuple;
54969063725SAdil Saeed Musthafa 	int mbo_pref_ap_cnt;
5504ec61bd9SAdil Saeed Musthafa 	unsigned char ft_bss_mac_list[MAX_FT_BSS_LIST][ETH_ALEN];
5514ec61bd9SAdil Saeed Musthafa 	int ft_bss_mac_cnt;
552b4e05fc1Spriyadharshini gowthaman 
55300798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_oce;
55400798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_filsdscv;
55500798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_filshlp;
55600798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_broadcast_ssid;
55700798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_rnr;
55800798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_esp;
55900798a21Spriyadharshini gowthaman 
560cd4e3c3eSJouni Malinen 	const char *hostapd_debug_log;
561cd4e3c3eSJouni Malinen 
562cd4e3c3eSJouni Malinen #ifdef CONFIG_TRAFFIC_AGENT
563cd4e3c3eSJouni Malinen 	/* Traffic Agent */
564cd4e3c3eSJouni Malinen 	struct sigma_stream streams[MAX_SIGMA_STREAMS];
565cd4e3c3eSJouni Malinen 	int stream_id;
566cd4e3c3eSJouni Malinen 	int num_streams;
567cd4e3c3eSJouni Malinen 	pthread_t thr;
568cd4e3c3eSJouni Malinen #endif /* CONFIG_TRAFFIC_AGENT */
569cd4e3c3eSJouni Malinen 
570c2493f83SJouni Malinen 	unsigned int throughput_pktsize; /* If non-zero, override pktsize for
571c2493f83SJouni Malinen 					  * throughput tests */
572cd4e3c3eSJouni Malinen 	int no_timestamps;
573cd4e3c3eSJouni Malinen 
574cd4e3c3eSJouni Malinen 	const char *sniffer_ifname;
575cd4e3c3eSJouni Malinen 	const char *set_macaddr;
576cd4e3c3eSJouni Malinen 	int tmp_mac_addr;
577cd4e3c3eSJouni Malinen 	int ap_is_dual;
578cd4e3c3eSJouni Malinen 	enum ap_mode ap_mode_1;
579cd4e3c3eSJouni Malinen 	enum ap_chwidth ap_chwidth_1;
580cd4e3c3eSJouni Malinen 	int ap_channel_1;
581cd4e3c3eSJouni Malinen 	char ap_countrycode[3];
582cd4e3c3eSJouni Malinen 
583cd4e3c3eSJouni Malinen 	int ap_wpsnfc;
584cd4e3c3eSJouni Malinen 
5850d3db632SPradeep Reddy POTTETI 	enum ap_wme {
5860d3db632SPradeep Reddy POTTETI 		AP_WME_OFF,
5870d3db632SPradeep Reddy POTTETI 		AP_WME_ON,
5880d3db632SPradeep Reddy POTTETI 	} ap_wme;
5890d3db632SPradeep Reddy POTTETI 
59002e3b826SMohammed Shafi Shajakhan 	enum ap_wmmps {
59102e3b826SMohammed Shafi Shajakhan 		AP_WMMPS_OFF,
59202e3b826SMohammed Shafi Shajakhan 		AP_WMMPS_ON,
59302e3b826SMohammed Shafi Shajakhan 	} ap_wmmps;
59402e3b826SMohammed Shafi Shajakhan 
5954b0cdee4SPradeep Reddy Potteti 	enum sec_ch_offset ap_chwidth_offset;
5964b0cdee4SPradeep Reddy Potteti 
597cd4e3c3eSJouni Malinen #ifdef CONFIG_SNIFFER
598cd4e3c3eSJouni Malinen 	pid_t sniffer_pid;
599cd4e3c3eSJouni Malinen 	char sniffer_filename[200];
600cd4e3c3eSJouni Malinen #endif /* CONFIG_SNIFFER */
601cd4e3c3eSJouni Malinen 
602cd4e3c3eSJouni Malinen 	int last_set_ip_config_ipv6;
6039c381f59SAmarnath Hullur Subramanyam #ifdef MIRACAST
6049c381f59SAmarnath Hullur Subramanyam 	pthread_t rtsp_thread_handle;
6059c381f59SAmarnath Hullur Subramanyam 	int wfd_device_type; /* 0 for source, 1 for sink */
6069c381f59SAmarnath Hullur Subramanyam 	char peer_mac_address[32];
6079c381f59SAmarnath Hullur Subramanyam 	void *miracast_lib;
6089c381f59SAmarnath Hullur Subramanyam 	const char *miracast_lib_path;
6099c381f59SAmarnath Hullur Subramanyam 	char mdns_instance_name[64];
6109c381f59SAmarnath Hullur Subramanyam #endif /* MIRACAST */
611cd4e3c3eSJouni Malinen 
612cd4e3c3eSJouni Malinen 	int tid_to_handle[8]; /* Mapping of TID to handle */
613cd4e3c3eSJouni Malinen 	int dialog_token; /* Used for generating unique handle for an addTs */
614cd4e3c3eSJouni Malinen 
615cd4e3c3eSJouni Malinen 	enum sigma_program {
616cd4e3c3eSJouni Malinen 		PROGRAM_UNKNOWN = 0,
617cd4e3c3eSJouni Malinen 		PROGRAM_TDLS,
618cd4e3c3eSJouni Malinen 		PROGRAM_HS2,
619cd4e3c3eSJouni Malinen 		PROGRAM_HS2_R2,
620cd4e3c3eSJouni Malinen 		PROGRAM_WFD,
621659a34c4SAmarnath Hullur Subramanyam 		PROGRAM_DISPLAYR2,
622cd4e3c3eSJouni Malinen 		PROGRAM_PMF,
623cd4e3c3eSJouni Malinen 		PROGRAM_WPS,
624cd4e3c3eSJouni Malinen 		PROGRAM_60GHZ,
625cd4e3c3eSJouni Malinen 		PROGRAM_HT,
626cd4e3c3eSJouni Malinen 		PROGRAM_VHT,
627cd4e3c3eSJouni Malinen 		PROGRAM_NAN,
62812dd4145Spriyadharshini gowthaman 		PROGRAM_LOC,
62933ea287aSAdil Saeed Musthafa 		PROGRAM_MBO,
6305c3813a7SJouni Malinen 		PROGRAM_IOTLP,
6315c3813a7SJouni Malinen 		PROGRAM_DPP,
632a2cb567bSAnkita Bajaj 		PROGRAM_OCE,
633cd4e3c3eSJouni Malinen 	} program;
634cd4e3c3eSJouni Malinen 
635cd4e3c3eSJouni Malinen 	enum device_type {
636cd4e3c3eSJouni Malinen 		device_type_unknown,
637cd4e3c3eSJouni Malinen 		AP_unknown,
638cd4e3c3eSJouni Malinen 		AP_testbed,
639cd4e3c3eSJouni Malinen 		AP_dut,
640cd4e3c3eSJouni Malinen 		STA_unknown,
641cd4e3c3eSJouni Malinen 		STA_testbed,
642cd4e3c3eSJouni Malinen 		STA_dut
643cd4e3c3eSJouni Malinen 	} device_type;
644cd4e3c3eSJouni Malinen 
645cd4e3c3eSJouni Malinen 	enum {
646cd4e3c3eSJouni Malinen 		DEVROLE_UNKNOWN = 0,
647cd4e3c3eSJouni Malinen 		DEVROLE_STA,
648cd4e3c3eSJouni Malinen 		DEVROLE_PCP,
6490d5825b5SAnkita Bajaj 		DEVROLE_STA_CFON
650cd4e3c3eSJouni Malinen 	} dev_role;
651cd4e3c3eSJouni Malinen 
652cd4e3c3eSJouni Malinen 	const char *version;
653cd4e3c3eSJouni Malinen 	int no_ip_addr_set;
654cd4e3c3eSJouni Malinen 	int sta_channel;
655cd4e3c3eSJouni Malinen 
656cd4e3c3eSJouni Malinen 	const char *summary_log;
657cd4e3c3eSJouni Malinen 	const char *hostapd_entropy_log;
658cd4e3c3eSJouni Malinen 
659cd4e3c3eSJouni Malinen 	int iface_down_on_reset;
660cd4e3c3eSJouni Malinen 	int write_stats; /* traffic stream e2e*.txt files */
66173d7af09SBala Krishna Bhamidipati 	int sim_no_username; /* do not set SIM username to use real SIM */
6625db3b104SJouni Malinen 
6635db3b104SJouni Malinen 	const char *vendor_name; /* device_get_info vendor override */
6645db3b104SJouni Malinen 	const char *model_name; /* device_get_info model override */
6655db3b104SJouni Malinen 	const char *version_name; /* device_get_info version override */
6667d37f411SRakesh Sunki 
66714cfcd25SRakesh Sunki 	int ndp_enable; /* Flag which is set once the NDP is setup */
66814cfcd25SRakesh Sunki 
6697d37f411SRakesh Sunki 	/* Length of nan_pmk in octets */
6707d37f411SRakesh Sunki 	u8 nan_pmk_len;
6717d37f411SRakesh Sunki 
6727d37f411SRakesh Sunki 	/*
6737d37f411SRakesh Sunki 	 * PMK: Info is optional in Discovery phase. PMK info can
6747d37f411SRakesh Sunki 	 *  be passed during the NDP session.
6757d37f411SRakesh Sunki 	 */
6767d37f411SRakesh Sunki 	u8 nan_pmk[32];
67733ea287aSAdil Saeed Musthafa 
67833ea287aSAdil Saeed Musthafa 	enum value_not_set_enabled_disabled wnm_bss_max_feature;
67933ea287aSAdil Saeed Musthafa 	int wnm_bss_max_idle_time;
68033ea287aSAdil Saeed Musthafa 	enum value_not_set_enabled_disabled wnm_bss_max_protection;
6810040258bSAshwini Patil 
6820040258bSAshwini Patil 	char *non_pref_ch_list; /* MBO: non-preferred channel report */
6835acd738cSAshwini Patil 	char *btm_query_cand_list; /* Candidate list for BTM Query */
6843c367e8dSJouni Malinen 
6856814313dSJouni Malinen 	char *sae_commit_override;
6863c367e8dSJouni Malinen 	char *rsne_override;
687d6bf1b4aSJouni Malinen 	const char *hostapd_bin;
688d6bf1b4aSJouni Malinen 	int use_hostapd_pid_file;
689d6bf1b4aSJouni Malinen 	const char *hostapd_ifname;
690d86e5828SJouni Malinen 	int hostapd_running;
691d86e5828SJouni Malinen 
692b1dd21f8SJouni Malinen 	char *dpp_peer_uri;
693d86e5828SJouni Malinen 	int dpp_local_bootstrap;
694d86e5828SJouni Malinen 	int dpp_conf_id;
695cd4e3c3eSJouni Malinen };
696cd4e3c3eSJouni Malinen 
697cd4e3c3eSJouni Malinen 
698cd4e3c3eSJouni Malinen enum sigma_dut_print_level {
699cd4e3c3eSJouni Malinen 	DUT_MSG_DEBUG, DUT_MSG_INFO, DUT_MSG_ERROR
700cd4e3c3eSJouni Malinen };
701cd4e3c3eSJouni Malinen 
702cd4e3c3eSJouni Malinen void sigma_dut_print(struct sigma_dut *dut, int level, const char *fmt, ...)
703cd4e3c3eSJouni Malinen PRINTF_FORMAT(3, 4);
704cd4e3c3eSJouni Malinen 
705cd4e3c3eSJouni Malinen void sigma_dut_summary(struct sigma_dut *dut, const char *fmt, ...)
706cd4e3c3eSJouni Malinen PRINTF_FORMAT(2, 3);
707cd4e3c3eSJouni Malinen 
708cd4e3c3eSJouni Malinen 
709cd4e3c3eSJouni Malinen enum sigma_status {
710cd4e3c3eSJouni Malinen 	SIGMA_RUNNING, SIGMA_INVALID, SIGMA_ERROR, SIGMA_COMPLETE
711cd4e3c3eSJouni Malinen };
712cd4e3c3eSJouni Malinen 
713cd4e3c3eSJouni Malinen void send_resp(struct sigma_dut *dut, struct sigma_conn *conn,
71476401f50SJouni Malinen 	       enum sigma_status status, const char *buf);
715cd4e3c3eSJouni Malinen 
716cd4e3c3eSJouni Malinen const char * get_param(struct sigma_cmd *cmd, const char *name);
717cd4e3c3eSJouni Malinen 
718cd4e3c3eSJouni Malinen int sigma_dut_reg_cmd(const char *cmd,
719cd4e3c3eSJouni Malinen 		      int (*validate)(struct sigma_cmd *cmd),
720cd4e3c3eSJouni Malinen 		      int (*process)(struct sigma_dut *dut,
721cd4e3c3eSJouni Malinen 				     struct sigma_conn *conn,
722cd4e3c3eSJouni Malinen 				     struct sigma_cmd *cmd));
723cd4e3c3eSJouni Malinen 
724cd4e3c3eSJouni Malinen void sigma_dut_register_cmds(void);
725cd4e3c3eSJouni Malinen 
726cd4e3c3eSJouni Malinen int cmd_sta_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
727cd4e3c3eSJouni Malinen 		       struct sigma_cmd *cmd);
728cd4e3c3eSJouni Malinen int cmd_sta_set_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
729cd4e3c3eSJouni Malinen 			  struct sigma_cmd *cmd);
730cd4e3c3eSJouni Malinen int cmd_ap_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
731cd4e3c3eSJouni Malinen 		      struct sigma_cmd *cmd);
732cd4e3c3eSJouni Malinen int cmd_wlantest_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
733cd4e3c3eSJouni Malinen 			    struct sigma_cmd *cmd);
7340d5825b5SAnkita Bajaj int sta_cfon_set_wireless(struct sigma_dut *dut, struct sigma_conn *conn,
7350d5825b5SAnkita Bajaj 			  struct sigma_cmd *cmd);
7360d5825b5SAnkita Bajaj int sta_cfon_get_mac_address(struct sigma_dut *dut, struct sigma_conn *conn,
7370d5825b5SAnkita Bajaj 			     struct sigma_cmd *cmd);
7380d5825b5SAnkita Bajaj int sta_cfon_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
7390d5825b5SAnkita Bajaj 			   struct sigma_cmd *cmd);
740cd4e3c3eSJouni Malinen 
741cd4e3c3eSJouni Malinen enum driver_type {
742cd4e3c3eSJouni Malinen 	DRIVER_NOT_SET,
743cd4e3c3eSJouni Malinen 	DRIVER_ATHEROS,
744cd4e3c3eSJouni Malinen 	DRIVER_WCN,
745cd4e3c3eSJouni Malinen 	DRIVER_MAC80211,
746cd4e3c3eSJouni Malinen 	DRIVER_AR6003,
747cd4e3c3eSJouni Malinen 	DRIVER_WIL6210,
748cd4e3c3eSJouni Malinen 	DRIVER_QNXNTO,
749b692f107SSreelakshmi Konamki 	DRIVER_OPENWRT,
750b692f107SSreelakshmi Konamki 	DRIVER_LINUX_WCN,
751cd4e3c3eSJouni Malinen };
752cd4e3c3eSJouni Malinen 
753cd4e3c3eSJouni Malinen enum openwrt_driver_type {
754cd4e3c3eSJouni Malinen 	OPENWRT_DRIVER_NOT_SET,
755cd4e3c3eSJouni Malinen 	OPENWRT_DRIVER_ATHEROS
756cd4e3c3eSJouni Malinen };
757cd4e3c3eSJouni Malinen 
758cd4e3c3eSJouni Malinen #define DRIVER_NAME_60G "wil6210"
759cd4e3c3eSJouni Malinen 
760cd4e3c3eSJouni Malinen int set_wifi_chip(const char *chip_type);
761cd4e3c3eSJouni Malinen enum driver_type get_driver_type(void);
762cd4e3c3eSJouni Malinen enum openwrt_driver_type get_openwrt_driver_type(void);
763cd4e3c3eSJouni Malinen int file_exists(const char *fname);
764cd4e3c3eSJouni Malinen 
765cd4e3c3eSJouni Malinen struct wpa_ctrl;
766cd4e3c3eSJouni Malinen 
767cd4e3c3eSJouni Malinen int wps_connection_event(struct sigma_dut *dut, struct sigma_conn *conn,
768cd4e3c3eSJouni Malinen 			 struct wpa_ctrl *ctrl, const char *intf, int p2p_resp);
769cd4e3c3eSJouni Malinen int ascii2hexstr(const char *str, char *hex);
770cd4e3c3eSJouni Malinen void disconnect_station(struct sigma_dut *dut);
771cd4e3c3eSJouni Malinen void nfc_status(struct sigma_dut *dut, const char *state, const char *oper);
772cd4e3c3eSJouni Malinen int get_ip_config(struct sigma_dut *dut, const char *ifname, char *buf,
773cd4e3c3eSJouni Malinen 		  size_t buf_len);
774cd4e3c3eSJouni Malinen int ath6kl_client_uapsd(struct sigma_dut *dut, const char *intf, int uapsd);
775cd4e3c3eSJouni Malinen int is_ip_addr(const char *str);
776cd4e3c3eSJouni Malinen int run_system(struct sigma_dut *dut, const char *cmd);
7775f793f0dSAdil Saeed Musthafa int run_system_wrapper(struct sigma_dut *dut, const char *cmd, ...);
778cd4e3c3eSJouni Malinen int cmd_wlantest_set_channel(struct sigma_dut *dut, struct sigma_conn *conn,
779cd4e3c3eSJouni Malinen 			     struct sigma_cmd *cmd);
780cd4e3c3eSJouni Malinen void sniffer_close(struct sigma_dut *dut);
781cd4e3c3eSJouni Malinen 
782cd4e3c3eSJouni Malinen /* ap.c */
783cd4e3c3eSJouni Malinen void ath_disable_txbf(struct sigma_dut *dut, const char *intf);
784818afef5SPriyadharshini Gowthaman void ath_config_dyn_bw_sig(struct sigma_dut *dut, const char *ifname,
785818afef5SPriyadharshini Gowthaman 			   const char *val);
786e5e2517eSpriyadharshini gowthaman void novap_reset(struct sigma_dut *dut, const char *ifname);
7872e6ccc22SJouni Malinen int get_hwaddr(const char *ifname, unsigned char *hwaddr);
788a326d7b5SJouni Malinen int cmd_ap_config_commit(struct sigma_dut *dut, struct sigma_conn *conn,
789a326d7b5SJouni Malinen 			 struct sigma_cmd *cmd);
790cd4e3c3eSJouni Malinen 
791cd4e3c3eSJouni Malinen /* sta.c */
792cd4e3c3eSJouni Malinen int set_ps(const char *intf, struct sigma_dut *dut, int enabled);
793cd4e3c3eSJouni Malinen void ath_set_zero_crc(struct sigma_dut *dut, const char *val);
794cd4e3c3eSJouni Malinen void ath_set_cts_width(struct sigma_dut *dut, const char *ifname,
795cd4e3c3eSJouni Malinen 		       const char *val);
796cd4e3c3eSJouni Malinen int ath_set_width(struct sigma_dut *dut, struct sigma_conn *conn,
797cd4e3c3eSJouni Malinen 		  const char *intf, const char *val);
7980fe101e9SLior David int wil6210_send_frame_60g(struct sigma_dut *dut, struct sigma_conn *conn,
7990fe101e9SLior David 			   struct sigma_cmd *cmd);
800cd4e3c3eSJouni Malinen 
801cd4e3c3eSJouni Malinen /* p2p.c */
802cd4e3c3eSJouni Malinen int p2p_cmd_sta_get_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
803cd4e3c3eSJouni Malinen 			      struct sigma_cmd *cmd);
804091e253dSPurushottam Kushwaha void p2p_create_event_thread(struct sigma_dut *dut);
805091e253dSPurushottam Kushwaha void stop_event_thread(void);
80689b37cdcSAmarnath Hullur Subramanyam void start_dhcp(struct sigma_dut *dut, const char *group_ifname, int go);
80789b37cdcSAmarnath Hullur Subramanyam void stop_dhcp(struct sigma_dut *dut, const char *group_ifname, int go);
80889b37cdcSAmarnath Hullur Subramanyam int p2p_discover_peer(struct sigma_dut *dut, const char *ifname,
80989b37cdcSAmarnath Hullur Subramanyam 		      const char *peer, int full);
810cd4e3c3eSJouni Malinen 
81172462ef3Spriyadharshini gowthaman /* utils.c */
812cd4e3c3eSJouni Malinen enum sigma_program sigma_program_to_enum(const char *prog);
81308cf231dSJouni Malinen int parse_hexstr(const char *hex, unsigned char *buf, size_t buflen);
81472462ef3Spriyadharshini gowthaman int parse_mac_address(struct sigma_dut *dut, const char *arg,
81572462ef3Spriyadharshini gowthaman 		      unsigned char *addr);
8167192dc42SRakesh Sunki unsigned int channel_to_freq(unsigned int channel);
8177192dc42SRakesh Sunki unsigned int freq_to_channel(unsigned int freq);
8188f8e74b5SRakesh Sunki void convert_mac_addr_to_ipv6_lladdr(u8 *mac_addr, char *ipv6_buf,
8198f8e74b5SRakesh Sunki 				     size_t buf_len);
820cd4e3c3eSJouni Malinen 
821769731a2SPeng Xu #ifndef ANDROID
822769731a2SPeng Xu size_t strlcpy(char *dest, const char *src, size_t siz);
823769731a2SPeng Xu size_t strlcat(char *dst, const char *str, size_t size);
824769731a2SPeng Xu #endif /* ANDROID */
825769731a2SPeng Xu 
826769731a2SPeng Xu 
827cd4e3c3eSJouni Malinen /* uapsd_stream.c */
828cd4e3c3eSJouni Malinen void receive_uapsd(struct sigma_stream *s);
82979594049SPradeep Reddy POTTETI void send_uapsd_console(struct sigma_stream *s);
830cd4e3c3eSJouni Malinen 
831cd4e3c3eSJouni Malinen /* nan.c */
832cd4e3c3eSJouni Malinen int nan_preset_testparameters(struct sigma_dut *dut, struct sigma_conn *conn,
833cd4e3c3eSJouni Malinen 			      struct sigma_cmd *cmd);
834cd4e3c3eSJouni Malinen int nan_cmd_sta_get_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
835cd4e3c3eSJouni Malinen 			      struct sigma_cmd *cmd);
836cd4e3c3eSJouni Malinen int nan_cmd_sta_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
837cd4e3c3eSJouni Malinen 			    struct sigma_cmd *cmd);
838cd4e3c3eSJouni Malinen int nan_cmd_sta_get_events(struct sigma_dut *dut, struct sigma_conn *conn,
839cd4e3c3eSJouni Malinen 			   struct sigma_cmd *cmd);
840cd4e3c3eSJouni Malinen int nan_cmd_sta_transmit_followup(struct sigma_dut *dut,
841cd4e3c3eSJouni Malinen 				  struct sigma_conn *conn,
842cd4e3c3eSJouni Malinen 				  struct sigma_cmd *cmd);
843cd4e3c3eSJouni Malinen void nan_cmd_sta_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
844cd4e3c3eSJouni Malinen 			       struct sigma_cmd *cmd);
845cd4e3c3eSJouni Malinen int nan_cmd_sta_preset_testparameters(struct sigma_dut *dut,
846cd4e3c3eSJouni Malinen 				      struct sigma_conn *conn,
847cd4e3c3eSJouni Malinen 				      struct sigma_cmd *cmd);
848cd4e3c3eSJouni Malinen 
849d66913acSpriyadharshini gowthaman /* ftm.c */
850d66913acSpriyadharshini gowthaman int loc_cmd_sta_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
851d66913acSpriyadharshini gowthaman 			    struct sigma_cmd *cmd);
852d66913acSpriyadharshini gowthaman int loc_cmd_sta_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
853d66913acSpriyadharshini gowthaman 			   struct sigma_cmd *cmd);
854d66913acSpriyadharshini gowthaman int loc_cmd_sta_preset_testparameters(struct sigma_dut *dut,
855d66913acSpriyadharshini gowthaman 				      struct sigma_conn *conn,
856d66913acSpriyadharshini gowthaman 				      struct sigma_cmd *cmd);
857d66913acSpriyadharshini gowthaman 
858d86e5828SJouni Malinen /* dpp.c */
859d86e5828SJouni Malinen int dpp_dev_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
860d86e5828SJouni Malinen 			struct sigma_cmd *cmd);
861d86e5828SJouni Malinen 
862d86e5828SJouni Malinen 
863cd4e3c3eSJouni Malinen #endif /* SIGMA_DUT_H */
864