blob: f6054810b7d409676d9239b6e81eecb4060075e9 [file] [log] [blame]
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001/*
2 * Sigma Control API DUT (station/AP)
3 * Copyright (c) 2010-2011, Atheros Communications, Inc.
Amarnath Hullur Subramanyam9c381f52017-03-17 00:04:41 -07004 * Copyright (c) 2011-2017, Qualcomm Atheros, Inc.
Jouni Malinen0fee7012019-02-19 12:41:07 +02005 * Copyright (c) 2018-2019, The Linux Foundation
Jouni Malinencd4e3c32015-10-29 12:39:56 +02006 * All Rights Reserved.
7 * Licensed under the Clear BSD license. See README for more details.
8 */
9
10#ifndef SIGMA_DUT_H
11#define SIGMA_DUT_H
12
Lior David9981b512017-01-20 13:16:40 +020013#ifdef __GNUC__
14#define _GNU_SOURCE 1
15#endif
16
Jouni Malinencd4e3c32015-10-29 12:39:56 +020017#include <stdlib.h>
18#include <stdio.h>
19#include <stdarg.h>
20#include <string.h>
21#include <errno.h>
22#include <unistd.h>
23#include <time.h>
24#include <sys/time.h>
Jouni Malinen3d972ba2017-03-15 20:52:20 +020025#include <sys/types.h>
Jouni Malinencd4e3c32015-10-29 12:39:56 +020026#include <sys/socket.h>
27#include <net/if.h>
28#ifdef __QNXNTO__
29#include <sys/select.h>
30#include <net/if_ether.h>
31#endif /* __QNXNTO__ */
32#include <netinet/in.h>
33#include <arpa/inet.h>
34#ifdef CONFIG_TRAFFIC_AGENT
35#include <pthread.h>
36#endif /* CONFIG_TRAFFIC_AGENT */
Peng Xu291d97d2018-01-31 16:34:03 -080037#ifdef NL80211_SUPPORT
38#include <netlink/genl/family.h>
39#include <netlink/genl/ctrl.h>
40#include <netlink/genl/genl.h>
41#include "qca-vendor_copy.h"
42#include "nl80211_copy.h"
43#endif /* NL80211_SUPPORT */
Vinay Gannevaram2dfb1da2019-06-14 15:24:08 +053044#ifdef ANDROID_WIFI_HAL
45#include "wifi_hal.h"
46#endif /*ANDROID_WIFI_HAL*/
Jouni Malinencd4e3c32015-10-29 12:39:56 +020047
48
49#ifdef __GNUC__
50#define PRINTF_FORMAT(a,b) __attribute__ ((format (printf, (a), (b))))
51#else
52#define PRINTF_FORMAT(a,b)
53#endif
54
Jouni Malinenda5f35b2019-03-26 00:25:53 +020055#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
56
Jouni Malinencd4e3c32015-10-29 12:39:56 +020057#ifndef SIGMA_TMPDIR
58#define SIGMA_TMPDIR "/tmp"
59#endif /* SIGMA_TMPDIR */
60
61#ifndef SIGMA_DUT_VER
62#define SIGMA_DUT_VER "(unknown)"
63#endif /* SIGMA_DUT_VER */
64
65#ifndef ETH_ALEN
66#define ETH_ALEN 6
67#endif
68
69#ifndef ETH_P_ARP
70#define ETH_P_ARP 0x0806
71#endif
72
Alexei Avshalom Lazara90032d2019-05-02 13:34:02 +030073#ifndef ARRAY_SIZE
74#define ARRAY_SIZE(x) (sizeof((x)) / (sizeof(((x)[0]))))
75#endif
76
Peng Xu47d709b2019-06-04 18:14:02 -070077#define IPV6_ADDR_LEN 16
78
Jouni Malinencd4e3c32015-10-29 12:39:56 +020079struct sigma_dut;
80
81#define MAX_PARAMS 100
Alejandro Vasquez363f5582018-07-17 11:25:05 -070082#define MAX_RADIO 3
Jouni Malinencd4e3c32015-10-29 12:39:56 +020083
Ajit Vaishyac2ae9612020-02-28 00:09:07 +053084#define NAN_AWARE_IFACE "wifi-aware0"
85
Jouni Malinencd4e3c32015-10-29 12:39:56 +020086/* Set default operating channel width 80 MHz */
87#define VHT_DEFAULT_OPER_CHWIDTH AP_80_VHT_OPER_CHWIDTH
88
89typedef unsigned int u32;
Ankita Bajaj1bde7942018-01-09 19:15:01 +053090typedef uint16_t u16;
Jouni Malinencd4e3c32015-10-29 12:39:56 +020091typedef unsigned char u8;
92
Alexei Avshalom Lazara90032d2019-05-02 13:34:02 +030093struct ieee80211_hdr_3addr {
94 uint16_t frame_control;
95 uint16_t duration_id;
96 uint8_t addr1[ETH_ALEN];
97 uint8_t addr2[ETH_ALEN];
98 uint8_t addr3[ETH_ALEN];
99 uint16_t seq_ctrl;
100} __attribute__((packed));
101
102struct wfa_p2p_attribute {
103 uint8_t id;
104 uint16_t len;
105 uint8_t variable[0];
106} __attribute__((packed));
107
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200108#define WPA_GET_BE32(a) ((((u32) (a)[0]) << 24) | (((u32) (a)[1]) << 16) | \
109 (((u32) (a)[2]) << 8) | ((u32) (a)[3]))
110#define WPA_PUT_BE32(a, val) \
111 do { \
112 (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff); \
113 (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff); \
114 (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff); \
115 (a)[3] = (u8) (((u32) (val)) & 0xff); \
116 } while (0)
117
118struct sigma_cmd {
119 char *params[MAX_PARAMS];
120 char *values[MAX_PARAMS];
121 int count;
122};
123
Alejandro Vasquez3410aa52018-07-17 11:26:17 -0700124#define MAX_CMD_LEN 4096
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200125
126struct sigma_conn {
127 int s;
128 struct sockaddr_in addr;
129 socklen_t addrlen;
130 char buf[MAX_CMD_LEN + 5];
131 int pos;
132 int waiting_completion;
133};
134
Jouni Malinen0e29cf22019-02-19 01:13:21 +0200135enum sigma_cmd_result {
Jouni Malinen53264f62019-05-03 13:04:40 +0300136 STATUS_SENT_ERROR = -3,
Jouni Malinen0e29cf22019-02-19 01:13:21 +0200137 ERROR_SEND_STATUS = -2,
138 INVALID_SEND_STATUS = -1,
139 STATUS_SENT = 0,
140 SUCCESS_SEND_STATUS = 1
141};
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200142
143struct sigma_cmd_handler {
144 struct sigma_cmd_handler *next;
145 char *cmd;
146 int (*validate)(struct sigma_cmd *cmd);
147 /* process return value:
148 * -2 = failed, caller will send status,ERROR
149 * -1 = failed, caller will send status,INVALID
Jouni Malinen0e29cf22019-02-19 01:13:21 +0200150 * 0 = response already sent
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200151 * 1 = success, caller will send status,COMPLETE
152 */
Jouni Malinen26a5b762019-02-19 01:17:48 +0200153 enum sigma_cmd_result (*process)(struct sigma_dut *dut,
154 struct sigma_conn *conn,
155 struct sigma_cmd *cmd);
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200156};
157
158#define P2P_GRP_ID_LEN 128
159#define IP_ADDR_STR_LEN 16
160
161struct wfa_cs_p2p_group {
162 struct wfa_cs_p2p_group *next;
163 char ifname[IFNAMSIZ];
164 int go;
165 char grpid[P2P_GRP_ID_LEN];
166 char ssid[33];
167};
168
169#ifdef CONFIG_TRAFFIC_AGENT
170
171#define MAX_SIGMA_STREAMS 16
172#define MAX_SIGMA_STATS 6000
173
174struct sigma_frame_stats {
175 unsigned int seqnum;
176 unsigned int local_sec;
177 unsigned int local_usec;
178 unsigned int remote_sec;
179 unsigned int remote_usec;
180};
181
182struct sigma_stream {
183 enum sigma_stream_profile {
184 SIGMA_PROFILE_FILE_TRANSFER,
185 SIGMA_PROFILE_MULTICAST,
186 SIGMA_PROFILE_IPTV,
187 SIGMA_PROFILE_TRANSACTION,
188 SIGMA_PROFILE_START_SYNC,
189 SIGMA_PROFILE_UAPSD
190 } profile;
191 int sender;
192 struct in_addr dst;
193 int dst_port;
194 struct in_addr src;
195 int src_port;
196 int frame_rate;
197 int duration;
Jouni Malinenc2493f82016-06-05 18:01:33 +0300198 unsigned int payload_size;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200199 int start_delay;
200 int max_cnt;
201 enum sigma_traffic_class {
202 SIGMA_TC_VOICE,
203 SIGMA_TC_VIDEO,
204 SIGMA_TC_BACKGROUND,
205 SIGMA_TC_BEST_EFFORT
206 } tc;
207 int user_priority;
208 int user_priority_set;
209 int started;
210 int no_timestamps;
211
212 int sock;
213 pthread_t thr;
214 int stop;
215 int ta_send_in_progress;
216 int trans_proto;
217
218 /* Statistics */
219 int tx_act_frames; /*
220 * Number of frames generated by the traffic
221 * generator application. The name is defined in the
222 * Sigma CAPI spec.
223 */
224 int tx_frames;
225 int rx_frames;
226 unsigned long long tx_payload_bytes;
227 unsigned long long rx_payload_bytes;
228 int out_of_seq_frames;
229 struct sigma_frame_stats *stats;
230 unsigned int num_stats;
231 unsigned int stream_id;
232
233 /* U-APSD */
234 unsigned int sta_id;
235 unsigned int rx_cookie;
236 unsigned int uapsd_sta_tc;
237 unsigned int uapsd_rx_state;
238 unsigned int uapsd_tx_state;
239 unsigned int tx_stop_cnt;
240 unsigned int tx_hello_cnt;
241 pthread_t uapsd_send_thr;
242 pthread_cond_t tx_thr_cond;
243 pthread_mutex_t tx_thr_mutex;
244 int reset_rx;
245 int num_retry;
246 char ifname[IFNAMSIZ]; /* ifname from the command */
247 struct sigma_dut *dut; /* for traffic agent thread to access context */
Pradeep Reddy POTTETI79594042015-11-23 12:59:12 +0530248 /* console */
249 char test_name[9]; /* test case name */
250 int can_quit;
251 int reset;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200252};
253
254#endif /* CONFIG_TRAFFIC_AGENT */
255
Alexei Avshalom Lazarbc180dc2018-12-18 16:01:14 +0200256/* extended scheduling test */
257enum sigma_ese_type {
258 ESE_CBAP,
259 ESE_SP,
260};
261
262struct sigma_ese_alloc {
263 unsigned int percent_bi;
264 enum sigma_ese_type type;
265 unsigned int src_aid, dst_aid;
266};
267
268#define ESE_BCAST_AID 255
269#define MAX_ESE_ALLOCS 4
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200270
271#define NUM_AP_AC 4
272#define AP_AC_BE 0
273#define AP_AC_BK 1
274#define AP_AC_VI 2
275#define AP_AC_VO 3
276
Adil Saeed Musthafab7b297f2017-04-10 23:13:31 -0700277#define MAX_WLAN_TAGS 3
Adil Saeed Musthafa69063722017-04-10 23:13:40 -0700278#define MBO_MAX_PREF_BSSIDS 10
Adil Saeed Musthafa4ec61bd2017-04-10 23:13:41 -0700279#define MAX_FT_BSS_LIST 10
Adil Saeed Musthafab7b297f2017-04-10 23:13:31 -0700280
Peng Xu8863ec72018-08-06 11:50:37 -0700281#define TRANSPORT_PROTO_TYPE_TCP 0x06
282#define TRANSPORT_PROTO_TYPE_UDP 0x11
283#define NAN_TRANSPORT_PORT_DEFAULT 7000
284#define NAN_TRANSPORT_PROTOCOL_DEFAULT TRANSPORT_PROTO_TYPE_TCP
285
Jouni Malinen57fa3d82016-11-30 12:51:43 +0200286enum value_not_set_enabled_disabled {
287 VALUE_NOT_SET,
288 VALUE_ENABLED,
289 VALUE_DISABLED
290};
291
Pradeep Reddy Potteti4b0cdee2017-03-15 12:37:33 +0530292enum sec_ch_offset {
293 SEC_CH_NO,
294 SEC_CH_40ABOVE,
295 SEC_CH_40BELOW
296};
297
Adil Saeed Musthafa69063722017-04-10 23:13:40 -0700298struct mbo_pref_ap {
299 int ap_ne_class;
300 int ap_ne_op_ch;
301 int ap_ne_pref;
302 unsigned char mac_addr[ETH_ALEN];
303};
304
Peng Xu291d97d2018-01-31 16:34:03 -0800305#ifdef NL80211_SUPPORT
306#define SOCK_BUF_SIZE (32 * 1024)
307struct nl80211_ctx {
308 struct nl_sock *sock;
309 int netlink_familyid;
310 int nlctrl_familyid;
311 size_t sock_buf_size;
312};
313#endif /* NL80211_SUPPORT */
314
Alexei Avshalom Lazar33f700c2018-12-18 16:00:39 +0200315/* hardcoded long WSC IE values to force fragmentation */
316#define WPS_LONG_DEVICE_NAME "Qti1234511adtest1234567890123456"
317#define WPS_LONG_MANUFACTURER "Qti1234511adQti1234511adQti1234511adQti1234511adQti1234511ad"
318#define WPS_LONG_MODEL_NAME "Qti1234511adtest1234567890123456"
319#define WPS_LONG_MODEL_NUMBER "11111111111111111111111111111111"
320#define WPS_LONG_SERIAL_NUMBER "22222222222222222222222222222222"
321
Jouni Malinene4fde732019-03-25 22:29:37 +0200322enum akm_suite_values {
323 AKM_WPA_EAP = 1,
324 AKM_WPA_PSK = 2,
325 AKM_FT_EAP = 3,
326 AKM_FT_PSK = 4,
327 AKM_EAP_SHA256 = 5,
328 AKM_PSK_SHA256 = 6,
329 AKM_SAE = 8,
330 AKM_FT_SAE = 9,
331 AKM_SUITE_B = 12,
332 AKM_FT_SUITE_B = 13,
333 AKM_FILS_SHA256 = 14,
334 AKM_FILS_SHA384 = 15,
335 AKM_FT_FILS_SHA256 = 16,
336 AKM_FT_FILS_SHA384 = 17,
337
338};
339
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200340struct sigma_dut {
Jouni Malinend2095482019-11-04 17:10:43 +0200341 const char *main_ifname;
Jouni Malinenb21f0542019-11-04 17:53:38 +0200342 char *main_ifname_2g;
343 char *main_ifname_5g;
Jouni Malinend2095482019-11-04 17:10:43 +0200344 const char *station_ifname;
Jouni Malinenb21f0542019-11-04 17:53:38 +0200345 char *station_ifname_2g;
346 char *station_ifname_5g;
Jouni Malinen1f76fa62019-11-04 17:30:12 +0200347 char *p2p_ifname_buf;
Jouni Malinenb21f0542019-11-04 17:53:38 +0200348 int use_5g;
Jouni Malinen78217db2019-11-06 18:46:08 +0200349 int sta_2g_started;
350 int sta_5g_started;
Jouni Malinend2095482019-11-04 17:10:43 +0200351
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200352 int s; /* server TCP socket */
353 int debug_level;
354 int stdout_debug;
355 struct sigma_cmd_handler *cmds;
Jouni Malinen0fee7012019-02-19 12:41:07 +0200356 int response_sent;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200357
Alexei Avshalom Lazarc9bc15d2020-01-29 10:52:13 +0200358 const char *sigma_tmpdir;
359
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200360 /* Default timeout value (seconds) for commands */
361 unsigned int default_timeout;
362
363 int next_streamid;
364
365 const char *bridge; /* bridge interface to use in AP mode */
366
367 enum sigma_mode {
368 SIGMA_MODE_UNKNOWN,
369 SIGMA_MODE_STATION,
370 SIGMA_MODE_AP,
371 SIGMA_MODE_SNIFFER
372 } mode;
373
374 /*
375 * Local cached values to handle API that does not provide all the
376 * needed information with commands that actually trigger some
377 * operations.
378 */
379 int listen_chn;
380 int persistent;
381 int intra_bss;
382 int noa_duration;
383 int noa_interval;
384 int noa_count;
385 enum wfa_cs_wps_method {
386 WFA_CS_WPS_NOT_READY,
387 WFA_CS_WPS_PBC,
388 WFA_CS_WPS_PIN_DISPLAY,
389 WFA_CS_WPS_PIN_LABEL,
390 WFA_CS_WPS_PIN_KEYPAD
391 } wps_method;
392 char wps_pin[9];
393
394 struct wfa_cs_p2p_group *groups;
395
396 char infra_ssid[33];
397 int infra_network_id;
398
399 enum p2p_mode {
400 P2P_IDLE, P2P_DISCOVER, P2P_LISTEN, P2P_DISABLE
401 } p2p_mode;
402
403 int go;
404 int p2p_client;
Jouni Malinen016ae6c2019-11-04 17:00:01 +0200405 const char *p2p_ifname;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200406
407 int client_uapsd;
408
409 char arp_ipaddr[IP_ADDR_STR_LEN];
410 char arp_ifname[IFNAMSIZ + 1];
411
412 enum sta_pmf {
413 STA_PMF_DISABLED,
414 STA_PMF_OPTIONAL,
415 STA_PMF_REQUIRED
416 } sta_pmf;
417
Jouni Malinen6a7c9b42019-08-20 00:15:59 +0300418 int sta_ft_ds;
419
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200420 int no_tpk_expiration;
421
422 int er_oper_performed;
423 char er_oper_bssid[20];
424 int amsdu_size;
425 int back_rcv_buf;
426
427 int testbed_flag_txsp;
428 int testbed_flag_rxsp;
429 int chwidth;
430
Jouni Malinen8179fee2019-03-28 03:19:47 +0200431 unsigned int akm_values;
432
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200433 /* AP configuration */
434 char ap_ssid[33];
Adil Saeed Musthafab7b297f2017-04-10 23:13:31 -0700435 /*
436 * WLAN-TAG of 1 will use 'ap_' variables;
437 * tag higher than 1 will use 'ap_tag_' variables.
438 */
439 char ap_tag_ssid[MAX_WLAN_TAGS - 1][33];
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200440 enum ap_mode {
441 AP_11a,
442 AP_11g,
443 AP_11b,
444 AP_11na,
445 AP_11ng,
446 AP_11ac,
Alexei Avshalom Lazar2712cc82018-12-23 16:29:14 +0200447 AP_11ad,
Priyadharshini Gowthaman4401cee2019-11-21 14:38:33 -0800448 AP_11ax,
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200449 AP_inval
450 } ap_mode;
451 int ap_channel;
452 int ap_rts;
453 int ap_frgmnt;
454 int ap_bcnint;
455 struct qos_params {
456 int ac;
457 int cwmin;
458 int cwmax;
459 int aifs;
460 int txop;
461 int acm;
462 } ap_qos[NUM_AP_AC], ap_sta_qos[NUM_AP_AC];
Jouni Malinen57fa3d82016-11-30 12:51:43 +0200463 enum value_not_set_enabled_disabled ap_noack;
464 enum value_not_set_enabled_disabled ap_ampdu;
465 enum value_not_set_enabled_disabled ap_amsdu;
466 enum value_not_set_enabled_disabled ap_rx_amsdu;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200467 int ap_ampdu_exp;
Jouni Malinen57fa3d82016-11-30 12:51:43 +0200468 enum value_not_set_enabled_disabled ap_addba_reject;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200469 int ap_fixed_rate;
470 int ap_mcs;
471 int ap_rx_streams;
472 int ap_tx_streams;
473 unsigned int ap_vhtmcs_map;
Jouni Malinen57fa3d82016-11-30 12:51:43 +0200474 enum value_not_set_enabled_disabled ap_ldpc;
475 enum value_not_set_enabled_disabled ap_sig_rts;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200476 enum ap_chwidth {
477 AP_20,
478 AP_40,
479 AP_80,
480 AP_160,
priyadharshini gowthaman63ab8482017-12-28 15:32:55 -0800481 AP_80_80,
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200482 AP_AUTO
483 } ap_chwidth;
Pradeep Reddy Pottetibf8af292017-02-15 15:28:39 +0530484 enum ap_chwidth default_11na_ap_chwidth;
485 enum ap_chwidth default_11ng_ap_chwidth;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200486 int ap_tx_stbc;
Jouni Malinen57fa3d82016-11-30 12:51:43 +0200487 enum value_not_set_enabled_disabled ap_dyn_bw_sig;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200488 int ap_sgi80;
489 int ap_p2p_mgmt;
490 enum ap_key_mgmt {
491 AP_OPEN,
492 AP_WPA2_PSK,
493 AP_WPA_PSK,
494 AP_WPA2_EAP,
495 AP_WPA_EAP,
496 AP_WPA2_EAP_MIXED,
Jouni Malinen30824df2017-08-22 21:21:38 +0300497 AP_WPA2_PSK_MIXED,
498 AP_WPA2_SAE,
499 AP_WPA2_PSK_SAE,
Jouni Malinenad395a22017-09-01 21:13:46 +0300500 AP_SUITEB,
Jouni Malinen147b3c32017-10-09 16:51:54 +0300501 AP_WPA2_OWE,
Jouni Malinen4cf699f2018-06-19 00:46:27 +0300502 AP_WPA2_EAP_OSEN,
Jouni Malinen6be21c82018-08-01 18:47:24 +0300503 AP_WPA2_FT_EAP,
504 AP_WPA2_FT_PSK,
505 AP_WPA2_EAP_SHA256,
506 AP_WPA2_PSK_SHA256,
507 AP_WPA2_ENT_FT_EAP,
Jouni Malinenc2b91212018-09-12 02:26:39 +0300508 AP_OSEN,
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200509 } ap_key_mgmt;
Adil Saeed Musthafab7b297f2017-04-10 23:13:31 -0700510 enum ap_tag_key_mgmt {
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200511 AP2_OPEN,
Adil Saeed Musthafab7b297f2017-04-10 23:13:31 -0700512 AP2_OSEN,
Jouni Malinen353ba8b2018-01-10 17:04:12 +0200513 AP2_WPA2_PSK,
514 AP2_WPA2_OWE,
Adil Saeed Musthafab7b297f2017-04-10 23:13:31 -0700515 } ap_tag_key_mgmt[MAX_WLAN_TAGS - 1];
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200516 int ap_add_sha256;
priyadharshini gowthamande81f392017-12-28 15:28:49 -0800517 int ap_add_sha384;
Sarvepalli, Rajesh Babu24dc7e42016-03-18 21:27:26 +0530518 int ap_rsn_preauth;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200519 enum ap_pmf {
520 AP_PMF_DISABLED,
521 AP_PMF_OPTIONAL,
522 AP_PMF_REQUIRED
523 } ap_pmf;
524 enum ap_cipher {
Jouni Malinen2ba24492017-11-17 12:43:59 +0200525 AP_NO_GROUP_CIPHER_SET,
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200526 AP_CCMP,
527 AP_TKIP,
528 AP_WEP,
529 AP_PLAIN,
Jouni Malinenad395a22017-09-01 21:13:46 +0300530 AP_CCMP_TKIP,
531 AP_GCMP_256,
Jouni Malinen3d633da2017-09-14 22:19:21 +0300532 AP_GCMP_128,
533 AP_CCMP_256,
Jouni Malinend538c782017-11-17 12:13:04 +0200534 AP_CCMP_128_GCMP_256,
Jouni Malinen2ba24492017-11-17 12:43:59 +0200535 } ap_cipher, ap_group_cipher;
Jouni Malinen3d633da2017-09-14 22:19:21 +0300536 enum ap_group_mgmt_cipher {
537 AP_NO_GROUP_MGMT_CIPHER_SET,
538 AP_BIP_GMAC_256,
539 AP_BIP_CMAC_256,
540 AP_BIP_GMAC_128,
541 AP_BIP_CMAC_128,
542 } ap_group_mgmt_cipher;
Jouni Malinened670f42017-08-31 01:39:28 +0300543 char *ap_sae_groups;
Jouni Malinen2f524ce2017-08-31 01:43:29 +0300544 int sae_anti_clogging_threshold;
Jouni Malinenb347db02017-09-02 01:36:03 +0300545 int sae_reflection;
Jouni Malinen3c740ab2019-10-10 15:55:11 +0300546 int sae_confirm_immediate;
Jouni Malinen2126f422017-10-11 23:24:33 +0300547 char ap_passphrase[101];
Jouni Malinen63370622017-11-18 17:47:13 +0200548 char ap_psk[65];
Jouni Malinen09550de2019-03-26 00:24:11 +0200549 char *ap_sae_passwords;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200550 char ap_wepkey[27];
551 char ap_radius_ipaddr[20];
552 int ap_radius_port;
553 char ap_radius_password[200];
554 char ap2_radius_ipaddr[20];
555 int ap2_radius_port;
556 char ap2_radius_password[200];
557 int ap_tdls_prohibit;
558 int ap_tdls_prohibit_chswitch;
559 int ap_hs2;
560 int ap_dgaf_disable;
561 int ap_p2p_cross_connect;
562 int ap_oper_name;
563 int ap_wan_metrics;
564 int ap_conn_capab;
565 int ap_oper_class;
566
567 int ap_interworking;
568 int ap_access_net_type;
569 int ap_internet;
570 int ap_venue_group;
571 int ap_venue_type;
572 char ap_hessid[20];
573 char ap_roaming_cons[100];
574 int ap_venue_name;
575 int ap_net_auth_type;
576 int ap_nai_realm_list;
577 char ap_domain_name_list[1000];
578 int ap_ip_addr_type_avail;
579 char ap_plmn_mcc[10][4];
580 char ap_plmn_mnc[10][4];
581 int ap_gas_cb_delay;
582 int ap_proxy_arp;
583 int ap2_proxy_arp;
Jouni Malinendbbc2c42018-11-14 23:55:41 +0200584 int ap2_osu;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200585 int ap_l2tif;
586 int ap_anqpserver;
587 int ap_anqpserver_on;
588 int ap_osu_provider_list;
Jouni Malinen93a837f2018-11-01 17:09:22 +0200589 int ap_osu_provider_nai_list;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200590 int ap_qos_map_set;
591 int ap_bss_load;
592 char ap_osu_server_uri[10][256];
593 char ap_osu_ssid[33];
594 int ap_osu_method[10];
595 int ap_osu_icon_tag;
Jouni Malinen54a89b02018-05-01 00:16:26 +0300596 int ap_venue_url;
Jouni Malinenf7ff42b2018-05-01 00:21:56 +0300597 int ap_advice_of_charge;
Jouni Malinenac104532018-05-01 00:27:37 +0300598 int ap_oper_icon_metadata;
Jouni Malinenac367142018-05-01 00:32:24 +0300599 int ap_tnc_file_name;
600 unsigned int ap_tnc_time_stamp;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200601
602 int ap_fake_pkhash;
603 int ap_disable_protection;
604 int ap_allow_vht_wep;
605 int ap_allow_vht_tkip;
606
607 enum ap_vht_chwidth {
608 AP_20_40_VHT_OPER_CHWIDTH,
609 AP_80_VHT_OPER_CHWIDTH,
610 AP_160_VHT_OPER_CHWIDTH
611 } ap_vht_chwidth;
612 int ap_txBF;
613 int ap_mu_txBF;
Pradeep Reddy POTTETIfba27db2015-11-20 16:42:22 +0530614 enum ap_regulatory_mode {
615 AP_80211D_MODE_DISABLED,
616 AP_80211D_MODE_ENABLED,
617 } ap_regulatory_mode;
618 enum ap_dfs_mode {
619 AP_DFS_MODE_DISABLED,
620 AP_DFS_MODE_ENABLED,
621 } ap_dfs_mode;
priyadharshini gowthaman264d5442016-02-25 15:52:22 -0800622 int ap_ndpa_frame;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200623
priyadharshini gowthaman8e26ff42016-06-22 22:47:14 -0700624 int ap_lci;
625 char ap_val_lci[33];
priyadharshini gowthamanc2357bd2016-06-22 22:47:14 -0700626 char ap_infoz[17];
priyadharshini gowthaman8e26ff42016-06-22 22:47:14 -0700627 int ap_lcr;
628 char ap_val_lcr[400];
629 int ap_rrm;
630 int ap_rtt;
631 int ap_neighap; /* number of configured neighbor APs */
632 unsigned char ap_val_neighap[3][6];
633 int ap_opchannel; /* number of oper channels */
634 int ap_val_opchannel[3];
635 int ap_scan;
priyadharshini gowthamanc2357bd2016-06-22 22:47:14 -0700636 int ap_fqdn_held;
637 int ap_fqdn_supl;
priyadharshini gowthamana27b5b62016-06-22 22:47:14 -0700638 int ap_msnt_type;
639
priyadharshini gowthamanb4e05fc2016-10-13 15:02:35 -0700640 int ap_mbo;
641 int ap_ne_class;
642 int ap_ne_op_ch;
643 int ap_set_bssidpref;
644 int ap_btmreq_disassoc_imnt;
645 int ap_btmreq_term_bit;
Adil Saeed Musthafa7d9ae382017-04-10 23:13:33 -0700646 int ap_disassoc_timer;
647 int ap_btmreq_bss_term_dur;
Adil Saeed Musthafa604c8262017-04-10 23:13:31 -0700648 enum reg_domain {
649 REG_DOMAIN_NOT_SET,
650 REG_DOMAIN_LOCAL,
651 REG_DOMAIN_GLOBAL
652 } ap_reg_domain;
Adil Saeed Musthafacf752fa2017-04-10 23:13:32 -0700653 char ap_mobility_domain[10];
Adil Saeed Musthafa023108a2017-04-10 23:13:37 -0700654 unsigned char ap_cell_cap_pref;
Adil Saeed Musthafa4ec61bd2017-04-10 23:13:41 -0700655 int ap_ft_oa;
Jouni Malinen9f943312019-08-19 23:49:16 +0300656 enum value_not_set_enabled_disabled ap_ft_ds;
Adil Saeed Musthafa4ec61bd2017-04-10 23:13:41 -0700657 int ap_name;
priyadharshini gowthaman09d613e2017-12-20 11:43:44 -0800658 int ap_interface_5g;
659 int ap_interface_2g;
priyadharshini gowthaman776562e2017-12-20 12:33:34 -0800660 int ap_assoc_delay;
priyadharshini gowthaman94062b52017-12-20 12:33:34 -0800661 int ap_btmreq_bss_term_tsf;
priyadharshini gowthaman00798a22017-12-28 15:15:00 -0800662 int ap_fils_dscv_int;
663 int ap_nairealm_int;
664 char ap_nairealm[33];
665 int ap_blechanutil;
666 int ap_ble_admit_cap;
667 int ap_datappdudura;
668 int ap_airtimefract;
669 char ap_dhcpserv_ipaddr[20];
670 int ap_dhcp_stop;
671 int ap_bawinsize;
672 int ap_blestacnt;
priyadharshini gowthamancb22e432017-12-28 15:23:31 -0800673 int ap_ul_availcap;
674 int ap_dl_availcap;
priyadharshini gowthamande81f392017-12-28 15:28:49 -0800675 int ap_akm;
Jouni Malinenda5f35b2019-03-26 00:25:53 +0200676 unsigned int ap_akm_values;
priyadharshini gowthamande81f392017-12-28 15:28:49 -0800677 int ap_pmksa;
678 int ap_pmksa_caching;
Jouni Malinen05d005a2020-03-26 12:49:33 +0200679 int ap_beacon_prot;
Jouni Malinenc098c442020-03-26 13:01:50 +0200680 u8 ap_transition_disable;
priyadharshini gowthaman63ab8482017-12-28 15:32:55 -0800681 int ap_80plus80;
priyadharshini gowthaman9149afc2018-01-15 13:40:18 -0800682 int ap_oper_chn;
Adil Saeed Musthafa4ec61bd2017-04-10 23:13:41 -0700683
Adil Saeed Musthafa69063722017-04-10 23:13:40 -0700684 struct mbo_pref_ap mbo_pref_aps[MBO_MAX_PREF_BSSIDS];
685 struct mbo_pref_ap mbo_self_ap_tuple;
686 int mbo_pref_ap_cnt;
Adil Saeed Musthafa4ec61bd2017-04-10 23:13:41 -0700687 unsigned char ft_bss_mac_list[MAX_FT_BSS_LIST][ETH_ALEN];
688 int ft_bss_mac_cnt;
priyadharshini gowthamanb4e05fc2016-10-13 15:02:35 -0700689
Priyadharshini Gowthamanc067edf2019-06-20 11:23:27 -0700690 char *ar_ltf;
691
Priyadharshini Gowthamanbc948892019-09-10 14:22:49 -0700692 int ap_numsounddim;
Priyadharshini Gowthaman78ee2ef2019-11-15 16:08:28 -0800693 unsigned int he_mcsnssmap;
694 int he_ul_mcs;
Priyadharshini Gowthaman21f74402019-11-25 15:39:09 -0800695 int he_mmss;
Priyadharshini Gowthaman88d55c82019-12-12 14:31:46 -0800696 int he_srctrl_allow;
Priyadharshini Gowthamanbc948892019-09-10 14:22:49 -0700697
priyadharshini gowthaman00798a22017-12-28 15:15:00 -0800698 enum value_not_set_enabled_disabled ap_oce;
699 enum value_not_set_enabled_disabled ap_filsdscv;
700 enum value_not_set_enabled_disabled ap_filshlp;
701 enum value_not_set_enabled_disabled ap_broadcast_ssid;
702 enum value_not_set_enabled_disabled ap_rnr;
703 enum value_not_set_enabled_disabled ap_esp;
704
Priyadharshini Gowthamanc067edf2019-06-20 11:23:27 -0700705 enum value_not_set_enabled_disabled ap_he_ulofdma;
Priyadharshini Gowthamanfe60c502019-08-14 13:00:34 -0700706 enum value_not_set_enabled_disabled ap_he_dlofdma;
Priyadharshini Gowthaman670b3232019-09-10 16:09:19 -0700707 enum value_not_set_enabled_disabled ap_bcc;
Priyadharshini Gowthaman6bc4c1e2019-09-10 16:24:51 -0700708 enum value_not_set_enabled_disabled ap_he_frag;
Priyadharshini Gowthaman21895a52019-10-07 16:56:16 -0700709 enum value_not_set_enabled_disabled ap_mu_edca;
Priyadharshini Gowthaman43d6b412019-10-07 16:56:37 -0700710 enum value_not_set_enabled_disabled ap_he_rtsthrshld;
Priyadharshini Gowthaman8018c982019-10-31 15:14:37 -0700711 enum value_not_set_enabled_disabled ap_mbssid;
Priyadharshini Gowthamanae0a6052019-11-01 15:26:38 -0700712 enum value_not_set_enabled_disabled ap_twtresp;
Priyadharshini Gowthaman96d542e2019-11-21 14:25:21 -0800713 enum value_not_set_enabled_disabled he_sounding;
Priyadharshini Gowthaman9b7dbe12019-12-04 12:17:32 -0800714 enum value_not_set_enabled_disabled he_set_sta_1x1;
Priyadharshini Gowthamanc067edf2019-06-20 11:23:27 -0700715
priyadharshini gowthaman350f1912018-06-04 13:09:12 -0700716 enum ppdu {
717 PPDU_NOT_SET,
718 PPDU_MU,
719 PPDU_SU,
720 PPDU_ER,
721 PPDU_TB,
Priyadharshini Gowthamanfe60c502019-08-14 13:00:34 -0700722 PPDU_HESU,
priyadharshini gowthaman350f1912018-06-04 13:09:12 -0700723 } ap_he_ppdu;
724
Priyadharshini Gowthaman1a686bd2019-09-19 14:41:40 -0700725 enum bufsize {
726 BA_BUFSIZE_NOT_SET,
727 BA_BUFSIZE_64,
728 BA_BUFSIZE_256,
729 } ap_ba_bufsize;
730
Priyadharshini Gowthamandee79e22019-10-07 16:56:27 -0700731 enum mimo {
732 MIMO_NOT_SET,
733 MIMO_DL,
734 MIMO_UL,
735 } ap_he_mimo;
736
Alexei Avshalom Lazarbc180dc2018-12-18 16:01:14 +0200737 struct sigma_ese_alloc ap_ese_allocs[MAX_ESE_ALLOCS];
738 int ap_num_ese_allocs;
739
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200740 const char *hostapd_debug_log;
Alexei Avshalom Lazar3e8267e2018-12-18 15:58:54 +0200741 const char *wpa_supplicant_debug_log;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200742
743#ifdef CONFIG_TRAFFIC_AGENT
744 /* Traffic Agent */
745 struct sigma_stream streams[MAX_SIGMA_STREAMS];
746 int stream_id;
747 int num_streams;
748 pthread_t thr;
749#endif /* CONFIG_TRAFFIC_AGENT */
750
Jouni Malinenc2493f82016-06-05 18:01:33 +0300751 unsigned int throughput_pktsize; /* If non-zero, override pktsize for
752 * throughput tests */
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200753 int no_timestamps;
754
755 const char *sniffer_ifname;
756 const char *set_macaddr;
757 int tmp_mac_addr;
758 int ap_is_dual;
759 enum ap_mode ap_mode_1;
760 enum ap_chwidth ap_chwidth_1;
761 int ap_channel_1;
762 char ap_countrycode[3];
763
764 int ap_wpsnfc;
765
Pradeep Reddy POTTETI0d3db632016-03-11 15:21:11 +0530766 enum ap_wme {
767 AP_WME_OFF,
768 AP_WME_ON,
769 } ap_wme;
770
Mohammed Shafi Shajakhan02e3b822017-02-23 04:15:02 +0530771 enum ap_wmmps {
772 AP_WMMPS_OFF,
773 AP_WMMPS_ON,
774 } ap_wmmps;
775
Pradeep Reddy Potteti4b0cdee2017-03-15 12:37:33 +0530776 enum sec_ch_offset ap_chwidth_offset;
777
Jouni Malinenba4f2d42019-10-04 16:13:41 +0300778 char *ap_dpp_conf_addr;
779 char *ap_dpp_conf_pkhash;
780
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200781#ifdef CONFIG_SNIFFER
782 pid_t sniffer_pid;
783 char sniffer_filename[200];
784#endif /* CONFIG_SNIFFER */
785
786 int last_set_ip_config_ipv6;
Amarnath Hullur Subramanyam9c381f52017-03-17 00:04:41 -0700787#ifdef MIRACAST
788 pthread_t rtsp_thread_handle;
789 int wfd_device_type; /* 0 for source, 1 for sink */
790 char peer_mac_address[32];
791 void *miracast_lib;
792 const char *miracast_lib_path;
793 char mdns_instance_name[64];
794#endif /* MIRACAST */
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200795
796 int tid_to_handle[8]; /* Mapping of TID to handle */
797 int dialog_token; /* Used for generating unique handle for an addTs */
798
799 enum sigma_program {
800 PROGRAM_UNKNOWN = 0,
801 PROGRAM_TDLS,
802 PROGRAM_HS2,
803 PROGRAM_HS2_R2,
804 PROGRAM_WFD,
Amarnath Hullur Subramanyam659a34c2017-03-17 00:04:41 -0700805 PROGRAM_DISPLAYR2,
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200806 PROGRAM_PMF,
807 PROGRAM_WPS,
808 PROGRAM_60GHZ,
809 PROGRAM_HT,
810 PROGRAM_VHT,
811 PROGRAM_NAN,
priyadharshini gowthaman12dd4142016-06-22 22:47:14 -0700812 PROGRAM_LOC,
Adil Saeed Musthafa33ea2872017-04-10 23:13:24 -0700813 PROGRAM_MBO,
Jouni Malinen5c3813a2017-08-26 13:30:39 +0300814 PROGRAM_IOTLP,
815 PROGRAM_DPP,
Ankita Bajaja2cb5672017-10-25 16:08:28 +0530816 PROGRAM_OCE,
priyadharshini gowthaman0e209fc2018-01-26 15:15:37 -0800817 PROGRAM_WPA3,
Amarnath Hullur Subramanyam8f9c8682018-01-30 19:01:51 -0800818 PROGRAM_HE,
Jouni Malinenba630452018-06-22 11:49:59 +0300819 PROGRAM_HS2_R3,
Vamsi Krishnaf642d6a2020-03-27 12:33:14 +0530820 PROGRAM_QM,
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200821 } program;
822
823 enum device_type {
824 device_type_unknown,
825 AP_unknown,
826 AP_testbed,
827 AP_dut,
828 STA_unknown,
829 STA_testbed,
830 STA_dut
831 } device_type;
832
833 enum {
834 DEVROLE_UNKNOWN = 0,
835 DEVROLE_STA,
836 DEVROLE_PCP,
Alexei Avshalom Lazar2712cc82018-12-23 16:29:14 +0200837 DEVROLE_STA_CFON,
838 DEVROLE_AP,
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200839 } dev_role;
840
Alexei Avshalom Lazar33f700c2018-12-18 16:00:39 +0200841 enum wps_band {
842 WPS_BAND_NON_60G = 0,
843 WPS_BAND_60G,
844 } band;
845
Alexei Avshalom Lazareee9ab02018-12-24 16:27:48 +0200846 int wps_disable; /* Used for 60G to disable PCP from sending WPS IE */
Alexei Avshalom Lazar33f700c2018-12-18 16:00:39 +0200847 int wsc_fragment; /* simulate WSC IE fragmentation */
Alexei Avshalom Lazar2eccf4d2019-01-31 10:03:59 +0200848 int eap_fragment; /* simulate EAP fragmentation */
Alexei Avshalom Lazar744ae8a2019-01-31 17:26:46 +0200849 int wps_forced_version; /* Used to force reported WPS version */
Alexei Avshalom Lazarb094bf02018-12-18 16:00:53 +0200850 enum {
851 /* no change */
852 FORCE_RSN_IE_NONE = 0,
853 /* if exists, remove and clear privacy bit */
854 FORCE_RSN_IE_REMOVE,
855 /* if not exists, add and set privacy bit */
856 FORCE_RSN_IE_ADD,
857 } force_rsn_ie; /* override RSN IE in association request */
Alexei Avshalom Lazar33f700c2018-12-18 16:00:39 +0200858
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200859 const char *version;
860 int no_ip_addr_set;
861 int sta_channel;
862
863 const char *summary_log;
864 const char *hostapd_entropy_log;
865
866 int iface_down_on_reset;
867 int write_stats; /* traffic stream e2e*.txt files */
Bala Krishna Bhamidipati73d7af02016-03-24 12:27:56 +0530868 int sim_no_username; /* do not set SIM username to use real SIM */
Jouni Malinen5db3b102016-08-04 12:27:18 +0300869
870 const char *vendor_name; /* device_get_info vendor override */
871 const char *model_name; /* device_get_info model override */
872 const char *version_name; /* device_get_info version override */
Kiran Kumar Lokere0128bf92019-04-08 18:36:16 -0700873 const char *log_file_dir; /* Directory to generate log file */
874 FILE *log_file_fd; /* Pointer to log file */
Rakesh Sunki7d37f412017-03-30 14:47:55 -0700875
Rakesh Sunki14cfcd22017-03-30 14:47:55 -0700876 int ndp_enable; /* Flag which is set once the NDP is setup */
877
Peng Xu8863ec72018-08-06 11:50:37 -0700878 int ndpe; /* Flag indicating NDPE is supported */
879 u16 trans_port; /* transport port number for TCP/UDP connection */
880 u8 trans_proto; /* transport protocol, 0x06: TCP, 0x11: UDP */
Peng Xu47d709b2019-06-04 18:14:02 -0700881 u8 nan_ipv6_addr[IPV6_ADDR_LEN]; /* NAN IPv6 address */
882 u8 nan_ipv6_len; /* NAN IPv6 address length */
Peng Xu8863ec72018-08-06 11:50:37 -0700883
Rakesh Sunki7d37f412017-03-30 14:47:55 -0700884 /* Length of nan_pmk in octets */
885 u8 nan_pmk_len;
886
887 /*
888 * PMK: Info is optional in Discovery phase. PMK info can
889 * be passed during the NDP session.
890 */
891 u8 nan_pmk[32];
Adil Saeed Musthafa33ea2872017-04-10 23:13:24 -0700892
893 enum value_not_set_enabled_disabled wnm_bss_max_feature;
894 int wnm_bss_max_idle_time;
895 enum value_not_set_enabled_disabled wnm_bss_max_protection;
Ashwini Patil00402582017-04-13 12:29:39 +0530896
897 char *non_pref_ch_list; /* MBO: non-preferred channel report */
Ashwini Patil5acd7382017-04-13 15:55:04 +0530898 char *btm_query_cand_list; /* Candidate list for BTM Query */
Jouni Malinen3c367e82017-06-23 17:01:47 +0300899
Jouni Malinen68143132017-09-02 02:34:08 +0300900 char *sae_commit_override;
Jouni Malinen3c367e82017-06-23 17:01:47 +0300901 char *rsne_override;
Jouni Malinen7960e3a2019-12-07 17:04:35 +0200902 char *rsnxe_override_eapol;
Jouni Malinen134fe3c2019-06-12 04:16:49 +0300903 int sta_associate_wait_connect;
904 char server_cert_hash[65];
Jouni Malinen37d5c692019-08-19 16:56:55 +0300905 int server_cert_tod;
Jouni Malinen134fe3c2019-06-12 04:16:49 +0300906 int sta_tod_policy;
Jouni Malinend6bf1b42017-06-23 17:51:01 +0300907 const char *hostapd_bin;
908 int use_hostapd_pid_file;
909 const char *hostapd_ifname;
Jouni Malinend86e5822017-08-29 03:55:32 +0300910 int hostapd_running;
911
Jouni Malinenb1dd21f2017-11-13 19:14:29 +0200912 char *dpp_peer_uri;
Jouni Malinend86e5822017-08-29 03:55:32 +0300913 int dpp_local_bootstrap;
914 int dpp_conf_id;
Ankita Bajaj1bde7942018-01-09 19:15:01 +0530915
916 u8 fils_hlp;
917 pthread_t hlp_thread;
Peng Xu291d97d2018-01-31 16:34:03 -0800918
919#ifdef NL80211_SUPPORT
920 struct nl80211_ctx *nl_ctx;
Sunil Dutt076081f2018-02-05 19:45:50 +0530921 int config_rsnie;
Peng Xu291d97d2018-01-31 16:34:03 -0800922#endif /* NL80211_SUPPORT */
Arif Hussainac6c5112018-05-25 17:34:00 -0700923
924 int sta_nss;
Anurag Das2052daa2018-08-31 14:35:25 +0530925
926#ifdef ANDROID
927 int nanservicediscoveryinprogress;
928#endif /* ANDROID */
Priyadharshini Gowthamand06f1002019-04-22 15:45:41 -0700929
930 const char *priv_cmd; /* iwpriv / cfg80211tool command name */
Kiran Kumar Lokere0128bf92019-04-08 18:36:16 -0700931
932 unsigned int wpa_log_size;
933 char dev_start_test_runtime_id[100];
Vinay Gannevaram2dfb1da2019-06-14 15:24:08 +0530934#ifdef ANDROID_WIFI_HAL
935 wifi_interface_handle wifi_hal_iface_handle;
936 wifi_handle wifi_hal_handle;
937 bool wifi_hal_initialized;
938#endif /*ANDROID_WIFI_HAL*/
Jouni Malinen11e55212019-11-22 21:46:59 +0200939
940 int sae_h2e_default;
941 enum {
942 SAE_PWE_DEFAULT,
943 SAE_PWE_LOOP,
944 SAE_PWE_H2E
945 } sae_pwe;
Hu Wang6010ce72020-03-05 19:33:53 +0800946 int owe_ptk_workaround;
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200947};
948
949
950enum sigma_dut_print_level {
951 DUT_MSG_DEBUG, DUT_MSG_INFO, DUT_MSG_ERROR
952};
953
954void sigma_dut_print(struct sigma_dut *dut, int level, const char *fmt, ...)
955PRINTF_FORMAT(3, 4);
956
957void sigma_dut_summary(struct sigma_dut *dut, const char *fmt, ...)
958PRINTF_FORMAT(2, 3);
959
960
961enum sigma_status {
962 SIGMA_RUNNING, SIGMA_INVALID, SIGMA_ERROR, SIGMA_COMPLETE
963};
964
965void send_resp(struct sigma_dut *dut, struct sigma_conn *conn,
Jouni Malinen76401f52017-03-18 01:04:55 +0200966 enum sigma_status status, const char *buf);
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200967
968const char * get_param(struct sigma_cmd *cmd, const char *name);
Alexei Avshalom Lazarbc180dc2018-12-18 16:01:14 +0200969const char * get_param_indexed(struct sigma_cmd *cmd, const char *name,
970 int index);
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200971
972int sigma_dut_reg_cmd(const char *cmd,
973 int (*validate)(struct sigma_cmd *cmd),
Jouni Malinen26a5b762019-02-19 01:17:48 +0200974 enum sigma_cmd_result (*process)(struct sigma_dut *dut,
975 struct sigma_conn *conn,
976 struct sigma_cmd *cmd));
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200977
978void sigma_dut_register_cmds(void);
979
Jouni Malinena485fd12019-06-13 23:27:01 +0300980enum sigma_cmd_result cmd_sta_send_frame(struct sigma_dut *dut,
981 struct sigma_conn *conn,
982 struct sigma_cmd *cmd);
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200983int cmd_sta_set_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
984 struct sigma_cmd *cmd);
Jouni Malinena485fd12019-06-13 23:27:01 +0300985enum sigma_cmd_result cmd_ap_send_frame(struct sigma_dut *dut,
986 struct sigma_conn *conn,
987 struct sigma_cmd *cmd);
988enum sigma_cmd_result cmd_wlantest_send_frame(struct sigma_dut *dut,
989 struct sigma_conn *conn,
990 struct sigma_cmd *cmd);
Ankita Bajaj0d5825b2017-10-25 16:20:17 +0530991int sta_cfon_set_wireless(struct sigma_dut *dut, struct sigma_conn *conn,
992 struct sigma_cmd *cmd);
993int sta_cfon_get_mac_address(struct sigma_dut *dut, struct sigma_conn *conn,
994 struct sigma_cmd *cmd);
995int sta_cfon_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
996 struct sigma_cmd *cmd);
Jouni Malinencd4e3c32015-10-29 12:39:56 +0200997
998enum driver_type {
999 DRIVER_NOT_SET,
1000 DRIVER_ATHEROS,
1001 DRIVER_WCN,
1002 DRIVER_MAC80211,
1003 DRIVER_AR6003,
1004 DRIVER_WIL6210,
1005 DRIVER_QNXNTO,
Sreelakshmi Konamkib692f102016-04-26 19:47:00 +05301006 DRIVER_OPENWRT,
1007 DRIVER_LINUX_WCN,
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001008};
1009
1010enum openwrt_driver_type {
1011 OPENWRT_DRIVER_NOT_SET,
1012 OPENWRT_DRIVER_ATHEROS
1013};
1014
1015#define DRIVER_NAME_60G "wil6210"
1016
1017int set_wifi_chip(const char *chip_type);
Jouni Malinen016ae6c2019-11-04 17:00:01 +02001018enum driver_type get_driver_type(struct sigma_dut *dut);
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001019enum openwrt_driver_type get_openwrt_driver_type(void);
1020int file_exists(const char *fname);
1021
1022struct wpa_ctrl;
1023
1024int wps_connection_event(struct sigma_dut *dut, struct sigma_conn *conn,
1025 struct wpa_ctrl *ctrl, const char *intf, int p2p_resp);
1026int ascii2hexstr(const char *str, char *hex);
1027void disconnect_station(struct sigma_dut *dut);
1028void nfc_status(struct sigma_dut *dut, const char *state, const char *oper);
1029int get_ip_config(struct sigma_dut *dut, const char *ifname, char *buf,
1030 size_t buf_len);
1031int ath6kl_client_uapsd(struct sigma_dut *dut, const char *intf, int uapsd);
1032int is_ip_addr(const char *str);
1033int run_system(struct sigma_dut *dut, const char *cmd);
Adil Saeed Musthafa5f793f02017-04-10 23:13:30 -07001034int run_system_wrapper(struct sigma_dut *dut, const char *cmd, ...);
Priyadharshini Gowthamand06f1002019-04-22 15:45:41 -07001035int run_iwpriv(struct sigma_dut *dut, const char *ifname, const char *cmd, ...);
Jouni Malinena485fd12019-06-13 23:27:01 +03001036enum sigma_cmd_result cmd_wlantest_set_channel(struct sigma_dut *dut,
1037 struct sigma_conn *conn,
1038 struct sigma_cmd *cmd);
Jouni Malinena2df7db2019-06-13 02:31:24 +03001039void wlantest_register_cmds(void);
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001040void sniffer_close(struct sigma_dut *dut);
1041
Vinay Gannevaram2dfb1da2019-06-14 15:24:08 +05301042/* sigma_dut.c */
1043int wifi_hal_initialize(struct sigma_dut *dut);
1044
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001045/* ap.c */
Jouni Malinena2df7db2019-06-13 02:31:24 +03001046void ap_register_cmds(void);
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001047void ath_disable_txbf(struct sigma_dut *dut, const char *intf);
Priyadharshini Gowthaman818afef2015-11-09 13:28:15 -08001048void ath_config_dyn_bw_sig(struct sigma_dut *dut, const char *ifname,
1049 const char *val);
Priyadharshini Gowthaman8c5b9a42019-07-31 14:38:48 -07001050void novap_reset(struct sigma_dut *dut, const char *ifname, int reset);
Jouni Malinen2e6ccc22017-09-04 13:43:16 +03001051int get_hwaddr(const char *ifname, unsigned char *hwaddr);
Jouni Malinena485fd12019-06-13 23:27:01 +03001052enum sigma_cmd_result cmd_ap_config_commit(struct sigma_dut *dut,
1053 struct sigma_conn *conn,
1054 struct sigma_cmd *cmd);
Alexei Avshalom Lazar043230b2019-02-04 14:11:24 +02001055int ap_wps_registration(struct sigma_dut *dut, struct sigma_conn *conn,
1056 struct sigma_cmd *cmd);
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001057
1058/* sta.c */
Jouni Malinena2df7db2019-06-13 02:31:24 +03001059void sta_register_cmds(void);
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001060int set_ps(const char *intf, struct sigma_dut *dut, int enabled);
1061void ath_set_zero_crc(struct sigma_dut *dut, const char *val);
1062void ath_set_cts_width(struct sigma_dut *dut, const char *ifname,
1063 const char *val);
1064int ath_set_width(struct sigma_dut *dut, struct sigma_conn *conn,
1065 const char *intf, const char *val);
Alexei Avshalom Lazar49498b82019-01-31 15:16:32 +02001066int sta_set_60g_abft_len(struct sigma_dut *dut, struct sigma_conn *conn,
1067 int abft_len);
Lior David0fe101e2017-03-09 16:09:50 +02001068int wil6210_send_frame_60g(struct sigma_dut *dut, struct sigma_conn *conn,
1069 struct sigma_cmd *cmd);
Ankita Bajaj1bde7942018-01-09 19:15:01 +05301070int hwaddr_aton(const char *txt, unsigned char *addr);
1071int set_ipv4_addr(struct sigma_dut *dut, const char *ifname,
1072 const char *ip, const char *mask);
1073int set_ipv4_gw(struct sigma_dut *dut, const char *gw);
Alexei Avshalom Lazar79fa3fe2018-12-24 15:43:33 +02001074int send_addba_60g(struct sigma_dut *dut, struct sigma_conn *conn,
1075 struct sigma_cmd *cmd, const char *param);
Alexei Avshalom Lazarbc180dc2018-12-18 16:01:14 +02001076int wil6210_set_ese(struct sigma_dut *dut, int count,
1077 struct sigma_ese_alloc *allocs);
1078int sta_extract_60g_ese(struct sigma_dut *dut, struct sigma_cmd *cmd,
1079 struct sigma_ese_alloc *allocs, int *allocs_size);
Alexei Avshalom Lazaraad97b02018-12-18 16:01:23 +02001080int wil6210_set_force_mcs(struct sigma_dut *dut, int force, int mcs);
Qiwei Caib6806972020-01-15 13:52:11 +08001081int sta_set_addba_buf_size(struct sigma_dut *dut,
1082 const char *intf, int bufsize);
Kiran Kumar Lokere26c0f862020-01-22 11:15:59 -08001083#ifdef NL80211_SUPPORT
1084int wcn_set_he_ltf(struct sigma_dut *dut, const char *intf,
1085 enum qca_wlan_he_ltf_cfg ltf);
1086#endif /* NL80211_SUPPORT */
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001087
1088/* p2p.c */
Jouni Malinena2df7db2019-06-13 02:31:24 +03001089void p2p_register_cmds(void);
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001090int p2p_cmd_sta_get_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
1091 struct sigma_cmd *cmd);
Purushottam Kushwaha091e2532016-08-23 11:52:21 +05301092void p2p_create_event_thread(struct sigma_dut *dut);
1093void stop_event_thread(void);
Amarnath Hullur Subramanyam89b37cd2017-03-17 00:04:41 -07001094void start_dhcp(struct sigma_dut *dut, const char *group_ifname, int go);
1095void stop_dhcp(struct sigma_dut *dut, const char *group_ifname, int go);
1096int p2p_discover_peer(struct sigma_dut *dut, const char *ifname,
1097 const char *peer, int full);
Jouni Malinena0bf62a2019-06-13 02:22:24 +03001098enum sigma_cmd_result cmd_sta_p2p_reset(struct sigma_dut *dut,
1099 struct sigma_conn *conn,
1100 struct sigma_cmd *cmd);
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001101
Jouni Malinenc54710d2019-01-23 12:34:21 +02001102/* basic.c */
Jouni Malinena2df7db2019-06-13 02:31:24 +03001103void basic_register_cmds(void);
Jouni Malinenc54710d2019-01-23 12:34:21 +02001104void get_ver(const char *cmd, char *buf, size_t buflen);
1105
priyadharshini gowthaman72462ef2016-06-22 22:47:14 -07001106/* utils.c */
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001107enum sigma_program sigma_program_to_enum(const char *prog);
Alexei Avshalom Lazar9a4f98d2019-05-02 13:35:22 +03001108int hex_byte(const char *str);
Jouni Malinen08cf2312017-09-04 13:39:47 +03001109int parse_hexstr(const char *hex, unsigned char *buf, size_t buflen);
priyadharshini gowthaman72462ef2016-06-22 22:47:14 -07001110int parse_mac_address(struct sigma_dut *dut, const char *arg,
1111 unsigned char *addr);
Alexei Avshalom Lazar093569f2018-11-13 14:08:17 +02001112int is_60g_sigma_dut(struct sigma_dut *dut);
1113unsigned int channel_to_freq(struct sigma_dut *dut, unsigned int channel);
Rakesh Sunki7192dc42017-03-30 14:47:55 -07001114unsigned int freq_to_channel(unsigned int freq);
Peng Xu525965b2018-06-26 16:40:14 -07001115int is_ipv6_addr(const char *str);
Rakesh Sunki8f8e74b2017-05-16 15:42:12 -07001116void convert_mac_addr_to_ipv6_lladdr(u8 *mac_addr, char *ipv6_buf,
1117 size_t buf_len);
Peng Xu8863ec72018-08-06 11:50:37 -07001118size_t convert_mac_addr_to_ipv6_linklocal(const u8 *mac_addr, u8 *ipv6);
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001119
Peng Xu769731a2017-05-10 17:27:28 -07001120#ifndef ANDROID
1121size_t strlcpy(char *dest, const char *src, size_t siz);
1122size_t strlcat(char *dst, const char *str, size_t size);
1123#endif /* ANDROID */
Ankita Bajaj1bde7942018-01-09 19:15:01 +05301124void hex_dump(struct sigma_dut *dut, u8 *data, size_t len);
Alexei Avshalom Lazar0dae51c2018-12-18 16:00:18 +02001125int get_wps_pin_from_mac(struct sigma_dut *dut, const char *macaddr,
1126 char *pin, size_t len);
Alexei Avshalom Lazar64279692018-12-23 16:49:49 +02001127void str_remove_chars(char *str, char ch);
Peng Xu769731a2017-05-10 17:27:28 -07001128
Alexei Avshalom Lazar744ae8a2019-01-31 17:26:46 +02001129int get_wps_forced_version(struct sigma_dut *dut, const char *str);
Alexei Avshalom Lazara37dc162019-02-04 14:06:48 +02001130int base64_encode(const char *src, size_t len, char *out, size_t out_len);
1131int random_get_bytes(char *buf, size_t len);
Jouni Malinen3c740ab2019-10-10 15:55:11 +03001132int get_enable_disable(const char *val);
Vinita Maloo54b78cf2020-03-30 12:18:19 +05301133int wcn_driver_cmd(const char *ifname, char *buf);
Peng Xu769731a2017-05-10 17:27:28 -07001134
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001135/* uapsd_stream.c */
1136void receive_uapsd(struct sigma_stream *s);
Pradeep Reddy POTTETI79594042015-11-23 12:59:12 +05301137void send_uapsd_console(struct sigma_stream *s);
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001138
1139/* nan.c */
1140int nan_preset_testparameters(struct sigma_dut *dut, struct sigma_conn *conn,
1141 struct sigma_cmd *cmd);
1142int nan_cmd_sta_get_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
1143 struct sigma_cmd *cmd);
1144int nan_cmd_sta_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
1145 struct sigma_cmd *cmd);
1146int nan_cmd_sta_get_events(struct sigma_dut *dut, struct sigma_conn *conn,
1147 struct sigma_cmd *cmd);
1148int nan_cmd_sta_transmit_followup(struct sigma_dut *dut,
1149 struct sigma_conn *conn,
1150 struct sigma_cmd *cmd);
1151void nan_cmd_sta_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
1152 struct sigma_cmd *cmd);
1153int nan_cmd_sta_preset_testparameters(struct sigma_dut *dut,
1154 struct sigma_conn *conn,
1155 struct sigma_cmd *cmd);
1156
priyadharshini gowthamand66913a2016-07-29 15:11:17 -07001157/* ftm.c */
1158int loc_cmd_sta_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
1159 struct sigma_cmd *cmd);
1160int loc_cmd_sta_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
1161 struct sigma_cmd *cmd);
1162int loc_cmd_sta_preset_testparameters(struct sigma_dut *dut,
1163 struct sigma_conn *conn,
1164 struct sigma_cmd *cmd);
Vinay Gannevaram3b9fdd32019-06-14 17:55:44 +05301165int lowi_cmd_sta_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
1166 struct sigma_cmd *cmd);
priyadharshini gowthamand66913a2016-07-29 15:11:17 -07001167
Jouni Malinend86e5822017-08-29 03:55:32 +03001168/* dpp.c */
1169int dpp_dev_exec_action(struct sigma_dut *dut, struct sigma_conn *conn,
1170 struct sigma_cmd *cmd);
1171
Ankita Bajaj1bde7942018-01-09 19:15:01 +05301172/* dhcp.c */
1173void process_fils_hlp(struct sigma_dut *dut);
1174void hlp_thread_cleanup(struct sigma_dut *dut);
Jouni Malinend86e5822017-08-29 03:55:32 +03001175
Peng Xu291d97d2018-01-31 16:34:03 -08001176#ifdef NL80211_SUPPORT
1177struct nl80211_ctx * nl80211_init(struct sigma_dut *dut);
1178void nl80211_deinit(struct sigma_dut *dut, struct nl80211_ctx *ctx);
1179struct nl_msg * nl80211_drv_msg(struct sigma_dut *dut, struct nl80211_ctx *ctx,
1180 int ifindex, int flags,
1181 uint8_t cmd);
1182int send_and_recv_msgs(struct sigma_dut *dut, struct nl80211_ctx *ctx,
1183 struct nl_msg *nlmsg,
1184 int (*valid_handler)(struct nl_msg *, void *),
1185 void *valid_data);
1186#endif /* NL80211_SUPPORT */
1187
Jouni Malinena2df7db2019-06-13 02:31:24 +03001188void traffic_register_cmds(void);
1189void traffic_agent_register_cmds(void);
1190void powerswitch_register_cmds(void);
1191void atheros_register_cmds(void);
1192void dev_register_cmds(void);
1193void sniffer_register_cmds(void);
1194void server_register_cmds(void);
1195void miracast_register_cmds(void);
1196
Jouni Malinencd4e3c32015-10-29 12:39:56 +02001197#endif /* SIGMA_DUT_H */