xref: /wlan-dirver/qca-wifi-host-cmn/qdf/test/qdf_types_test.c (revision 11f5a63a6cbdda84849a730de22f0a71e635d58c)
1 /*
2  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #include "qdf_mem.h"
20 #include "qdf_trace.h"
21 #include "qdf_types.h"
22 #include "qdf_types_test.h"
23 
24 #define WHITESPACE "\t\n\r \x20"
25 
26 #define ut_bool_pass(str, exp) __ut_bool(str, QDF_STATUS_SUCCESS, exp)
27 #define ut_bool_fail(str) __ut_bool(str, QDF_STATUS_E_FAILURE, false)
28 
29 static uint32_t
30 __ut_bool(const char *str, QDF_STATUS exp_status, bool exp_value)
31 {
32 	bool value;
33 	QDF_STATUS status = qdf_bool_parse(str, &value);
34 
35 	if (status != exp_status) {
36 		qdf_nofl_alert("FAIL: qdf_bool_parse(\"%s\") -> status %d; expected status %d",
37 			       str, status, exp_status);
38 		return 1;
39 	}
40 
41 	if (QDF_IS_STATUS_ERROR(status))
42 		return 0;
43 
44 	if (value != exp_value) {
45 		qdf_nofl_alert("FAIL: qdf_bool_parse(\"%s\") -> %s; expected %s",
46 			       str, value ? "true" : "false",
47 			       exp_value ? "true" : "false");
48 		return 1;
49 	}
50 
51 	return 0;
52 }
53 
54 static uint32_t qdf_types_ut_bool_parse(void)
55 {
56 	uint32_t errors = 0;
57 
58 	errors += ut_bool_pass("1", true);
59 	errors += ut_bool_pass("y", true);
60 	errors += ut_bool_pass("Y", true);
61 	errors += ut_bool_pass("0", false);
62 	errors += ut_bool_pass("n", false);
63 	errors += ut_bool_pass("N", false);
64 	errors += ut_bool_pass(WHITESPACE "1" WHITESPACE, true);
65 
66 	errors += ut_bool_fail("true");
67 	errors += ut_bool_fail("false");
68 	errors += ut_bool_fail("日本");
69 
70 	return errors;
71 }
72 
73 #define ut_int32_pass(str, exp) __ut_int32(str, QDF_STATUS_SUCCESS, exp)
74 #define ut_int32_fail(str, exp_status) __ut_int32(str, exp_status, 0)
75 
76 static uint32_t
77 __ut_int32(const char *str, QDF_STATUS exp_status, int32_t exp_value)
78 {
79 	int32_t value;
80 	QDF_STATUS status = qdf_int32_parse(str, &value);
81 
82 	if (status != exp_status) {
83 		qdf_nofl_alert("FAIL: qdf_int32_parse(\"%s\") -> status %d; expected status %d",
84 			       str, status, exp_status);
85 		return 1;
86 	}
87 
88 	if (QDF_IS_STATUS_ERROR(status))
89 		return 0;
90 
91 	if (value != exp_value) {
92 		qdf_nofl_alert("FAIL: qdf_int32_parse(\"%s\") -> %d; expected %d",
93 			       str, value, exp_value);
94 		return 1;
95 	}
96 
97 	return 0;
98 }
99 
100 static uint32_t qdf_types_ut_int32_parse(void)
101 {
102 	uint32_t errors = 0;
103 
104 	errors += ut_int32_pass("1", 1);
105 	errors += ut_int32_pass("+1", 1);
106 	errors += ut_int32_pass("-1", -1);
107 	errors += ut_int32_pass(WHITESPACE "1" WHITESPACE, 1);
108 	errors += ut_int32_fail("1;", QDF_STATUS_E_FAILURE);
109 	errors += ut_int32_pass(" 2147483647", 2147483647);
110 	errors += ut_int32_fail(" 2147483648", QDF_STATUS_E_RANGE);
111 	errors += ut_int32_pass("-2147483648", -2147483647 - 1);
112 	errors += ut_int32_fail("-2147483649", QDF_STATUS_E_RANGE);
113 	errors += ut_int32_fail("日本", QDF_STATUS_E_FAILURE);
114 
115 	return errors;
116 }
117 
118 #define ut_int64_pass(str, exp) __ut_int64(str, QDF_STATUS_SUCCESS, exp)
119 #define ut_int64_fail(str, exp_status) __ut_int64(str, exp_status, 0)
120 
121 static uint32_t
122 __ut_int64(const char *str, QDF_STATUS exp_status, int64_t exp_value)
123 {
124 	int64_t value;
125 	QDF_STATUS status = qdf_int64_parse(str, &value);
126 
127 	if (status != exp_status) {
128 		qdf_nofl_alert("FAIL: qdf_int64_parse(\"%s\") -> status %d; expected status %d",
129 			       str, status, exp_status);
130 		return 1;
131 	}
132 
133 	if (QDF_IS_STATUS_ERROR(status))
134 		return 0;
135 
136 	if (value != exp_value) {
137 		qdf_nofl_alert("FAIL: qdf_int64_parse(\"%s\") -> %lld; expected %lld",
138 			       str, value, exp_value);
139 		return 1;
140 	}
141 
142 	return 0;
143 }
144 
145 static uint32_t qdf_types_ut_int64_parse(void)
146 {
147 	uint32_t errors = 0;
148 
149 	errors += ut_int64_pass("1", 1);
150 	errors += ut_int64_pass("+1", 1);
151 	errors += ut_int64_pass("-1", -1);
152 	errors += ut_int64_pass(WHITESPACE "1" WHITESPACE, 1);
153 	errors += ut_int64_fail("1;", QDF_STATUS_E_FAILURE);
154 	errors += ut_int64_pass(" 9223372036854775807", 9223372036854775807ll);
155 	errors += ut_int64_fail(" 9223372036854775808", QDF_STATUS_E_RANGE);
156 	errors += ut_int64_pass("-9223372036854775808",
157 				-9223372036854775807ll - 1);
158 	errors += ut_int64_fail("-9223372036854775809", QDF_STATUS_E_RANGE);
159 	errors += ut_int64_fail("日本", QDF_STATUS_E_FAILURE);
160 
161 	return errors;
162 }
163 
164 #define ut_uint16_array_pass(str, max_size, exp_arr, exp_arr_size) \
165 __ut_uint16_array(str, QDF_STATUS_SUCCESS, max_size, exp_arr, exp_arr_size)
166 
167 #define ut_uint16_array_fail(str, max_size, exp_status, exp_arr, exp_arr_size)\
168 __ut_uint16_array(str, exp_status, max_size, exp_arr, exp_arr_size)
169 
170 static uint32_t
171 __ut_uint16_array(const char *str, QDF_STATUS exp_status,
172 		  uint8_t max_array_size, uint16_t *exp_array,
173 		  uint8_t exp_array_size)
174 {
175 	uint16_t parsed_array[10];
176 	qdf_size_t parsed_array_size;
177 	QDF_STATUS status;
178 	uint8_t i;
179 
180 	status = qdf_uint16_array_parse(str, parsed_array, max_array_size,
181 					&parsed_array_size);
182 
183 	if (status != exp_status) {
184 		qdf_nofl_alert("FAIL: qdf_uint16_array_parse(\"%s\") -> status %d; expected status %d",
185 			       str, status, exp_status);
186 		return 1;
187 	}
188 
189 	if (QDF_IS_STATUS_ERROR(status))
190 		return 0;
191 
192 	if (parsed_array_size != exp_array_size) {
193 		qdf_nofl_alert("FAIL: qdf_uint16_array_parse(\"%s\") -> parsed_array_size %zu; exp_array_size %d",
194 			       str, parsed_array_size, exp_array_size);
195 		return 1;
196 	}
197 
198 	for (i = 0; i < exp_array_size; i++)
199 		if (parsed_array[i] != exp_array[i]) {
200 			qdf_nofl_alert("FAIL: qdf_uint16_array_parse(\"%s\") -> parsed_array[%d] %d; exp_array[%d] %d",
201 				       str, i, parsed_array[i], i,
202 				       exp_array[i]);
203 		return 1;
204 	}
205 
206 	return 0;
207 }
208 
209 static uint32_t qdf_types_ut_uint16_array_parse(void)
210 {
211 	uint32_t errors = 0;
212 	uint16_t exp_array_value[10] = {
213 			1, 10, 2412, 2417, 100, 65535, 0, 5486, 5180, 9999};
214 
215 	errors += ut_uint16_array_pass(
216 			"1, 10, 2412, 2417, 100, 65535, 0, 5486, 5180, 9999",
217 			10, exp_array_value, 10);
218 	errors += ut_uint16_array_pass(
219 		"+1, +10, +2412, +2417, +100, +65535, 0, +5486, +5180, +9999",
220 		10, exp_array_value, 10);
221 	errors += ut_uint16_array_fail("1;", 10, QDF_STATUS_E_FAILURE,
222 				       exp_array_value, 0);
223 	/* Out of range test where 65536 is out of range */
224 	errors += ut_uint16_array_fail(
225 			"1, 10, 2412, 2417, 100, 65536, 0, 5486, 5180, 9999",
226 			10, QDF_STATUS_E_RANGE, exp_array_value, 0);
227 	errors += ut_uint16_array_fail(
228 		"-1, -10, -2412, -2417, -100, -65535, 0, -5486, -5180, -9999",
229 		10, QDF_STATUS_E_RANGE, exp_array_value, 0);
230 	errors += ut_uint16_array_fail(
231 			"1, 10, 2412, 2417, 100, 日本, 0, 5486, 5180, 9999",
232 			10, QDF_STATUS_E_FAILURE, exp_array_value, 0);
233 
234 	return errors;
235 }
236 
237 #define ut_uint32_pass(str, exp) __ut_uint32(str, QDF_STATUS_SUCCESS, exp)
238 #define ut_uint32_fail(str, exp_status) __ut_uint32(str, exp_status, 0)
239 
240 static uint32_t
241 __ut_uint32(const char *str, QDF_STATUS exp_status, uint32_t exp_value)
242 {
243 	uint32_t value;
244 	QDF_STATUS status = qdf_uint32_parse(str, &value);
245 
246 	if (status != exp_status) {
247 		qdf_nofl_alert("FAIL: qdf_uint32_parse(\"%s\") -> status %d; expected status %d",
248 			       str, status, exp_status);
249 		return 1;
250 	}
251 
252 	if (QDF_IS_STATUS_ERROR(status))
253 		return 0;
254 
255 	if (value != exp_value) {
256 		qdf_nofl_alert("FAIL: qdf_uint32_parse(\"%s\") -> %d; expected %d",
257 			       str, value, exp_value);
258 		return 1;
259 	}
260 
261 	return 0;
262 }
263 
264 static uint32_t qdf_types_ut_uint32_parse(void)
265 {
266 	uint32_t errors = 0;
267 
268 	errors += ut_uint32_pass("1", 1);
269 	errors += ut_uint32_pass("+1", 1);
270 	errors += ut_uint32_pass(WHITESPACE "1" WHITESPACE, 1);
271 	errors += ut_uint32_fail("1;", QDF_STATUS_E_FAILURE);
272 	errors += ut_uint32_pass("4294967295", 4294967295U);
273 	errors += ut_uint32_fail("4294967296", QDF_STATUS_E_RANGE);
274 	errors += ut_uint32_pass(" 0", 0);
275 	errors += ut_uint32_fail("-1", QDF_STATUS_E_RANGE);
276 	errors += ut_uint32_fail("日本", QDF_STATUS_E_FAILURE);
277 
278 	return errors;
279 }
280 
281 #define ut_uint64_pass(str, exp) __ut_uint64(str, QDF_STATUS_SUCCESS, exp)
282 #define ut_uint64_fail(str, exp_status) __ut_uint64(str, exp_status, 0)
283 
284 static uint32_t
285 __ut_uint64(const char *str, QDF_STATUS exp_status, uint64_t exp_value)
286 {
287 	uint64_t value;
288 	QDF_STATUS status = qdf_uint64_parse(str, &value);
289 
290 	if (status != exp_status) {
291 		qdf_nofl_alert("FAIL: qdf_uint64_parse(\"%s\") -> status %d; expected status %d",
292 			       str, status, exp_status);
293 		return 1;
294 	}
295 
296 	if (QDF_IS_STATUS_ERROR(status))
297 		return 0;
298 
299 	if (value != exp_value) {
300 		qdf_nofl_alert("FAIL: qdf_uint64_parse(\"%s\") -> %llu; expected %llu",
301 			       str, value, exp_value);
302 		return 1;
303 	}
304 
305 	return 0;
306 }
307 
308 static uint32_t qdf_types_ut_uint64_parse(void)
309 {
310 	uint32_t errors = 0;
311 
312 	errors += ut_uint64_pass("1", 1);
313 	errors += ut_uint64_pass("+1", 1);
314 	errors += ut_uint64_pass(WHITESPACE "1" WHITESPACE, 1);
315 	errors += ut_uint64_fail("1;", QDF_STATUS_E_FAILURE);
316 	errors += ut_uint64_pass("18446744073709551615",
317 				 18446744073709551615ull);
318 	errors += ut_uint64_fail("18446744073709551616", QDF_STATUS_E_RANGE);
319 	errors += ut_uint64_pass(" 0", 0);
320 	errors += ut_uint64_fail("-1", QDF_STATUS_E_RANGE);
321 	errors += ut_uint64_fail("日本", QDF_STATUS_E_FAILURE);
322 
323 	return errors;
324 }
325 
326 static uint32_t qdf_types_ut_int_formats_parse(void)
327 {
328 	uint32_t errors = 0;
329 
330 	errors += ut_uint64_pass("0b01", 1);
331 	errors += ut_uint64_pass("0o01234567", 342391);
332 	errors += ut_uint64_pass("0123456789", 123456789);
333 	errors += ut_uint64_pass("0x0123456789abcdef", 81985529216486895ll);
334 
335 	errors += ut_uint64_fail("0b012", QDF_STATUS_E_FAILURE);
336 	errors += ut_uint64_fail("0o012345678", QDF_STATUS_E_FAILURE);
337 	errors += ut_uint64_fail("0123456789a", QDF_STATUS_E_FAILURE);
338 	errors += ut_uint64_fail("0x0123456789abcdefg", QDF_STATUS_E_FAILURE);
339 
340 	return errors;
341 }
342 
343 #define ut_mac_pass(str, exp) __ut_mac(str, #str, QDF_STATUS_SUCCESS, &(exp))
344 #define ut_mac_fail(str) __ut_mac(str, #str, QDF_STATUS_E_FAILURE, NULL)
345 
346 static uint32_t
347 __ut_mac(const char *str, const char *display_str, QDF_STATUS exp_status,
348 	 struct qdf_mac_addr *exp_value)
349 {
350 	struct qdf_mac_addr value;
351 	QDF_STATUS status = qdf_mac_parse(str, &value);
352 
353 	if (status != exp_status) {
354 		qdf_nofl_alert("FAIL: qdf_mac_parse(%s) -> status %d; expected status %d",
355 			       display_str, status, exp_status);
356 		return 1;
357 	}
358 
359 	if (QDF_IS_STATUS_ERROR(status))
360 		return 0;
361 
362 	if (qdf_mem_cmp(&value, exp_value, sizeof(value))) {
363 		qdf_nofl_alert("FAIL: qdf_mac_parse(%s) -> " QDF_MAC_ADDR_STR
364 			       "; expected " QDF_MAC_ADDR_STR,
365 			       display_str,
366 			       QDF_MAC_ADDR_ARRAY(value.bytes),
367 			       QDF_MAC_ADDR_ARRAY(exp_value->bytes));
368 		return 1;
369 	}
370 
371 	return 0;
372 }
373 
374 static uint32_t qdf_types_ut_mac_parse(void)
375 {
376 	uint32_t errors = 0;
377 	struct qdf_mac_addr addr_aabbccddeeff = { {
378 		0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff } };
379 	struct qdf_mac_addr addr_0123456789ab = { {
380 		0x01, 0x23, 0x45, 0x67, 0x89, 0xab } };
381 
382 	errors += ut_mac_fail("");
383 	errors += ut_mac_fail("test");
384 	errors += ut_mac_fail("¥円");
385 	errors += ut_mac_pass("aabbccddeeff", addr_aabbccddeeff);
386 	errors += ut_mac_pass("AABBCCDDEEFF", addr_aabbccddeeff);
387 	errors += ut_mac_fail("aa:bbccddeeff");
388 	errors += ut_mac_fail("aabbccddee:ff");
389 	errors += ut_mac_pass("aa:bb:cc:dd:ee:ff", addr_aabbccddeeff);
390 	errors += ut_mac_pass("01:23:45:67:89:ab", addr_0123456789ab);
391 	errors += ut_mac_fail("01:23:45:67:89:ab:cd:ef");
392 	errors += ut_mac_fail("01:23:45\0:67:89:ab");
393 	errors += ut_mac_pass(WHITESPACE "01:23:45:67:89:ab" WHITESPACE,
394 			      addr_0123456789ab);
395 	errors += ut_mac_pass("01:23:45:67:89:ab\n", addr_0123456789ab);
396 	errors += ut_mac_fail("01:23:45:67:89:ab\t ,");
397 
398 	return errors;
399 }
400 
401 #define ut_ipv4_pass(str, exp) __ut_ipv4(str, #str, QDF_STATUS_SUCCESS, &(exp))
402 #define ut_ipv4_fail(str) __ut_ipv4(str, #str, QDF_STATUS_E_FAILURE, NULL)
403 
404 static uint32_t
405 __ut_ipv4(const char *str, const char *display_str, QDF_STATUS exp_status,
406 	  struct qdf_ipv4_addr *exp_value)
407 {
408 	struct qdf_ipv4_addr value;
409 	QDF_STATUS status = qdf_ipv4_parse(str, &value);
410 
411 	if (status != exp_status) {
412 		qdf_nofl_alert("FAIL: qdf_ipv4_parse(%s) -> status %d; expected status %d",
413 			       display_str, status, exp_status);
414 		return 1;
415 	}
416 
417 	if (QDF_IS_STATUS_ERROR(status))
418 		return 0;
419 
420 	if (qdf_mem_cmp(&value, exp_value, sizeof(value))) {
421 		qdf_nofl_alert("FAIL: qdf_ipv4_parse(%s) -> " QDF_IPV4_ADDR_STR
422 			       "; expected " QDF_IPV4_ADDR_STR,
423 			       display_str,
424 			       QDF_IPV4_ADDR_ARRAY(value.bytes),
425 			       QDF_IPV4_ADDR_ARRAY(exp_value->bytes));
426 		return 1;
427 	}
428 
429 	return 0;
430 }
431 
432 static uint32_t qdf_types_ut_ipv4_parse(void)
433 {
434 	uint32_t errors = 0;
435 	struct qdf_ipv4_addr addr_0000 = { { 0, 0, 0, 0 } };
436 	struct qdf_ipv4_addr addr_127001 = { { 127, 0, 0, 1 } };
437 	struct qdf_ipv4_addr addr_0112123 = { { 0, 1, 12, 123 } };
438 	struct qdf_ipv4_addr addr_255255255255 = { { 255, 255, 255, 255 } };
439 
440 	errors += ut_ipv4_fail("");
441 	errors += ut_ipv4_fail("test");
442 	errors += ut_ipv4_fail("¥円");
443 	errors += ut_ipv4_pass("0.0.0.0", addr_0000);
444 	errors += ut_ipv4_pass("127.0.0.1", addr_127001);
445 	errors += ut_ipv4_pass("255.255.255.255", addr_255255255255);
446 	errors += ut_ipv4_fail(".0.0.1");
447 	errors += ut_ipv4_fail("127.0.0.");
448 	errors += ut_ipv4_fail("abc.123.123.123");
449 	errors += ut_ipv4_fail("256.0.0.0");
450 	errors += ut_ipv4_pass("0.1.12.123", addr_0112123);
451 	errors += ut_ipv4_pass(WHITESPACE "0.1.12.123" WHITESPACE,
452 			       addr_0112123);
453 	errors += ut_ipv4_fail("0.1.12\0.123");
454 	errors += ut_ipv4_fail("0.1.12.123 ,");
455 
456 	return errors;
457 }
458 
459 #define ut_ipv6_pass(str, exp) __ut_ipv6(str, #str, QDF_STATUS_SUCCESS, &(exp))
460 #define ut_ipv6_fail(str) __ut_ipv6(str, #str, QDF_STATUS_E_FAILURE, NULL)
461 
462 static uint32_t
463 __ut_ipv6(const char *str, const char *display_str, QDF_STATUS exp_status,
464 	  struct qdf_ipv6_addr *exp_value)
465 {
466 	struct qdf_ipv6_addr value;
467 	QDF_STATUS status = qdf_ipv6_parse(str, &value);
468 
469 	if (status != exp_status) {
470 		qdf_nofl_alert("FAIL: qdf_ipv6_parse(%s) -> status %d; expected status %d",
471 			       display_str, status, exp_status);
472 		return 1;
473 	}
474 
475 	if (QDF_IS_STATUS_ERROR(status))
476 		return 0;
477 
478 	if (qdf_mem_cmp(&value, exp_value, sizeof(value))) {
479 		qdf_nofl_alert("FAIL: qdf_ipv6_parse(%s) -> " QDF_IPV6_ADDR_STR
480 			       "; expected " QDF_IPV6_ADDR_STR,
481 			       display_str,
482 			       QDF_IPV6_ADDR_ARRAY(value.bytes),
483 			       QDF_IPV6_ADDR_ARRAY(exp_value->bytes));
484 		return 1;
485 	}
486 
487 	return 0;
488 }
489 
490 static uint32_t qdf_types_ut_ipv6_parse(void)
491 {
492 	uint32_t errors = 0;
493 	struct qdf_ipv6_addr addr_00000000000000000000000000000000 = { {
494 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
495 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
496 	} };
497 	struct qdf_ipv6_addr addr_00000000000000000000000000000001 = { {
498 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
499 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
500 	} };
501 	struct qdf_ipv6_addr addr_00010000000000000000000000000000 = { {
502 		0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
503 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
504 	} };
505 	struct qdf_ipv6_addr addr_0123456789abcdefabcdef0123456789 = { {
506 		0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
507 		0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89,
508 	} };
509 	struct qdf_ipv6_addr addr_20010db885a3000000008a2e03707334 = { {
510 		0x20, 0x01, 0x0d, 0xb8, 0x85, 0xa3, 0x00, 0x00,
511 		0x00, 0x00, 0x8a, 0x2e, 0x03, 0x70, 0x73, 0x34,
512 	} };
513 	struct qdf_ipv6_addr addr_ff020000000000000000000000000001 = { {
514 		0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
515 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
516 	} };
517 	struct qdf_ipv6_addr addr_00000000000000000000ffffc0000280 = { {
518 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
519 		0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x02, 0x80,
520 	} };
521 	struct qdf_ipv6_addr addr_00010000000000000000000000000001 = { {
522 		0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
523 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
524 	} };
525 
526 	errors += ut_ipv6_fail("");
527 	errors += ut_ipv6_fail("test");
528 	errors += ut_ipv6_fail("¥円");
529 	errors += ut_ipv6_pass("::",
530 			       addr_00000000000000000000000000000000);
531 	errors += ut_ipv6_pass("::0",
532 			       addr_00000000000000000000000000000000);
533 	errors += ut_ipv6_pass("0:0:0:0:0:0:0:0",
534 			       addr_00000000000000000000000000000000);
535 	errors += ut_ipv6_pass("::1",
536 			       addr_00000000000000000000000000000001);
537 	errors += ut_ipv6_pass("1::",
538 			       addr_00010000000000000000000000000000);
539 	errors += ut_ipv6_pass("0:0:0:0:0:0:0:1",
540 			       addr_00000000000000000000000000000001);
541 	errors += ut_ipv6_pass("0123:4567:89ab:cdef:ABCD:EF01:2345:6789",
542 			       addr_0123456789abcdefabcdef0123456789);
543 	errors += ut_ipv6_fail("::0123:4567:89ab:cdef:ABCD:EF01:2345:6789");
544 	errors += ut_ipv6_fail("0123:4567:89ab:cdef:ABCD:EF01:2345:6789::");
545 	errors += ut_ipv6_pass("2001:0db8:85a3:0000:0000:8a2e:0370:7334",
546 			       addr_20010db885a3000000008a2e03707334);
547 	errors += ut_ipv6_pass("2001:db8:85a3:0:0:8a2e:370:7334",
548 			       addr_20010db885a3000000008a2e03707334);
549 	errors += ut_ipv6_pass("2001:db8:85a3::8a2e:370:7334",
550 			       addr_20010db885a3000000008a2e03707334);
551 	errors += ut_ipv6_pass("ff02::1",
552 			       addr_ff020000000000000000000000000001);
553 	errors += ut_ipv6_pass("::ffff:c000:0280",
554 			       addr_00000000000000000000ffffc0000280);
555 	errors += ut_ipv6_fail(":0:0:0:0:0:0:1");
556 	errors += ut_ipv6_fail(":0:0::0:0:1");
557 	errors += ut_ipv6_fail("0:0:0:0:0:0:0:");
558 	errors += ut_ipv6_fail("0:0:0::0:0:");
559 	errors += ut_ipv6_fail("0:0::0:0::0:0");
560 	errors += ut_ipv6_fail("xyz::zyx");
561 	errors += ut_ipv6_pass(WHITESPACE "1::1" WHITESPACE,
562 			       addr_00010000000000000000000000000001);
563 	errors += ut_ipv6_fail("1\0::1");
564 	errors += ut_ipv6_fail("1::1 ,");
565 	errors += ut_ipv6_fail("abcd");
566 
567 	return errors;
568 }
569 
570 uint32_t qdf_types_unit_test(void)
571 {
572 	uint32_t errors = 0;
573 
574 	errors += qdf_types_ut_bool_parse();
575 	errors += qdf_types_ut_int32_parse();
576 	errors += qdf_types_ut_int64_parse();
577 	errors += qdf_types_ut_uint32_parse();
578 	errors += qdf_types_ut_uint64_parse();
579 	errors += qdf_types_ut_int_formats_parse();
580 	errors += qdf_types_ut_mac_parse();
581 	errors += qdf_types_ut_ipv4_parse();
582 	errors += qdf_types_ut_ipv6_parse();
583 	errors += qdf_types_ut_uint16_array_parse();
584 
585 	return errors;
586 }
587 
588