xref: /freebsd/contrib/wpa/src/nan/nan_module_test_cases.c (revision 71e72c9e91c4b8007a4292e09669e8b549c29e97)
1*71e72c9eSCy Schubert /*
2*71e72c9eSCy Schubert  * nan_test - NAN NDP state machine test cases
3*71e72c9eSCy Schubert  * Copyright (C) 2025 Intel Corporation
4*71e72c9eSCy Schubert  *
5*71e72c9eSCy Schubert  * This software may be distributed under the terms of the BSD license.
6*71e72c9eSCy Schubert  * See README for more details.
7*71e72c9eSCy Schubert  */
8*71e72c9eSCy Schubert 
9*71e72c9eSCy Schubert #include "utils/includes.h"
10*71e72c9eSCy Schubert #include "utils/common.h"
11*71e72c9eSCy Schubert #include "utils/list.h"
12*71e72c9eSCy Schubert #include "nan_i.h"
13*71e72c9eSCy Schubert #include "nan_module_tests.h"
14*71e72c9eSCy Schubert 
15*71e72c9eSCy Schubert static u8 default_bitmap[] = { 0xfe, 0xff, 0xfe, 0xff };
16*71e72c9eSCy Schubert 
nan_test_schedule_cb(struct nan_schedule * sched,bool ndc,int freq,int center_freq1,int center_freq2,int bandwidth)17*71e72c9eSCy Schubert static void nan_test_schedule_cb(struct nan_schedule *sched, bool ndc,
18*71e72c9eSCy Schubert 				 int freq, int center_freq1, int center_freq2,
19*71e72c9eSCy Schubert 				 int bandwidth)
20*71e72c9eSCy Schubert {
21*71e72c9eSCy Schubert 	os_memset(sched, 0, sizeof(*sched));
22*71e72c9eSCy Schubert 
23*71e72c9eSCy Schubert 	/* Only map ID 0 is used */
24*71e72c9eSCy Schubert 	sched->map_ids_bitmap = 0x1;
25*71e72c9eSCy Schubert 
26*71e72c9eSCy Schubert 	sched->n_chans = 1;
27*71e72c9eSCy Schubert 	sched->chans[0].chan.freq = freq;
28*71e72c9eSCy Schubert 	sched->chans[0].chan.center_freq1 = center_freq1;
29*71e72c9eSCy Schubert 	sched->chans[0].chan.center_freq2 = center_freq2;
30*71e72c9eSCy Schubert 	sched->chans[0].chan.bandwidth = bandwidth;
31*71e72c9eSCy Schubert 
32*71e72c9eSCy Schubert 	sched->chans[0].committed.duration = 0;
33*71e72c9eSCy Schubert 	sched->chans[0].committed.period = 3;
34*71e72c9eSCy Schubert 	sched->chans[0].committed.offset = 0;
35*71e72c9eSCy Schubert 	sched->chans[0].committed.len = sizeof(default_bitmap);
36*71e72c9eSCy Schubert 	os_memcpy(sched->chans[0].committed.bitmap, default_bitmap,
37*71e72c9eSCy Schubert 		  sizeof(default_bitmap));
38*71e72c9eSCy Schubert 
39*71e72c9eSCy Schubert 	sched->chans[0].map_id = 0;
40*71e72c9eSCy Schubert 
41*71e72c9eSCy Schubert 	if (!ndc)
42*71e72c9eSCy Schubert 		return;
43*71e72c9eSCy Schubert 
44*71e72c9eSCy Schubert 	os_memset(&sched->ndc, 0, sizeof(sched->ndc));
45*71e72c9eSCy Schubert 	sched->ndc.duration = 0;
46*71e72c9eSCy Schubert 	sched->ndc.period = 3;
47*71e72c9eSCy Schubert 	sched->ndc.offset = 0;
48*71e72c9eSCy Schubert 	sched->ndc.len = 1;
49*71e72c9eSCy Schubert 	sched->ndc.bitmap[0] = 0xfe;
50*71e72c9eSCy Schubert }
51*71e72c9eSCy Schubert 
52*71e72c9eSCy Schubert 
nan_test_schedule_cb_all_ndc(struct nan_schedule * sched)53*71e72c9eSCy Schubert static int nan_test_schedule_cb_all_ndc(struct nan_schedule *sched)
54*71e72c9eSCy Schubert {
55*71e72c9eSCy Schubert 	static u8 seq_id = 1;
56*71e72c9eSCy Schubert 
57*71e72c9eSCy Schubert 	nan_test_schedule_cb(sched, true, 5745, 5745, true, 20);
58*71e72c9eSCy Schubert 	sched->sequence_id = ++seq_id;
59*71e72c9eSCy Schubert 	return 0;
60*71e72c9eSCy Schubert }
61*71e72c9eSCy Schubert 
62*71e72c9eSCy Schubert 
nan_test_schedule_cb_all_no_ndc(struct nan_schedule * sched)63*71e72c9eSCy Schubert static int nan_test_schedule_cb_all_no_ndc(struct nan_schedule *sched)
64*71e72c9eSCy Schubert {
65*71e72c9eSCy Schubert 	static u8 seq_id = 1;
66*71e72c9eSCy Schubert 
67*71e72c9eSCy Schubert 	nan_test_schedule_cb(sched, false, 5745, 5745, 0, 20);
68*71e72c9eSCy Schubert 	sched->sequence_id = ++seq_id;
69*71e72c9eSCy Schubert 	return 0;
70*71e72c9eSCy Schubert }
71*71e72c9eSCy Schubert 
72*71e72c9eSCy Schubert 
nan_test_schedule_cb_all_no_ndc_period_4(struct nan_schedule * sched)73*71e72c9eSCy Schubert static int nan_test_schedule_cb_all_no_ndc_period_4(struct nan_schedule *sched)
74*71e72c9eSCy Schubert {
75*71e72c9eSCy Schubert 	static u8 seq_id = 1;
76*71e72c9eSCy Schubert 
77*71e72c9eSCy Schubert 	nan_test_schedule_cb(sched, false, 5745, 5745, 0, 20);
78*71e72c9eSCy Schubert 
79*71e72c9eSCy Schubert 	/*
80*71e72c9eSCy Schubert 	 * Modify the map to have a period or 1024 TUs (both halfs are
81*71e72c9eSCy Schubert 	 * identical).
82*71e72c9eSCy Schubert 	 */
83*71e72c9eSCy Schubert 	sched->chans[0].committed.period = 4;
84*71e72c9eSCy Schubert 	sched->chans[0].committed.len += sizeof(default_bitmap);
85*71e72c9eSCy Schubert 	os_memcpy(sched->chans[0].committed.bitmap + sizeof(default_bitmap),
86*71e72c9eSCy Schubert 		  default_bitmap,
87*71e72c9eSCy Schubert 		  sizeof(default_bitmap));
88*71e72c9eSCy Schubert 
89*71e72c9eSCy Schubert 	sched->sequence_id = ++seq_id;
90*71e72c9eSCy Schubert 	return 0;
91*71e72c9eSCy Schubert }
92*71e72c9eSCy Schubert 
93*71e72c9eSCy Schubert 
nan_test_schedule_cb_2ghz_no_ndc(struct nan_schedule * sched)94*71e72c9eSCy Schubert static int nan_test_schedule_cb_2ghz_no_ndc(struct nan_schedule *sched)
95*71e72c9eSCy Schubert {
96*71e72c9eSCy Schubert 	static u8 seq_id = 1;
97*71e72c9eSCy Schubert 
98*71e72c9eSCy Schubert 	nan_test_schedule_cb(sched, false, 2437, 2437, 0, 20);
99*71e72c9eSCy Schubert 	sched->sequence_id = ++seq_id;
100*71e72c9eSCy Schubert 	return 0;
101*71e72c9eSCy Schubert }
102*71e72c9eSCy Schubert 
103*71e72c9eSCy Schubert 
nan_test_get_chans_default(struct nan_channels * chans)104*71e72c9eSCy Schubert static int nan_test_get_chans_default(struct nan_channels *chans)
105*71e72c9eSCy Schubert {
106*71e72c9eSCy Schubert 	chans->n_chans = 2;
107*71e72c9eSCy Schubert 	chans->chans = os_zalloc(sizeof(struct nan_channel_info) *
108*71e72c9eSCy Schubert 				 chans->n_chans);
109*71e72c9eSCy Schubert 	if (!chans->chans)
110*71e72c9eSCy Schubert 		return -1;
111*71e72c9eSCy Schubert 
112*71e72c9eSCy Schubert 	chans->chans[0].channel = 6;
113*71e72c9eSCy Schubert 	chans->chans[0].op_class = 81;
114*71e72c9eSCy Schubert 	chans->chans[0].pref = 255;
115*71e72c9eSCy Schubert 
116*71e72c9eSCy Schubert 	chans->chans[1].channel = 149;
117*71e72c9eSCy Schubert 	chans->chans[1].op_class = 126;
118*71e72c9eSCy Schubert 	chans->chans[1].pref = 254;
119*71e72c9eSCy Schubert 
120*71e72c9eSCy Schubert 	return 0;
121*71e72c9eSCy Schubert }
122*71e72c9eSCy Schubert 
123*71e72c9eSCy Schubert 
nan_test_get_chans_default_reverse(struct nan_channels * chans)124*71e72c9eSCy Schubert static int nan_test_get_chans_default_reverse(struct nan_channels *chans)
125*71e72c9eSCy Schubert {
126*71e72c9eSCy Schubert 	chans->n_chans = 2;
127*71e72c9eSCy Schubert 	chans->chans = os_zalloc(sizeof(struct nan_channel_info) *
128*71e72c9eSCy Schubert 				 chans->n_chans);
129*71e72c9eSCy Schubert 	if (!chans->chans)
130*71e72c9eSCy Schubert 		return -1;
131*71e72c9eSCy Schubert 
132*71e72c9eSCy Schubert 	chans->chans[0].channel = 149;
133*71e72c9eSCy Schubert 	chans->chans[0].op_class = 126;
134*71e72c9eSCy Schubert 	chans->chans[0].pref = 255;
135*71e72c9eSCy Schubert 
136*71e72c9eSCy Schubert 	chans->chans[1].channel = 6;
137*71e72c9eSCy Schubert 	chans->chans[1].op_class = 81;
138*71e72c9eSCy Schubert 	chans->chans[1].pref = 254;
139*71e72c9eSCy Schubert 
140*71e72c9eSCy Schubert 	return 0;
141*71e72c9eSCy Schubert }
142*71e72c9eSCy Schubert 
143*71e72c9eSCy Schubert 
nan_test_get_chans_default_24g(struct nan_channels * chans)144*71e72c9eSCy Schubert static int nan_test_get_chans_default_24g(struct nan_channels *chans)
145*71e72c9eSCy Schubert {
146*71e72c9eSCy Schubert 	chans->n_chans = 1;
147*71e72c9eSCy Schubert 	chans->chans = os_zalloc(sizeof(struct nan_channel_info) *
148*71e72c9eSCy Schubert 				 chans->n_chans);
149*71e72c9eSCy Schubert 	if (!chans->chans)
150*71e72c9eSCy Schubert 		return -1;
151*71e72c9eSCy Schubert 
152*71e72c9eSCy Schubert 	chans->chans[0].channel = 6;
153*71e72c9eSCy Schubert 	chans->chans[0].op_class = 81;
154*71e72c9eSCy Schubert 	chans->chans[0].pref = 255;
155*71e72c9eSCy Schubert 
156*71e72c9eSCy Schubert 	return 0;
157*71e72c9eSCy Schubert }
158*71e72c9eSCy Schubert 
159*71e72c9eSCy Schubert 
nan_test_get_chans_default_52g(struct nan_channels * chans)160*71e72c9eSCy Schubert static int nan_test_get_chans_default_52g(struct nan_channels *chans)
161*71e72c9eSCy Schubert {
162*71e72c9eSCy Schubert 	chans->n_chans = 1;
163*71e72c9eSCy Schubert 	chans->chans = os_zalloc(sizeof(struct nan_channel_info) *
164*71e72c9eSCy Schubert 				 chans->n_chans);
165*71e72c9eSCy Schubert 	if (!chans->chans)
166*71e72c9eSCy Schubert 		return -1;
167*71e72c9eSCy Schubert 
168*71e72c9eSCy Schubert 	chans->chans[0].channel = 149;
169*71e72c9eSCy Schubert 	chans->chans[0].op_class = 126;
170*71e72c9eSCy Schubert 	chans->chans[0].pref = 255;
171*71e72c9eSCy Schubert 
172*71e72c9eSCy Schubert 	return 0;
173*71e72c9eSCy Schubert }
174*71e72c9eSCy Schubert 
175*71e72c9eSCy Schubert 
176*71e72c9eSCy Schubert static struct nan_test_case three_way_ndp_two_way_ndl_chan_149 = {
177*71e72c9eSCy Schubert 	.name = "Three way NDP and two way NDL channel 149",
178*71e72c9eSCy Schubert 	.pub_conf = {
179*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
180*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
181*71e72c9eSCy Schubert 		.n_ndps = 1,
182*71e72c9eSCy Schubert 		.ndp_confs = {
183*71e72c9eSCy Schubert 			{
184*71e72c9eSCy Schubert 				.accept_request = 1,
185*71e72c9eSCy Schubert 				.term_once_connected = 0,
186*71e72c9eSCy Schubert 				.expected_result =
187*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
188*71e72c9eSCy Schubert 			},
189*71e72c9eSCy Schubert 		},
190*71e72c9eSCy Schubert 		.pot_avail = {
191*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
192*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
193*71e72c9eSCy Schubert 		},
194*71e72c9eSCy Schubert 		.pot_avail_len = 13,
195*71e72c9eSCy Schubert 	},
196*71e72c9eSCy Schubert 	.sub_conf = {
197*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_no_ndc,
198*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
199*71e72c9eSCy Schubert 		.n_ndps = 1,
200*71e72c9eSCy Schubert 		.ndp_confs = {
201*71e72c9eSCy Schubert 			{
202*71e72c9eSCy Schubert 				.accept_request = 1,
203*71e72c9eSCy Schubert 				.term_once_connected = 1,
204*71e72c9eSCy Schubert 				.expected_result =
205*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
206*71e72c9eSCy Schubert 			},
207*71e72c9eSCy Schubert 		},
208*71e72c9eSCy Schubert 	}
209*71e72c9eSCy Schubert };
210*71e72c9eSCy Schubert 
211*71e72c9eSCy Schubert 
212*71e72c9eSCy Schubert static struct nan_test_case three_way_ndp_two_way_ndl_diff_period = {
213*71e72c9eSCy Schubert 	.name = "Three way NDP and two way NDL channel 149. Subscriber period=4",
214*71e72c9eSCy Schubert 	.pub_conf = {
215*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
216*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
217*71e72c9eSCy Schubert 		.n_ndps = 1,
218*71e72c9eSCy Schubert 		.ndp_confs = {
219*71e72c9eSCy Schubert 			{
220*71e72c9eSCy Schubert 				.accept_request = 1,
221*71e72c9eSCy Schubert 				.term_once_connected = 0,
222*71e72c9eSCy Schubert 				.expected_result =
223*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
224*71e72c9eSCy Schubert 			},
225*71e72c9eSCy Schubert 		},
226*71e72c9eSCy Schubert 		.pot_avail = {
227*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
228*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
229*71e72c9eSCy Schubert 		},
230*71e72c9eSCy Schubert 		.pot_avail_len = 13,
231*71e72c9eSCy Schubert 	},
232*71e72c9eSCy Schubert 	.sub_conf = {
233*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_no_ndc_period_4,
234*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
235*71e72c9eSCy Schubert 		.n_ndps = 1,
236*71e72c9eSCy Schubert 		.ndp_confs = {
237*71e72c9eSCy Schubert 			{
238*71e72c9eSCy Schubert 				.accept_request = 1,
239*71e72c9eSCy Schubert 				.term_once_connected = 1,
240*71e72c9eSCy Schubert 				.expected_result =
241*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
242*71e72c9eSCy Schubert 			},
243*71e72c9eSCy Schubert 		},
244*71e72c9eSCy Schubert 	}
245*71e72c9eSCy Schubert };
246*71e72c9eSCy Schubert 
247*71e72c9eSCy Schubert static struct nan_test_case three_way_ndp_two_way_ndl_chan_6 = {
248*71e72c9eSCy Schubert 	.name = "Three way NDP and two way NDL channel 6",
249*71e72c9eSCy Schubert 	.pub_conf = {
250*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
251*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
252*71e72c9eSCy Schubert 		.n_ndps = 1,
253*71e72c9eSCy Schubert 		.ndp_confs = {
254*71e72c9eSCy Schubert 			{
255*71e72c9eSCy Schubert 				.accept_request = 1,
256*71e72c9eSCy Schubert 				.term_once_connected = 1,
257*71e72c9eSCy Schubert 				.expected_result =
258*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
259*71e72c9eSCy Schubert 			},
260*71e72c9eSCy Schubert 		},
261*71e72c9eSCy Schubert 		.pot_avail = {
262*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
263*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
264*71e72c9eSCy Schubert 		},
265*71e72c9eSCy Schubert 		.pot_avail_len = 13,
266*71e72c9eSCy Schubert 	},
267*71e72c9eSCy Schubert 	.sub_conf = {
268*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_no_ndc,
269*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default_24g,
270*71e72c9eSCy Schubert 		.n_ndps = 1,
271*71e72c9eSCy Schubert 		.ndp_confs = {
272*71e72c9eSCy Schubert 			{
273*71e72c9eSCy Schubert 				.accept_request = 1,
274*71e72c9eSCy Schubert 				.term_once_connected = 0,
275*71e72c9eSCy Schubert 				.expected_result =
276*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
277*71e72c9eSCy Schubert 			},
278*71e72c9eSCy Schubert 		},
279*71e72c9eSCy Schubert 	}
280*71e72c9eSCy Schubert };
281*71e72c9eSCy Schubert 
282*71e72c9eSCy Schubert static struct nan_test_case three_way_ndp_two_way_ndl_chan_mis = {
283*71e72c9eSCy Schubert 	.name = "Three way NDP and two way NDL channel mismatch",
284*71e72c9eSCy Schubert 	.pub_conf = {
285*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
286*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default_52g,
287*71e72c9eSCy Schubert 		.n_ndps = 1,
288*71e72c9eSCy Schubert 		.ndp_confs = {
289*71e72c9eSCy Schubert 			{
290*71e72c9eSCy Schubert 				.accept_request = 1,
291*71e72c9eSCy Schubert 				.expected_result =
292*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_DISCONNECTED,
293*71e72c9eSCy Schubert 			},
294*71e72c9eSCy Schubert 		},
295*71e72c9eSCy Schubert 		.pot_avail = {
296*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
297*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
298*71e72c9eSCy Schubert 		},
299*71e72c9eSCy Schubert 		.pot_avail_len = 13,
300*71e72c9eSCy Schubert 	},
301*71e72c9eSCy Schubert 	.sub_conf = {
302*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_2ghz_no_ndc,
303*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default_24g,
304*71e72c9eSCy Schubert 		.n_ndps = 1,
305*71e72c9eSCy Schubert 		.ndp_confs = {
306*71e72c9eSCy Schubert 			{
307*71e72c9eSCy Schubert 				.accept_request = 0,
308*71e72c9eSCy Schubert 				.expected_result =
309*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_DISCONNECTED,
310*71e72c9eSCy Schubert 			},
311*71e72c9eSCy Schubert 		},
312*71e72c9eSCy Schubert 	}
313*71e72c9eSCy Schubert };
314*71e72c9eSCy Schubert 
315*71e72c9eSCy Schubert static struct nan_test_case three_way_ndp_three_way_ndl = {
316*71e72c9eSCy Schubert 	.name = "Three way NDP and three way NDL",
317*71e72c9eSCy Schubert 	.pub_conf = {
318*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
319*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
320*71e72c9eSCy Schubert 		.n_ndps = 1,
321*71e72c9eSCy Schubert 		.ndp_confs = {
322*71e72c9eSCy Schubert 			{
323*71e72c9eSCy Schubert 				.accept_request = 1,
324*71e72c9eSCy Schubert 				.expected_result =
325*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
326*71e72c9eSCy Schubert 			},
327*71e72c9eSCy Schubert 		},
328*71e72c9eSCy Schubert 		.pot_avail = {
329*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
330*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
331*71e72c9eSCy Schubert 		},
332*71e72c9eSCy Schubert 		.pot_avail_len = 13,
333*71e72c9eSCy Schubert 	},
334*71e72c9eSCy Schubert 	.sub_conf = {
335*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_2ghz_no_ndc,
336*71e72c9eSCy Schubert 		.schedule_conf_cb = nan_test_schedule_cb_all_ndc,
337*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default_reverse,
338*71e72c9eSCy Schubert 		.n_ndps = 1,
339*71e72c9eSCy Schubert 		.ndp_confs = {
340*71e72c9eSCy Schubert 			{
341*71e72c9eSCy Schubert 				.accept_request = 1,
342*71e72c9eSCy Schubert 				.expected_result =
343*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
344*71e72c9eSCy Schubert 				.term_once_connected = 1,
345*71e72c9eSCy Schubert 			},
346*71e72c9eSCy Schubert 		},
347*71e72c9eSCy Schubert 	}
348*71e72c9eSCy Schubert };
349*71e72c9eSCy Schubert 
350*71e72c9eSCy Schubert static struct nan_test_case three_way_ndp_two_way_ndl_reject = {
351*71e72c9eSCy Schubert 	.name = "Three way NDP and two way NDL rejected",
352*71e72c9eSCy Schubert 	.pub_conf = {
353*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
354*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
355*71e72c9eSCy Schubert 		.n_ndps = 1,
356*71e72c9eSCy Schubert 		.ndp_confs = {
357*71e72c9eSCy Schubert 			{
358*71e72c9eSCy Schubert 				.accept_request = 0,
359*71e72c9eSCy Schubert 				.expected_result =
360*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_DISCONNECTED,
361*71e72c9eSCy Schubert 				.reason = NAN_REASON_NDP_REJECTED,
362*71e72c9eSCy Schubert 			},
363*71e72c9eSCy Schubert 		},
364*71e72c9eSCy Schubert 		.pot_avail = {
365*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
366*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
367*71e72c9eSCy Schubert 		},
368*71e72c9eSCy Schubert 		.pot_avail_len = 13,
369*71e72c9eSCy Schubert 	},
370*71e72c9eSCy Schubert 	.sub_conf = {
371*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_no_ndc,
372*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
373*71e72c9eSCy Schubert 		.n_ndps = 1,
374*71e72c9eSCy Schubert 		.ndp_confs = {
375*71e72c9eSCy Schubert 			{
376*71e72c9eSCy Schubert 				.accept_request = 0,
377*71e72c9eSCy Schubert 				.expected_result =
378*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_DISCONNECTED,
379*71e72c9eSCy Schubert 			},
380*71e72c9eSCy Schubert 		},
381*71e72c9eSCy Schubert 	}
382*71e72c9eSCy Schubert };
383*71e72c9eSCy Schubert 
384*71e72c9eSCy Schubert 
385*71e72c9eSCy Schubert static struct nan_test_case four_way_ndp_two_way_ndl_chan_149_ccm_128 = {
386*71e72c9eSCy Schubert 	.name = "Four way NDP and two way NDL channel 149 with CCMP 128",
387*71e72c9eSCy Schubert 	.pub_conf = {
388*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
389*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
390*71e72c9eSCy Schubert 		.n_ndps = 1,
391*71e72c9eSCy Schubert 		.ndp_confs = {
392*71e72c9eSCy Schubert 			{
393*71e72c9eSCy Schubert 				.accept_request = 1,
394*71e72c9eSCy Schubert 				.expected_result =
395*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
396*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_CCM_128,
397*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_CCM_128,
398*71e72c9eSCy Schubert 			},
399*71e72c9eSCy Schubert 		},
400*71e72c9eSCy Schubert 		.pot_avail = {
401*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
402*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
403*71e72c9eSCy Schubert 		},
404*71e72c9eSCy Schubert 		.pot_avail_len = 13,
405*71e72c9eSCy Schubert 		.pmk = {
406*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
407*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
408*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
409*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
410*71e72c9eSCy Schubert 		},
411*71e72c9eSCy Schubert 	},
412*71e72c9eSCy Schubert 	.sub_conf = {
413*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_no_ndc,
414*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
415*71e72c9eSCy Schubert 		.n_ndps = 1,
416*71e72c9eSCy Schubert 		.ndp_confs = {
417*71e72c9eSCy Schubert 			{
418*71e72c9eSCy Schubert 				.accept_request = 1,
419*71e72c9eSCy Schubert 				.expected_result =
420*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
421*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_CCM_128,
422*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_CCM_128,
423*71e72c9eSCy Schubert 				.term_once_connected = 1,
424*71e72c9eSCy Schubert 			},
425*71e72c9eSCy Schubert 		},
426*71e72c9eSCy Schubert 		.pmk = {
427*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
428*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
429*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
430*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
431*71e72c9eSCy Schubert 		},
432*71e72c9eSCy Schubert 	}
433*71e72c9eSCy Schubert };
434*71e72c9eSCy Schubert 
435*71e72c9eSCy Schubert static struct nan_test_case four_way_ndp_two_way_ndl_chan_149_gcm_256 = {
436*71e72c9eSCy Schubert 	.name = "Four way NDP and three way NDL with GCMP 256",
437*71e72c9eSCy Schubert 	.pub_conf = {
438*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
439*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
440*71e72c9eSCy Schubert 		.n_ndps = 1,
441*71e72c9eSCy Schubert 		.ndp_confs = {
442*71e72c9eSCy Schubert 			{
443*71e72c9eSCy Schubert 				.accept_request = 1,
444*71e72c9eSCy Schubert 				.expected_result =
445*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
446*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_GCM_256,
447*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_GCM_256,
448*71e72c9eSCy Schubert 			},
449*71e72c9eSCy Schubert 		},
450*71e72c9eSCy Schubert 		.pot_avail = {
451*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
452*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
453*71e72c9eSCy Schubert 		},
454*71e72c9eSCy Schubert 		.pot_avail_len = 13,
455*71e72c9eSCy Schubert 		.pmk = {
456*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
457*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
458*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
459*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
460*71e72c9eSCy Schubert 		},
461*71e72c9eSCy Schubert 	},
462*71e72c9eSCy Schubert 	.sub_conf = {
463*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_2ghz_no_ndc,
464*71e72c9eSCy Schubert 		.schedule_conf_cb = nan_test_schedule_cb_all_ndc,
465*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default_reverse,
466*71e72c9eSCy Schubert 		.n_ndps = 1,
467*71e72c9eSCy Schubert 		.ndp_confs = {
468*71e72c9eSCy Schubert 			{
469*71e72c9eSCy Schubert 				.accept_request = 1,
470*71e72c9eSCy Schubert 				.expected_result =
471*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
472*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_GCM_256,
473*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_GCM_256,
474*71e72c9eSCy Schubert 				.term_once_connected = 1,
475*71e72c9eSCy Schubert 			},
476*71e72c9eSCy Schubert 		},
477*71e72c9eSCy Schubert 		.pmk = {
478*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
479*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
480*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
481*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
482*71e72c9eSCy Schubert 		},
483*71e72c9eSCy Schubert 	}
484*71e72c9eSCy Schubert };
485*71e72c9eSCy Schubert 
486*71e72c9eSCy Schubert 
487*71e72c9eSCy Schubert static struct nan_test_case pmk_mismatch = {
488*71e72c9eSCy Schubert 	.name = "PMK mismatch test case",
489*71e72c9eSCy Schubert 	.pub_conf = {
490*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
491*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
492*71e72c9eSCy Schubert 		.n_ndps = 1,
493*71e72c9eSCy Schubert 		.ndp_confs = {
494*71e72c9eSCy Schubert 			{
495*71e72c9eSCy Schubert 				.accept_request = 1,
496*71e72c9eSCy Schubert 				.expected_result =
497*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_DISCONNECTED,
498*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_GCM_256,
499*71e72c9eSCy Schubert 			},
500*71e72c9eSCy Schubert 		},
501*71e72c9eSCy Schubert 		.pot_avail = {
502*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
503*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
504*71e72c9eSCy Schubert 		},
505*71e72c9eSCy Schubert 		.pot_avail_len = 13,
506*71e72c9eSCy Schubert 		.pmk = {
507*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
508*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
509*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
510*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
511*71e72c9eSCy Schubert 		},
512*71e72c9eSCy Schubert 	},
513*71e72c9eSCy Schubert 	.sub_conf = {
514*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_no_ndc,
515*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
516*71e72c9eSCy Schubert 		.n_ndps = 1,
517*71e72c9eSCy Schubert 		.ndp_confs = {
518*71e72c9eSCy Schubert 			{
519*71e72c9eSCy Schubert 				.accept_request = 1,
520*71e72c9eSCy Schubert 				.expected_result =
521*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_DISCONNECTED,
522*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_GCM_256,
523*71e72c9eSCy Schubert 			},
524*71e72c9eSCy Schubert 		},
525*71e72c9eSCy Schubert 		.pmk = {
526*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
527*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
528*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
529*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x0,
530*71e72c9eSCy Schubert 		},
531*71e72c9eSCy Schubert 	}
532*71e72c9eSCy Schubert };
533*71e72c9eSCy Schubert 
534*71e72c9eSCy Schubert 
535*71e72c9eSCy Schubert static struct nan_test_case two_ndps_no_security = {
536*71e72c9eSCy Schubert 	.name = "Two NDPs: no security. Both accepted",
537*71e72c9eSCy Schubert 	.pub_conf = {
538*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
539*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
540*71e72c9eSCy Schubert 		.n_ndps = 2,
541*71e72c9eSCy Schubert 		.ndp_confs = {
542*71e72c9eSCy Schubert 			{
543*71e72c9eSCy Schubert 				.accept_request = 1,
544*71e72c9eSCy Schubert 				.term_once_connected = 0,
545*71e72c9eSCy Schubert 				.expected_result =
546*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
547*71e72c9eSCy Schubert 			},
548*71e72c9eSCy Schubert 			{
549*71e72c9eSCy Schubert 				.accept_request = 1,
550*71e72c9eSCy Schubert 				.term_once_connected = 0,
551*71e72c9eSCy Schubert 				.expected_result =
552*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
553*71e72c9eSCy Schubert 			},
554*71e72c9eSCy Schubert 		},
555*71e72c9eSCy Schubert 		.pot_avail = {
556*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
557*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
558*71e72c9eSCy Schubert 		},
559*71e72c9eSCy Schubert 		.pot_avail_len = 13,
560*71e72c9eSCy Schubert 	},
561*71e72c9eSCy Schubert 	.sub_conf = {
562*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_no_ndc,
563*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
564*71e72c9eSCy Schubert 		.n_ndps = 2,
565*71e72c9eSCy Schubert 		.ndp_confs = {
566*71e72c9eSCy Schubert 			{
567*71e72c9eSCy Schubert 				.accept_request = 1,
568*71e72c9eSCy Schubert 				.term_once_connected = 0,
569*71e72c9eSCy Schubert 				.expected_result =
570*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
571*71e72c9eSCy Schubert 			},
572*71e72c9eSCy Schubert 			{
573*71e72c9eSCy Schubert 				.accept_request = 1,
574*71e72c9eSCy Schubert 				.term_once_connected = 1,
575*71e72c9eSCy Schubert 				.expected_result =
576*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
577*71e72c9eSCy Schubert 			},
578*71e72c9eSCy Schubert 		},
579*71e72c9eSCy Schubert 	}
580*71e72c9eSCy Schubert };
581*71e72c9eSCy Schubert 
582*71e72c9eSCy Schubert 
583*71e72c9eSCy Schubert static struct nan_test_case three_ndps_no_security_middle_one_rejected = {
584*71e72c9eSCy Schubert 	.name = "Three NDPs: no security. Middle one rejected",
585*71e72c9eSCy Schubert 	.pub_conf = {
586*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
587*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
588*71e72c9eSCy Schubert 		.n_ndps = 3,
589*71e72c9eSCy Schubert 		.ndp_confs = {
590*71e72c9eSCy Schubert 			{
591*71e72c9eSCy Schubert 				.accept_request = 1,
592*71e72c9eSCy Schubert 				.expected_result =
593*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
594*71e72c9eSCy Schubert 			},
595*71e72c9eSCy Schubert 			{
596*71e72c9eSCy Schubert 				.accept_request = 0,
597*71e72c9eSCy Schubert 				.expected_result =
598*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_DISCONNECTED,
599*71e72c9eSCy Schubert 			},
600*71e72c9eSCy Schubert 			{
601*71e72c9eSCy Schubert 				.accept_request = 1,
602*71e72c9eSCy Schubert 				.expected_result =
603*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
604*71e72c9eSCy Schubert 			},
605*71e72c9eSCy Schubert 		},
606*71e72c9eSCy Schubert 		.pot_avail = {
607*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
608*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
609*71e72c9eSCy Schubert 		},
610*71e72c9eSCy Schubert 		.pot_avail_len = 13,
611*71e72c9eSCy Schubert 	},
612*71e72c9eSCy Schubert 	.sub_conf = {
613*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_no_ndc,
614*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
615*71e72c9eSCy Schubert 		.n_ndps = 3,
616*71e72c9eSCy Schubert 		.ndp_confs = {
617*71e72c9eSCy Schubert 			{
618*71e72c9eSCy Schubert 				.accept_request = 1,
619*71e72c9eSCy Schubert 				.expected_result =
620*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
621*71e72c9eSCy Schubert 			},
622*71e72c9eSCy Schubert 			{
623*71e72c9eSCy Schubert 				.accept_request = 1,
624*71e72c9eSCy Schubert 				.expected_result =
625*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_DISCONNECTED,
626*71e72c9eSCy Schubert 			},
627*71e72c9eSCy Schubert 			{
628*71e72c9eSCy Schubert 				.accept_request = 1,
629*71e72c9eSCy Schubert 				.term_once_connected = 1,
630*71e72c9eSCy Schubert 				.expected_result =
631*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
632*71e72c9eSCy Schubert 			},
633*71e72c9eSCy Schubert 		},
634*71e72c9eSCy Schubert 	}
635*71e72c9eSCy Schubert };
636*71e72c9eSCy Schubert 
637*71e72c9eSCy Schubert 
638*71e72c9eSCy Schubert static struct nan_test_case three_ndps_increasing_security = {
639*71e72c9eSCy Schubert 	.name = "Three NDPs: increasing security levels",
640*71e72c9eSCy Schubert 	.pub_conf = {
641*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
642*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
643*71e72c9eSCy Schubert 		.n_ndps = 3,
644*71e72c9eSCy Schubert 		.ndp_confs = {
645*71e72c9eSCy Schubert 			{
646*71e72c9eSCy Schubert 				.accept_request = 1,
647*71e72c9eSCy Schubert 				.expected_result =
648*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
649*71e72c9eSCy Schubert 			},
650*71e72c9eSCy Schubert 			{
651*71e72c9eSCy Schubert 				.accept_request = 1,
652*71e72c9eSCy Schubert 				.expected_result =
653*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
654*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_CCM_128,
655*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_CCM_128,
656*71e72c9eSCy Schubert 			},
657*71e72c9eSCy Schubert 			{
658*71e72c9eSCy Schubert 				.accept_request = 1,
659*71e72c9eSCy Schubert 				.expected_result =
660*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
661*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_GCM_256,
662*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_GCM_256,
663*71e72c9eSCy Schubert 			},
664*71e72c9eSCy Schubert 		},
665*71e72c9eSCy Schubert 		.pot_avail = {
666*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
667*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
668*71e72c9eSCy Schubert 		},
669*71e72c9eSCy Schubert 		.pot_avail_len = 13,
670*71e72c9eSCy Schubert 		.pmk = {
671*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
672*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
673*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
674*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
675*71e72c9eSCy Schubert 		},
676*71e72c9eSCy Schubert 	},
677*71e72c9eSCy Schubert 	.sub_conf = {
678*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_no_ndc,
679*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
680*71e72c9eSCy Schubert 		.n_ndps = 3,
681*71e72c9eSCy Schubert 		.ndp_confs = {
682*71e72c9eSCy Schubert 			{
683*71e72c9eSCy Schubert 				.accept_request = 1,
684*71e72c9eSCy Schubert 				.expected_result =
685*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
686*71e72c9eSCy Schubert 			},
687*71e72c9eSCy Schubert 			{
688*71e72c9eSCy Schubert 				.accept_request = 1,
689*71e72c9eSCy Schubert 				.expected_result =
690*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
691*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_CCM_128,
692*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_CCM_128,
693*71e72c9eSCy Schubert 			},
694*71e72c9eSCy Schubert 			{
695*71e72c9eSCy Schubert 				.accept_request = 1,
696*71e72c9eSCy Schubert 				.term_once_connected = 1,
697*71e72c9eSCy Schubert 				.expected_result =
698*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
699*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_GCM_256,
700*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_GCM_256,
701*71e72c9eSCy Schubert 			},
702*71e72c9eSCy Schubert 		},
703*71e72c9eSCy Schubert 		.pmk = {
704*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
705*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
706*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
707*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
708*71e72c9eSCy Schubert 		},
709*71e72c9eSCy Schubert 	}
710*71e72c9eSCy Schubert };
711*71e72c9eSCy Schubert 
712*71e72c9eSCy Schubert 
713*71e72c9eSCy Schubert static struct nan_test_case three_ndps_deacreasing_security = {
714*71e72c9eSCy Schubert 	.name = "Three NDPs: decreasing security levels",
715*71e72c9eSCy Schubert 	.pub_conf = {
716*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_ndc,
717*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
718*71e72c9eSCy Schubert 		.n_ndps = 3,
719*71e72c9eSCy Schubert 		.ndp_confs = {
720*71e72c9eSCy Schubert 			{
721*71e72c9eSCy Schubert 				.accept_request = 1,
722*71e72c9eSCy Schubert 				.expected_result =
723*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
724*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_GCM_256,
725*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_GCM_256,
726*71e72c9eSCy Schubert 			},
727*71e72c9eSCy Schubert 			{
728*71e72c9eSCy Schubert 				.accept_request = 1,
729*71e72c9eSCy Schubert 				.expected_result =
730*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
731*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_CCM_128,
732*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_GCM_256,
733*71e72c9eSCy Schubert 			},
734*71e72c9eSCy Schubert 			{
735*71e72c9eSCy Schubert 				.accept_request = 1,
736*71e72c9eSCy Schubert 				.expected_result =
737*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
738*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_GCM_256,
739*71e72c9eSCy Schubert 			},
740*71e72c9eSCy Schubert 		},
741*71e72c9eSCy Schubert 		.pot_avail = {
742*71e72c9eSCy Schubert 			0x12, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00,
743*71e72c9eSCy Schubert 			0xba, 0x02, 0x20, 0x02, 0x04
744*71e72c9eSCy Schubert 		},
745*71e72c9eSCy Schubert 		.pot_avail_len = 13,
746*71e72c9eSCy Schubert 		.pmk = {
747*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
748*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
749*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
750*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
751*71e72c9eSCy Schubert 		},
752*71e72c9eSCy Schubert 	},
753*71e72c9eSCy Schubert 	.sub_conf = {
754*71e72c9eSCy Schubert 		.schedule_cb = nan_test_schedule_cb_all_no_ndc,
755*71e72c9eSCy Schubert 		.get_chans_cb = nan_test_get_chans_default,
756*71e72c9eSCy Schubert 		.n_ndps = 3,
757*71e72c9eSCy Schubert 		.ndp_confs = {
758*71e72c9eSCy Schubert 			{
759*71e72c9eSCy Schubert 				.accept_request = 1,
760*71e72c9eSCy Schubert 				.expected_result =
761*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
762*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_GCM_256,
763*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_GCM_256,
764*71e72c9eSCy Schubert 			},
765*71e72c9eSCy Schubert 			{
766*71e72c9eSCy Schubert 				.accept_request = 1,
767*71e72c9eSCy Schubert 				.expected_result =
768*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
769*71e72c9eSCy Schubert 				.csid = NAN_CS_SK_CCM_128,
770*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_GCM_256,
771*71e72c9eSCy Schubert 			},
772*71e72c9eSCy Schubert 			{
773*71e72c9eSCy Schubert 				.accept_request = 1,
774*71e72c9eSCy Schubert 				.term_once_connected = 1,
775*71e72c9eSCy Schubert 				.expected_result =
776*71e72c9eSCy Schubert 					NAN_TEST_NDP_NOTIFY_CONNECTED,
777*71e72c9eSCy Schubert 				.expected_csid = NAN_CS_SK_GCM_256,
778*71e72c9eSCy Schubert 			},
779*71e72c9eSCy Schubert 		},
780*71e72c9eSCy Schubert 		.pmk = {
781*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
782*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
783*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
784*71e72c9eSCy Schubert 			0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
785*71e72c9eSCy Schubert 		},
786*71e72c9eSCy Schubert 	}
787*71e72c9eSCy Schubert };
788*71e72c9eSCy Schubert 
789*71e72c9eSCy Schubert 
790*71e72c9eSCy Schubert static const struct nan_test_case *g_nan_test_cases[] = {
791*71e72c9eSCy Schubert 	&three_way_ndp_two_way_ndl_chan_149,
792*71e72c9eSCy Schubert 	&three_way_ndp_two_way_ndl_diff_period,
793*71e72c9eSCy Schubert 	&three_way_ndp_two_way_ndl_chan_6,
794*71e72c9eSCy Schubert 	&three_way_ndp_two_way_ndl_chan_mis,
795*71e72c9eSCy Schubert 	&three_way_ndp_two_way_ndl_reject,
796*71e72c9eSCy Schubert 	&three_way_ndp_three_way_ndl,
797*71e72c9eSCy Schubert 	&four_way_ndp_two_way_ndl_chan_149_ccm_128,
798*71e72c9eSCy Schubert 	&four_way_ndp_two_way_ndl_chan_149_gcm_256,
799*71e72c9eSCy Schubert 	&pmk_mismatch,
800*71e72c9eSCy Schubert 	&two_ndps_no_security,
801*71e72c9eSCy Schubert 	&three_ndps_no_security_middle_one_rejected,
802*71e72c9eSCy Schubert 	&three_ndps_increasing_security,
803*71e72c9eSCy Schubert 	&three_ndps_deacreasing_security,
804*71e72c9eSCy Schubert 	NULL
805*71e72c9eSCy Schubert };
806*71e72c9eSCy Schubert 
807*71e72c9eSCy Schubert 
nan_test_case_get_next(void)808*71e72c9eSCy Schubert const struct nan_test_case * nan_test_case_get_next(void)
809*71e72c9eSCy Schubert {
810*71e72c9eSCy Schubert 	static u32 nan_test_case_idx = 0;
811*71e72c9eSCy Schubert 	const struct nan_test_case *curr = g_nan_test_cases[nan_test_case_idx];
812*71e72c9eSCy Schubert 
813*71e72c9eSCy Schubert 	if (curr)
814*71e72c9eSCy Schubert 		nan_test_case_idx++;
815*71e72c9eSCy Schubert 
816*71e72c9eSCy Schubert 	return curr;
817*71e72c9eSCy Schubert }
818