xref: /wlan-dirver/utils/sigma-dut/sigma_dut.h (revision 291d97dadd570992212fad937b2383f3cbc7be4c)
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 */
36*291d97daSPeng Xu #ifdef NL80211_SUPPORT
37*291d97daSPeng Xu #include <netlink/genl/family.h>
38*291d97daSPeng Xu #include <netlink/genl/ctrl.h>
39*291d97daSPeng Xu #include <netlink/genl/genl.h>
40*291d97daSPeng Xu #include "qca-vendor_copy.h"
41*291d97daSPeng Xu #include "nl80211_copy.h"
42*291d97daSPeng Xu #endif /* NL80211_SUPPORT */
43cd4e3c3eSJouni Malinen 
44cd4e3c3eSJouni Malinen 
45cd4e3c3eSJouni Malinen #ifdef __GNUC__
46cd4e3c3eSJouni Malinen #define PRINTF_FORMAT(a,b) __attribute__ ((format (printf, (a), (b))))
47cd4e3c3eSJouni Malinen #else
48cd4e3c3eSJouni Malinen #define PRINTF_FORMAT(a,b)
49cd4e3c3eSJouni Malinen #endif
50cd4e3c3eSJouni Malinen 
51cd4e3c3eSJouni Malinen #ifndef SIGMA_TMPDIR
52cd4e3c3eSJouni Malinen #define SIGMA_TMPDIR "/tmp"
53cd4e3c3eSJouni Malinen #endif /* SIGMA_TMPDIR */
54cd4e3c3eSJouni Malinen 
55cd4e3c3eSJouni Malinen #ifndef SIGMA_DUT_VER
56cd4e3c3eSJouni Malinen #define SIGMA_DUT_VER "(unknown)"
57cd4e3c3eSJouni Malinen #endif /* SIGMA_DUT_VER */
58cd4e3c3eSJouni Malinen 
59cd4e3c3eSJouni Malinen #ifndef ETH_ALEN
60cd4e3c3eSJouni Malinen #define ETH_ALEN 6
61cd4e3c3eSJouni Malinen #endif
62cd4e3c3eSJouni Malinen 
63cd4e3c3eSJouni Malinen #ifndef ETH_P_ARP
64cd4e3c3eSJouni Malinen #define ETH_P_ARP 0x0806
65cd4e3c3eSJouni Malinen #endif
66cd4e3c3eSJouni Malinen 
67cd4e3c3eSJouni Malinen struct sigma_dut;
68cd4e3c3eSJouni Malinen 
69cd4e3c3eSJouni Malinen #define MAX_PARAMS 100
70cd4e3c3eSJouni Malinen #define MAX_RADIO 2
71cd4e3c3eSJouni Malinen 
72cd4e3c3eSJouni Malinen /* Set default operating channel width 80 MHz */
73cd4e3c3eSJouni Malinen #define VHT_DEFAULT_OPER_CHWIDTH AP_80_VHT_OPER_CHWIDTH
74cd4e3c3eSJouni Malinen 
75cd4e3c3eSJouni Malinen typedef unsigned int u32;
761bde7947SAnkita Bajaj typedef uint16_t u16;
77cd4e3c3eSJouni Malinen typedef unsigned char u8;
78cd4e3c3eSJouni Malinen 
79cd4e3c3eSJouni Malinen #define WPA_GET_BE32(a) ((((u32) (a)[0]) << 24) | (((u32) (a)[1]) << 16) | \
80cd4e3c3eSJouni Malinen 			 (((u32) (a)[2]) << 8) | ((u32) (a)[3]))
81cd4e3c3eSJouni Malinen #define WPA_PUT_BE32(a, val)					\
82cd4e3c3eSJouni Malinen 	do {							\
83cd4e3c3eSJouni Malinen 		(a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff);	\
84cd4e3c3eSJouni Malinen 		(a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff);	\
85cd4e3c3eSJouni Malinen 		(a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff);	\
86cd4e3c3eSJouni Malinen 		(a)[3] = (u8) (((u32) (val)) & 0xff);		\
87cd4e3c3eSJouni Malinen 	} while (0)
88cd4e3c3eSJouni Malinen 
89cd4e3c3eSJouni Malinen struct sigma_cmd {
90cd4e3c3eSJouni Malinen 	char *params[MAX_PARAMS];
91cd4e3c3eSJouni Malinen 	char *values[MAX_PARAMS];
92cd4e3c3eSJouni Malinen 	int count;
93cd4e3c3eSJouni Malinen };
94cd4e3c3eSJouni Malinen 
95cd4e3c3eSJouni Malinen #define MAX_CMD_LEN 2048
96cd4e3c3eSJouni Malinen 
97cd4e3c3eSJouni Malinen struct sigma_conn {
98cd4e3c3eSJouni Malinen 	int s;
99cd4e3c3eSJouni Malinen 	struct sockaddr_in addr;
100cd4e3c3eSJouni Malinen 	socklen_t addrlen;
101cd4e3c3eSJouni Malinen 	char buf[MAX_CMD_LEN + 5];
102cd4e3c3eSJouni Malinen 	int pos;
103cd4e3c3eSJouni Malinen 	int waiting_completion;
104cd4e3c3eSJouni Malinen };
105cd4e3c3eSJouni Malinen 
106cd4e3c3eSJouni Malinen #define SIGMA_DUT_ERROR_CALLER_SEND_STATUS -2
107cd4e3c3eSJouni Malinen #define SIGMA_DUT_INVALID_CALLER_SEND_STATUS -1
108cd4e3c3eSJouni Malinen #define SIGMA_DUT_SUCCESS_STATUS_SENT 0
109cd4e3c3eSJouni Malinen #define SIGMA_DUT_SUCCESS_CALLER_SEND_STATUS 1
110cd4e3c3eSJouni Malinen 
111cd4e3c3eSJouni Malinen struct sigma_cmd_handler {
112cd4e3c3eSJouni Malinen 	struct sigma_cmd_handler *next;
113cd4e3c3eSJouni Malinen 	char *cmd;
114cd4e3c3eSJouni Malinen 	int (*validate)(struct sigma_cmd *cmd);
115cd4e3c3eSJouni Malinen 	/* process return value:
116cd4e3c3eSJouni Malinen 	 * -2 = failed, caller will send status,ERROR
117cd4e3c3eSJouni Malinen 	 * -1 = failed, caller will send status,INVALID
118cd4e3c3eSJouni Malinen 	 * 0 = success, response already sent
119cd4e3c3eSJouni Malinen 	 * 1 = success, caller will send status,COMPLETE
120cd4e3c3eSJouni Malinen 	 */
121cd4e3c3eSJouni Malinen 	int (*process)(struct sigma_dut *dut, struct sigma_conn *conn,
122cd4e3c3eSJouni Malinen 		       struct sigma_cmd *cmd);
123cd4e3c3eSJouni Malinen };
124cd4e3c3eSJouni Malinen 
125cd4e3c3eSJouni Malinen #define P2P_GRP_ID_LEN 128
126cd4e3c3eSJouni Malinen #define IP_ADDR_STR_LEN 16
127cd4e3c3eSJouni Malinen 
128cd4e3c3eSJouni Malinen struct wfa_cs_p2p_group {
129cd4e3c3eSJouni Malinen 	struct wfa_cs_p2p_group *next;
130cd4e3c3eSJouni Malinen 	char ifname[IFNAMSIZ];
131cd4e3c3eSJouni Malinen 	int go;
132cd4e3c3eSJouni Malinen 	char grpid[P2P_GRP_ID_LEN];
133cd4e3c3eSJouni Malinen 	char ssid[33];
134cd4e3c3eSJouni Malinen };
135cd4e3c3eSJouni Malinen 
136cd4e3c3eSJouni Malinen #ifdef CONFIG_TRAFFIC_AGENT
137cd4e3c3eSJouni Malinen 
138cd4e3c3eSJouni Malinen #define MAX_SIGMA_STREAMS 16
139cd4e3c3eSJouni Malinen #define MAX_SIGMA_STATS 6000
140cd4e3c3eSJouni Malinen 
141cd4e3c3eSJouni Malinen struct sigma_frame_stats {
142cd4e3c3eSJouni Malinen 	unsigned int seqnum;
143cd4e3c3eSJouni Malinen 	unsigned int local_sec;
144cd4e3c3eSJouni Malinen 	unsigned int local_usec;
145cd4e3c3eSJouni Malinen 	unsigned int remote_sec;
146cd4e3c3eSJouni Malinen 	unsigned int remote_usec;
147cd4e3c3eSJouni Malinen };
148cd4e3c3eSJouni Malinen 
149cd4e3c3eSJouni Malinen struct sigma_stream {
150cd4e3c3eSJouni Malinen 	enum sigma_stream_profile {
151cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_FILE_TRANSFER,
152cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_MULTICAST,
153cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_IPTV,
154cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_TRANSACTION,
155cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_START_SYNC,
156cd4e3c3eSJouni Malinen 		SIGMA_PROFILE_UAPSD
157cd4e3c3eSJouni Malinen 	} profile;
158cd4e3c3eSJouni Malinen 	int sender;
159cd4e3c3eSJouni Malinen 	struct in_addr dst;
160cd4e3c3eSJouni Malinen 	int dst_port;
161cd4e3c3eSJouni Malinen 	struct in_addr src;
162cd4e3c3eSJouni Malinen 	int src_port;
163cd4e3c3eSJouni Malinen 	int frame_rate;
164cd4e3c3eSJouni Malinen 	int duration;
165c2493f83SJouni Malinen 	unsigned int payload_size;
166cd4e3c3eSJouni Malinen 	int start_delay;
167cd4e3c3eSJouni Malinen 	int max_cnt;
168cd4e3c3eSJouni Malinen 	enum sigma_traffic_class {
169cd4e3c3eSJouni Malinen 		SIGMA_TC_VOICE,
170cd4e3c3eSJouni Malinen 		SIGMA_TC_VIDEO,
171cd4e3c3eSJouni Malinen 		SIGMA_TC_BACKGROUND,
172cd4e3c3eSJouni Malinen 		SIGMA_TC_BEST_EFFORT
173cd4e3c3eSJouni Malinen 	} tc;
174cd4e3c3eSJouni Malinen 	int user_priority;
175cd4e3c3eSJouni Malinen 	int user_priority_set;
176cd4e3c3eSJouni Malinen 	int started;
177cd4e3c3eSJouni Malinen 	int no_timestamps;
178cd4e3c3eSJouni Malinen 
179cd4e3c3eSJouni Malinen 	int sock;
180cd4e3c3eSJouni Malinen 	pthread_t thr;
181cd4e3c3eSJouni Malinen 	int stop;
182cd4e3c3eSJouni Malinen 	int ta_send_in_progress;
183cd4e3c3eSJouni Malinen 	int trans_proto;
184cd4e3c3eSJouni Malinen 
185cd4e3c3eSJouni Malinen 	/* Statistics */
186cd4e3c3eSJouni Malinen 	int tx_act_frames; /*
187cd4e3c3eSJouni Malinen 			    * Number of frames generated by the traffic
188cd4e3c3eSJouni Malinen 			    * generator application. The name is defined in the
189cd4e3c3eSJouni Malinen 			    * Sigma CAPI spec.
190cd4e3c3eSJouni Malinen 			    */
191cd4e3c3eSJouni Malinen 	int tx_frames;
192cd4e3c3eSJouni Malinen 	int rx_frames;
193cd4e3c3eSJouni Malinen 	unsigned long long tx_payload_bytes;
194cd4e3c3eSJouni Malinen 	unsigned long long rx_payload_bytes;
195cd4e3c3eSJouni Malinen 	int out_of_seq_frames;
196cd4e3c3eSJouni Malinen 	struct sigma_frame_stats *stats;
197cd4e3c3eSJouni Malinen 	unsigned int num_stats;
198cd4e3c3eSJouni Malinen 	unsigned int stream_id;
199cd4e3c3eSJouni Malinen 
200cd4e3c3eSJouni Malinen 	/* U-APSD */
201cd4e3c3eSJouni Malinen 	unsigned int sta_id;
202cd4e3c3eSJouni Malinen 	unsigned int rx_cookie;
203cd4e3c3eSJouni Malinen 	unsigned int uapsd_sta_tc;
204cd4e3c3eSJouni Malinen 	unsigned int uapsd_rx_state;
205cd4e3c3eSJouni Malinen 	unsigned int uapsd_tx_state;
206cd4e3c3eSJouni Malinen 	unsigned int tx_stop_cnt;
207cd4e3c3eSJouni Malinen 	unsigned int tx_hello_cnt;
208cd4e3c3eSJouni Malinen 	pthread_t uapsd_send_thr;
209cd4e3c3eSJouni Malinen 	pthread_cond_t tx_thr_cond;
210cd4e3c3eSJouni Malinen 	pthread_mutex_t tx_thr_mutex;
211cd4e3c3eSJouni Malinen 	int reset_rx;
212cd4e3c3eSJouni Malinen 	int num_retry;
213cd4e3c3eSJouni Malinen 	char ifname[IFNAMSIZ]; /* ifname from the command */
214cd4e3c3eSJouni Malinen 	struct sigma_dut *dut; /* for traffic agent thread to access context */
21579594049SPradeep Reddy POTTETI 	/* console */
21679594049SPradeep Reddy POTTETI 	char test_name[9]; /* test case name */
21779594049SPradeep Reddy POTTETI 	int can_quit;
21879594049SPradeep Reddy POTTETI 	int reset;
219cd4e3c3eSJouni Malinen };
220cd4e3c3eSJouni Malinen 
221cd4e3c3eSJouni Malinen #endif /* CONFIG_TRAFFIC_AGENT */
222cd4e3c3eSJouni Malinen 
223cd4e3c3eSJouni Malinen 
224cd4e3c3eSJouni Malinen #define NUM_AP_AC 4
225cd4e3c3eSJouni Malinen #define AP_AC_BE 0
226cd4e3c3eSJouni Malinen #define AP_AC_BK 1
227cd4e3c3eSJouni Malinen #define AP_AC_VI 2
228cd4e3c3eSJouni Malinen #define AP_AC_VO 3
229cd4e3c3eSJouni Malinen 
230b7b297f2SAdil Saeed Musthafa #define MAX_WLAN_TAGS 3
23169063725SAdil Saeed Musthafa #define MBO_MAX_PREF_BSSIDS 10
2324ec61bd9SAdil Saeed Musthafa #define MAX_FT_BSS_LIST 10
233b7b297f2SAdil Saeed Musthafa 
23457fa3d83SJouni Malinen enum value_not_set_enabled_disabled {
23557fa3d83SJouni Malinen 	VALUE_NOT_SET,
23657fa3d83SJouni Malinen 	VALUE_ENABLED,
23757fa3d83SJouni Malinen 	VALUE_DISABLED
23857fa3d83SJouni Malinen };
23957fa3d83SJouni Malinen 
2404b0cdee4SPradeep Reddy Potteti enum sec_ch_offset {
2414b0cdee4SPradeep Reddy Potteti 	SEC_CH_NO,
2424b0cdee4SPradeep Reddy Potteti 	SEC_CH_40ABOVE,
2434b0cdee4SPradeep Reddy Potteti 	SEC_CH_40BELOW
2444b0cdee4SPradeep Reddy Potteti };
2454b0cdee4SPradeep Reddy Potteti 
24669063725SAdil Saeed Musthafa struct mbo_pref_ap {
24769063725SAdil Saeed Musthafa 	int ap_ne_class;
24869063725SAdil Saeed Musthafa 	int ap_ne_op_ch;
24969063725SAdil Saeed Musthafa 	int ap_ne_pref;
25069063725SAdil Saeed Musthafa 	unsigned char mac_addr[ETH_ALEN];
25169063725SAdil Saeed Musthafa };
25269063725SAdil Saeed Musthafa 
253*291d97daSPeng Xu #ifdef NL80211_SUPPORT
254*291d97daSPeng Xu #define SOCK_BUF_SIZE (32 * 1024)
255*291d97daSPeng Xu struct nl80211_ctx {
256*291d97daSPeng Xu 	struct nl_sock *sock;
257*291d97daSPeng Xu 	int netlink_familyid;
258*291d97daSPeng Xu 	int nlctrl_familyid;
259*291d97daSPeng Xu 	size_t sock_buf_size;
260*291d97daSPeng Xu };
261*291d97daSPeng Xu #endif /* NL80211_SUPPORT */
262*291d97daSPeng Xu 
263cd4e3c3eSJouni Malinen struct sigma_dut {
264cd4e3c3eSJouni Malinen 	int s; /* server TCP socket */
265cd4e3c3eSJouni Malinen 	int debug_level;
266cd4e3c3eSJouni Malinen 	int stdout_debug;
267cd4e3c3eSJouni Malinen 	struct sigma_cmd_handler *cmds;
268cd4e3c3eSJouni Malinen 
269cd4e3c3eSJouni Malinen 	/* Default timeout value (seconds) for commands */
270cd4e3c3eSJouni Malinen 	unsigned int default_timeout;
271cd4e3c3eSJouni Malinen 
272cd4e3c3eSJouni Malinen 	int next_streamid;
273cd4e3c3eSJouni Malinen 
274cd4e3c3eSJouni Malinen 	const char *bridge; /* bridge interface to use in AP mode */
275cd4e3c3eSJouni Malinen 
276cd4e3c3eSJouni Malinen 	enum sigma_mode {
277cd4e3c3eSJouni Malinen 		SIGMA_MODE_UNKNOWN,
278cd4e3c3eSJouni Malinen 		SIGMA_MODE_STATION,
279cd4e3c3eSJouni Malinen 		SIGMA_MODE_AP,
280cd4e3c3eSJouni Malinen 		SIGMA_MODE_SNIFFER
281cd4e3c3eSJouni Malinen 	} mode;
282cd4e3c3eSJouni Malinen 
283cd4e3c3eSJouni Malinen 	/*
284cd4e3c3eSJouni Malinen 	 * Local cached values to handle API that does not provide all the
285cd4e3c3eSJouni Malinen 	 * needed information with commands that actually trigger some
286cd4e3c3eSJouni Malinen 	 * operations.
287cd4e3c3eSJouni Malinen 	 */
288cd4e3c3eSJouni Malinen 	int listen_chn;
289cd4e3c3eSJouni Malinen 	int persistent;
290cd4e3c3eSJouni Malinen 	int intra_bss;
291cd4e3c3eSJouni Malinen 	int noa_duration;
292cd4e3c3eSJouni Malinen 	int noa_interval;
293cd4e3c3eSJouni Malinen 	int noa_count;
294cd4e3c3eSJouni Malinen 	enum wfa_cs_wps_method {
295cd4e3c3eSJouni Malinen 		WFA_CS_WPS_NOT_READY,
296cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PBC,
297cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PIN_DISPLAY,
298cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PIN_LABEL,
299cd4e3c3eSJouni Malinen 		WFA_CS_WPS_PIN_KEYPAD
300cd4e3c3eSJouni Malinen 	} wps_method;
301cd4e3c3eSJouni Malinen 	char wps_pin[9];
302cd4e3c3eSJouni Malinen 
303cd4e3c3eSJouni Malinen 	struct wfa_cs_p2p_group *groups;
304cd4e3c3eSJouni Malinen 
305cd4e3c3eSJouni Malinen 	char infra_ssid[33];
306cd4e3c3eSJouni Malinen 	int infra_network_id;
307cd4e3c3eSJouni Malinen 
308cd4e3c3eSJouni Malinen 	enum p2p_mode {
309cd4e3c3eSJouni Malinen 		P2P_IDLE, P2P_DISCOVER, P2P_LISTEN, P2P_DISABLE
310cd4e3c3eSJouni Malinen 	} p2p_mode;
311cd4e3c3eSJouni Malinen 
312cd4e3c3eSJouni Malinen 	int go;
313cd4e3c3eSJouni Malinen 	int p2p_client;
314091e253dSPurushottam Kushwaha 	char *p2p_ifname;
315cd4e3c3eSJouni Malinen 
316cd4e3c3eSJouni Malinen 	int client_uapsd;
317cd4e3c3eSJouni Malinen 
318cd4e3c3eSJouni Malinen 	char arp_ipaddr[IP_ADDR_STR_LEN];
319cd4e3c3eSJouni Malinen 	char arp_ifname[IFNAMSIZ + 1];
320cd4e3c3eSJouni Malinen 
321cd4e3c3eSJouni Malinen 	enum sta_pmf {
322cd4e3c3eSJouni Malinen 		STA_PMF_DISABLED,
323cd4e3c3eSJouni Malinen 		STA_PMF_OPTIONAL,
324cd4e3c3eSJouni Malinen 		STA_PMF_REQUIRED
325cd4e3c3eSJouni Malinen 	} sta_pmf;
326cd4e3c3eSJouni Malinen 
327cd4e3c3eSJouni Malinen 	int no_tpk_expiration;
328cd4e3c3eSJouni Malinen 
329cd4e3c3eSJouni Malinen 	int er_oper_performed;
330cd4e3c3eSJouni Malinen 	char er_oper_bssid[20];
331cd4e3c3eSJouni Malinen 	int amsdu_size;
332cd4e3c3eSJouni Malinen 	int back_rcv_buf;
333cd4e3c3eSJouni Malinen 
334cd4e3c3eSJouni Malinen 	int testbed_flag_txsp;
335cd4e3c3eSJouni Malinen 	int testbed_flag_rxsp;
336cd4e3c3eSJouni Malinen 	int chwidth;
337cd4e3c3eSJouni Malinen 
338cd4e3c3eSJouni Malinen 	/* AP configuration */
339cd4e3c3eSJouni Malinen 	char ap_ssid[33];
340b7b297f2SAdil Saeed Musthafa 	/*
341b7b297f2SAdil Saeed Musthafa 	 * WLAN-TAG of 1 will use 'ap_' variables;
342b7b297f2SAdil Saeed Musthafa 	 * tag higher than 1 will use 'ap_tag_' variables.
343b7b297f2SAdil Saeed Musthafa 	 */
344b7b297f2SAdil Saeed Musthafa 	char ap_tag_ssid[MAX_WLAN_TAGS - 1][33];
345cd4e3c3eSJouni Malinen 	enum ap_mode {
346cd4e3c3eSJouni Malinen 		AP_11a,
347cd4e3c3eSJouni Malinen 		AP_11g,
348cd4e3c3eSJouni Malinen 		AP_11b,
349cd4e3c3eSJouni Malinen 		AP_11na,
350cd4e3c3eSJouni Malinen 		AP_11ng,
351cd4e3c3eSJouni Malinen 		AP_11ac,
352cd4e3c3eSJouni Malinen 		AP_inval
353cd4e3c3eSJouni Malinen 	} ap_mode;
354cd4e3c3eSJouni Malinen 	int ap_channel;
355cd4e3c3eSJouni Malinen 	int ap_rts;
356cd4e3c3eSJouni Malinen 	int ap_frgmnt;
357cd4e3c3eSJouni Malinen 	int ap_bcnint;
358cd4e3c3eSJouni Malinen 	struct qos_params {
359cd4e3c3eSJouni Malinen 		int ac;
360cd4e3c3eSJouni Malinen 		int cwmin;
361cd4e3c3eSJouni Malinen 		int cwmax;
362cd4e3c3eSJouni Malinen 		int aifs;
363cd4e3c3eSJouni Malinen 		int txop;
364cd4e3c3eSJouni Malinen 		int acm;
365cd4e3c3eSJouni Malinen 	} ap_qos[NUM_AP_AC], ap_sta_qos[NUM_AP_AC];
36657fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_noack;
36757fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_ampdu;
36857fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_amsdu;
36957fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_rx_amsdu;
370cd4e3c3eSJouni Malinen 	int ap_ampdu_exp;
37157fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_addba_reject;
372cd4e3c3eSJouni Malinen 	int ap_fixed_rate;
373cd4e3c3eSJouni Malinen 	int ap_mcs;
374cd4e3c3eSJouni Malinen 	int ap_rx_streams;
375cd4e3c3eSJouni Malinen 	int ap_tx_streams;
376cd4e3c3eSJouni Malinen 	unsigned int ap_vhtmcs_map;
37757fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_ldpc;
37857fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_sig_rts;
379cd4e3c3eSJouni Malinen 	enum ap_chwidth {
380cd4e3c3eSJouni Malinen 		AP_20,
381cd4e3c3eSJouni Malinen 		AP_40,
382cd4e3c3eSJouni Malinen 		AP_80,
383cd4e3c3eSJouni Malinen 		AP_160,
38463ab8483Spriyadharshini gowthaman 		AP_80_80,
385cd4e3c3eSJouni Malinen 		AP_AUTO
386cd4e3c3eSJouni Malinen 	} ap_chwidth;
387bf8af292SPradeep Reddy Potteti 	enum ap_chwidth default_11na_ap_chwidth;
388bf8af292SPradeep Reddy Potteti 	enum ap_chwidth default_11ng_ap_chwidth;
389cd4e3c3eSJouni Malinen 	int ap_tx_stbc;
39057fa3d83SJouni Malinen 	enum value_not_set_enabled_disabled ap_dyn_bw_sig;
391cd4e3c3eSJouni Malinen 	int ap_sgi80;
392cd4e3c3eSJouni Malinen 	int ap_p2p_mgmt;
393cd4e3c3eSJouni Malinen 	enum ap_key_mgmt {
394cd4e3c3eSJouni Malinen 		AP_OPEN,
395cd4e3c3eSJouni Malinen 		AP_WPA2_PSK,
396cd4e3c3eSJouni Malinen 		AP_WPA_PSK,
397cd4e3c3eSJouni Malinen 		AP_WPA2_EAP,
398cd4e3c3eSJouni Malinen 		AP_WPA_EAP,
399cd4e3c3eSJouni Malinen 		AP_WPA2_EAP_MIXED,
40030824df7SJouni Malinen 		AP_WPA2_PSK_MIXED,
40130824df7SJouni Malinen 		AP_WPA2_SAE,
40230824df7SJouni Malinen 		AP_WPA2_PSK_SAE,
403ad395a20SJouni Malinen 		AP_SUITEB,
404147b3c39SJouni Malinen 		AP_WPA2_OWE,
405cd4e3c3eSJouni Malinen 	} ap_key_mgmt;
406b7b297f2SAdil Saeed Musthafa 	enum ap_tag_key_mgmt {
407cd4e3c3eSJouni Malinen 		AP2_OPEN,
408b7b297f2SAdil Saeed Musthafa 		AP2_OSEN,
409353ba8b1SJouni Malinen 		AP2_WPA2_PSK,
410353ba8b1SJouni Malinen 		AP2_WPA2_OWE,
411b7b297f2SAdil Saeed Musthafa 	} ap_tag_key_mgmt[MAX_WLAN_TAGS - 1];
412cd4e3c3eSJouni Malinen 	int ap_add_sha256;
413de81f395Spriyadharshini gowthaman 	int ap_add_sha384;
41424dc7e40SSarvepalli, Rajesh Babu 	int ap_rsn_preauth;
415cd4e3c3eSJouni Malinen 	enum ap_pmf {
416cd4e3c3eSJouni Malinen 		AP_PMF_DISABLED,
417cd4e3c3eSJouni Malinen 		AP_PMF_OPTIONAL,
418cd4e3c3eSJouni Malinen 		AP_PMF_REQUIRED
419cd4e3c3eSJouni Malinen 	} ap_pmf;
420cd4e3c3eSJouni Malinen 	enum ap_cipher {
4212ba24498SJouni Malinen 		AP_NO_GROUP_CIPHER_SET,
422cd4e3c3eSJouni Malinen 		AP_CCMP,
423cd4e3c3eSJouni Malinen 		AP_TKIP,
424cd4e3c3eSJouni Malinen 		AP_WEP,
425cd4e3c3eSJouni Malinen 		AP_PLAIN,
426ad395a20SJouni Malinen 		AP_CCMP_TKIP,
427ad395a20SJouni Malinen 		AP_GCMP_256,
4283d633daeSJouni Malinen 		AP_GCMP_128,
4293d633daeSJouni Malinen 		AP_CCMP_256,
430d538c78eSJouni Malinen 		AP_CCMP_128_GCMP_256,
4312ba24498SJouni Malinen 	} ap_cipher, ap_group_cipher;
4323d633daeSJouni Malinen 	enum ap_group_mgmt_cipher {
4333d633daeSJouni Malinen 		AP_NO_GROUP_MGMT_CIPHER_SET,
4343d633daeSJouni Malinen 		AP_BIP_GMAC_256,
4353d633daeSJouni Malinen 		AP_BIP_CMAC_256,
4363d633daeSJouni Malinen 		AP_BIP_GMAC_128,
4373d633daeSJouni Malinen 		AP_BIP_CMAC_128,
4383d633daeSJouni Malinen 	} ap_group_mgmt_cipher;
439ed670f4cSJouni Malinen 	char *ap_sae_groups;
4402f524ce8SJouni Malinen 	int sae_anti_clogging_threshold;
441b347db0fSJouni Malinen 	int sae_reflection;
4422126f422SJouni Malinen 	char ap_passphrase[101];
44363370625SJouni Malinen 	char ap_psk[65];
444cd4e3c3eSJouni Malinen 	char ap_wepkey[27];
445cd4e3c3eSJouni Malinen 	char ap_radius_ipaddr[20];
446cd4e3c3eSJouni Malinen 	int ap_radius_port;
447cd4e3c3eSJouni Malinen 	char ap_radius_password[200];
448cd4e3c3eSJouni Malinen 	char ap2_radius_ipaddr[20];
449cd4e3c3eSJouni Malinen 	int ap2_radius_port;
450cd4e3c3eSJouni Malinen 	char ap2_radius_password[200];
451cd4e3c3eSJouni Malinen 	int ap_tdls_prohibit;
452cd4e3c3eSJouni Malinen 	int ap_tdls_prohibit_chswitch;
453cd4e3c3eSJouni Malinen 	int ap_hs2;
454cd4e3c3eSJouni Malinen 	int ap_dgaf_disable;
455cd4e3c3eSJouni Malinen 	int ap_p2p_cross_connect;
456cd4e3c3eSJouni Malinen 	int ap_oper_name;
457cd4e3c3eSJouni Malinen 	int ap_wan_metrics;
458cd4e3c3eSJouni Malinen 	int ap_conn_capab;
459cd4e3c3eSJouni Malinen 	int ap_oper_class;
460cd4e3c3eSJouni Malinen 
461cd4e3c3eSJouni Malinen 	int ap_interworking;
462cd4e3c3eSJouni Malinen 	int ap_access_net_type;
463cd4e3c3eSJouni Malinen 	int ap_internet;
464cd4e3c3eSJouni Malinen 	int ap_venue_group;
465cd4e3c3eSJouni Malinen 	int ap_venue_type;
466cd4e3c3eSJouni Malinen 	char ap_hessid[20];
467cd4e3c3eSJouni Malinen 	char ap_roaming_cons[100];
468cd4e3c3eSJouni Malinen 	int ap_venue_name;
469cd4e3c3eSJouni Malinen 	int ap_net_auth_type;
470cd4e3c3eSJouni Malinen 	int ap_nai_realm_list;
471cd4e3c3eSJouni Malinen 	char ap_domain_name_list[1000];
472cd4e3c3eSJouni Malinen 	int ap_ip_addr_type_avail;
473cd4e3c3eSJouni Malinen 	char ap_plmn_mcc[10][4];
474cd4e3c3eSJouni Malinen 	char ap_plmn_mnc[10][4];
475cd4e3c3eSJouni Malinen 	int ap_gas_cb_delay;
476cd4e3c3eSJouni Malinen 	int ap_proxy_arp;
477cd4e3c3eSJouni Malinen 	int ap2_proxy_arp;
478cd4e3c3eSJouni Malinen 	int ap_l2tif;
479cd4e3c3eSJouni Malinen 	int ap_anqpserver;
480cd4e3c3eSJouni Malinen 	int ap_anqpserver_on;
481cd4e3c3eSJouni Malinen 	int ap_osu_provider_list;
482cd4e3c3eSJouni Malinen 	int ap_qos_map_set;
483cd4e3c3eSJouni Malinen 	int ap_bss_load;
484cd4e3c3eSJouni Malinen 	char ap_osu_server_uri[10][256];
485cd4e3c3eSJouni Malinen 	char ap_osu_ssid[33];
486cd4e3c3eSJouni Malinen 	int ap_osu_method[10];
487cd4e3c3eSJouni Malinen 	int ap_osu_icon_tag;
488cd4e3c3eSJouni Malinen 
489cd4e3c3eSJouni Malinen 	int ap_fake_pkhash;
490cd4e3c3eSJouni Malinen 	int ap_disable_protection;
491cd4e3c3eSJouni Malinen 	int ap_allow_vht_wep;
492cd4e3c3eSJouni Malinen 	int ap_allow_vht_tkip;
493cd4e3c3eSJouni Malinen 
494cd4e3c3eSJouni Malinen 	enum ap_vht_chwidth {
495cd4e3c3eSJouni Malinen 		AP_20_40_VHT_OPER_CHWIDTH,
496cd4e3c3eSJouni Malinen 		AP_80_VHT_OPER_CHWIDTH,
497cd4e3c3eSJouni Malinen 		AP_160_VHT_OPER_CHWIDTH
498cd4e3c3eSJouni Malinen 	} ap_vht_chwidth;
499cd4e3c3eSJouni Malinen 	int ap_txBF;
500cd4e3c3eSJouni Malinen 	int ap_mu_txBF;
501fba27db5SPradeep Reddy POTTETI 	enum ap_regulatory_mode {
502fba27db5SPradeep Reddy POTTETI 		AP_80211D_MODE_DISABLED,
503fba27db5SPradeep Reddy POTTETI 		AP_80211D_MODE_ENABLED,
504fba27db5SPradeep Reddy POTTETI 	} ap_regulatory_mode;
505fba27db5SPradeep Reddy POTTETI 	enum ap_dfs_mode {
506fba27db5SPradeep Reddy POTTETI 		AP_DFS_MODE_DISABLED,
507fba27db5SPradeep Reddy POTTETI 		AP_DFS_MODE_ENABLED,
508fba27db5SPradeep Reddy POTTETI 	} ap_dfs_mode;
509264d544aSpriyadharshini gowthaman 	int ap_ndpa_frame;
510cd4e3c3eSJouni Malinen 
5118e26ff4aSpriyadharshini gowthaman 	int ap_lci;
5128e26ff4aSpriyadharshini gowthaman 	char ap_val_lci[33];
513c2357bdcSpriyadharshini gowthaman 	char ap_infoz[17];
5148e26ff4aSpriyadharshini gowthaman 	int ap_lcr;
5158e26ff4aSpriyadharshini gowthaman 	char ap_val_lcr[400];
5168e26ff4aSpriyadharshini gowthaman 	int ap_rrm;
5178e26ff4aSpriyadharshini gowthaman 	int ap_rtt;
5188e26ff4aSpriyadharshini gowthaman 	int ap_neighap; /* number of configured neighbor APs */
5198e26ff4aSpriyadharshini gowthaman 	unsigned char ap_val_neighap[3][6];
5208e26ff4aSpriyadharshini gowthaman 	int ap_opchannel; /* number of oper channels */
5218e26ff4aSpriyadharshini gowthaman 	int ap_val_opchannel[3];
5228e26ff4aSpriyadharshini gowthaman 	int ap_scan;
523c2357bdcSpriyadharshini gowthaman 	int ap_fqdn_held;
524c2357bdcSpriyadharshini gowthaman 	int ap_fqdn_supl;
525a27b5b6eSpriyadharshini gowthaman 	int ap_msnt_type;
526a27b5b6eSpriyadharshini gowthaman 
527b4e05fc1Spriyadharshini gowthaman 	int ap_mbo;
528b4e05fc1Spriyadharshini gowthaman 	int ap_ne_class;
529b4e05fc1Spriyadharshini gowthaman 	int ap_ne_op_ch;
530b4e05fc1Spriyadharshini gowthaman 	int ap_set_bssidpref;
531b4e05fc1Spriyadharshini gowthaman 	int ap_btmreq_disassoc_imnt;
532b4e05fc1Spriyadharshini gowthaman 	int ap_btmreq_term_bit;
5337d9ae389SAdil Saeed Musthafa 	int ap_disassoc_timer;
5347d9ae389SAdil Saeed Musthafa 	int ap_btmreq_bss_term_dur;
535604c8261SAdil Saeed Musthafa 	enum reg_domain {
536604c8261SAdil Saeed Musthafa 		REG_DOMAIN_NOT_SET,
537604c8261SAdil Saeed Musthafa 		REG_DOMAIN_LOCAL,
538604c8261SAdil Saeed Musthafa 		REG_DOMAIN_GLOBAL
539604c8261SAdil Saeed Musthafa 	} ap_reg_domain;
540cf752fa7SAdil Saeed Musthafa 	char ap_mobility_domain[10];
541023108aeSAdil Saeed Musthafa 	unsigned char ap_cell_cap_pref;
5424ec61bd9SAdil Saeed Musthafa 	int ap_ft_oa;
5434ec61bd9SAdil Saeed Musthafa 	int ap_name;
54409d613e1Spriyadharshini gowthaman 	int ap_interface_5g;
54509d613e1Spriyadharshini gowthaman 	int ap_interface_2g;
546776562e2Spriyadharshini gowthaman 	int ap_assoc_delay;
54794062b58Spriyadharshini gowthaman 	int ap_btmreq_bss_term_tsf;
54800798a21Spriyadharshini gowthaman 	int ap_fils_dscv_int;
54900798a21Spriyadharshini gowthaman 	int ap_nairealm_int;
55000798a21Spriyadharshini gowthaman 	char ap_nairealm[33];
55100798a21Spriyadharshini gowthaman 	int ap_blechanutil;
55200798a21Spriyadharshini gowthaman 	int ap_ble_admit_cap;
55300798a21Spriyadharshini gowthaman 	int ap_datappdudura;
55400798a21Spriyadharshini gowthaman 	int ap_airtimefract;
55500798a21Spriyadharshini gowthaman 	char ap_dhcpserv_ipaddr[20];
55600798a21Spriyadharshini gowthaman 	int ap_dhcp_stop;
55700798a21Spriyadharshini gowthaman 	int ap_bawinsize;
55800798a21Spriyadharshini gowthaman 	int ap_blestacnt;
559cb22e43aSpriyadharshini gowthaman 	int ap_ul_availcap;
560cb22e43aSpriyadharshini gowthaman 	int ap_dl_availcap;
561de81f395Spriyadharshini gowthaman 	int ap_akm;
562de81f395Spriyadharshini gowthaman 	int ap_pmksa;
563de81f395Spriyadharshini gowthaman 	int ap_pmksa_caching;
56463ab8483Spriyadharshini gowthaman 	int ap_80plus80;
5659149afc1Spriyadharshini gowthaman 	int ap_oper_chn;
5664ec61bd9SAdil Saeed Musthafa 
56769063725SAdil Saeed Musthafa 	struct mbo_pref_ap mbo_pref_aps[MBO_MAX_PREF_BSSIDS];
56869063725SAdil Saeed Musthafa 	struct mbo_pref_ap mbo_self_ap_tuple;
56969063725SAdil Saeed Musthafa 	int mbo_pref_ap_cnt;
5704ec61bd9SAdil Saeed Musthafa 	unsigned char ft_bss_mac_list[MAX_FT_BSS_LIST][ETH_ALEN];
5714ec61bd9SAdil Saeed Musthafa 	int ft_bss_mac_cnt;
572b4e05fc1Spriyadharshini gowthaman 
57300798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_oce;
57400798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_filsdscv;
57500798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_filshlp;
57600798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_broadcast_ssid;
57700798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_rnr;
57800798a21Spriyadharshini gowthaman 	enum value_not_set_enabled_disabled ap_esp;
57900798a21Spriyadharshini gowthaman 
580cd4e3c3eSJouni Malinen 	const char *hostapd_debug_log;
581cd4e3c3eSJouni Malinen 
582cd4e3c3eSJouni Malinen #ifdef CONFIG_TRAFFIC_AGENT
583cd4e3c3eSJouni Malinen 	/* Traffic Agent */
584cd4e3c3eSJouni Malinen 	struct sigma_stream streams[MAX_SIGMA_STREAMS];
585cd4e3c3eSJouni Malinen 	int stream_id;
586cd4e3c3eSJouni Malinen 	int num_streams;
587cd4e3c3eSJouni Malinen 	pthread_t thr;
588cd4e3c3eSJouni Malinen #endif /* CONFIG_TRAFFIC_AGENT */
589cd4e3c3eSJouni Malinen 
590c2493f83SJouni Malinen 	unsigned int throughput_pktsize; /* If non-zero, override pktsize for
591c2493f83SJouni Malinen 					  * throughput tests */
592cd4e3c3eSJouni Malinen 	int no_timestamps;
593cd4e3c3eSJouni Malinen 
594cd4e3c3eSJouni Malinen 	const char *sniffer_ifname;
595cd4e3c3eSJouni Malinen 	const char *set_macaddr;
596cd4e3c3eSJouni Malinen 	int tmp_mac_addr;
597cd4e3c3eSJouni Malinen 	int ap_is_dual;
598cd4e3c3eSJouni Malinen 	enum ap_mode ap_mode_1;
599cd4e3c3eSJouni Malinen 	enum ap_chwidth ap_chwidth_1;
600cd4e3c3eSJouni Malinen 	int ap_channel_1;
601cd4e3c3eSJouni Malinen 	char ap_countrycode[3];
602cd4e3c3eSJouni Malinen 
603cd4e3c3eSJouni Malinen 	int ap_wpsnfc;
604cd4e3c3eSJouni Malinen 
6050d3db632SPradeep Reddy POTTETI 	enum ap_wme {
6060d3db632SPradeep Reddy POTTETI 		AP_WME_OFF,
6070d3db632SPradeep Reddy POTTETI 		AP_WME_ON,
6080d3db632SPradeep Reddy POTTETI 	} ap_wme;
6090d3db632SPradeep Reddy POTTETI 
61002e3b826SMohammed Shafi Shajakhan 	enum ap_wmmps {
61102e3b826SMohammed Shafi Shajakhan 		AP_WMMPS_OFF,
61202e3b826SMohammed Shafi Shajakhan 		AP_WMMPS_ON,
61302e3b826SMohammed Shafi Shajakhan 	} ap_wmmps;
61402e3b826SMohammed Shafi Shajakhan 
6154b0cdee4SPradeep Reddy Potteti 	enum sec_ch_offset ap_chwidth_offset;
6164b0cdee4SPradeep Reddy Potteti 
617cd4e3c3eSJouni Malinen #ifdef CONFIG_SNIFFER
618cd4e3c3eSJouni Malinen 	pid_t sniffer_pid;
619cd4e3c3eSJouni Malinen 	char sniffer_filename[200];
620cd4e3c3eSJouni Malinen #endif /* CONFIG_SNIFFER */
621cd4e3c3eSJouni Malinen 
622cd4e3c3eSJouni Malinen 	int last_set_ip_config_ipv6;
6239c381f59SAmarnath Hullur Subramanyam #ifdef MIRACAST
6249c381f59SAmarnath Hullur Subramanyam 	pthread_t rtsp_thread_handle;
6259c381f59SAmarnath Hullur Subramanyam 	int wfd_device_type; /* 0 for source, 1 for sink */
6269c381f59SAmarnath Hullur Subramanyam 	char peer_mac_address[32];
6279c381f59SAmarnath Hullur Subramanyam 	void *miracast_lib;
6289c381f59SAmarnath Hullur Subramanyam 	const char *miracast_lib_path;
6299c381f59SAmarnath Hullur Subramanyam 	char mdns_instance_name[64];
6309c381f59SAmarnath Hullur Subramanyam #endif /* MIRACAST */
631cd4e3c3eSJouni Malinen 
632cd4e3c3eSJouni Malinen 	int tid_to_handle[8]; /* Mapping of TID to handle */
633cd4e3c3eSJouni Malinen 	int dialog_token; /* Used for generating unique handle for an addTs */
634cd4e3c3eSJouni Malinen 
635cd4e3c3eSJouni Malinen 	enum sigma_program {
636cd4e3c3eSJouni Malinen 		PROGRAM_UNKNOWN = 0,
637cd4e3c3eSJouni Malinen 		PROGRAM_TDLS,
638cd4e3c3eSJouni Malinen 		PROGRAM_HS2,
639cd4e3c3eSJouni Malinen 		PROGRAM_HS2_R2,
640cd4e3c3eSJouni Malinen 		PROGRAM_WFD,
641659a34c4SAmarnath Hullur Subramanyam 		PROGRAM_DISPLAYR2,
642cd4e3c3eSJouni Malinen 		PROGRAM_PMF,
643cd4e3c3eSJouni Malinen 		PROGRAM_WPS,
644cd4e3c3eSJouni Malinen 		PROGRAM_60GHZ,
645cd4e3c3eSJouni Malinen 		PROGRAM_HT,
646cd4e3c3eSJouni Malinen 		PROGRAM_VHT,
647cd4e3c3eSJouni Malinen 		PROGRAM_NAN,
64812dd4145Spriyadharshini gowthaman 		PROGRAM_LOC,
64933ea287aSAdil Saeed Musthafa 		PROGRAM_MBO,
6505c3813a7SJouni Malinen 		PROGRAM_IOTLP,
6515c3813a7SJouni Malinen 		PROGRAM_DPP,
652a2cb567bSAnkita Bajaj 		PROGRAM_OCE,
6530e209fccSpriyadharshini gowthaman 		PROGRAM_WPA3,
654cd4e3c3eSJouni Malinen 	} program;
655cd4e3c3eSJouni Malinen 
656cd4e3c3eSJouni Malinen 	enum device_type {
657cd4e3c3eSJouni Malinen 		device_type_unknown,
658cd4e3c3eSJouni Malinen 		AP_unknown,
659cd4e3c3eSJouni Malinen 		AP_testbed,
660cd4e3c3eSJouni Malinen 		AP_dut,
661cd4e3c3eSJouni Malinen 		STA_unknown,
662cd4e3c3eSJouni Malinen 		STA_testbed,
663cd4e3c3eSJouni Malinen 		STA_dut
664cd4e3c3eSJouni Malinen 	} device_type;
665cd4e3c3eSJouni Malinen 
666cd4e3c3eSJouni Malinen 	enum {
667cd4e3c3eSJouni Malinen 		DEVROLE_UNKNOWN = 0,
668cd4e3c3eSJouni Malinen 		DEVROLE_STA,
669cd4e3c3eSJouni Malinen 		DEVROLE_PCP,
6700d5825b5SAnkita Bajaj 		DEVROLE_STA_CFON
671cd4e3c3eSJouni Malinen 	} dev_role;
672cd4e3c3eSJouni Malinen 
673cd4e3c3eSJouni Malinen 	const char *version;
674cd4e3c3eSJouni Malinen 	int no_ip_addr_set;
675cd4e3c3eSJouni Malinen 	int sta_channel;
676cd4e3c3eSJouni Malinen 
677cd4e3c3eSJouni Malinen 	const char *summary_log;
678cd4e3c3eSJouni Malinen 	const char *hostapd_entropy_log;
679cd4e3c3eSJouni Malinen 
680cd4e3c3eSJouni Malinen 	int iface_down_on_reset;
681cd4e3c3eSJouni Malinen 	int write_stats; /* traffic stream e2e*.txt files */
68273d7af09SBala Krishna Bhamidipati 	int sim_no_username; /* do not set SIM username to use real SIM */
6835db3b104SJouni Malinen 
6845db3b104SJouni Malinen 	const char *vendor_name; /* device_get_info vendor override */
6855db3b104SJouni Malinen 	const char *model_name; /* device_get_info model override */
6865db3b104SJouni Malinen 	const char *version_name; /* device_get_info version override */
6877d37f411SRakesh Sunki 
68814cfcd25SRakesh Sunki 	int ndp_enable; /* Flag which is set once the NDP is setup */
68914cfcd25SRakesh Sunki 
6907d37f411SRakesh Sunki 	/* Length of nan_pmk in octets */
6917d37f411SRakesh Sunki 	u8 nan_pmk_len;
6927d37f411SRakesh Sunki 
6937d37f411SRakesh Sunki 	/*
6947d37f411SRakesh Sunki 	 * PMK: Info is optional in Discovery phase. PMK info can
6957d37f411SRakesh Sunki 	 *  be passed during the NDP session.
6967d37f411SRakesh Sunki 	 */
6977d37f411SRakesh Sunki 	u8 nan_pmk[32];
69833ea287aSAdil Saeed Musthafa 
69933ea287aSAdil Saeed Musthafa 	enum value_not_set_enabled_disabled wnm_bss_max_feature;
70033ea287aSAdil Saeed Musthafa 	int wnm_bss_max_idle_time;
70133ea287aSAdil Saeed Musthafa 	enum value_not_set_enabled_disabled wnm_bss_max_protection;
7020040258bSAshwini Patil 
7030040258bSAshwini Patil 	char *non_pref_ch_list; /* MBO: non-preferred channel report */
7045acd738cSAshwini Patil 	char *btm_query_cand_list; /* Candidate list for BTM Query */
7053c367e8dSJouni Malinen 
7066814313dSJouni Malinen 	char *sae_commit_override;
7073c367e8dSJouni Malinen 	char *rsne_override;
708d6bf1b4aSJouni Malinen 	const char *hostapd_bin;
709d6bf1b4aSJouni Malinen 	int use_hostapd_pid_file;
710d6bf1b4aSJouni Malinen 	const char *hostapd_ifname;
711d86e5828SJouni Malinen 	int hostapd_running;
712d86e5828SJouni Malinen 
713b1dd21f8SJouni Malinen 	char *dpp_peer_uri;
714d86e5828SJouni Malinen 	int dpp_local_bootstrap;
715d86e5828SJouni Malinen 	int dpp_conf_id;
7161bde7947SAnkita Bajaj 
7171bde7947SAnkita Bajaj 	u8 fils_hlp;
7181bde7947SAnkita Bajaj 	pthread_t hlp_thread;
719*291d97daSPeng Xu 
720*291d97daSPeng Xu #ifdef NL80211_SUPPORT
721*291d97daSPeng Xu 	struct nl80211_ctx *nl_ctx;
722*291d97daSPeng Xu #endif /* NL80211_SUPPORT */
723cd4e3c3eSJouni Malinen };
724cd4e3c3eSJouni Malinen 
725cd4e3c3eSJouni Malinen 
726cd4e3c3eSJouni Malinen enum sigma_dut_print_level {
727cd4e3c3eSJouni Malinen 	DUT_MSG_DEBUG, DUT_MSG_INFO, DUT_MSG_ERROR
728cd4e3c3eSJouni Malinen };
729cd4e3c3eSJouni Malinen 
730cd4e3c3eSJouni Malinen void sigma_dut_print(struct sigma_dut *dut, int level, const char *fmt, ...)
731cd4e3c3eSJouni Malinen PRINTF_FORMAT(3, 4);
732cd4e3c3eSJouni Malinen 
733cd4e3c3eSJouni Malinen void sigma_dut_summary(struct sigma_dut *dut, const char *fmt, ...)
734cd4e3c3eSJouni Malinen PRINTF_FORMAT(2, 3);
735cd4e3c3eSJouni Malinen 
736cd4e3c3eSJouni Malinen 
737cd4e3c3eSJouni Malinen enum sigma_status {
738cd4e3c3eSJouni Malinen 	SIGMA_RUNNING, SIGMA_INVALID, SIGMA_ERROR, SIGMA_COMPLETE
739cd4e3c3eSJouni Malinen };
740cd4e3c3eSJouni Malinen 
741cd4e3c3eSJouni Malinen void send_resp(struct sigma_dut *dut, struct sigma_conn *conn,
74276401f50SJouni Malinen 	       enum sigma_status status, const char *buf);
743cd4e3c3eSJouni Malinen 
744cd4e3c3eSJouni Malinen const char * get_param(struct sigma_cmd *cmd, const char *name);
745cd4e3c3eSJouni Malinen 
746cd4e3c3eSJouni Malinen int sigma_dut_reg_cmd(const char *cmd,
747cd4e3c3eSJouni Malinen 		      int (*validate)(struct sigma_cmd *cmd),
748cd4e3c3eSJouni Malinen 		      int (*process)(struct sigma_dut *dut,
749cd4e3c3eSJouni Malinen 				     struct sigma_conn *conn,
750cd4e3c3eSJouni Malinen 				     struct sigma_cmd *cmd));
751cd4e3c3eSJouni Malinen 
752cd4e3c3eSJouni Malinen void sigma_dut_register_cmds(void);
753cd4e3c3eSJouni Malinen 
754cd4e3c3eSJouni Malinen int cmd_sta_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
755cd4e3c3eSJouni Malinen 		       struct sigma_cmd *cmd);
756cd4e3c3eSJouni Malinen int cmd_sta_set_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
757cd4e3c3eSJouni Malinen 			  struct sigma_cmd *cmd);
758cd4e3c3eSJouni Malinen int cmd_ap_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
759cd4e3c3eSJouni Malinen 		      struct sigma_cmd *cmd);
760cd4e3c3eSJouni Malinen int cmd_wlantest_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
761cd4e3c3eSJouni Malinen 			    struct sigma_cmd *cmd);
7620d5825b5SAnkita Bajaj int sta_cfon_set_wireless(struct sigma_dut *dut, struct sigma_conn *conn,
7630d5825b5SAnkita Bajaj 			  struct sigma_cmd *cmd);
7640d5825b5SAnkita Bajaj int sta_cfon_get_mac_address(struct sigma_dut *dut, struct sigma_conn *conn,
7650d5825b5SAnkita Bajaj 			     struct sigma_cmd *cmd);
7660d5825b5SAnkita Bajaj int sta_cfon_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
7670d5825b5SAnkita Bajaj 			   struct sigma_cmd *cmd);
768cd4e3c3eSJouni Malinen 
769cd4e3c3eSJouni Malinen enum driver_type {
770cd4e3c3eSJouni Malinen 	DRIVER_NOT_SET,
771cd4e3c3eSJouni Malinen 	DRIVER_ATHEROS,
772cd4e3c3eSJouni Malinen 	DRIVER_WCN,
773cd4e3c3eSJouni Malinen 	DRIVER_MAC80211,
774cd4e3c3eSJouni Malinen 	DRIVER_AR6003,
775cd4e3c3eSJouni Malinen 	DRIVER_WIL6210,
776cd4e3c3eSJouni Malinen 	DRIVER_QNXNTO,
777b692f107SSreelakshmi Konamki 	DRIVER_OPENWRT,
778b692f107SSreelakshmi Konamki 	DRIVER_LINUX_WCN,
779cd4e3c3eSJouni Malinen };
780cd4e3c3eSJouni Malinen 
781cd4e3c3eSJouni Malinen enum openwrt_driver_type {
782cd4e3c3eSJouni Malinen 	OPENWRT_DRIVER_NOT_SET,
783cd4e3c3eSJouni Malinen 	OPENWRT_DRIVER_ATHEROS
784cd4e3c3eSJouni Malinen };
785cd4e3c3eSJouni Malinen 
786cd4e3c3eSJouni Malinen #define DRIVER_NAME_60G "wil6210"
787cd4e3c3eSJouni Malinen 
788cd4e3c3eSJouni Malinen int set_wifi_chip(const char *chip_type);
789cd4e3c3eSJouni Malinen enum driver_type get_driver_type(void);
790cd4e3c3eSJouni Malinen enum openwrt_driver_type get_openwrt_driver_type(void);
791cd4e3c3eSJouni Malinen int file_exists(const char *fname);
792cd4e3c3eSJouni Malinen 
793cd4e3c3eSJouni Malinen struct wpa_ctrl;
794cd4e3c3eSJouni Malinen 
795cd4e3c3eSJouni Malinen int wps_connection_event(struct sigma_dut *dut, struct sigma_conn *conn,
796cd4e3c3eSJouni Malinen 			 struct wpa_ctrl *ctrl, const char *intf, int p2p_resp);
797cd4e3c3eSJouni Malinen int ascii2hexstr(const char *str, char *hex);
798cd4e3c3eSJouni Malinen void disconnect_station(struct sigma_dut *dut);
799cd4e3c3eSJouni Malinen void nfc_status(struct sigma_dut *dut, const char *state, const char *oper);
800cd4e3c3eSJouni Malinen int get_ip_config(struct sigma_dut *dut, const char *ifname, char *buf,
801cd4e3c3eSJouni Malinen 		  size_t buf_len);
802cd4e3c3eSJouni Malinen int ath6kl_client_uapsd(struct sigma_dut *dut, const char *intf, int uapsd);
803cd4e3c3eSJouni Malinen int is_ip_addr(const char *str);
804cd4e3c3eSJouni Malinen int run_system(struct sigma_dut *dut, const char *cmd);
8055f793f0dSAdil Saeed Musthafa int run_system_wrapper(struct sigma_dut *dut, const char *cmd, ...);
806cd4e3c3eSJouni Malinen int cmd_wlantest_set_channel(struct sigma_dut *dut, struct sigma_conn *conn,
807cd4e3c3eSJouni Malinen 			     struct sigma_cmd *cmd);
808cd4e3c3eSJouni Malinen void sniffer_close(struct sigma_dut *dut);
809cd4e3c3eSJouni Malinen 
810cd4e3c3eSJouni Malinen /* ap.c */
811cd4e3c3eSJouni Malinen void ath_disable_txbf(struct sigma_dut *dut, const char *intf);
812818afef5SPriyadharshini Gowthaman void ath_config_dyn_bw_sig(struct sigma_dut *dut, const char *ifname,
813818afef5SPriyadharshini Gowthaman 			   const char *val);
814e5e2517eSpriyadharshini gowthaman void novap_reset(struct sigma_dut *dut, const char *ifname);
8152e6ccc22SJouni Malinen int get_hwaddr(const char *ifname, unsigned char *hwaddr);
816a326d7b5SJouni Malinen int cmd_ap_config_commit(struct sigma_dut *dut, struct sigma_conn *conn,
817a326d7b5SJouni Malinen 			 struct sigma_cmd *cmd);
818cd4e3c3eSJouni Malinen 
819cd4e3c3eSJouni Malinen /* sta.c */
820cd4e3c3eSJouni Malinen int set_ps(const char *intf, struct sigma_dut *dut, int enabled);
821cd4e3c3eSJouni Malinen void ath_set_zero_crc(struct sigma_dut *dut, const char *val);
822cd4e3c3eSJouni Malinen void ath_set_cts_width(struct sigma_dut *dut, const char *ifname,
823cd4e3c3eSJouni Malinen 		       const char *val);
824cd4e3c3eSJouni Malinen int ath_set_width(struct sigma_dut *dut, struct sigma_conn *conn,
825cd4e3c3eSJouni Malinen 		  const char *intf, const char *val);
8260fe101e9SLior David int wil6210_send_frame_60g(struct sigma_dut *dut, struct sigma_conn *conn,
8270fe101e9SLior David 			   struct sigma_cmd *cmd);
8281bde7947SAnkita Bajaj int hwaddr_aton(const char *txt, unsigned char *addr);
8291bde7947SAnkita Bajaj int set_ipv4_addr(struct sigma_dut *dut, const char *ifname,
8301bde7947SAnkita Bajaj 		  const char *ip, const char *mask);
8311bde7947SAnkita Bajaj int set_ipv4_gw(struct sigma_dut *dut, const char *gw);
832cd4e3c3eSJouni Malinen 
833cd4e3c3eSJouni Malinen /* p2p.c */
834cd4e3c3eSJouni Malinen int p2p_cmd_sta_get_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
835cd4e3c3eSJouni Malinen 			      struct sigma_cmd *cmd);
836091e253dSPurushottam Kushwaha void p2p_create_event_thread(struct sigma_dut *dut);
837091e253dSPurushottam Kushwaha void stop_event_thread(void);
83889b37cdcSAmarnath Hullur Subramanyam void start_dhcp(struct sigma_dut *dut, const char *group_ifname, int go);
83989b37cdcSAmarnath Hullur Subramanyam void stop_dhcp(struct sigma_dut *dut, const char *group_ifname, int go);
84089b37cdcSAmarnath Hullur Subramanyam int p2p_discover_peer(struct sigma_dut *dut, const char *ifname,
84189b37cdcSAmarnath Hullur Subramanyam 		      const char *peer, int full);
842cd4e3c3eSJouni Malinen 
84372462ef3Spriyadharshini gowthaman /* utils.c */
844cd4e3c3eSJouni Malinen enum sigma_program sigma_program_to_enum(const char *prog);
84508cf231dSJouni Malinen int parse_hexstr(const char *hex, unsigned char *buf, size_t buflen);
84672462ef3Spriyadharshini gowthaman int parse_mac_address(struct sigma_dut *dut, const char *arg,
84772462ef3Spriyadharshini gowthaman 		      unsigned char *addr);
8487192dc42SRakesh Sunki unsigned int channel_to_freq(unsigned int channel);
8497192dc42SRakesh Sunki unsigned int freq_to_channel(unsigned int freq);
8508f8e74b5SRakesh Sunki void convert_mac_addr_to_ipv6_lladdr(u8 *mac_addr, char *ipv6_buf,
8518f8e74b5SRakesh Sunki 				     size_t buf_len);
852cd4e3c3eSJouni Malinen 
853769731a2SPeng Xu #ifndef ANDROID
854769731a2SPeng Xu size_t strlcpy(char *dest, const char *src, size_t siz);
855769731a2SPeng Xu size_t strlcat(char *dst, const char *str, size_t size);
856769731a2SPeng Xu #endif /* ANDROID */
8571bde7947SAnkita Bajaj void hex_dump(struct sigma_dut *dut, u8 *data, size_t len);
858769731a2SPeng Xu 
859769731a2SPeng Xu 
860cd4e3c3eSJouni Malinen /* uapsd_stream.c */
861cd4e3c3eSJouni Malinen void receive_uapsd(struct sigma_stream *s);
86279594049SPradeep Reddy POTTETI void send_uapsd_console(struct sigma_stream *s);
863cd4e3c3eSJouni Malinen 
864cd4e3c3eSJouni Malinen /* nan.c */
865cd4e3c3eSJouni Malinen int nan_preset_testparameters(struct sigma_dut *dut, struct sigma_conn *conn,
866cd4e3c3eSJouni Malinen 			      struct sigma_cmd *cmd);
867cd4e3c3eSJouni Malinen int nan_cmd_sta_get_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
868cd4e3c3eSJouni Malinen 			      struct sigma_cmd *cmd);
869cd4e3c3eSJouni Malinen int nan_cmd_sta_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
870cd4e3c3eSJouni Malinen 			    struct sigma_cmd *cmd);
871cd4e3c3eSJouni Malinen int nan_cmd_sta_get_events(struct sigma_dut *dut, struct sigma_conn *conn,
872cd4e3c3eSJouni Malinen 			   struct sigma_cmd *cmd);
873cd4e3c3eSJouni Malinen int nan_cmd_sta_transmit_followup(struct sigma_dut *dut,
874cd4e3c3eSJouni Malinen 				  struct sigma_conn *conn,
875cd4e3c3eSJouni Malinen 				  struct sigma_cmd *cmd);
876cd4e3c3eSJouni Malinen void nan_cmd_sta_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
877cd4e3c3eSJouni Malinen 			       struct sigma_cmd *cmd);
878cd4e3c3eSJouni Malinen int nan_cmd_sta_preset_testparameters(struct sigma_dut *dut,
879cd4e3c3eSJouni Malinen 				      struct sigma_conn *conn,
880cd4e3c3eSJouni Malinen 				      struct sigma_cmd *cmd);
881cd4e3c3eSJouni Malinen 
882d66913acSpriyadharshini gowthaman /* ftm.c */
883d66913acSpriyadharshini gowthaman int loc_cmd_sta_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
884d66913acSpriyadharshini gowthaman 			    struct sigma_cmd *cmd);
885d66913acSpriyadharshini gowthaman int loc_cmd_sta_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
886d66913acSpriyadharshini gowthaman 			   struct sigma_cmd *cmd);
887d66913acSpriyadharshini gowthaman int loc_cmd_sta_preset_testparameters(struct sigma_dut *dut,
888d66913acSpriyadharshini gowthaman 				      struct sigma_conn *conn,
889d66913acSpriyadharshini gowthaman 				      struct sigma_cmd *cmd);
890d66913acSpriyadharshini gowthaman 
891d86e5828SJouni Malinen /* dpp.c */
892d86e5828SJouni Malinen int dpp_dev_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
893d86e5828SJouni Malinen 			struct sigma_cmd *cmd);
894d86e5828SJouni Malinen 
8951bde7947SAnkita Bajaj /* dhcp.c */
8961bde7947SAnkita Bajaj void process_fils_hlp(struct sigma_dut *dut);
8971bde7947SAnkita Bajaj void hlp_thread_cleanup(struct sigma_dut *dut);
898d86e5828SJouni Malinen 
899*291d97daSPeng Xu #ifdef NL80211_SUPPORT
900*291d97daSPeng Xu struct nl80211_ctx * nl80211_init(struct sigma_dut *dut);
901*291d97daSPeng Xu void nl80211_deinit(struct sigma_dut *dut, struct nl80211_ctx *ctx);
902*291d97daSPeng Xu struct nl_msg * nl80211_drv_msg(struct sigma_dut *dut, struct nl80211_ctx *ctx,
903*291d97daSPeng Xu 				int ifindex, int flags,
904*291d97daSPeng Xu 				uint8_t cmd);
905*291d97daSPeng Xu int send_and_recv_msgs(struct sigma_dut *dut, struct nl80211_ctx *ctx,
906*291d97daSPeng Xu 		       struct nl_msg *nlmsg,
907*291d97daSPeng Xu 		       int (*valid_handler)(struct nl_msg *, void *),
908*291d97daSPeng Xu 		       void *valid_data);
909*291d97daSPeng Xu #endif /* NL80211_SUPPORT */
910*291d97daSPeng Xu 
911cd4e3c3eSJouni Malinen #endif /* SIGMA_DUT_H */
912