3 * BlueZ - Bluetooth protocol stack for Linux
5 * Copyright (C) 2012 Intel Corporation. All rights reserved.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
30 #include <sys/ioctl.h>
34 #include "lib/bluetooth.h"
36 #include "lib/hci_lib.h"
39 #include "monitor/bt.h"
40 #include "emulator/bthost.h"
41 #include "emulator/hciemu.h"
43 #include "src/shared/util.h"
44 #include "src/shared/tester.h"
45 #include "src/shared/mgmt.h"
48 tester_data_func_t test_setup;
49 const void *test_data;
50 uint8_t expected_version;
51 uint16_t expected_manufacturer;
52 uint32_t expected_supported_settings;
53 uint32_t initial_settings;
55 struct mgmt *mgmt_alt;
56 unsigned int mgmt_settings_id;
57 unsigned int mgmt_alt_settings_id;
58 unsigned int mgmt_alt_ev_id;
59 unsigned int mgmt_discov_ev_id;
61 uint16_t mgmt_revision;
63 struct hciemu *hciemu;
64 enum hciemu_type hciemu_type;
68 static void mgmt_debug(const char *str, void *user_data)
70 const char *prefix = user_data;
72 tester_print("%s%s", prefix, str);
75 static void read_version_callback(uint8_t status, uint16_t length,
76 const void *param, void *user_data)
78 struct test_data *data = tester_get_data();
79 const struct mgmt_rp_read_version *rp = param;
81 tester_print("Read Version callback");
82 tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
84 if (status || !param) {
85 tester_pre_setup_failed();
89 data->mgmt_version = rp->version;
90 data->mgmt_revision = btohs(rp->revision);
92 tester_print(" Version %u.%u",
93 data->mgmt_version, data->mgmt_revision);
96 static void read_commands_callback(uint8_t status, uint16_t length,
97 const void *param, void *user_data)
99 tester_print("Read Commands callback");
100 tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
102 if (status || !param) {
103 tester_pre_setup_failed();
108 static void read_info_callback(uint8_t status, uint16_t length,
109 const void *param, void *user_data)
111 struct test_data *data = tester_get_data();
112 const struct mgmt_rp_read_info *rp = param;
114 uint16_t manufacturer;
115 uint32_t supported_settings, current_settings;
116 struct bthost *bthost;
118 tester_print("Read Info callback");
119 tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
121 if (status || !param) {
122 tester_pre_setup_failed();
126 ba2str(&rp->bdaddr, addr);
127 manufacturer = btohs(rp->manufacturer);
128 supported_settings = btohl(rp->supported_settings);
129 current_settings = btohl(rp->current_settings);
131 tester_print(" Address: %s", addr);
132 tester_print(" Version: 0x%02x", rp->version);
133 tester_print(" Manufacturer: 0x%04x", manufacturer);
134 tester_print(" Supported settings: 0x%08x", supported_settings);
135 tester_print(" Current settings: 0x%08x", current_settings);
136 tester_print(" Class: 0x%02x%02x%02x",
137 rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
138 tester_print(" Name: %s", rp->name);
139 tester_print(" Short name: %s", rp->short_name);
141 if (strcmp(hciemu_get_address(data->hciemu), addr)) {
142 tester_pre_setup_failed();
146 if (rp->version != data->expected_version) {
147 tester_pre_setup_failed();
151 if (manufacturer != data->expected_manufacturer) {
152 tester_pre_setup_failed();
156 if (supported_settings != data->expected_supported_settings) {
157 tester_pre_setup_failed();
161 if (current_settings != data->initial_settings) {
162 tester_pre_setup_failed();
166 if (rp->dev_class[0] != 0x00 || rp->dev_class[1] != 0x00 ||
167 rp->dev_class[2] != 0x00) {
168 tester_pre_setup_failed();
172 bthost = hciemu_client_get_host(data->hciemu);
173 bthost_notify_ready(bthost, tester_pre_setup_complete);
176 static void index_added_callback(uint16_t index, uint16_t length,
177 const void *param, void *user_data)
179 struct test_data *data = tester_get_data();
181 tester_print("Index Added callback");
182 tester_print(" Index: 0x%04x", index);
184 data->mgmt_index = index;
186 mgmt_send(data->mgmt, MGMT_OP_READ_INFO, data->mgmt_index, 0, NULL,
187 read_info_callback, NULL, NULL);
190 static void index_removed_callback(uint16_t index, uint16_t length,
191 const void *param, void *user_data)
193 struct test_data *data = tester_get_data();
195 tester_print("Index Removed callback");
196 tester_print(" Index: 0x%04x", index);
198 if (index != data->mgmt_index)
201 mgmt_unregister_index(data->mgmt, data->mgmt_index);
202 mgmt_unregister_index(data->mgmt_alt, data->mgmt_index);
204 mgmt_unref(data->mgmt);
207 mgmt_unref(data->mgmt_alt);
208 data->mgmt_alt = NULL;
210 tester_post_teardown_complete();
213 static void read_index_list_callback(uint8_t status, uint16_t length,
214 const void *param, void *user_data)
216 struct test_data *data = tester_get_data();
218 tester_print("Read Index List callback");
219 tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
221 if (status || !param) {
222 tester_pre_setup_failed();
226 mgmt_register(data->mgmt, MGMT_EV_INDEX_ADDED, MGMT_INDEX_NONE,
227 index_added_callback, NULL, NULL);
229 mgmt_register(data->mgmt, MGMT_EV_INDEX_REMOVED, MGMT_INDEX_NONE,
230 index_removed_callback, NULL, NULL);
232 data->hciemu = hciemu_new(data->hciemu_type);
234 tester_warn("Failed to setup HCI emulation");
235 tester_pre_setup_failed();
239 static void test_pre_setup(const void *test_data)
241 struct test_data *data = tester_get_data();
243 data->mgmt = mgmt_new_default();
245 tester_warn("Failed to setup management interface");
246 tester_pre_setup_failed();
250 data->mgmt_alt = mgmt_new_default();
251 if (!data->mgmt_alt) {
252 tester_warn("Failed to setup alternate management interface");
253 tester_pre_setup_failed();
255 mgmt_unref(data->mgmt);
260 if (tester_use_debug()) {
261 mgmt_set_debug(data->mgmt, mgmt_debug, "mgmt: ", NULL);
262 mgmt_set_debug(data->mgmt_alt, mgmt_debug, "mgmt-alt: ", NULL);
265 mgmt_send(data->mgmt, MGMT_OP_READ_VERSION, MGMT_INDEX_NONE, 0, NULL,
266 read_version_callback, NULL, NULL);
268 mgmt_send(data->mgmt, MGMT_OP_READ_COMMANDS, MGMT_INDEX_NONE, 0, NULL,
269 read_commands_callback, NULL, NULL);
271 mgmt_send(data->mgmt, MGMT_OP_READ_INDEX_LIST, MGMT_INDEX_NONE, 0, NULL,
272 read_index_list_callback, NULL, NULL);
275 static void test_post_teardown(const void *test_data)
277 struct test_data *data = tester_get_data();
279 hciemu_unref(data->hciemu);
283 static void test_add_condition(struct test_data *data)
285 data->unmet_conditions++;
287 tester_print("Test condition added, total %d", data->unmet_conditions);
290 static void test_condition_complete(struct test_data *data)
292 data->unmet_conditions--;
294 tester_print("Test condition complete, %d left",
295 data->unmet_conditions);
297 if (data->unmet_conditions > 0)
300 tester_test_passed();
303 #define test_bredrle_full(name, data, setup, func, timeout) \
305 struct test_data *user; \
306 user = malloc(sizeof(struct test_data)); \
309 user->hciemu_type = HCIEMU_TYPE_BREDRLE; \
310 user->test_setup = setup; \
311 user->test_data = data; \
312 user->expected_version = 0x08; \
313 user->expected_manufacturer = 0x003f; \
314 user->expected_supported_settings = 0x0000bfff; \
315 user->initial_settings = 0x00000080; \
316 user->unmet_conditions = 0; \
317 tester_add_full(name, data, \
318 test_pre_setup, test_setup, func, NULL, \
319 test_post_teardown, timeout, user, free); \
322 #define test_bredrle(name, data, setup, func) \
323 test_bredrle_full(name, data, setup, func, 2)
325 #define test_bredr20(name, data, setup, func) \
327 struct test_data *user; \
328 user = malloc(sizeof(struct test_data)); \
331 user->hciemu_type = HCIEMU_TYPE_LEGACY; \
332 user->test_setup = setup; \
333 user->test_data = data; \
334 user->expected_version = 0x03; \
335 user->expected_manufacturer = 0x003f; \
336 user->expected_supported_settings = 0x000010bf; \
337 user->initial_settings = 0x00000080; \
338 user->unmet_conditions = 0; \
339 tester_add_full(name, data, \
340 test_pre_setup, test_setup, func, NULL, \
341 test_post_teardown, 2, user, free); \
344 #define test_bredr(name, data, setup, func) \
346 struct test_data *user; \
347 user = malloc(sizeof(struct test_data)); \
350 user->hciemu_type = HCIEMU_TYPE_BREDR; \
351 user->test_setup = setup; \
352 user->test_data = data; \
353 user->expected_version = 0x05; \
354 user->expected_manufacturer = 0x003f; \
355 user->expected_supported_settings = 0x000011ff; \
356 user->initial_settings = 0x00000080; \
357 user->unmet_conditions = 0; \
358 tester_add_full(name, data, \
359 test_pre_setup, test_setup, func, NULL, \
360 test_post_teardown, 2, user, free); \
363 #define test_le(name, data, setup, func) \
365 struct test_data *user; \
366 user = malloc(sizeof(struct test_data)); \
369 user->hciemu_type = HCIEMU_TYPE_LE; \
370 user->test_setup = setup; \
371 user->test_data = data; \
372 user->expected_version = 0x08; \
373 user->expected_manufacturer = 0x003f; \
374 user->expected_supported_settings = 0x0000be1b; \
375 user->initial_settings = 0x00000200; \
376 user->unmet_conditions = 0; \
377 tester_add_full(name, data, \
378 test_pre_setup, test_setup, func, NULL, \
379 test_post_teardown, 2, user, free); \
382 static void controller_setup(const void *test_data)
384 tester_test_passed();
387 struct generic_data {
388 const uint16_t *setup_settings;
390 bool setup_limited_discov;
391 uint16_t setup_expect_hci_command;
392 const void *setup_expect_hci_param;
393 uint8_t setup_expect_hci_len;
394 uint16_t setup_send_opcode;
395 const void *setup_send_param;
396 uint16_t setup_send_len;
397 bool send_index_none;
398 uint16_t send_opcode;
399 const void *send_param;
401 const void * (*send_func)(uint16_t *len);
402 uint8_t expect_status;
403 bool expect_ignore_param;
404 const void *expect_param;
406 const void * (*expect_func)(uint16_t *len);
407 uint32_t expect_settings_set;
408 uint32_t expect_settings_unset;
409 uint16_t expect_alt_ev;
410 const void *expect_alt_ev_param;
411 bool (*verify_alt_ev_func)(const void *param, uint16_t length);
412 uint16_t expect_alt_ev_len;
413 uint16_t expect_hci_command;
414 const void *expect_hci_param;
415 uint8_t expect_hci_len;
416 const void * (*expect_hci_func)(uint8_t *len);
420 uint8_t client_pin_len;
421 const void *client_pin;
422 bool client_enable_ssp;
424 uint8_t client_io_cap;
425 uint8_t client_auth_req;
427 bool client_reject_confirm;
429 bool client_enable_le;
430 bool client_enable_sc;
432 bool force_power_off;
433 bool addr_type_avail;
436 const uint8_t *adv_data;
437 uint8_t adv_data_len;
440 static const char dummy_data[] = { 0x00 };
442 static const struct generic_data invalid_command_test = {
443 .send_opcode = 0xffff,
444 .expect_status = MGMT_STATUS_UNKNOWN_COMMAND,
447 static const struct generic_data read_version_success_test = {
448 .send_index_none = true,
449 .send_opcode = MGMT_OP_READ_VERSION,
450 .expect_status = MGMT_STATUS_SUCCESS,
454 static const struct generic_data read_version_invalid_param_test = {
455 .send_index_none = true,
456 .send_opcode = MGMT_OP_READ_VERSION,
457 .send_param = dummy_data,
458 .send_len = sizeof(dummy_data),
459 .expect_status = MGMT_STATUS_INVALID_PARAMS,
462 static const struct generic_data read_version_invalid_index_test = {
463 .send_opcode = MGMT_OP_READ_VERSION,
464 .expect_status = MGMT_STATUS_INVALID_INDEX,
467 static const struct generic_data read_commands_invalid_param_test = {
468 .send_index_none = true,
469 .send_opcode = MGMT_OP_READ_COMMANDS,
470 .send_param = dummy_data,
471 .send_len = sizeof(dummy_data),
472 .expect_status = MGMT_STATUS_INVALID_PARAMS,
475 static const struct generic_data read_commands_invalid_index_test = {
476 .send_opcode = MGMT_OP_READ_COMMANDS,
477 .expect_status = MGMT_STATUS_INVALID_INDEX,
480 static const struct generic_data read_index_list_invalid_param_test = {
481 .send_index_none = true,
482 .send_opcode = MGMT_OP_READ_INDEX_LIST,
483 .send_param = dummy_data,
484 .send_len = sizeof(dummy_data),
485 .expect_status = MGMT_STATUS_INVALID_PARAMS,
488 static const struct generic_data read_index_list_invalid_index_test = {
489 .send_opcode = MGMT_OP_READ_INDEX_LIST,
490 .expect_status = MGMT_STATUS_INVALID_INDEX,
493 static const struct generic_data read_info_invalid_param_test = {
494 .send_opcode = MGMT_OP_READ_INFO,
495 .send_param = dummy_data,
496 .send_len = sizeof(dummy_data),
497 .expect_status = MGMT_STATUS_INVALID_PARAMS,
500 static const struct generic_data read_info_invalid_index_test = {
501 .send_index_none = true,
502 .send_opcode = MGMT_OP_READ_INFO,
503 .expect_status = MGMT_STATUS_INVALID_INDEX,
506 static const struct generic_data read_unconf_index_list_invalid_param_test = {
507 .send_index_none = true,
508 .send_opcode = MGMT_OP_READ_UNCONF_INDEX_LIST,
509 .send_param = dummy_data,
510 .send_len = sizeof(dummy_data),
511 .expect_status = MGMT_STATUS_INVALID_PARAMS,
514 static const struct generic_data read_unconf_index_list_invalid_index_test = {
515 .send_opcode = MGMT_OP_READ_UNCONF_INDEX_LIST,
516 .expect_status = MGMT_STATUS_INVALID_INDEX,
519 static const struct generic_data read_config_info_invalid_param_test = {
520 .send_opcode = MGMT_OP_READ_CONFIG_INFO,
521 .send_param = dummy_data,
522 .send_len = sizeof(dummy_data),
523 .expect_status = MGMT_STATUS_INVALID_PARAMS,
526 static const struct generic_data read_config_info_invalid_index_test = {
527 .send_index_none = true,
528 .send_opcode = MGMT_OP_READ_CONFIG_INFO,
529 .expect_status = MGMT_STATUS_INVALID_INDEX,
532 static const struct generic_data read_ext_index_list_invalid_param_test = {
533 .send_index_none = true,
534 .send_opcode = MGMT_OP_READ_EXT_INDEX_LIST,
535 .send_param = dummy_data,
536 .send_len = sizeof(dummy_data),
537 .expect_status = MGMT_STATUS_INVALID_PARAMS,
540 static const struct generic_data read_ext_index_list_invalid_index_test = {
541 .send_opcode = MGMT_OP_READ_EXT_INDEX_LIST,
542 .expect_status = MGMT_STATUS_INVALID_INDEX,
545 static const char set_powered_on_param[] = { 0x01 };
546 static const char set_powered_invalid_param[] = { 0x02 };
547 static const char set_powered_garbage_param[] = { 0x01, 0x00 };
548 static const char set_powered_settings_param[] = { 0x81, 0x00, 0x00, 0x00 };
550 static const struct generic_data set_powered_on_success_test = {
551 .send_opcode = MGMT_OP_SET_POWERED,
552 .send_param = set_powered_on_param,
553 .send_len = sizeof(set_powered_on_param),
554 .expect_status = MGMT_STATUS_SUCCESS,
555 .expect_param = set_powered_settings_param,
556 .expect_len = sizeof(set_powered_settings_param),
557 .expect_settings_set = MGMT_SETTING_POWERED,
560 static const struct generic_data set_powered_on_invalid_param_test_1 = {
561 .send_opcode = MGMT_OP_SET_POWERED,
562 .expect_status = MGMT_STATUS_INVALID_PARAMS,
565 static const struct generic_data set_powered_on_invalid_param_test_2 = {
566 .send_opcode = MGMT_OP_SET_POWERED,
567 .send_param = set_powered_invalid_param,
568 .send_len = sizeof(set_powered_invalid_param),
569 .expect_status = MGMT_STATUS_INVALID_PARAMS,
572 static const struct generic_data set_powered_on_invalid_param_test_3 = {
573 .send_opcode = MGMT_OP_SET_POWERED,
574 .send_param = set_powered_garbage_param,
575 .send_len = sizeof(set_powered_garbage_param),
576 .expect_status = MGMT_STATUS_INVALID_PARAMS,
579 static const struct generic_data set_powered_on_invalid_index_test = {
580 .send_index_none = true,
581 .send_opcode = MGMT_OP_SET_POWERED,
582 .send_param = set_powered_on_param,
583 .send_len = sizeof(set_powered_on_param),
584 .expect_status = MGMT_STATUS_INVALID_INDEX,
587 static uint16_t settings_powered_advertising_privacy[] = {
589 MGMT_OP_SET_ADVERTISING,
590 MGMT_OP_SET_POWERED, 0 };
592 static const char set_adv_off_param[] = { 0x00 };
594 static const struct generic_data set_powered_on_privacy_adv_test = {
595 .setup_settings = settings_powered_advertising_privacy,
596 .send_opcode = MGMT_OP_SET_ADVERTISING,
597 .send_param = set_adv_off_param,
598 .send_len = sizeof(set_adv_off_param),
599 .expect_status = MGMT_STATUS_SUCCESS,
600 .expect_ignore_param = true,
603 static const uint16_t settings_powered[] = { MGMT_OP_SET_POWERED, 0 };
605 static const char set_powered_off_param[] = { 0x00 };
606 static const char set_powered_off_settings_param[] = { 0x80, 0x00, 0x00, 0x00 };
607 static const char set_powered_off_class_of_dev[] = { 0x00, 0x00, 0x00 };
609 static const struct generic_data set_powered_off_success_test = {
610 .setup_settings = settings_powered,
611 .send_opcode = MGMT_OP_SET_POWERED,
612 .send_param = set_powered_off_param,
613 .send_len = sizeof(set_powered_off_param),
614 .expect_status = MGMT_STATUS_SUCCESS,
615 .expect_param = set_powered_off_settings_param,
616 .expect_len = sizeof(set_powered_off_settings_param),
617 .expect_settings_unset = MGMT_SETTING_POWERED,
620 static const struct generic_data set_powered_off_class_test = {
621 .send_opcode = MGMT_OP_SET_POWERED,
622 .send_param = set_powered_off_param,
623 .send_len = sizeof(set_powered_off_param),
624 .expect_status = MGMT_STATUS_SUCCESS,
625 .expect_param = set_powered_off_settings_param,
626 .expect_len = sizeof(set_powered_off_settings_param),
627 .expect_settings_unset = MGMT_SETTING_POWERED,
628 .expect_alt_ev = MGMT_EV_CLASS_OF_DEV_CHANGED,
629 .expect_alt_ev_param = set_powered_off_class_of_dev,
630 .expect_alt_ev_len = sizeof(set_powered_off_class_of_dev),
633 static const struct generic_data set_powered_off_invalid_param_test_1 = {
634 .setup_settings = settings_powered,
635 .send_opcode = MGMT_OP_SET_POWERED,
636 .expect_status = MGMT_STATUS_INVALID_PARAMS,
639 static const struct generic_data set_powered_off_invalid_param_test_2 = {
640 .setup_settings = settings_powered,
641 .send_opcode = MGMT_OP_SET_POWERED,
642 .send_param = set_powered_invalid_param,
643 .send_len = sizeof(set_powered_invalid_param),
644 .expect_status = MGMT_STATUS_INVALID_PARAMS,
647 static const struct generic_data set_powered_off_invalid_param_test_3 = {
648 .setup_settings = settings_powered,
649 .send_opcode = MGMT_OP_SET_POWERED,
650 .send_param = set_powered_garbage_param,
651 .send_len = sizeof(set_powered_garbage_param),
652 .expect_status = MGMT_STATUS_INVALID_PARAMS,
655 static const char set_connectable_on_param[] = { 0x01 };
656 static const char set_connectable_invalid_param[] = { 0x02 };
657 static const char set_connectable_garbage_param[] = { 0x01, 0x00 };
658 static const char set_connectable_settings_param_1[] = { 0x82, 0x00, 0x00, 0x00 };
659 static const char set_connectable_settings_param_2[] = { 0x83, 0x00, 0x00, 0x00 };
660 static const char set_connectable_scan_enable_param[] = { 0x02 };
662 static const struct generic_data set_connectable_on_success_test_1 = {
663 .send_opcode = MGMT_OP_SET_CONNECTABLE,
664 .send_param = set_connectable_on_param,
665 .send_len = sizeof(set_connectable_on_param),
666 .expect_status = MGMT_STATUS_SUCCESS,
667 .expect_param = set_connectable_settings_param_1,
668 .expect_len = sizeof(set_connectable_settings_param_1),
669 .expect_settings_set = MGMT_SETTING_CONNECTABLE,
672 static const struct generic_data set_connectable_on_success_test_2 = {
673 .setup_settings = settings_powered,
674 .send_opcode = MGMT_OP_SET_CONNECTABLE,
675 .send_param = set_connectable_on_param,
676 .send_len = sizeof(set_connectable_on_param),
677 .expect_status = MGMT_STATUS_SUCCESS,
678 .expect_param = set_connectable_settings_param_2,
679 .expect_len = sizeof(set_connectable_settings_param_2),
680 .expect_settings_set = MGMT_SETTING_CONNECTABLE,
681 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
682 .expect_hci_param = set_connectable_scan_enable_param,
683 .expect_hci_len = sizeof(set_connectable_scan_enable_param),
686 static const struct generic_data set_connectable_on_invalid_param_test_1 = {
687 .send_opcode = MGMT_OP_SET_CONNECTABLE,
688 .expect_status = MGMT_STATUS_INVALID_PARAMS,
691 static const struct generic_data set_connectable_on_invalid_param_test_2 = {
692 .send_opcode = MGMT_OP_SET_CONNECTABLE,
693 .send_param = set_connectable_invalid_param,
694 .send_len = sizeof(set_connectable_invalid_param),
695 .expect_status = MGMT_STATUS_INVALID_PARAMS,
698 static const struct generic_data set_connectable_on_invalid_param_test_3 = {
699 .send_opcode = MGMT_OP_SET_CONNECTABLE,
700 .send_param = set_connectable_garbage_param,
701 .send_len = sizeof(set_connectable_garbage_param),
702 .expect_status = MGMT_STATUS_INVALID_PARAMS,
705 static const struct generic_data set_connectable_on_invalid_index_test = {
706 .send_index_none = true,
707 .send_opcode = MGMT_OP_SET_CONNECTABLE,
708 .send_param = set_connectable_on_param,
709 .send_len = sizeof(set_connectable_on_param),
710 .expect_status = MGMT_STATUS_INVALID_INDEX,
713 static uint16_t settings_powered_advertising[] = { MGMT_OP_SET_ADVERTISING,
714 MGMT_OP_SET_POWERED, 0 };
716 static const char set_connectable_le_settings_param_1[] = { 0x02, 0x02, 0x00, 0x00 };
717 static const char set_connectable_le_settings_param_2[] = { 0x03, 0x02, 0x00, 0x00 };
718 static const char set_connectable_le_settings_param_3[] = { 0x03, 0x06, 0x00, 0x00 };
720 static const struct generic_data set_connectable_on_le_test_1 = {
721 .send_opcode = MGMT_OP_SET_CONNECTABLE,
722 .send_param = set_connectable_on_param,
723 .send_len = sizeof(set_connectable_on_param),
724 .expect_status = MGMT_STATUS_SUCCESS,
725 .expect_param = set_connectable_le_settings_param_1,
726 .expect_len = sizeof(set_connectable_le_settings_param_1),
727 .expect_settings_set = MGMT_SETTING_CONNECTABLE,
730 static const struct generic_data set_connectable_on_le_test_2 = {
731 .setup_settings = settings_powered,
732 .send_opcode = MGMT_OP_SET_CONNECTABLE,
733 .send_param = set_connectable_on_param,
734 .send_len = sizeof(set_connectable_on_param),
735 .expect_status = MGMT_STATUS_SUCCESS,
736 .expect_param = set_connectable_le_settings_param_2,
737 .expect_len = sizeof(set_connectable_le_settings_param_2),
738 .expect_settings_set = MGMT_SETTING_CONNECTABLE,
741 static uint8_t set_connectable_on_adv_param[] = {
742 0x00, 0x08, /* min_interval */
743 0x00, 0x08, /* max_interval */
745 0x00, /* own_addr_type */
746 0x00, /* direct_addr_type */
747 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* direct_addr */
748 0x07, /* channel_map */
749 0x00, /* filter_policy */
752 static const struct generic_data set_connectable_on_le_test_3 = {
753 .setup_settings = settings_powered_advertising,
754 .send_opcode = MGMT_OP_SET_CONNECTABLE,
755 .send_param = set_connectable_on_param,
756 .send_len = sizeof(set_connectable_on_param),
757 .expect_status = MGMT_STATUS_SUCCESS,
758 .expect_param = set_connectable_le_settings_param_3,
759 .expect_len = sizeof(set_connectable_le_settings_param_3),
760 .expect_settings_set = MGMT_SETTING_CONNECTABLE,
761 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
762 .expect_hci_param = set_connectable_on_adv_param,
763 .expect_hci_len = sizeof(set_connectable_on_adv_param),
766 static const uint16_t settings_connectable[] = { MGMT_OP_SET_CONNECTABLE, 0 };
767 static const uint16_t settings_powered_connectable[] = {
768 MGMT_OP_SET_CONNECTABLE,
769 MGMT_OP_SET_POWERED, 0 };
770 static const uint16_t settings_powered_discoverable[] = {
771 MGMT_OP_SET_CONNECTABLE,
772 MGMT_OP_SET_DISCOVERABLE,
773 MGMT_OP_SET_POWERED, 0 };
775 static const char set_connectable_off_param[] = { 0x00 };
776 static const char set_connectable_off_settings_1[] = { 0x80, 0x00, 0x00, 0x00 };
777 static const char set_connectable_off_settings_2[] = { 0x81, 0x00, 0x00, 0x00 };
778 static const char set_connectable_off_scan_enable_param[] = { 0x00 };
780 static const struct generic_data set_connectable_off_success_test_1 = {
781 .setup_settings = settings_connectable,
782 .send_opcode = MGMT_OP_SET_CONNECTABLE,
783 .send_param = set_connectable_off_param,
784 .send_len = sizeof(set_connectable_off_param),
785 .expect_status = MGMT_STATUS_SUCCESS,
786 .expect_param = set_connectable_off_settings_1,
787 .expect_len = sizeof(set_connectable_off_settings_1),
788 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
791 static const struct generic_data set_connectable_off_success_test_2 = {
792 .setup_settings = settings_powered_connectable,
793 .send_opcode = MGMT_OP_SET_CONNECTABLE,
794 .send_param = set_connectable_off_param,
795 .send_len = sizeof(set_connectable_off_param),
796 .expect_status = MGMT_STATUS_SUCCESS,
797 .expect_param = set_connectable_off_settings_2,
798 .expect_len = sizeof(set_connectable_off_settings_2),
799 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
800 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
801 .expect_hci_param = set_connectable_off_scan_enable_param,
802 .expect_hci_len = sizeof(set_connectable_off_scan_enable_param),
805 static const struct generic_data set_connectable_off_success_test_3 = {
806 .setup_settings = settings_powered_discoverable,
807 .send_opcode = MGMT_OP_SET_CONNECTABLE,
808 .send_param = set_connectable_off_param,
809 .send_len = sizeof(set_connectable_off_param),
810 .expect_status = MGMT_STATUS_SUCCESS,
811 .expect_param = set_connectable_off_settings_2,
812 .expect_len = sizeof(set_connectable_off_settings_2),
813 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
814 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
815 .expect_hci_param = set_connectable_off_scan_enable_param,
816 .expect_hci_len = sizeof(set_connectable_off_scan_enable_param),
819 static const struct generic_data set_connectable_off_success_test_4 = {
820 .setup_settings = settings_powered_discoverable,
821 .send_opcode = MGMT_OP_SET_CONNECTABLE,
822 .send_param = set_connectable_off_param,
823 .send_len = sizeof(set_connectable_off_param),
824 .expect_status = MGMT_STATUS_SUCCESS,
825 .expect_param = set_connectable_off_settings_2,
826 .expect_len = sizeof(set_connectable_off_settings_2),
827 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
828 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
829 .expect_hci_param = set_connectable_scan_enable_param,
830 .expect_hci_len = sizeof(set_connectable_scan_enable_param),
833 static const char set_connectable_off_le_settings_1[] = { 0x00, 0x02, 0x00, 0x00 };
834 static const char set_connectable_off_le_settings_2[] = { 0x01, 0x06, 0x00, 0x00 };
836 static uint16_t settings_le_connectable[] = { MGMT_OP_SET_LE,
837 MGMT_OP_SET_CONNECTABLE, 0 };
839 static const struct generic_data set_connectable_off_le_test_1 = {
840 .setup_settings = settings_le_connectable,
841 .send_opcode = MGMT_OP_SET_CONNECTABLE,
842 .send_param = set_connectable_off_param,
843 .send_len = sizeof(set_connectable_off_param),
844 .expect_status = MGMT_STATUS_SUCCESS,
845 .expect_param = set_connectable_off_le_settings_1,
846 .expect_len = sizeof(set_connectable_off_le_settings_1),
847 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
850 static uint16_t settings_powered_le_connectable_advertising[] = {
852 MGMT_OP_SET_CONNECTABLE,
853 MGMT_OP_SET_ADVERTISING,
854 MGMT_OP_SET_POWERED, 0 };
856 static uint8_t set_connectable_off_adv_param[] = {
857 0x00, 0x08, /* min_interval */
858 0x00, 0x08, /* max_interval */
860 0x01, /* own_addr_type */
861 0x00, /* direct_addr_type */
862 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* direct_addr */
863 0x07, /* channel_map */
864 0x00, /* filter_policy */
867 static const struct generic_data set_connectable_off_le_test_2 = {
868 .setup_settings = settings_powered_le_connectable_advertising,
869 .send_opcode = MGMT_OP_SET_CONNECTABLE,
870 .send_param = set_connectable_off_param,
871 .send_len = sizeof(set_connectable_off_param),
872 .expect_status = MGMT_STATUS_SUCCESS,
873 .expect_param = set_connectable_off_le_settings_2,
874 .expect_len = sizeof(set_connectable_off_le_settings_2),
875 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
876 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
877 .expect_hci_param = set_connectable_off_adv_param,
878 .expect_hci_len = sizeof(set_connectable_off_adv_param),
881 static uint16_t settings_powered_le_discoverable[] = {
883 MGMT_OP_SET_CONNECTABLE,
885 MGMT_OP_SET_DISCOVERABLE, 0 };
887 static uint16_t settings_powered_le_discoverable_advertising[] = {
889 MGMT_OP_SET_CONNECTABLE,
890 MGMT_OP_SET_ADVERTISING,
892 MGMT_OP_SET_DISCOVERABLE, 0 };
894 static const struct generic_data set_connectable_off_le_test_3 = {
895 .setup_settings = settings_powered_le_discoverable_advertising,
896 .send_opcode = MGMT_OP_SET_CONNECTABLE,
897 .send_param = set_connectable_off_param,
898 .send_len = sizeof(set_connectable_off_param),
899 .expect_status = MGMT_STATUS_SUCCESS,
900 .expect_param = set_connectable_off_le_settings_2,
901 .expect_len = sizeof(set_connectable_off_le_settings_2),
902 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
903 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
904 .expect_hci_param = set_connectable_off_adv_param,
905 .expect_hci_len = sizeof(set_connectable_off_adv_param),
908 static const struct generic_data set_connectable_off_le_test_4 = {
909 .setup_settings = settings_powered_le_discoverable_advertising,
910 .setup_limited_discov = true,
911 .send_opcode = MGMT_OP_SET_CONNECTABLE,
912 .send_param = set_connectable_off_param,
913 .send_len = sizeof(set_connectable_off_param),
914 .expect_status = MGMT_STATUS_SUCCESS,
915 .expect_param = set_connectable_off_le_settings_2,
916 .expect_len = sizeof(set_connectable_off_le_settings_2),
917 .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
918 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
919 .expect_hci_param = set_connectable_off_adv_param,
920 .expect_hci_len = sizeof(set_connectable_off_adv_param),
923 static const char set_fast_conn_on_param[] = { 0x01 };
924 static const char set_fast_conn_on_settings_1[] = { 0x87, 0x00, 0x00, 0x00 };
925 static const char set_fast_conn_on_settings_2[] = { 0x85, 0x00, 0x00, 0x00 };
926 static const char set_fast_conn_on_settings_3[] = { 0x84, 0x00, 0x00, 0x00 };
928 static const struct generic_data set_fast_conn_on_success_test_1 = {
929 .setup_settings = settings_powered_connectable,
930 .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
931 .send_param = set_fast_conn_on_param,
932 .send_len = sizeof(set_fast_conn_on_param),
933 .expect_status = MGMT_STATUS_SUCCESS,
934 .expect_param = set_fast_conn_on_settings_1,
935 .expect_len = sizeof(set_fast_conn_on_settings_1),
936 .expect_settings_set = MGMT_SETTING_FAST_CONNECTABLE,
939 static const struct generic_data set_fast_conn_on_success_test_2 = {
940 .setup_settings = settings_powered,
941 .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
942 .send_param = set_fast_conn_on_param,
943 .send_len = sizeof(set_fast_conn_on_param),
944 .expect_status = MGMT_STATUS_SUCCESS,
945 .expect_param = set_fast_conn_on_settings_2,
946 .expect_len = sizeof(set_fast_conn_on_settings_2),
947 .expect_settings_set = MGMT_SETTING_FAST_CONNECTABLE,
950 static const struct generic_data set_fast_conn_on_success_test_3 = {
951 .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
952 .send_param = set_fast_conn_on_param,
953 .send_len = sizeof(set_fast_conn_on_param),
954 .expect_status = MGMT_STATUS_SUCCESS,
955 .expect_param = set_fast_conn_on_settings_3,
956 .expect_len = sizeof(set_fast_conn_on_settings_3),
957 .expect_settings_set = MGMT_SETTING_FAST_CONNECTABLE,
960 static const struct generic_data set_fast_conn_on_not_supported_test_1 = {
961 .setup_settings = settings_powered_connectable,
962 .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
963 .send_param = set_fast_conn_on_param,
964 .send_len = sizeof(set_fast_conn_on_param),
965 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
968 static const char set_fast_conn_nval_param[] = { 0xff };
970 static const struct generic_data set_fast_conn_nval_param_test_1 = {
971 .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
972 .send_param = set_fast_conn_nval_param,
973 .send_len = sizeof(set_fast_conn_nval_param),
974 .expect_status = MGMT_STATUS_INVALID_PARAMS,
977 static const char set_bondable_on_param[] = { 0x01 };
978 static const char set_bondable_invalid_param[] = { 0x02 };
979 static const char set_bondable_garbage_param[] = { 0x01, 0x00 };
980 static const char set_bondable_settings_param[] = { 0x90, 0x00, 0x00, 0x00 };
982 static const struct generic_data set_bondable_on_success_test = {
983 .send_opcode = MGMT_OP_SET_BONDABLE,
984 .send_param = set_bondable_on_param,
985 .send_len = sizeof(set_bondable_on_param),
986 .expect_status = MGMT_STATUS_SUCCESS,
987 .expect_param = set_bondable_settings_param,
988 .expect_len = sizeof(set_bondable_settings_param),
989 .expect_settings_set = MGMT_SETTING_BONDABLE,
992 static const struct generic_data set_bondable_on_invalid_param_test_1 = {
993 .send_opcode = MGMT_OP_SET_BONDABLE,
994 .expect_status = MGMT_STATUS_INVALID_PARAMS,
997 static const struct generic_data set_bondable_on_invalid_param_test_2 = {
998 .send_opcode = MGMT_OP_SET_BONDABLE,
999 .send_param = set_bondable_invalid_param,
1000 .send_len = sizeof(set_bondable_invalid_param),
1001 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1004 static const struct generic_data set_bondable_on_invalid_param_test_3 = {
1005 .send_opcode = MGMT_OP_SET_BONDABLE,
1006 .send_param = set_bondable_garbage_param,
1007 .send_len = sizeof(set_bondable_garbage_param),
1008 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1011 static const struct generic_data set_bondable_on_invalid_index_test = {
1012 .send_index_none = true,
1013 .send_opcode = MGMT_OP_SET_BONDABLE,
1014 .send_param = set_bondable_on_param,
1015 .send_len = sizeof(set_bondable_on_param),
1016 .expect_status = MGMT_STATUS_INVALID_INDEX,
1019 static const uint8_t set_discoverable_on_param[] = { 0x01, 0x00, 0x00 };
1020 static const uint8_t set_discoverable_timeout_param[] = { 0x01, 0x0a, 0x00 };
1021 static const uint8_t set_discoverable_invalid_param[] = { 0x02, 0x00, 0x00 };
1022 static const uint8_t set_discoverable_off_param[] = { 0x00, 0x00, 0x00 };
1023 static const uint8_t set_discoverable_offtimeout_param[] = { 0x00, 0x01, 0x00 };
1024 static const uint8_t set_discoverable_garbage_param[] = { 0x01, 0x00, 0x00, 0x00 };
1025 static const uint8_t set_discoverable_on_settings_param_1[] = { 0x8a, 0x00, 0x00, 0x00 };
1026 static const uint8_t set_discoverable_on_settings_param_2[] = { 0x8b, 0x00, 0x00, 0x00 };
1027 static const uint8_t set_discoverable_off_settings_param_1[] = { 0x82, 0x00, 0x00, 0x00 };
1028 static const uint8_t set_discoverable_off_settings_param_2[] = { 0x83, 0x00, 0x00, 0x00 };
1029 static const uint8_t set_discoverable_on_scan_enable_param[] = { 0x03 };
1030 static const uint8_t set_discoverable_off_scan_enable_param[] = { 0x02 };
1032 static const struct generic_data set_discoverable_on_invalid_param_test_1 = {
1033 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1034 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1037 static const struct generic_data set_discoverable_on_invalid_param_test_2 = {
1038 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1039 .send_param = set_discoverable_invalid_param,
1040 .send_len = sizeof(set_discoverable_invalid_param),
1041 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1044 static const struct generic_data set_discoverable_on_invalid_param_test_3 = {
1045 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1046 .send_param = set_discoverable_garbage_param,
1047 .send_len = sizeof(set_discoverable_garbage_param),
1048 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1051 static const struct generic_data set_discoverable_on_invalid_param_test_4 = {
1052 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1053 .send_param = set_discoverable_offtimeout_param,
1054 .send_len = sizeof(set_discoverable_offtimeout_param),
1055 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1058 static const struct generic_data set_discoverable_on_not_powered_test_1 = {
1059 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1060 .send_param = set_discoverable_timeout_param,
1061 .send_len = sizeof(set_discoverable_timeout_param),
1062 .expect_status = MGMT_STATUS_NOT_POWERED,
1065 static const struct generic_data set_discoverable_on_not_powered_test_2 = {
1066 .setup_settings = settings_connectable,
1067 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1068 .send_param = set_discoverable_timeout_param,
1069 .send_len = sizeof(set_discoverable_timeout_param),
1070 .expect_status = MGMT_STATUS_NOT_POWERED,
1073 static const struct generic_data set_discoverable_on_rejected_test_1 = {
1074 .setup_settings = settings_powered,
1075 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1076 .send_param = set_discoverable_on_param,
1077 .send_len = sizeof(set_discoverable_on_param),
1078 .expect_status = MGMT_STATUS_REJECTED,
1081 static const struct generic_data set_discoverable_on_rejected_test_2 = {
1082 .setup_settings = settings_powered,
1083 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1084 .send_param = set_discoverable_on_param,
1085 .send_len = sizeof(set_discoverable_on_param),
1086 .expect_status = MGMT_STATUS_REJECTED,
1089 static const struct generic_data set_discoverable_on_rejected_test_3 = {
1090 .setup_settings = settings_powered,
1091 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1092 .send_param = set_discoverable_timeout_param,
1093 .send_len = sizeof(set_discoverable_timeout_param),
1094 .expect_status = MGMT_STATUS_REJECTED,
1097 static const struct generic_data set_discoverable_on_success_test_1 = {
1098 .setup_settings = settings_connectable,
1099 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1100 .send_param = set_discoverable_on_param,
1101 .send_len = sizeof(set_discoverable_on_param),
1102 .expect_status = MGMT_STATUS_SUCCESS,
1103 .expect_param = set_discoverable_on_settings_param_1,
1104 .expect_len = sizeof(set_discoverable_on_settings_param_1),
1105 .expect_settings_set = MGMT_SETTING_DISCOVERABLE,
1108 static const struct generic_data set_discoverable_on_success_test_2 = {
1109 .setup_settings = settings_powered_connectable,
1110 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1111 .send_param = set_discoverable_on_param,
1112 .send_len = sizeof(set_discoverable_on_param),
1113 .expect_status = MGMT_STATUS_SUCCESS,
1114 .expect_param = set_discoverable_on_settings_param_2,
1115 .expect_len = sizeof(set_discoverable_on_settings_param_2),
1116 .expect_settings_set = MGMT_SETTING_DISCOVERABLE,
1117 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
1118 .expect_hci_param = set_discoverable_on_scan_enable_param,
1119 .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param),
1122 static uint8_t set_discov_on_le_param[] = { 0x0b, 0x06, 0x00, 0x00 };
1123 static uint8_t set_discov_adv_data[32] = { 0x06, 0x02, 0x01, 0x06,
1126 static const struct generic_data set_discov_on_le_success_1 = {
1127 .setup_settings = settings_powered_le_connectable_advertising,
1128 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1129 .send_param = set_discoverable_on_param,
1130 .send_len = sizeof(set_discoverable_on_param),
1131 .expect_status = MGMT_STATUS_SUCCESS,
1132 .expect_param = set_discov_on_le_param,
1133 .expect_len = sizeof(set_discov_on_le_param),
1134 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
1135 .expect_hci_param = set_discov_adv_data,
1136 .expect_hci_len = sizeof(set_discov_adv_data),
1139 static const struct generic_data set_discoverable_off_success_test_1 = {
1140 .setup_settings = settings_connectable,
1141 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1142 .send_param = set_discoverable_off_param,
1143 .send_len = sizeof(set_discoverable_off_param),
1144 .expect_status = MGMT_STATUS_SUCCESS,
1145 .expect_param = set_discoverable_off_settings_param_1,
1146 .expect_len = sizeof(set_discoverable_off_settings_param_1),
1149 static const struct generic_data set_discoverable_off_success_test_2 = {
1150 .setup_settings = settings_powered_discoverable,
1151 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1152 .send_param = set_discoverable_off_param,
1153 .send_len = sizeof(set_discoverable_off_param),
1154 .expect_status = MGMT_STATUS_SUCCESS,
1155 .expect_param = set_discoverable_off_settings_param_2,
1156 .expect_len = sizeof(set_discoverable_off_settings_param_2),
1157 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
1158 .expect_hci_param = set_discoverable_off_scan_enable_param,
1159 .expect_hci_len = sizeof(set_discoverable_off_scan_enable_param),
1162 static const uint8_t set_limited_discov_on_param[] = { 0x02, 0x01, 0x00 };
1164 static const struct generic_data set_limited_discov_on_success_1 = {
1165 .setup_settings = settings_powered_connectable,
1166 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1167 .send_param = set_limited_discov_on_param,
1168 .send_len = sizeof(set_limited_discov_on_param),
1169 .expect_status = MGMT_STATUS_SUCCESS,
1170 .expect_param = set_discoverable_on_settings_param_2,
1171 .expect_len = sizeof(set_discoverable_on_settings_param_2),
1172 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
1173 .expect_hci_param = set_discoverable_on_scan_enable_param,
1174 .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param),
1177 static uint8_t write_current_iac_lap_limited[] = { 0x01, 0x00, 0x8b, 0x9e };
1179 static const struct generic_data set_limited_discov_on_success_2 = {
1180 .setup_settings = settings_powered_connectable,
1181 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1182 .send_param = set_limited_discov_on_param,
1183 .send_len = sizeof(set_limited_discov_on_param),
1184 .expect_status = MGMT_STATUS_SUCCESS,
1185 .expect_param = set_discoverable_on_settings_param_2,
1186 .expect_len = sizeof(set_discoverable_on_settings_param_2),
1187 .expect_hci_command = BT_HCI_CMD_WRITE_CURRENT_IAC_LAP,
1188 .expect_hci_param = write_current_iac_lap_limited,
1189 .expect_hci_len = sizeof(write_current_iac_lap_limited),
1192 static uint8_t write_cod_limited[] = { 0x00, 0x20, 0x00 };
1194 static const struct generic_data set_limited_discov_on_success_3 = {
1195 .setup_settings = settings_powered_connectable,
1196 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1197 .send_param = set_limited_discov_on_param,
1198 .send_len = sizeof(set_limited_discov_on_param),
1199 .expect_status = MGMT_STATUS_SUCCESS,
1200 .expect_param = set_discoverable_on_settings_param_2,
1201 .expect_len = sizeof(set_discoverable_on_settings_param_2),
1202 .expect_hci_command = BT_HCI_CMD_WRITE_CLASS_OF_DEV,
1203 .expect_hci_param = write_cod_limited,
1204 .expect_hci_len = sizeof(write_cod_limited),
1207 static uint8_t set_limited_discov_adv_data[32] = { 0x06, 0x02, 0x01, 0x05,
1210 static const struct generic_data set_limited_discov_on_le_success_1 = {
1211 .setup_settings = settings_powered_le_connectable_advertising,
1212 .send_opcode = MGMT_OP_SET_DISCOVERABLE,
1213 .send_param = set_limited_discov_on_param,
1214 .send_len = sizeof(set_limited_discov_on_param),
1215 .expect_status = MGMT_STATUS_SUCCESS,
1216 .expect_param = set_discov_on_le_param,
1217 .expect_len = sizeof(set_discov_on_le_param),
1218 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
1219 .expect_hci_param = set_limited_discov_adv_data,
1220 .expect_hci_len = sizeof(set_limited_discov_adv_data),
1223 static uint16_t settings_link_sec[] = { MGMT_OP_SET_LINK_SECURITY, 0 };
1225 static const char set_link_sec_on_param[] = { 0x01 };
1226 static const char set_link_sec_invalid_param[] = { 0x02 };
1227 static const char set_link_sec_garbage_param[] = { 0x01, 0x00 };
1228 static const char set_link_sec_settings_param_1[] = { 0xa0, 0x00, 0x00, 0x00 };
1229 static const char set_link_sec_settings_param_2[] = { 0xa1, 0x00, 0x00, 0x00 };
1230 static const char set_link_sec_auth_enable_param[] = { 0x01 };
1232 static const struct generic_data set_link_sec_on_success_test_1 = {
1233 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1234 .send_param = set_link_sec_on_param,
1235 .send_len = sizeof(set_link_sec_on_param),
1236 .expect_status = MGMT_STATUS_SUCCESS,
1237 .expect_param = set_link_sec_settings_param_1,
1238 .expect_len = sizeof(set_link_sec_settings_param_1),
1239 .expect_settings_set = MGMT_SETTING_LINK_SECURITY,
1242 static const struct generic_data set_link_sec_on_success_test_2 = {
1243 .setup_settings = settings_powered,
1244 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1245 .send_param = set_link_sec_on_param,
1246 .send_len = sizeof(set_link_sec_on_param),
1247 .expect_status = MGMT_STATUS_SUCCESS,
1248 .expect_param = set_link_sec_settings_param_2,
1249 .expect_len = sizeof(set_link_sec_settings_param_2),
1250 .expect_settings_set = MGMT_SETTING_LINK_SECURITY,
1251 .expect_hci_command = BT_HCI_CMD_WRITE_AUTH_ENABLE,
1252 .expect_hci_param = set_link_sec_auth_enable_param,
1253 .expect_hci_len = sizeof(set_link_sec_auth_enable_param),
1256 static const struct generic_data set_link_sec_on_success_test_3 = {
1257 .setup_settings = settings_link_sec,
1258 .send_opcode = MGMT_OP_SET_POWERED,
1259 .send_param = set_powered_on_param,
1260 .send_len = sizeof(set_powered_on_param),
1261 .expect_status = MGMT_STATUS_SUCCESS,
1262 .expect_param = set_link_sec_settings_param_2,
1263 .expect_len = sizeof(set_link_sec_settings_param_2),
1264 .expect_settings_set = MGMT_SETTING_LINK_SECURITY,
1265 .expect_hci_command = BT_HCI_CMD_WRITE_AUTH_ENABLE,
1266 .expect_hci_param = set_link_sec_auth_enable_param,
1267 .expect_hci_len = sizeof(set_link_sec_auth_enable_param),
1270 static const struct generic_data set_link_sec_on_invalid_param_test_1 = {
1271 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1272 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1275 static const struct generic_data set_link_sec_on_invalid_param_test_2 = {
1276 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1277 .send_param = set_link_sec_invalid_param,
1278 .send_len = sizeof(set_link_sec_invalid_param),
1279 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1282 static const struct generic_data set_link_sec_on_invalid_param_test_3 = {
1283 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1284 .send_param = set_link_sec_garbage_param,
1285 .send_len = sizeof(set_link_sec_garbage_param),
1286 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1289 static const struct generic_data set_link_sec_on_invalid_index_test = {
1290 .send_index_none = true,
1291 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1292 .send_param = set_link_sec_on_param,
1293 .send_len = sizeof(set_link_sec_on_param),
1294 .expect_status = MGMT_STATUS_INVALID_INDEX,
1297 static const uint16_t settings_powered_link_sec[] = {
1298 MGMT_OP_SET_LINK_SECURITY,
1299 MGMT_OP_SET_POWERED, 0 };
1301 static const char set_link_sec_off_param[] = { 0x00 };
1302 static const char set_link_sec_off_settings_1[] = { 0x80, 0x00, 0x00, 0x00 };
1303 static const char set_link_sec_off_settings_2[] = { 0x81, 0x00, 0x00, 0x00 };
1304 static const char set_link_sec_off_auth_enable_param[] = { 0x00 };
1306 static const struct generic_data set_link_sec_off_success_test_1 = {
1307 .setup_settings = settings_link_sec,
1308 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1309 .send_param = set_link_sec_off_param,
1310 .send_len = sizeof(set_link_sec_off_param),
1311 .expect_status = MGMT_STATUS_SUCCESS,
1312 .expect_param = set_link_sec_off_settings_1,
1313 .expect_len = sizeof(set_link_sec_off_settings_1),
1314 .expect_settings_unset = MGMT_SETTING_LINK_SECURITY,
1317 static const struct generic_data set_link_sec_off_success_test_2 = {
1318 .setup_settings = settings_powered_link_sec,
1319 .send_opcode = MGMT_OP_SET_LINK_SECURITY,
1320 .send_param = set_link_sec_off_param,
1321 .send_len = sizeof(set_link_sec_off_param),
1322 .expect_status = MGMT_STATUS_SUCCESS,
1323 .expect_param = set_link_sec_off_settings_2,
1324 .expect_len = sizeof(set_link_sec_off_settings_2),
1325 .expect_settings_unset = MGMT_SETTING_LINK_SECURITY,
1326 .expect_hci_command = BT_HCI_CMD_WRITE_AUTH_ENABLE,
1327 .expect_hci_param = set_link_sec_off_auth_enable_param,
1328 .expect_hci_len = sizeof(set_link_sec_off_auth_enable_param),
1331 static uint16_t settings_ssp[] = { MGMT_OP_SET_SSP, 0 };
1333 static const char set_ssp_on_param[] = { 0x01 };
1334 static const char set_ssp_invalid_param[] = { 0x02 };
1335 static const char set_ssp_garbage_param[] = { 0x01, 0x00 };
1336 static const char set_ssp_settings_param_1[] = { 0xc0, 0x00, 0x00, 0x00 };
1337 static const char set_ssp_settings_param_2[] = { 0xc1, 0x00, 0x00, 0x00 };
1338 static const char set_ssp_on_write_ssp_mode_param[] = { 0x01 };
1340 static const struct generic_data set_ssp_on_success_test_1 = {
1341 .send_opcode = MGMT_OP_SET_SSP,
1342 .send_param = set_ssp_on_param,
1343 .send_len = sizeof(set_ssp_on_param),
1344 .expect_status = MGMT_STATUS_SUCCESS,
1345 .expect_param = set_ssp_settings_param_1,
1346 .expect_len = sizeof(set_ssp_settings_param_1),
1347 .expect_settings_set = MGMT_SETTING_SSP,
1350 static const struct generic_data set_ssp_on_success_test_2 = {
1351 .setup_settings = settings_powered,
1352 .send_opcode = MGMT_OP_SET_SSP,
1353 .send_param = set_ssp_on_param,
1354 .send_len = sizeof(set_ssp_on_param),
1355 .expect_status = MGMT_STATUS_SUCCESS,
1356 .expect_param = set_ssp_settings_param_2,
1357 .expect_len = sizeof(set_ssp_settings_param_2),
1358 .expect_settings_set = MGMT_SETTING_SSP,
1359 .expect_hci_command = BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE,
1360 .expect_hci_param = set_ssp_on_write_ssp_mode_param,
1361 .expect_hci_len = sizeof(set_ssp_on_write_ssp_mode_param),
1364 static const struct generic_data set_ssp_on_success_test_3 = {
1365 .setup_settings = settings_ssp,
1366 .send_opcode = MGMT_OP_SET_POWERED,
1367 .send_param = set_powered_on_param,
1368 .send_len = sizeof(set_powered_on_param),
1369 .expect_status = MGMT_STATUS_SUCCESS,
1370 .expect_param = set_ssp_settings_param_2,
1371 .expect_len = sizeof(set_ssp_settings_param_2),
1372 .expect_settings_set = MGMT_SETTING_SSP,
1373 .expect_hci_command = BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE,
1374 .expect_hci_param = set_ssp_on_write_ssp_mode_param,
1375 .expect_hci_len = sizeof(set_ssp_on_write_ssp_mode_param),
1378 static const struct generic_data set_ssp_on_invalid_param_test_1 = {
1379 .send_opcode = MGMT_OP_SET_SSP,
1380 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1383 static const struct generic_data set_ssp_on_invalid_param_test_2 = {
1384 .send_opcode = MGMT_OP_SET_SSP,
1385 .send_param = set_ssp_invalid_param,
1386 .send_len = sizeof(set_ssp_invalid_param),
1387 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1390 static const struct generic_data set_ssp_on_invalid_param_test_3 = {
1391 .send_opcode = MGMT_OP_SET_SSP,
1392 .send_param = set_ssp_garbage_param,
1393 .send_len = sizeof(set_ssp_garbage_param),
1394 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1397 static const struct generic_data set_ssp_on_invalid_index_test = {
1398 .send_index_none = true,
1399 .send_opcode = MGMT_OP_SET_SSP,
1400 .send_param = set_ssp_on_param,
1401 .send_len = sizeof(set_ssp_on_param),
1402 .expect_status = MGMT_STATUS_INVALID_INDEX,
1405 static uint16_t settings_powered_ssp[] = { MGMT_OP_SET_SSP,
1406 MGMT_OP_SET_POWERED, 0 };
1408 static uint16_t settings_powered_sc[] = { MGMT_OP_SET_SSP,
1409 MGMT_OP_SET_SECURE_CONN,
1410 MGMT_OP_SET_POWERED, 0 };
1412 static const char set_sc_on_param[] = { 0x01 };
1413 static const char set_sc_only_on_param[] = { 0x02 };
1414 static const char set_sc_invalid_param[] = { 0x03 };
1415 static const char set_sc_garbage_param[] = { 0x01, 0x00 };
1416 static const char set_sc_settings_param_1[] = { 0xc0, 0x08, 0x00, 0x00 };
1417 static const char set_sc_settings_param_2[] = { 0xc1, 0x08, 0x00, 0x00 };
1418 static const char set_sc_on_write_sc_support_param[] = { 0x01 };
1420 static const struct generic_data set_sc_on_success_test_1 = {
1421 .setup_settings = settings_ssp,
1422 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1423 .send_param = set_sc_on_param,
1424 .send_len = sizeof(set_sc_on_param),
1425 .expect_status = MGMT_STATUS_SUCCESS,
1426 .expect_param = set_sc_settings_param_1,
1427 .expect_len = sizeof(set_sc_settings_param_1),
1428 .expect_settings_set = MGMT_SETTING_SECURE_CONN,
1431 static const struct generic_data set_sc_on_success_test_2 = {
1432 .setup_settings = settings_powered_ssp,
1433 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1434 .send_param = set_sc_on_param,
1435 .send_len = sizeof(set_sc_on_param),
1436 .expect_status = MGMT_STATUS_SUCCESS,
1437 .expect_param = set_sc_settings_param_2,
1438 .expect_len = sizeof(set_sc_settings_param_2),
1439 .expect_settings_set = MGMT_SETTING_SECURE_CONN,
1440 .expect_hci_command = BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT,
1441 .expect_hci_param = set_sc_on_write_sc_support_param,
1442 .expect_hci_len = sizeof(set_sc_on_write_sc_support_param),
1445 static const struct generic_data set_sc_on_invalid_param_test_1 = {
1446 .setup_settings = settings_ssp,
1447 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1448 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1451 static const struct generic_data set_sc_on_invalid_param_test_2 = {
1452 .setup_settings = settings_ssp,
1453 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1454 .send_param = set_sc_invalid_param,
1455 .send_len = sizeof(set_sc_invalid_param),
1456 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1459 static const struct generic_data set_sc_on_invalid_param_test_3 = {
1460 .setup_settings = settings_ssp,
1461 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1462 .send_param = set_sc_garbage_param,
1463 .send_len = sizeof(set_sc_garbage_param),
1464 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1467 static const struct generic_data set_sc_on_invalid_index_test = {
1468 .setup_settings = settings_ssp,
1469 .send_index_none = true,
1470 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1471 .send_param = set_sc_on_param,
1472 .send_len = sizeof(set_sc_on_param),
1473 .expect_status = MGMT_STATUS_INVALID_INDEX,
1476 static const struct generic_data set_sc_on_not_supported_test_1 = {
1477 .setup_settings = settings_ssp,
1478 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1479 .send_param = set_sc_on_param,
1480 .send_len = sizeof(set_sc_on_param),
1481 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
1484 static const struct generic_data set_sc_on_not_supported_test_2 = {
1485 .setup_settings = settings_powered_ssp,
1486 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1487 .send_param = set_sc_on_param,
1488 .send_len = sizeof(set_sc_on_param),
1489 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
1492 static const struct generic_data set_sc_only_on_success_test_1 = {
1493 .setup_settings = settings_ssp,
1494 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1495 .send_param = set_sc_only_on_param,
1496 .send_len = sizeof(set_sc_only_on_param),
1497 .expect_status = MGMT_STATUS_SUCCESS,
1498 .expect_param = set_sc_settings_param_1,
1499 .expect_len = sizeof(set_sc_settings_param_1),
1500 .expect_settings_set = MGMT_SETTING_SECURE_CONN,
1503 static const struct generic_data set_sc_only_on_success_test_2 = {
1504 .setup_settings = settings_powered_ssp,
1505 .send_opcode = MGMT_OP_SET_SECURE_CONN,
1506 .send_param = set_sc_only_on_param,
1507 .send_len = sizeof(set_sc_only_on_param),
1508 .expect_status = MGMT_STATUS_SUCCESS,
1509 .expect_param = set_sc_settings_param_2,
1510 .expect_len = sizeof(set_sc_settings_param_2),
1511 .expect_settings_set = MGMT_SETTING_SECURE_CONN,
1512 .expect_hci_command = BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT,
1513 .expect_hci_param = set_sc_on_write_sc_support_param,
1514 .expect_hci_len = sizeof(set_sc_on_write_sc_support_param),
1517 static const char set_hs_on_param[] = { 0x01 };
1518 static const char set_hs_invalid_param[] = { 0x02 };
1519 static const char set_hs_garbage_param[] = { 0x01, 0x00 };
1520 static const char set_hs_settings_param_1[] = { 0xc0, 0x01, 0x00, 0x00 };
1522 static const struct generic_data set_hs_on_success_test = {
1523 .setup_settings = settings_ssp,
1524 .send_opcode = MGMT_OP_SET_HS,
1525 .send_param = set_hs_on_param,
1526 .send_len = sizeof(set_hs_on_param),
1527 .expect_status = MGMT_STATUS_SUCCESS,
1528 .expect_param = set_hs_settings_param_1,
1529 .expect_len = sizeof(set_hs_settings_param_1),
1530 .expect_settings_set = MGMT_SETTING_HS,
1533 static const struct generic_data set_hs_on_invalid_param_test_1 = {
1534 .setup_settings = settings_ssp,
1535 .send_opcode = MGMT_OP_SET_HS,
1536 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1539 static const struct generic_data set_hs_on_invalid_param_test_2 = {
1540 .setup_settings = settings_ssp,
1541 .send_opcode = MGMT_OP_SET_HS,
1542 .send_param = set_hs_invalid_param,
1543 .send_len = sizeof(set_hs_invalid_param),
1544 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1547 static const struct generic_data set_hs_on_invalid_param_test_3 = {
1548 .setup_settings = settings_ssp,
1549 .send_opcode = MGMT_OP_SET_HS,
1550 .send_param = set_hs_garbage_param,
1551 .send_len = sizeof(set_hs_garbage_param),
1552 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1555 static const struct generic_data set_hs_on_invalid_index_test = {
1556 .setup_settings = settings_ssp,
1557 .send_index_none = true,
1558 .send_opcode = MGMT_OP_SET_HS,
1559 .send_param = set_hs_on_param,
1560 .send_len = sizeof(set_hs_on_param),
1561 .expect_status = MGMT_STATUS_INVALID_INDEX,
1564 static uint16_t settings_le[] = { MGMT_OP_SET_LE, 0 };
1566 static const char set_le_on_param[] = { 0x01 };
1567 static const char set_le_off_param[] = { 0x00 };
1568 static const char set_le_invalid_param[] = { 0x02 };
1569 static const char set_le_garbage_param[] = { 0x01, 0x00 };
1570 static const char set_le_settings_param_1[] = { 0x80, 0x02, 0x00, 0x00 };
1571 static const char set_le_settings_param_2[] = { 0x81, 0x02, 0x00, 0x00 };
1572 static const char set_le_on_write_le_host_param[] = { 0x01, 0x00 };
1574 static const struct generic_data set_le_on_success_test_1 = {
1575 .send_opcode = MGMT_OP_SET_LE,
1576 .send_param = set_le_on_param,
1577 .send_len = sizeof(set_le_on_param),
1578 .expect_status = MGMT_STATUS_SUCCESS,
1579 .expect_param = set_le_settings_param_1,
1580 .expect_len = sizeof(set_le_settings_param_1),
1581 .expect_settings_set = MGMT_SETTING_LE,
1584 static const struct generic_data set_le_on_success_test_2 = {
1585 .setup_settings = settings_powered,
1586 .send_opcode = MGMT_OP_SET_LE,
1587 .send_param = set_le_on_param,
1588 .send_len = sizeof(set_le_on_param),
1589 .expect_status = MGMT_STATUS_SUCCESS,
1590 .expect_param = set_le_settings_param_2,
1591 .expect_len = sizeof(set_le_settings_param_2),
1592 .expect_settings_set = MGMT_SETTING_LE,
1593 .expect_hci_command = BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED,
1594 .expect_hci_param = set_le_on_write_le_host_param,
1595 .expect_hci_len = sizeof(set_le_on_write_le_host_param),
1598 static const struct generic_data set_le_on_success_test_3 = {
1599 .setup_settings = settings_le,
1600 .send_opcode = MGMT_OP_SET_POWERED,
1601 .send_param = set_powered_on_param,
1602 .send_len = sizeof(set_powered_on_param),
1603 .expect_status = MGMT_STATUS_SUCCESS,
1604 .expect_param = set_le_settings_param_2,
1605 .expect_len = sizeof(set_le_settings_param_2),
1606 .expect_settings_set = MGMT_SETTING_LE,
1607 .expect_hci_command = BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED,
1608 .expect_hci_param = set_le_on_write_le_host_param,
1609 .expect_hci_len = sizeof(set_le_on_write_le_host_param),
1612 static const struct generic_data set_le_on_invalid_param_test_1 = {
1613 .send_opcode = MGMT_OP_SET_LE,
1614 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1617 static const struct generic_data set_le_on_invalid_param_test_2 = {
1618 .send_opcode = MGMT_OP_SET_LE,
1619 .send_param = set_le_invalid_param,
1620 .send_len = sizeof(set_le_invalid_param),
1621 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1624 static const struct generic_data set_le_on_invalid_param_test_3 = {
1625 .send_opcode = MGMT_OP_SET_LE,
1626 .send_param = set_le_garbage_param,
1627 .send_len = sizeof(set_le_garbage_param),
1628 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1631 static const struct generic_data set_le_on_invalid_index_test = {
1632 .send_index_none = true,
1633 .send_opcode = MGMT_OP_SET_LE,
1634 .send_param = set_le_on_param,
1635 .send_len = sizeof(set_le_on_param),
1636 .expect_status = MGMT_STATUS_INVALID_INDEX,
1639 static uint16_t settings_powered_le[] = { MGMT_OP_SET_LE,
1640 MGMT_OP_SET_POWERED, 0 };
1642 static const char set_adv_on_param[] = { 0x01 };
1643 static const char set_adv_settings_param_1[] = { 0x80, 0x06, 0x00, 0x00 };
1644 static const char set_adv_settings_param_2[] = { 0x81, 0x06, 0x00, 0x00 };
1645 static const char set_adv_on_set_adv_enable_param[] = { 0x01 };
1646 static const char set_adv_on_set_adv_disable_param[] = { 0x00 };
1648 static const struct generic_data set_adv_on_success_test_1 = {
1649 .setup_settings = settings_le,
1650 .send_opcode = MGMT_OP_SET_ADVERTISING,
1651 .send_param = set_adv_on_param,
1652 .send_len = sizeof(set_adv_on_param),
1653 .expect_status = MGMT_STATUS_SUCCESS,
1654 .expect_param = set_adv_settings_param_1,
1655 .expect_len = sizeof(set_adv_settings_param_1),
1656 .expect_settings_set = MGMT_SETTING_ADVERTISING,
1659 static const struct generic_data set_adv_on_success_test_2 = {
1660 .setup_settings = settings_powered_le,
1661 .send_opcode = MGMT_OP_SET_ADVERTISING,
1662 .send_param = set_adv_on_param,
1663 .send_len = sizeof(set_adv_on_param),
1664 .expect_status = MGMT_STATUS_SUCCESS,
1665 .expect_param = set_adv_settings_param_2,
1666 .expect_len = sizeof(set_adv_settings_param_2),
1667 .expect_settings_set = MGMT_SETTING_ADVERTISING,
1668 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
1669 .expect_hci_param = set_adv_on_set_adv_enable_param,
1670 .expect_hci_len = sizeof(set_adv_on_set_adv_enable_param),
1673 static const struct generic_data set_adv_on_rejected_test_1 = {
1674 .setup_settings = settings_powered,
1675 .send_opcode = MGMT_OP_SET_ADVERTISING,
1676 .send_param = set_adv_on_param,
1677 .send_len = sizeof(set_adv_on_param),
1678 .expect_status = MGMT_STATUS_REJECTED,
1681 static const char set_bredr_off_param[] = { 0x00 };
1682 static const char set_bredr_on_param[] = { 0x01 };
1683 static const char set_bredr_invalid_param[] = { 0x02 };
1684 static const char set_bredr_settings_param_1[] = { 0x00, 0x02, 0x00, 0x00 };
1685 static const char set_bredr_settings_param_2[] = { 0x80, 0x02, 0x00, 0x00 };
1686 static const char set_bredr_settings_param_3[] = { 0x81, 0x02, 0x00, 0x00 };
1688 static const struct generic_data set_bredr_off_success_test_1 = {
1689 .setup_settings = settings_le,
1690 .send_opcode = MGMT_OP_SET_BREDR,
1691 .send_param = set_bredr_off_param,
1692 .send_len = sizeof(set_bredr_off_param),
1693 .expect_status = MGMT_STATUS_SUCCESS,
1694 .expect_param = set_bredr_settings_param_1,
1695 .expect_len = sizeof(set_bredr_settings_param_1),
1696 .expect_settings_unset = MGMT_SETTING_BREDR,
1699 static const struct generic_data set_bredr_on_success_test_1 = {
1700 .setup_settings = settings_le,
1701 .setup_nobredr = true,
1702 .send_opcode = MGMT_OP_SET_BREDR,
1703 .send_param = set_bredr_on_param,
1704 .send_len = sizeof(set_bredr_on_param),
1705 .expect_status = MGMT_STATUS_SUCCESS,
1706 .expect_param = set_bredr_settings_param_2,
1707 .expect_len = sizeof(set_bredr_settings_param_2),
1708 .expect_settings_set = MGMT_SETTING_BREDR,
1711 static const struct generic_data set_bredr_on_success_test_2 = {
1712 .setup_settings = settings_powered_le,
1713 .setup_nobredr = true,
1714 .send_opcode = MGMT_OP_SET_BREDR,
1715 .send_param = set_bredr_on_param,
1716 .send_len = sizeof(set_bredr_on_param),
1717 .expect_status = MGMT_STATUS_SUCCESS,
1718 .expect_param = set_bredr_settings_param_3,
1719 .expect_len = sizeof(set_bredr_settings_param_3),
1720 .expect_settings_set = MGMT_SETTING_BREDR,
1723 static const struct generic_data set_bredr_off_notsupp_test = {
1724 .send_opcode = MGMT_OP_SET_BREDR,
1725 .send_param = set_bredr_off_param,
1726 .send_len = sizeof(set_bredr_off_param),
1727 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
1730 static const struct generic_data set_bredr_off_failure_test_1 = {
1731 .setup_settings = settings_powered_le,
1732 .send_opcode = MGMT_OP_SET_BREDR,
1733 .send_param = set_bredr_off_param,
1734 .send_len = sizeof(set_bredr_off_param),
1735 .expect_status = MGMT_STATUS_REJECTED,
1738 static const struct generic_data set_bredr_off_failure_test_2 = {
1739 .setup_settings = settings_powered,
1740 .send_opcode = MGMT_OP_SET_BREDR,
1741 .send_param = set_bredr_off_param,
1742 .send_len = sizeof(set_bredr_off_param),
1743 .expect_status = MGMT_STATUS_REJECTED,
1746 static const struct generic_data set_bredr_off_failure_test_3 = {
1747 .setup_settings = settings_le,
1748 .send_opcode = MGMT_OP_SET_BREDR,
1749 .send_param = set_bredr_invalid_param,
1750 .send_len = sizeof(set_bredr_invalid_param),
1751 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1754 static const char set_local_name_param[260] = { 'T', 'e', 's', 't', ' ',
1755 'n', 'a', 'm', 'e' };
1756 static const char write_local_name_hci[248] = { 'T', 'e', 's', 't', ' ',
1757 'n', 'a', 'm', 'e' };
1758 static const char write_eir_local_name_hci_1[241] = { 0x00,
1759 0x0a, 0x09, 'T', 'e', 's', 't', ' ', 'n', 'a', 'm', 'e',
1760 0x02, 0x0a, 0x00, };
1762 static const struct generic_data set_local_name_test_1 = {
1763 .send_opcode = MGMT_OP_SET_LOCAL_NAME,
1764 .send_param = set_local_name_param,
1765 .send_len = sizeof(set_local_name_param),
1766 .expect_status = MGMT_STATUS_SUCCESS,
1767 .expect_param = set_local_name_param,
1768 .expect_len = sizeof(set_local_name_param),
1769 .expect_alt_ev = MGMT_EV_LOCAL_NAME_CHANGED,
1770 .expect_alt_ev_param = set_local_name_param,
1771 .expect_alt_ev_len = sizeof(set_local_name_param),
1774 static const struct generic_data set_local_name_test_2 = {
1775 .setup_settings = settings_powered,
1776 .send_opcode = MGMT_OP_SET_LOCAL_NAME,
1777 .send_param = set_local_name_param,
1778 .send_len = sizeof(set_local_name_param),
1779 .expect_status = MGMT_STATUS_SUCCESS,
1780 .expect_param = set_local_name_param,
1781 .expect_len = sizeof(set_local_name_param),
1782 .expect_hci_command = BT_HCI_CMD_WRITE_LOCAL_NAME,
1783 .expect_hci_param = write_local_name_hci,
1784 .expect_hci_len = sizeof(write_local_name_hci),
1785 .expect_alt_ev = MGMT_EV_LOCAL_NAME_CHANGED,
1786 .expect_alt_ev_param = set_local_name_param,
1787 .expect_alt_ev_len = sizeof(set_local_name_param),
1790 static const struct generic_data set_local_name_test_3 = {
1791 .setup_settings = settings_powered_ssp,
1792 .send_opcode = MGMT_OP_SET_LOCAL_NAME,
1793 .send_param = set_local_name_param,
1794 .send_len = sizeof(set_local_name_param),
1795 .expect_status = MGMT_STATUS_SUCCESS,
1796 .expect_param = set_local_name_param,
1797 .expect_len = sizeof(set_local_name_param),
1798 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
1799 .expect_hci_param = write_eir_local_name_hci_1,
1800 .expect_hci_len = sizeof(write_eir_local_name_hci_1),
1801 .expect_alt_ev = MGMT_EV_LOCAL_NAME_CHANGED,
1802 .expect_alt_ev_param = set_local_name_param,
1803 .expect_alt_ev_len = sizeof(set_local_name_param),
1806 static const char start_discovery_invalid_param[] = { 0x00 };
1807 static const char start_discovery_bredr_param[] = { 0x01 };
1808 static const char start_discovery_le_param[] = { 0x06 };
1809 static const char start_discovery_bredrle_param[] = { 0x07 };
1810 static const char start_discovery_valid_hci[] = { 0x01, 0x01 };
1811 static const char start_discovery_evt[] = { 0x07, 0x01 };
1812 static const char start_discovery_le_evt[] = { 0x06, 0x01 };
1814 static const struct generic_data start_discovery_not_powered_test_1 = {
1815 .send_opcode = MGMT_OP_START_DISCOVERY,
1816 .send_param = start_discovery_bredr_param,
1817 .send_len = sizeof(start_discovery_bredr_param),
1818 .expect_status = MGMT_STATUS_NOT_POWERED,
1819 .expect_param = start_discovery_bredr_param,
1820 .expect_len = sizeof(start_discovery_bredr_param),
1823 static const struct generic_data start_discovery_invalid_param_test_1 = {
1824 .setup_settings = settings_powered,
1825 .send_opcode = MGMT_OP_START_DISCOVERY,
1826 .send_param = start_discovery_invalid_param,
1827 .send_len = sizeof(start_discovery_invalid_param),
1828 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1829 .expect_param = start_discovery_invalid_param,
1830 .expect_len = sizeof(start_discovery_invalid_param),
1833 static const struct generic_data start_discovery_not_supported_test_1 = {
1834 .setup_settings = settings_powered,
1835 .send_opcode = MGMT_OP_START_DISCOVERY,
1836 .send_param = start_discovery_le_param,
1837 .send_len = sizeof(start_discovery_le_param),
1838 .expect_status = MGMT_STATUS_REJECTED,
1839 .expect_param = start_discovery_le_param,
1840 .expect_len = sizeof(start_discovery_le_param),
1843 static const struct generic_data start_discovery_valid_param_test_1 = {
1844 .setup_settings = settings_powered_le,
1845 .send_opcode = MGMT_OP_START_DISCOVERY,
1846 .send_param = start_discovery_bredrle_param,
1847 .send_len = sizeof(start_discovery_bredrle_param),
1848 .expect_status = MGMT_STATUS_SUCCESS,
1849 .expect_param = start_discovery_bredrle_param,
1850 .expect_len = sizeof(start_discovery_bredrle_param),
1851 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
1852 .expect_hci_param = start_discovery_valid_hci,
1853 .expect_hci_len = sizeof(start_discovery_valid_hci),
1854 .expect_alt_ev = MGMT_EV_DISCOVERING,
1855 .expect_alt_ev_param = start_discovery_evt,
1856 .expect_alt_ev_len = sizeof(start_discovery_evt),
1859 static const struct generic_data start_discovery_valid_param_test_2 = {
1860 .setup_settings = settings_powered,
1861 .send_opcode = MGMT_OP_START_DISCOVERY,
1862 .send_param = start_discovery_le_param,
1863 .send_len = sizeof(start_discovery_le_param),
1864 .expect_status = MGMT_STATUS_SUCCESS,
1865 .expect_param = start_discovery_le_param,
1866 .expect_len = sizeof(start_discovery_le_param),
1867 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
1868 .expect_hci_param = start_discovery_valid_hci,
1869 .expect_hci_len = sizeof(start_discovery_valid_hci),
1870 .expect_alt_ev = MGMT_EV_DISCOVERING,
1871 .expect_alt_ev_param = start_discovery_le_evt,
1872 .expect_alt_ev_len = sizeof(start_discovery_le_evt),
1875 static const struct generic_data start_discovery_valid_param_power_off_1 = {
1876 .setup_settings = settings_le,
1877 .send_opcode = MGMT_OP_START_DISCOVERY,
1878 .send_param = start_discovery_bredrle_param,
1879 .send_len = sizeof(start_discovery_bredrle_param),
1880 .expect_status = MGMT_STATUS_NOT_POWERED,
1881 .force_power_off = true,
1882 .expect_param = start_discovery_bredrle_param,
1883 .expect_len = sizeof(start_discovery_bredrle_param),
1886 static const char stop_discovery_bredrle_param[] = { 0x07 };
1887 static const char stop_discovery_bredrle_invalid_param[] = { 0x06 };
1888 static const char stop_discovery_valid_hci[] = { 0x00, 0x00 };
1889 static const char stop_discovery_evt[] = { 0x07, 0x00 };
1890 static const char stop_discovery_bredr_param[] = { 0x01 };
1891 static const char stop_discovery_bredr_discovering[] = { 0x01, 0x00 };
1893 static const struct generic_data stop_discovery_success_test_1 = {
1894 .setup_settings = settings_powered_le,
1895 .setup_send_opcode = MGMT_OP_START_DISCOVERY,
1896 .setup_send_param = start_discovery_bredrle_param,
1897 .setup_send_len = sizeof(start_discovery_bredrle_param),
1898 .send_opcode = MGMT_OP_STOP_DISCOVERY,
1899 .send_param = stop_discovery_bredrle_param,
1900 .send_len = sizeof(stop_discovery_bredrle_param),
1901 .expect_status = MGMT_STATUS_SUCCESS,
1902 .expect_param = stop_discovery_bredrle_param,
1903 .expect_len = sizeof(stop_discovery_bredrle_param),
1904 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
1905 .expect_hci_param = stop_discovery_valid_hci,
1906 .expect_hci_len = sizeof(stop_discovery_valid_hci),
1907 .expect_alt_ev = MGMT_EV_DISCOVERING,
1908 .expect_alt_ev_param = stop_discovery_evt,
1909 .expect_alt_ev_len = sizeof(stop_discovery_evt),
1912 static const struct generic_data stop_discovery_bredr_success_test_1 = {
1913 .setup_settings = settings_powered,
1914 .setup_send_opcode = MGMT_OP_START_DISCOVERY,
1915 .setup_send_param = start_discovery_bredr_param,
1916 .setup_send_len = sizeof(start_discovery_bredr_param),
1917 .send_opcode = MGMT_OP_STOP_DISCOVERY,
1918 .send_param = stop_discovery_bredr_param,
1919 .send_len = sizeof(stop_discovery_bredr_param),
1920 .expect_status = MGMT_STATUS_SUCCESS,
1921 .expect_param = stop_discovery_bredr_param,
1922 .expect_len = sizeof(stop_discovery_bredr_param),
1923 .expect_hci_command = BT_HCI_CMD_INQUIRY_CANCEL,
1924 .expect_alt_ev = MGMT_EV_DISCOVERING,
1925 .expect_alt_ev_param = stop_discovery_bredr_discovering,
1926 .expect_alt_ev_len = sizeof(stop_discovery_bredr_discovering),
1929 static const struct generic_data stop_discovery_rejected_test_1 = {
1930 .setup_settings = settings_powered_le,
1931 .send_opcode = MGMT_OP_STOP_DISCOVERY,
1932 .send_param = stop_discovery_bredrle_param,
1933 .send_len = sizeof(stop_discovery_bredrle_param),
1934 .expect_status = MGMT_STATUS_REJECTED,
1935 .expect_param = stop_discovery_bredrle_param,
1936 .expect_len = sizeof(stop_discovery_bredrle_param),
1939 static const struct generic_data stop_discovery_invalid_param_test_1 = {
1940 .setup_settings = settings_powered_le,
1941 .setup_send_opcode = MGMT_OP_START_DISCOVERY,
1942 .setup_send_param = start_discovery_bredrle_param,
1943 .setup_send_len = sizeof(start_discovery_bredrle_param),
1944 .send_opcode = MGMT_OP_STOP_DISCOVERY,
1945 .send_param = stop_discovery_bredrle_invalid_param,
1946 .send_len = sizeof(stop_discovery_bredrle_invalid_param),
1947 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1948 .expect_param = stop_discovery_bredrle_invalid_param,
1949 .expect_len = sizeof(stop_discovery_bredrle_invalid_param),
1952 static const char start_service_discovery_invalid_param[] = { 0x00, 0x00, 0x00, 0x00 };
1953 static const char start_service_discovery_invalid_resp[] = { 0x00 };
1954 static const char start_service_discovery_bredr_param[] = { 0x01, 0x00, 0x00, 0x00};
1955 static const char start_service_discovery_bredr_resp[] = { 0x01 };
1956 static const char start_service_discovery_le_param[] = { 0x06, 0x00, 0x01, 0x00,
1957 0xfa, 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00,
1958 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 };
1959 static const char start_service_discovery_le_resp[] = { 0x06 };
1960 static const char start_service_discovery_bredrle_param[] = { 0x07, 0x00, 0x01, 0x00,
1961 0xfa, 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00,
1962 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 };
1963 static const char start_service_discovery_bredrle_resp[] = { 0x07 };
1964 static const char start_service_discovery_valid_hci[] = { 0x01, 0x01 };
1965 static const char start_service_discovery_evt[] = { 0x07, 0x01 };
1966 static const char start_service_discovery_le_evt[] = { 0x06, 0x01 };
1968 static const struct generic_data start_service_discovery_not_powered_test_1 = {
1969 .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
1970 .send_param = start_service_discovery_bredr_param,
1971 .send_len = sizeof(start_service_discovery_bredr_param),
1972 .expect_status = MGMT_STATUS_NOT_POWERED,
1973 .expect_param = start_service_discovery_bredr_resp,
1974 .expect_len = sizeof(start_service_discovery_bredr_resp),
1977 static const struct generic_data start_service_discovery_invalid_param_test_1 = {
1978 .setup_settings = settings_powered,
1979 .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
1980 .send_param = start_service_discovery_invalid_param,
1981 .send_len = sizeof(start_service_discovery_invalid_param),
1982 .expect_status = MGMT_STATUS_INVALID_PARAMS,
1983 .expect_param = start_service_discovery_invalid_resp,
1984 .expect_len = sizeof(start_service_discovery_invalid_resp),
1987 static const struct generic_data start_service_discovery_not_supported_test_1 = {
1988 .setup_settings = settings_powered,
1989 .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
1990 .send_param = start_service_discovery_le_param,
1991 .send_len = sizeof(start_service_discovery_le_param),
1992 .expect_status = MGMT_STATUS_REJECTED,
1993 .expect_param = start_service_discovery_le_resp,
1994 .expect_len = sizeof(start_service_discovery_le_resp),
1997 static const struct generic_data start_service_discovery_valid_param_test_1 = {
1998 .setup_settings = settings_powered_le,
1999 .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
2000 .send_param = start_service_discovery_bredrle_param,
2001 .send_len = sizeof(start_service_discovery_bredrle_param),
2002 .expect_status = MGMT_STATUS_SUCCESS,
2003 .expect_param = start_service_discovery_bredrle_resp,
2004 .expect_len = sizeof(start_service_discovery_bredrle_resp),
2005 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
2006 .expect_hci_param = start_service_discovery_valid_hci,
2007 .expect_hci_len = sizeof(start_service_discovery_valid_hci),
2008 .expect_alt_ev = MGMT_EV_DISCOVERING,
2009 .expect_alt_ev_param = start_service_discovery_evt,
2010 .expect_alt_ev_len = sizeof(start_service_discovery_evt),
2013 static const struct generic_data start_service_discovery_valid_param_test_2 = {
2014 .setup_settings = settings_powered,
2015 .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
2016 .send_param = start_service_discovery_le_param,
2017 .send_len = sizeof(start_service_discovery_le_param),
2018 .expect_status = MGMT_STATUS_SUCCESS,
2019 .expect_param = start_service_discovery_le_resp,
2020 .expect_len = sizeof(start_service_discovery_le_resp),
2021 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
2022 .expect_hci_param = start_service_discovery_valid_hci,
2023 .expect_hci_len = sizeof(start_service_discovery_valid_hci),
2024 .expect_alt_ev = MGMT_EV_DISCOVERING,
2025 .expect_alt_ev_param = start_service_discovery_le_evt,
2026 .expect_alt_ev_len = sizeof(start_service_discovery_le_evt),
2029 static const char set_dev_class_valid_param[] = { 0x01, 0x0c };
2030 static const char set_dev_class_zero_rsp[] = { 0x00, 0x00, 0x00 };
2031 static const char set_dev_class_valid_rsp[] = { 0x0c, 0x01, 0x00 };
2032 static const char set_dev_class_valid_hci[] = { 0x0c, 0x01, 0x00 };
2033 static const char set_dev_class_invalid_param[] = { 0x01, 0x01 };
2035 static const struct generic_data set_dev_class_valid_param_test_1 = {
2036 .send_opcode = MGMT_OP_SET_DEV_CLASS,
2037 .send_param = set_dev_class_valid_param,
2038 .send_len = sizeof(set_dev_class_valid_param),
2039 .expect_status = MGMT_STATUS_SUCCESS,
2040 .expect_param = set_dev_class_zero_rsp,
2041 .expect_len = sizeof(set_dev_class_zero_rsp),
2044 static const struct generic_data set_dev_class_valid_param_test_2 = {
2045 .setup_settings = settings_powered,
2046 .send_opcode = MGMT_OP_SET_DEV_CLASS,
2047 .send_param = set_dev_class_valid_param,
2048 .send_len = sizeof(set_dev_class_valid_param),
2049 .expect_status = MGMT_STATUS_SUCCESS,
2050 .expect_param = set_dev_class_valid_rsp,
2051 .expect_len = sizeof(set_dev_class_valid_rsp),
2052 .expect_alt_ev = MGMT_EV_CLASS_OF_DEV_CHANGED,
2053 .expect_alt_ev_param = set_dev_class_valid_rsp,
2054 .expect_alt_ev_len = sizeof(set_dev_class_valid_rsp),
2055 .expect_hci_command = BT_HCI_CMD_WRITE_CLASS_OF_DEV,
2056 .expect_hci_param = set_dev_class_valid_hci,
2057 .expect_hci_len = sizeof(set_dev_class_valid_hci),
2060 static const struct generic_data set_dev_class_invalid_param_test_1 = {
2061 .send_opcode = MGMT_OP_SET_DEV_CLASS,
2062 .send_param = set_dev_class_invalid_param,
2063 .send_len = sizeof(set_dev_class_invalid_param),
2064 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2067 static const char add_spp_uuid_param[] = {
2068 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2069 0x00, 0x10, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00,
2071 static const char add_dun_uuid_param[] = {
2072 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2073 0x00, 0x10, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00,
2075 static const char add_sync_uuid_param[] = {
2076 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2077 0x00, 0x10, 0x00, 0x00, 0x04, 0x11, 0x00, 0x00,
2079 static const char add_opp_uuid_param[] = {
2080 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2081 0x00, 0x10, 0x00, 0x00, 0x05, 0x11, 0x00, 0x00,
2083 static const char write_eir_uuid16_hci[241] = { 0x00,
2084 0x02, 0x0a, 0x00, 0x03, 0x03, 0x01, 0x11 };
2085 static const char write_eir_multi_uuid16_hci_1[241] = { 0x00,
2086 0x02, 0x0a, 0x00, 0x09, 0x03, 0x01, 0x11, 0x03,
2087 0x11, 0x04, 0x11, 0x05, 0x11 };
2088 static const char write_eir_multi_uuid16_hci_2[241] = { 0x00,
2089 0x02, 0x0a, 0x00, 0xeb, 0x02, 0x00, 0x20, 0x01,
2090 0x20, 0x02, 0x20, 0x03, 0x20, 0x04, 0x20, 0x05,
2091 0x20, 0x06, 0x20, 0x07, 0x20, 0x08, 0x20, 0x09,
2092 0x20, 0x0a, 0x20, 0x0b, 0x20, 0x0c, 0x20, 0x0d,
2093 0x20, 0x0e, 0x20, 0x0f, 0x20, 0x10, 0x20, 0x11,
2094 0x20, 0x12, 0x20, 0x13, 0x20, 0x14, 0x20, 0x15,
2095 0x20, 0x16, 0x20, 0x17, 0x20, 0x18, 0x20, 0x19,
2096 0x20, 0x1a, 0x20, 0x1b, 0x20, 0x1c, 0x20, 0x1d,
2097 0x20, 0x1e, 0x20, 0x1f, 0x20, 0x20, 0x20, 0x21,
2098 0x20, 0x22, 0x20, 0x23, 0x20, 0x24, 0x20, 0x25,
2099 0x20, 0x26, 0x20, 0x27, 0x20, 0x28, 0x20, 0x29,
2100 0x20, 0x2a, 0x20, 0x2b, 0x20, 0x2c, 0x20, 0x2d,
2101 0x20, 0x2e, 0x20, 0x2f, 0x20, 0x30, 0x20, 0x31,
2102 0x20, 0x32, 0x20, 0x33, 0x20, 0x34, 0x20, 0x35,
2103 0x20, 0x36, 0x20, 0x37, 0x20, 0x38, 0x20, 0x39,
2104 0x20, 0x3a, 0x20, 0x3b, 0x20, 0x3c, 0x20, 0x3d,
2105 0x20, 0x3e, 0x20, 0x3f, 0x20, 0x40, 0x20, 0x41,
2106 0x20, 0x42, 0x20, 0x43, 0x20, 0x44, 0x20, 0x45,
2107 0x20, 0x46, 0x20, 0x47, 0x20, 0x48, 0x20, 0x49,
2108 0x20, 0x4a, 0x20, 0x4b, 0x20, 0x4c, 0x20, 0x4d,
2109 0x20, 0x4e, 0x20, 0x4f, 0x20, 0x50, 0x20, 0x51,
2110 0x20, 0x52, 0x20, 0x53, 0x20, 0x54, 0x20, 0x55,
2111 0x20, 0x56, 0x20, 0x57, 0x20, 0x58, 0x20, 0x59,
2112 0x20, 0x5a, 0x20, 0x5b, 0x20, 0x5c, 0x20, 0x5d,
2113 0x20, 0x5e, 0x20, 0x5f, 0x20, 0x60, 0x20, 0x61,
2114 0x20, 0x62, 0x20, 0x63, 0x20, 0x64, 0x20, 0x65,
2115 0x20, 0x66, 0x20, 0x67, 0x20, 0x68, 0x20, 0x69,
2116 0x20, 0x6a, 0x20, 0x6b, 0x20, 0x6c, 0x20, 0x6d,
2117 0x20, 0x6e, 0x20, 0x6f, 0x20, 0x70, 0x20, 0x71,
2118 0x20, 0x72, 0x20, 0x73, 0x20, 0x74, 0x20, 0x00 };
2119 static const char add_uuid32_param_1[] = {
2120 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2121 0x00, 0x10, 0x00, 0x00, 0x78, 0x56, 0x34, 0x12,
2123 static const char add_uuid32_param_2[] = {
2124 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2125 0x00, 0x10, 0x00, 0x00, 0xef, 0xcd, 0xbc, 0x9a,
2127 static const char add_uuid32_param_3[] = {
2128 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2129 0x00, 0x10, 0x00, 0x00, 0xff, 0xee, 0xdd, 0xcc,
2131 static const char add_uuid32_param_4[] = {
2132 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2133 0x00, 0x10, 0x00, 0x00, 0x11, 0x22, 0x33, 0x44,
2135 static const char write_eir_uuid32_hci[241] = { 0x00,
2136 0x02, 0x0a, 0x00, 0x05, 0x05, 0x78, 0x56, 0x34,
2138 static const char write_eir_uuid32_multi_hci[241] = { 0x00,
2139 0x02, 0x0a, 0x00, 0x11, 0x05, 0x78, 0x56, 0x34,
2140 0x12, 0xef, 0xcd, 0xbc, 0x9a, 0xff, 0xee, 0xdd,
2141 0xcc, 0x11, 0x22, 0x33, 0x44 };
2142 static const char write_eir_uuid32_multi_hci_2[] = { 0x00,
2143 0x02, 0x0a, 0x00, 0xe9, 0x04, 0xff, 0xff, 0xff,
2144 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
2145 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
2146 0xff, 0xfa, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
2147 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
2148 0xff, 0xf6, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff,
2149 0xff, 0xf4, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
2150 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff,
2151 0xff, 0xf0, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
2152 0xff, 0xee, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff,
2153 0xff, 0xec, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff,
2154 0xff, 0xea, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff,
2155 0xff, 0xe8, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff,
2156 0xff, 0xe6, 0xff, 0xff, 0xff, 0xe5, 0xff, 0xff,
2157 0xff, 0xe4, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff,
2158 0xff, 0xe2, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff,
2159 0xff, 0xe0, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
2160 0xff, 0xde, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff,
2161 0xff, 0xdc, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff,
2162 0xff, 0xda, 0xff, 0xff, 0xff, 0xd9, 0xff, 0xff,
2163 0xff, 0xd8, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xff,
2164 0xff, 0xd6, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xff,
2165 0xff, 0xd4, 0xff, 0xff, 0xff, 0xd3, 0xff, 0xff,
2166 0xff, 0xd2, 0xff, 0xff, 0xff, 0xd1, 0xff, 0xff,
2167 0xff, 0xd0, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff,
2168 0xff, 0xce, 0xff, 0xff, 0xff, 0xcd, 0xff, 0xff,
2169 0xff, 0xcc, 0xff, 0xff, 0xff, 0xcb, 0xff, 0xff,
2170 0xff, 0xca, 0xff, 0xff, 0xff, 0xc9, 0xff, 0xff,
2171 0xff, 0xc8, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff,
2172 0xff, 0xc6, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 };
2173 static const char add_uuid128_param_1[] = {
2174 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2175 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
2177 static const char add_uuid128_param_2[] = {
2178 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88,
2179 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00,
2181 static const char write_eir_uuid128_hci[241] = { 0x00,
2182 0x02, 0x0a, 0x00, 0x11, 0x07, 0x00, 0x11, 0x22,
2183 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa,
2184 0xbb, 0xcc, 0xdd, 0xee, 0xff };
2185 static const char write_eir_uuid128_multi_hci[241] = { 0x00,
2186 0x02, 0x0a, 0x00, 0x21, 0x07, 0x00, 0x11, 0x22,
2187 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa,
2188 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xff, 0xee, 0xdd,
2189 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55,
2190 0x44, 0x33, 0x22, 0x11 };
2191 static const char write_eir_uuid128_multi_hci_2[] = { 0x00,
2192 0x02, 0x0a, 0x00, 0xe1, 0x07, 0x11, 0x22, 0x33,
2193 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2194 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33,
2195 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2196 0xcc, 0xdd, 0xee, 0xff, 0x01, 0x11, 0x22, 0x33,
2197 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2198 0xcc, 0xdd, 0xee, 0xff, 0x02, 0x11, 0x22, 0x33,
2199 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2200 0xcc, 0xdd, 0xee, 0xff, 0x03, 0x11, 0x22, 0x33,
2201 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2202 0xcc, 0xdd, 0xee, 0xff, 0x04, 0x11, 0x22, 0x33,
2203 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2204 0xcc, 0xdd, 0xee, 0xff, 0x05, 0x11, 0x22, 0x33,
2205 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2206 0xcc, 0xdd, 0xee, 0xff, 0x06, 0x11, 0x22, 0x33,
2207 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2208 0xcc, 0xdd, 0xee, 0xff, 0x07, 0x11, 0x22, 0x33,
2209 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2210 0xcc, 0xdd, 0xee, 0xff, 0x08, 0x11, 0x22, 0x33,
2211 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2212 0xcc, 0xdd, 0xee, 0xff, 0x09, 0x11, 0x22, 0x33,
2213 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2214 0xcc, 0xdd, 0xee, 0xff, 0x0a, 0x11, 0x22, 0x33,
2215 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2216 0xcc, 0xdd, 0xee, 0xff, 0x0b, 0x11, 0x22, 0x33,
2217 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
2218 0xcc, 0xdd, 0xee, 0xff, 0x0c, 0xff, 0xee, 0xdd,
2219 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55,
2220 0x44, 0x33, 0x22, 0x11, 0x00, 0x00, 0x00, 0x00,
2221 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
2222 static const char write_eir_uuid_mix_hci[241] = { 0x00,
2223 0x02, 0x0a, 0x00, 0x05, 0x03, 0x01, 0x11, 0x03,
2224 0x11, 0x09, 0x05, 0x78, 0x56, 0x34, 0x12, 0xef,
2225 0xcd, 0xbc, 0x9a, 0x21, 0x07, 0x00, 0x11, 0x22,
2226 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa,
2227 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xff, 0xee, 0xdd,
2228 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55,
2229 0x44, 0x33, 0x22, 0x11 };
2231 static const struct generic_data add_uuid16_test_1 = {
2232 .setup_settings = settings_powered_ssp,
2233 .send_opcode = MGMT_OP_ADD_UUID,
2234 .send_param = add_spp_uuid_param,
2235 .send_len = sizeof(add_spp_uuid_param),
2236 .expect_status = MGMT_STATUS_SUCCESS,
2237 .expect_param = set_dev_class_zero_rsp,
2238 .expect_len = sizeof(set_dev_class_zero_rsp),
2239 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2240 .expect_hci_param = write_eir_uuid16_hci,
2241 .expect_hci_len = sizeof(write_eir_uuid16_hci),
2244 static const struct generic_data add_multi_uuid16_test_1 = {
2245 .send_opcode = MGMT_OP_ADD_UUID,
2246 .send_param = add_opp_uuid_param,
2247 .send_len = sizeof(add_opp_uuid_param),
2248 .expect_status = MGMT_STATUS_SUCCESS,
2249 .expect_param = set_dev_class_zero_rsp,
2250 .expect_len = sizeof(set_dev_class_zero_rsp),
2251 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2252 .expect_hci_param = write_eir_multi_uuid16_hci_1,
2253 .expect_hci_len = sizeof(write_eir_multi_uuid16_hci_1),
2256 static const struct generic_data add_multi_uuid16_test_2 = {
2257 .send_opcode = MGMT_OP_ADD_UUID,
2258 .send_param = add_opp_uuid_param,
2259 .send_len = sizeof(add_opp_uuid_param),
2260 .expect_status = MGMT_STATUS_SUCCESS,
2261 .expect_param = set_dev_class_zero_rsp,
2262 .expect_len = sizeof(set_dev_class_zero_rsp),
2263 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2264 .expect_hci_param = write_eir_multi_uuid16_hci_2,
2265 .expect_hci_len = sizeof(write_eir_multi_uuid16_hci_2),
2268 static const struct generic_data add_uuid32_test_1 = {
2269 .setup_settings = settings_powered_ssp,
2270 .send_opcode = MGMT_OP_ADD_UUID,
2271 .send_param = add_uuid32_param_1,
2272 .send_len = sizeof(add_uuid32_param_1),
2273 .expect_status = MGMT_STATUS_SUCCESS,
2274 .expect_param = set_dev_class_zero_rsp,
2275 .expect_len = sizeof(set_dev_class_zero_rsp),
2276 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2277 .expect_hci_param = write_eir_uuid32_hci,
2278 .expect_hci_len = sizeof(write_eir_uuid32_hci),
2281 static const struct generic_data add_uuid32_multi_test_1 = {
2282 .send_opcode = MGMT_OP_ADD_UUID,
2283 .send_param = add_uuid32_param_4,
2284 .send_len = sizeof(add_uuid32_param_4),
2285 .expect_status = MGMT_STATUS_SUCCESS,
2286 .expect_param = set_dev_class_zero_rsp,
2287 .expect_len = sizeof(set_dev_class_zero_rsp),
2288 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2289 .expect_hci_param = write_eir_uuid32_multi_hci,
2290 .expect_hci_len = sizeof(write_eir_uuid32_multi_hci),
2293 static const struct generic_data add_uuid32_multi_test_2 = {
2294 .send_opcode = MGMT_OP_ADD_UUID,
2295 .send_param = add_uuid32_param_4,
2296 .send_len = sizeof(add_uuid32_param_4),
2297 .expect_status = MGMT_STATUS_SUCCESS,
2298 .expect_param = set_dev_class_zero_rsp,
2299 .expect_len = sizeof(set_dev_class_zero_rsp),
2300 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2301 .expect_hci_param = write_eir_uuid32_multi_hci_2,
2302 .expect_hci_len = sizeof(write_eir_uuid32_multi_hci_2),
2305 static const struct generic_data add_uuid128_test_1 = {
2306 .setup_settings = settings_powered_ssp,
2307 .send_opcode = MGMT_OP_ADD_UUID,
2308 .send_param = add_uuid128_param_1,
2309 .send_len = sizeof(add_uuid128_param_1),
2310 .expect_status = MGMT_STATUS_SUCCESS,
2311 .expect_param = set_dev_class_zero_rsp,
2312 .expect_len = sizeof(set_dev_class_zero_rsp),
2313 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2314 .expect_hci_param = write_eir_uuid128_hci,
2315 .expect_hci_len = sizeof(write_eir_uuid128_hci),
2318 static const struct generic_data add_uuid128_multi_test_1 = {
2319 .send_opcode = MGMT_OP_ADD_UUID,
2320 .send_param = add_uuid128_param_2,
2321 .send_len = sizeof(add_uuid32_param_2),
2322 .expect_status = MGMT_STATUS_SUCCESS,
2323 .expect_param = set_dev_class_zero_rsp,
2324 .expect_len = sizeof(set_dev_class_zero_rsp),
2325 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2326 .expect_hci_param = write_eir_uuid128_multi_hci,
2327 .expect_hci_len = sizeof(write_eir_uuid128_multi_hci),
2330 static const struct generic_data add_uuid128_multi_test_2 = {
2331 .send_opcode = MGMT_OP_ADD_UUID,
2332 .send_param = add_uuid128_param_2,
2333 .send_len = sizeof(add_uuid128_param_2),
2334 .expect_status = MGMT_STATUS_SUCCESS,
2335 .expect_param = set_dev_class_zero_rsp,
2336 .expect_len = sizeof(set_dev_class_zero_rsp),
2337 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2338 .expect_hci_param = write_eir_uuid128_multi_hci_2,
2339 .expect_hci_len = sizeof(write_eir_uuid128_multi_hci_2),
2342 static const struct generic_data add_uuid_mix_test_1 = {
2343 .send_opcode = MGMT_OP_ADD_UUID,
2344 .send_param = add_uuid128_param_2,
2345 .send_len = sizeof(add_uuid128_param_2),
2346 .expect_status = MGMT_STATUS_SUCCESS,
2347 .expect_param = set_dev_class_zero_rsp,
2348 .expect_len = sizeof(set_dev_class_zero_rsp),
2349 .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
2350 .expect_hci_param = write_eir_uuid_mix_hci,
2351 .expect_hci_len = sizeof(write_eir_uuid_mix_hci),
2354 static const char load_link_keys_valid_param_1[] = { 0x00, 0x00, 0x00 };
2355 static const char load_link_keys_valid_param_2[] = { 0x01, 0x00, 0x00 };
2356 static const char load_link_keys_invalid_param_1[] = { 0x02, 0x00, 0x00 };
2357 static const char load_link_keys_invalid_param_2[] = { 0x00, 0x01, 0x00 };
2358 /* Invalid bdaddr type */
2359 static const char load_link_keys_invalid_param_3[] = { 0x00, 0x01, 0x00,
2360 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* addr */
2361 0x01, /* addr type */
2362 0x00, /* key type */
2363 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2364 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2365 0x04, /* PIN length */
2368 static const struct generic_data load_link_keys_success_test_1 = {
2369 .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
2370 .send_param = load_link_keys_valid_param_1,
2371 .send_len = sizeof(load_link_keys_valid_param_1),
2372 .expect_status = MGMT_STATUS_SUCCESS,
2375 static const struct generic_data load_link_keys_success_test_2 = {
2376 .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
2377 .send_param = load_link_keys_valid_param_2,
2378 .send_len = sizeof(load_link_keys_valid_param_2),
2379 .expect_status = MGMT_STATUS_SUCCESS,
2382 static const struct generic_data load_link_keys_invalid_params_test_1 = {
2383 .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
2384 .send_param = load_link_keys_invalid_param_1,
2385 .send_len = sizeof(load_link_keys_invalid_param_1),
2386 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2389 static const struct generic_data load_link_keys_invalid_params_test_2 = {
2390 .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
2391 .send_param = load_link_keys_invalid_param_2,
2392 .send_len = sizeof(load_link_keys_invalid_param_2),
2393 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2396 static const struct generic_data load_link_keys_invalid_params_test_3 = {
2397 .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
2398 .send_param = load_link_keys_invalid_param_3,
2399 .send_len = sizeof(load_link_keys_invalid_param_3),
2400 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2403 static const char load_ltks_valid_param_1[] = { 0x00, 0x00 };
2404 /* Invalid key count */
2405 static const char load_ltks_invalid_param_1[] = { 0x01, 0x00 };
2406 /* Invalid addr type */
2407 static const char load_ltks_invalid_param_2[] = {
2408 0x01, 0x00, /* count */
2409 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2410 0x00, /* addr type */
2411 0x00, /* authenticated */
2413 0x00, /* encryption size */
2414 0x00, 0x00, /* diversifier */
2415 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2416 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2417 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2419 /* Invalid master value */
2420 static const char load_ltks_invalid_param_3[] = {
2421 0x01, 0x00, /* count */
2422 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
2423 0x01, /* addr type */
2424 0x00, /* authenticated */
2426 0x00, /* encryption size */
2427 0x00, 0x00, /* diversifier */
2428 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
2429 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
2430 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
2433 static const struct generic_data load_ltks_success_test_1 = {
2434 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2435 .send_param = load_ltks_valid_param_1,
2436 .send_len = sizeof(load_ltks_valid_param_1),
2437 .expect_status = MGMT_STATUS_SUCCESS,
2440 static const struct generic_data load_ltks_invalid_params_test_1 = {
2441 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2442 .send_param = load_ltks_invalid_param_1,
2443 .send_len = sizeof(load_ltks_invalid_param_1),
2444 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2447 static const struct generic_data load_ltks_invalid_params_test_2 = {
2448 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2449 .send_param = load_ltks_invalid_param_2,
2450 .send_len = sizeof(load_ltks_invalid_param_2),
2451 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2454 static const struct generic_data load_ltks_invalid_params_test_3 = {
2455 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2456 .send_param = load_ltks_invalid_param_3,
2457 .send_len = sizeof(load_ltks_invalid_param_3),
2458 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2461 static const char load_ltks_invalid_param_4[22] = { 0x1d, 0x07 };
2462 static const struct generic_data load_ltks_invalid_params_test_4 = {
2463 .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
2464 .send_param = load_ltks_invalid_param_4,
2465 .send_len = sizeof(load_ltks_invalid_param_4),
2466 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2469 static const char set_io_cap_invalid_param_1[] = { 0xff };
2471 static const struct generic_data set_io_cap_invalid_param_test_1 = {
2472 .send_opcode = MGMT_OP_SET_IO_CAPABILITY,
2473 .send_param = set_io_cap_invalid_param_1,
2474 .send_len = sizeof(set_io_cap_invalid_param_1),
2475 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2478 static const char pair_device_param[] = {
2479 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x00 };
2480 static const char pair_device_rsp[] = {
2481 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
2482 static const char pair_device_invalid_param_1[] = {
2483 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff, 0x00 };
2484 static const char pair_device_invalid_param_rsp_1[] = {
2485 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
2486 static const char pair_device_invalid_param_2[] = {
2487 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x05 };
2488 static const char pair_device_invalid_param_rsp_2[] = {
2489 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
2491 static const struct generic_data pair_device_not_powered_test_1 = {
2492 .send_opcode = MGMT_OP_PAIR_DEVICE,
2493 .send_param = pair_device_param,
2494 .send_len = sizeof(pair_device_param),
2495 .expect_status = MGMT_STATUS_NOT_POWERED,
2496 .expect_param = pair_device_rsp,
2497 .expect_len = sizeof(pair_device_rsp),
2500 static const struct generic_data pair_device_invalid_param_test_1 = {
2501 .send_opcode = MGMT_OP_PAIR_DEVICE,
2502 .send_param = pair_device_invalid_param_1,
2503 .send_len = sizeof(pair_device_invalid_param_1),
2504 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2505 .expect_param = pair_device_invalid_param_rsp_1,
2506 .expect_len = sizeof(pair_device_invalid_param_rsp_1),
2509 static const struct generic_data pair_device_invalid_param_test_2 = {
2510 .send_opcode = MGMT_OP_PAIR_DEVICE,
2511 .send_param = pair_device_invalid_param_2,
2512 .send_len = sizeof(pair_device_invalid_param_2),
2513 .expect_status = MGMT_STATUS_INVALID_PARAMS,
2514 .expect_param = pair_device_invalid_param_rsp_2,
2515 .expect_len = sizeof(pair_device_invalid_param_rsp_2),
2518 static const void *pair_device_send_param_func(uint16_t *len)
2520 struct test_data *data = tester_get_data();
2521 const struct generic_data *test = data->test_data;
2522 static uint8_t param[8];
2524 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
2526 if (test->addr_type_avail)
2527 param[6] = test->addr_type;
2528 else if (data->hciemu_type == HCIEMU_TYPE_LE)
2529 param[6] = 0x01; /* Address type */
2531 param[6] = 0x00; /* Address type */
2532 param[7] = test->io_cap;
2534 *len = sizeof(param);
2539 static const void *pair_device_expect_param_func(uint16_t *len)
2541 struct test_data *data = tester_get_data();
2542 const struct generic_data *test = data->test_data;
2543 static uint8_t param[7];
2545 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
2547 if (test->addr_type_avail)
2548 param[6] = test->addr_type;
2549 else if (data->hciemu_type == HCIEMU_TYPE_LE)
2550 param[6] = 0x01; /* Address type */
2552 param[6] = 0x00; /* Address type */
2554 *len = sizeof(param);
2559 static uint16_t settings_powered_bondable[] = { MGMT_OP_SET_BONDABLE,
2560 MGMT_OP_SET_POWERED, 0 };
2561 static uint8_t auth_req_param[] = { 0x2a, 0x00 };
2562 static uint8_t pair_device_pin[] = { 0x30, 0x30, 0x30, 0x30 }; /* "0000" */
2564 static const struct generic_data pair_device_success_test_1 = {
2565 .setup_settings = settings_powered_bondable,
2566 .send_opcode = MGMT_OP_PAIR_DEVICE,
2567 .send_func = pair_device_send_param_func,
2568 .expect_status = MGMT_STATUS_SUCCESS,
2569 .expect_func = pair_device_expect_param_func,
2570 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
2571 .expect_alt_ev_len = 26,
2572 .expect_hci_command = BT_HCI_CMD_AUTH_REQUESTED,
2573 .expect_hci_param = auth_req_param,
2574 .expect_hci_len = sizeof(auth_req_param),
2575 .pin = pair_device_pin,
2576 .pin_len = sizeof(pair_device_pin),
2577 .client_pin = pair_device_pin,
2578 .client_pin_len = sizeof(pair_device_pin),
2581 static uint16_t settings_powered_bondable_linksec[] = { MGMT_OP_SET_BONDABLE,
2582 MGMT_OP_SET_POWERED,
2583 MGMT_OP_SET_LINK_SECURITY,
2586 static const struct generic_data pair_device_success_test_2 = {
2587 .setup_settings = settings_powered_bondable_linksec,
2588 .send_opcode = MGMT_OP_PAIR_DEVICE,
2589 .send_func = pair_device_send_param_func,
2590 .expect_status = MGMT_STATUS_SUCCESS,
2591 .expect_func = pair_device_expect_param_func,
2592 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
2593 .expect_alt_ev_len = 26,
2594 .expect_hci_command = BT_HCI_CMD_AUTH_REQUESTED,
2595 .expect_hci_param = auth_req_param,
2596 .expect_hci_len = sizeof(auth_req_param),
2597 .pin = pair_device_pin,
2598 .pin_len = sizeof(pair_device_pin),
2599 .client_pin = pair_device_pin,
2600 .client_pin_len = sizeof(pair_device_pin),
2603 static const struct generic_data pair_device_legacy_nonbondable_1 = {
2604 .setup_settings = settings_powered,
2605 .send_opcode = MGMT_OP_PAIR_DEVICE,
2606 .send_func = pair_device_send_param_func,
2607 .expect_status = MGMT_STATUS_SUCCESS,
2608 .expect_func = pair_device_expect_param_func,
2609 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
2610 .expect_alt_ev_len = 26,
2611 .pin = pair_device_pin,
2612 .pin_len = sizeof(pair_device_pin),
2613 .client_pin = pair_device_pin,
2614 .client_pin_len = sizeof(pair_device_pin),
2617 static const struct generic_data pair_device_power_off_test_1 = {
2618 .setup_settings = settings_powered_bondable,
2619 .send_opcode = MGMT_OP_PAIR_DEVICE,
2620 .send_func = pair_device_send_param_func,
2621 .force_power_off = true,
2622 .expect_status = MGMT_STATUS_NOT_POWERED,
2623 .expect_func = pair_device_expect_param_func,
2626 static const void *client_bdaddr_param_func(uint8_t *len)
2628 struct test_data *data = tester_get_data();
2629 static uint8_t bdaddr[6];
2631 memcpy(bdaddr, hciemu_get_client_bdaddr(data->hciemu), 6);
2633 *len = sizeof(bdaddr);
2638 static const struct generic_data pair_device_not_supported_test_1 = {
2639 .setup_settings = settings_powered_bondable,
2640 .send_opcode = MGMT_OP_PAIR_DEVICE,
2641 .send_func = pair_device_send_param_func,
2642 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
2643 .expect_func = pair_device_expect_param_func,
2644 .addr_type_avail = true,
2645 .addr_type = BDADDR_BREDR,
2648 static const struct generic_data pair_device_not_supported_test_2 = {
2649 .setup_settings = settings_powered_bondable,
2650 .send_opcode = MGMT_OP_PAIR_DEVICE,
2651 .send_func = pair_device_send_param_func,
2652 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
2653 .expect_func = pair_device_expect_param_func,
2654 .addr_type_avail = true,
2655 .addr_type = BDADDR_LE_PUBLIC,
2658 static uint16_t settings_powered_bondable_le[] = { MGMT_OP_SET_LE,
2659 MGMT_OP_SET_BONDABLE,
2660 MGMT_OP_SET_POWERED,
2663 static const struct generic_data pair_device_reject_transport_not_enabled_1 = {
2664 .setup_settings = settings_powered_bondable_le,
2665 .setup_nobredr = true,
2666 .send_opcode = MGMT_OP_PAIR_DEVICE,
2667 .send_func = pair_device_send_param_func,
2668 .expect_status = MGMT_STATUS_REJECTED,
2669 .expect_func = pair_device_expect_param_func,
2670 .addr_type_avail = true,
2671 .addr_type = BDADDR_BREDR,
2674 static const struct generic_data pair_device_reject_transport_not_enabled_2 = {
2675 .setup_settings = settings_powered_bondable,
2676 .send_opcode = MGMT_OP_PAIR_DEVICE,
2677 .send_func = pair_device_send_param_func,
2678 .expect_status = MGMT_STATUS_REJECTED,
2679 .expect_func = pair_device_expect_param_func,
2680 .addr_type_avail = true,
2681 .addr_type = BDADDR_LE_PUBLIC,
2684 static const struct generic_data pair_device_reject_test_1 = {
2685 .setup_settings = settings_powered_bondable,
2686 .send_opcode = MGMT_OP_PAIR_DEVICE,
2687 .send_func = pair_device_send_param_func,
2688 .expect_status = MGMT_STATUS_AUTH_FAILED,
2689 .expect_func = pair_device_expect_param_func,
2690 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
2691 .expect_alt_ev_len = 8,
2692 .expect_hci_command = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY,
2693 .expect_hci_func = client_bdaddr_param_func,
2695 .client_pin = pair_device_pin,
2696 .client_pin_len = sizeof(pair_device_pin),
2699 static const struct generic_data pair_device_reject_test_2 = {
2700 .setup_settings = settings_powered_bondable,
2701 .send_opcode = MGMT_OP_PAIR_DEVICE,
2702 .send_func = pair_device_send_param_func,
2703 .expect_status = MGMT_STATUS_AUTH_FAILED,
2704 .expect_func = pair_device_expect_param_func,
2705 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
2706 .expect_alt_ev_len = 8,
2707 .expect_hci_command = BT_HCI_CMD_AUTH_REQUESTED,
2708 .expect_hci_param = auth_req_param,
2709 .expect_hci_len = sizeof(auth_req_param),
2710 .pin = pair_device_pin,
2711 .pin_len = sizeof(pair_device_pin),
2714 static const struct generic_data pair_device_reject_test_3 = {
2715 .setup_settings = settings_powered_bondable_linksec,
2716 .send_opcode = MGMT_OP_PAIR_DEVICE,
2717 .send_func = pair_device_send_param_func,
2718 .expect_status = MGMT_STATUS_AUTH_FAILED,
2719 .expect_func = pair_device_expect_param_func,
2720 .expect_hci_command = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY,
2721 .expect_hci_func = client_bdaddr_param_func,
2723 .client_pin = pair_device_pin,
2724 .client_pin_len = sizeof(pair_device_pin),
2727 static const struct generic_data pair_device_reject_test_4 = {
2728 .setup_settings = settings_powered_bondable_linksec,
2729 .send_opcode = MGMT_OP_PAIR_DEVICE,
2730 .send_func = pair_device_send_param_func,
2731 .expect_status = MGMT_STATUS_AUTH_FAILED,
2732 .expect_func = pair_device_expect_param_func,
2733 .pin = pair_device_pin,
2734 .pin_len = sizeof(pair_device_pin),
2737 static uint16_t settings_powered_bondable_ssp[] = { MGMT_OP_SET_BONDABLE,
2739 MGMT_OP_SET_POWERED,
2742 static const struct generic_data pair_device_ssp_test_1 = {
2743 .setup_settings = settings_powered_bondable_ssp,
2744 .client_enable_ssp = true,
2745 .send_opcode = MGMT_OP_PAIR_DEVICE,
2746 .send_func = pair_device_send_param_func,
2747 .expect_status = MGMT_STATUS_SUCCESS,
2748 .expect_func = pair_device_expect_param_func,
2749 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
2750 .expect_alt_ev_len = 26,
2751 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
2752 .expect_hci_func = client_bdaddr_param_func,
2753 .io_cap = 0x03, /* NoInputNoOutput */
2754 .client_io_cap = 0x03, /* NoInputNoOutput */
2757 static const void *client_io_cap_param_func(uint8_t *len)
2759 struct test_data *data = tester_get_data();
2760 const struct generic_data *test = data->test_data;
2761 static uint8_t param[9];
2763 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
2764 memcpy(¶m[6], test->expect_hci_param, 3);
2766 *len = sizeof(param);
2771 const uint8_t no_bonding_io_cap[] = { 0x03, 0x00, 0x00 };
2772 static const struct generic_data pair_device_ssp_test_2 = {
2773 .setup_settings = settings_powered_ssp,
2774 .client_enable_ssp = true,
2775 .send_opcode = MGMT_OP_PAIR_DEVICE,
2776 .send_func = pair_device_send_param_func,
2777 .expect_status = MGMT_STATUS_SUCCESS,
2778 .expect_func = pair_device_expect_param_func,
2779 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
2780 .expect_alt_ev_len = 26,
2781 .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
2782 .expect_hci_func = client_io_cap_param_func,
2783 .expect_hci_param = no_bonding_io_cap,
2784 .expect_hci_len = sizeof(no_bonding_io_cap),
2785 .io_cap = 0x03, /* NoInputNoOutput */
2786 .client_io_cap = 0x03, /* NoInputNoOutput */
2789 const uint8_t bonding_io_cap[] = { 0x03, 0x00, 0x02 };
2790 static const struct generic_data pair_device_ssp_test_3 = {
2791 .setup_settings = settings_powered_bondable_ssp,
2792 .client_enable_ssp = true,
2793 .send_opcode = MGMT_OP_PAIR_DEVICE,
2794 .send_func = pair_device_send_param_func,
2795 .expect_status = MGMT_STATUS_SUCCESS,
2796 .expect_func = pair_device_expect_param_func,
2797 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
2798 .expect_alt_ev_len = 26,
2799 .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
2800 .expect_hci_func = client_io_cap_param_func,
2801 .expect_hci_param = bonding_io_cap,
2802 .expect_hci_len = sizeof(bonding_io_cap),
2803 .io_cap = 0x03, /* NoInputNoOutput */
2804 .client_io_cap = 0x03, /* NoInputNoOutput */
2807 static const struct generic_data pair_device_ssp_test_4 = {
2808 .setup_settings = settings_powered_bondable_ssp,
2809 .client_enable_ssp = true,
2810 .send_opcode = MGMT_OP_PAIR_DEVICE,
2811 .send_func = pair_device_send_param_func,
2812 .expect_status = MGMT_STATUS_SUCCESS,
2813 .expect_func = pair_device_expect_param_func,
2814 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
2815 .expect_alt_ev_len = 26,
2816 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
2817 .expect_hci_func = client_bdaddr_param_func,
2818 .io_cap = 0x01, /* DisplayYesNo */
2819 .client_io_cap = 0x01, /* DisplayYesNo */
2822 const uint8_t mitm_no_bonding_io_cap[] = { 0x01, 0x00, 0x01 };
2823 static const struct generic_data pair_device_ssp_test_5 = {
2824 .setup_settings = settings_powered_ssp,
2825 .client_enable_ssp = true,
2826 .send_opcode = MGMT_OP_PAIR_DEVICE,
2827 .send_func = pair_device_send_param_func,
2828 .expect_status = MGMT_STATUS_SUCCESS,
2829 .expect_func = pair_device_expect_param_func,
2830 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
2831 .expect_alt_ev_len = 26,
2832 .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
2833 .expect_hci_func = client_io_cap_param_func,
2834 .expect_hci_param = mitm_no_bonding_io_cap,
2835 .expect_hci_len = sizeof(mitm_no_bonding_io_cap),
2836 .io_cap = 0x01, /* DisplayYesNo */
2837 .client_io_cap = 0x01, /* DisplayYesNo */
2840 const uint8_t mitm_bonding_io_cap[] = { 0x01, 0x00, 0x03 };
2841 static const struct generic_data pair_device_ssp_test_6 = {
2842 .setup_settings = settings_powered_bondable_ssp,
2843 .client_enable_ssp = true,
2844 .send_opcode = MGMT_OP_PAIR_DEVICE,
2845 .send_func = pair_device_send_param_func,
2846 .expect_status = MGMT_STATUS_SUCCESS,
2847 .expect_func = pair_device_expect_param_func,
2848 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
2849 .expect_alt_ev_len = 26,
2850 .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
2851 .expect_hci_func = client_io_cap_param_func,
2852 .expect_hci_param = mitm_bonding_io_cap,
2853 .expect_hci_len = sizeof(mitm_bonding_io_cap),
2854 .io_cap = 0x01, /* DisplayYesNo */
2855 .client_io_cap = 0x01, /* DisplayYesNo */
2858 static const struct generic_data pair_device_ssp_reject_1 = {
2859 .setup_settings = settings_powered_bondable_ssp,
2860 .client_enable_ssp = true,
2861 .send_opcode = MGMT_OP_PAIR_DEVICE,
2862 .send_func = pair_device_send_param_func,
2863 .expect_status = MGMT_STATUS_AUTH_FAILED,
2864 .expect_func = pair_device_expect_param_func,
2865 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
2866 .expect_alt_ev_len = 8,
2867 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_NEG_REPLY,
2868 .expect_hci_func = client_bdaddr_param_func,
2869 .io_cap = 0x01, /* DisplayYesNo */
2870 .client_io_cap = 0x01, /* DisplayYesNo */
2871 .client_auth_req = 0x01, /* No Bonding - MITM */
2872 .reject_confirm = true,
2875 static const struct generic_data pair_device_ssp_reject_2 = {
2876 .setup_settings = settings_powered_bondable_ssp,
2877 .client_enable_ssp = true,
2878 .send_opcode = MGMT_OP_PAIR_DEVICE,
2879 .send_func = pair_device_send_param_func,
2880 .expect_status = MGMT_STATUS_AUTH_FAILED,
2881 .expect_func = pair_device_expect_param_func,
2882 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
2883 .expect_alt_ev_len = 8,
2884 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
2885 .expect_hci_func = client_bdaddr_param_func,
2886 .io_cap = 0x01, /* DisplayYesNo */
2887 .client_io_cap = 0x01, /* DisplayYesNo */
2888 .client_reject_confirm = true,
2891 static const struct generic_data pair_device_ssp_nonbondable_1 = {
2892 .setup_settings = settings_powered_ssp,
2893 .client_enable_ssp = true,
2894 .send_opcode = MGMT_OP_PAIR_DEVICE,
2895 .send_func = pair_device_send_param_func,
2896 .expect_status = MGMT_STATUS_SUCCESS,
2897 .expect_func = pair_device_expect_param_func,
2898 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
2899 .expect_alt_ev_len = 26,
2900 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
2901 .expect_hci_func = client_bdaddr_param_func,
2902 .io_cap = 0x01, /* DisplayYesNo */
2903 .client_io_cap = 0x01, /* DisplayYesNo */
2906 static const struct generic_data pair_device_le_success_test_1 = {
2907 .setup_settings = settings_powered_bondable,
2908 .send_opcode = MGMT_OP_PAIR_DEVICE,
2909 .send_func = pair_device_send_param_func,
2911 .expect_status = MGMT_STATUS_SUCCESS,
2912 .expect_func = pair_device_expect_param_func,
2913 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
2914 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
2917 static bool ltk_is_authenticated(const struct mgmt_ltk_info *ltk)
2919 switch (ltk->type) {
2928 static bool ltk_is_sc(const struct mgmt_ltk_info *ltk)
2930 switch (ltk->type) {
2940 static bool verify_ltk(const void *param, uint16_t length)
2942 struct test_data *data = tester_get_data();
2943 const struct generic_data *test = data->test_data;
2944 const struct mgmt_ev_new_long_term_key *ev = param;
2946 if (length != sizeof(struct mgmt_ev_new_long_term_key)) {
2947 tester_warn("Invalid new ltk length %u != %zu", length,
2948 sizeof(struct mgmt_ev_new_long_term_key));
2952 if (test->just_works && ltk_is_authenticated(&ev->key)) {
2953 tester_warn("Authenticated key for just-works");
2957 if (!test->just_works && !ltk_is_authenticated(&ev->key)) {
2958 tester_warn("Unauthenticated key for MITM");
2962 if (test->expect_sc_key && !ltk_is_sc(&ev->key)) {
2963 tester_warn("Non-LE SC key for SC pairing");
2967 if (!test->expect_sc_key && ltk_is_sc(&ev->key)) {
2968 tester_warn("SC key for Non-SC pairing");
2975 static const struct generic_data pair_device_le_success_test_2 = {
2976 .setup_settings = settings_powered_bondable,
2977 .io_cap = 0x02, /* KeyboardOnly */
2978 .client_io_cap = 0x04, /* KeyboardDisplay */
2979 .send_opcode = MGMT_OP_PAIR_DEVICE,
2980 .send_func = pair_device_send_param_func,
2981 .expect_status = MGMT_STATUS_SUCCESS,
2982 .expect_func = pair_device_expect_param_func,
2983 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
2984 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
2985 .verify_alt_ev_func = verify_ltk,
2988 static uint16_t settings_powered_sc_bondable_le_ssp[] = {
2989 MGMT_OP_SET_BONDABLE,
2992 MGMT_OP_SET_SECURE_CONN,
2993 MGMT_OP_SET_POWERED,
2996 static const struct generic_data pair_device_smp_bredr_test_1 = {
2997 .setup_settings = settings_powered_sc_bondable_le_ssp,
2998 .client_enable_ssp = true,
2999 .client_enable_le = true,
3000 .client_enable_sc = true,
3001 .expect_sc_key = true,
3003 .send_opcode = MGMT_OP_PAIR_DEVICE,
3004 .send_func = pair_device_send_param_func,
3005 .expect_status = MGMT_STATUS_SUCCESS,
3006 .expect_func = pair_device_expect_param_func,
3007 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3008 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3009 .verify_alt_ev_func = verify_ltk,
3010 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3011 .expect_hci_func = client_bdaddr_param_func,
3012 .io_cap = 0x03, /* NoInputNoOutput */
3013 .client_io_cap = 0x03, /* NoInputNoOutput */
3016 static const struct generic_data pair_device_smp_bredr_test_2 = {
3017 .setup_settings = settings_powered_sc_bondable_le_ssp,
3018 .client_enable_ssp = true,
3019 .client_enable_le = true,
3020 .client_enable_sc = true,
3021 .expect_sc_key = true,
3022 .send_opcode = MGMT_OP_PAIR_DEVICE,
3023 .send_func = pair_device_send_param_func,
3024 .expect_status = MGMT_STATUS_SUCCESS,
3025 .expect_func = pair_device_expect_param_func,
3026 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3027 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3028 .verify_alt_ev_func = verify_ltk,
3029 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3030 .expect_hci_func = client_bdaddr_param_func,
3031 .io_cap = 0x01, /* DisplayYesNo */
3032 .client_io_cap = 0x01, /* DisplayYesNo */
3035 static const struct generic_data pair_device_le_reject_test_1 = {
3036 .setup_settings = settings_powered_bondable,
3037 .io_cap = 0x02, /* KeyboardOnly */
3038 .client_io_cap = 0x04, /* KeyboardDisplay */
3039 .send_opcode = MGMT_OP_PAIR_DEVICE,
3040 .send_func = pair_device_send_param_func,
3041 .expect_status = MGMT_STATUS_AUTH_FAILED,
3042 .expect_func = pair_device_expect_param_func,
3043 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3044 .expect_alt_ev_len = sizeof(struct mgmt_ev_auth_failed),
3045 .reject_confirm = true,
3048 static uint16_t settings_powered_sc_bondable[] = { MGMT_OP_SET_BONDABLE,
3049 MGMT_OP_SET_SECURE_CONN,
3050 MGMT_OP_SET_POWERED, 0 };
3052 static const struct generic_data pair_device_le_sc_legacy_test_1 = {
3053 .setup_settings = settings_powered_sc_bondable,
3054 .send_opcode = MGMT_OP_PAIR_DEVICE,
3055 .send_func = pair_device_send_param_func,
3057 .expect_status = MGMT_STATUS_SUCCESS,
3058 .expect_func = pair_device_expect_param_func,
3059 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3060 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3061 .verify_alt_ev_func = verify_ltk,
3064 static const struct generic_data pair_device_le_sc_success_test_1 = {
3065 .setup_settings = settings_powered_sc_bondable,
3066 .send_opcode = MGMT_OP_PAIR_DEVICE,
3067 .send_func = pair_device_send_param_func,
3069 .client_enable_sc = true,
3070 .expect_sc_key = true,
3071 .expect_status = MGMT_STATUS_SUCCESS,
3072 .expect_func = pair_device_expect_param_func,
3073 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3074 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3075 .verify_alt_ev_func = verify_ltk,
3078 static const struct generic_data pair_device_le_sc_success_test_2 = {
3079 .setup_settings = settings_powered_sc_bondable,
3080 .send_opcode = MGMT_OP_PAIR_DEVICE,
3081 .send_func = pair_device_send_param_func,
3082 .client_enable_sc = true,
3083 .expect_sc_key = true,
3084 .io_cap = 0x02, /* KeyboardOnly */
3085 .client_io_cap = 0x02, /* KeyboardOnly */
3086 .expect_status = MGMT_STATUS_SUCCESS,
3087 .expect_func = pair_device_expect_param_func,
3088 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3089 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3090 .verify_alt_ev_func = verify_ltk,
3093 static uint16_t settings_powered_connectable_bondable[] = {
3094 MGMT_OP_SET_BONDABLE,
3095 MGMT_OP_SET_CONNECTABLE,
3096 MGMT_OP_SET_POWERED, 0 };
3098 static const struct generic_data pairing_acceptor_legacy_1 = {
3099 .setup_settings = settings_powered_connectable_bondable,
3100 .pin = pair_device_pin,
3101 .pin_len = sizeof(pair_device_pin),
3102 .client_pin = pair_device_pin,
3103 .client_pin_len = sizeof(pair_device_pin),
3104 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3105 .expect_alt_ev_len = 26,
3108 static const struct generic_data pairing_acceptor_legacy_2 = {
3109 .setup_settings = settings_powered_connectable_bondable,
3111 .client_pin = pair_device_pin,
3112 .client_pin_len = sizeof(pair_device_pin),
3113 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3114 .expect_alt_ev_len = 8,
3117 static const struct generic_data pairing_acceptor_legacy_3 = {
3118 .setup_settings = settings_powered_connectable,
3119 .client_pin = pair_device_pin,
3120 .client_pin_len = sizeof(pair_device_pin),
3121 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3122 .expect_alt_ev_len = 8,
3123 .expect_hci_command = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY,
3124 .expect_hci_func = client_bdaddr_param_func,
3127 static uint16_t settings_powered_connectable_bondable_linksec[] = {
3128 MGMT_OP_SET_BONDABLE,
3129 MGMT_OP_SET_CONNECTABLE,
3130 MGMT_OP_SET_LINK_SECURITY,
3131 MGMT_OP_SET_POWERED, 0 };
3133 static const struct generic_data pairing_acceptor_linksec_1 = {
3134 .setup_settings = settings_powered_connectable_bondable_linksec,
3135 .pin = pair_device_pin,
3136 .pin_len = sizeof(pair_device_pin),
3137 .client_pin = pair_device_pin,
3138 .client_pin_len = sizeof(pair_device_pin),
3139 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3140 .expect_alt_ev_len = 26,
3143 static const struct generic_data pairing_acceptor_linksec_2 = {
3144 .setup_settings = settings_powered_connectable_bondable_linksec,
3146 .client_pin = pair_device_pin,
3147 .client_pin_len = sizeof(pair_device_pin),
3148 .expect_alt_ev = MGMT_EV_CONNECT_FAILED,
3149 .expect_alt_ev_len = 8,
3152 static uint16_t settings_powered_connectable_bondable_ssp[] = {
3153 MGMT_OP_SET_BONDABLE,
3154 MGMT_OP_SET_CONNECTABLE,
3156 MGMT_OP_SET_POWERED, 0 };
3158 static const struct generic_data pairing_acceptor_ssp_1 = {
3159 .setup_settings = settings_powered_connectable_bondable_ssp,
3160 .client_enable_ssp = true,
3161 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3162 .expect_alt_ev_len = 26,
3163 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3164 .expect_hci_func = client_bdaddr_param_func,
3165 .io_cap = 0x03, /* NoInputNoOutput */
3166 .client_io_cap = 0x03, /* NoInputNoOutput */
3170 static const struct generic_data pairing_acceptor_ssp_2 = {
3171 .setup_settings = settings_powered_connectable_bondable_ssp,
3172 .client_enable_ssp = true,
3173 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3174 .expect_alt_ev_len = 26,
3175 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3176 .expect_hci_func = client_bdaddr_param_func,
3177 .io_cap = 0x01, /* DisplayYesNo */
3178 .client_io_cap = 0x01, /* DisplayYesNo */
3181 static const struct generic_data pairing_acceptor_ssp_3 = {
3182 .setup_settings = settings_powered_connectable_bondable_ssp,
3183 .client_enable_ssp = true,
3184 .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
3185 .expect_alt_ev_len = 26,
3186 .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
3187 .expect_hci_func = client_bdaddr_param_func,
3188 .io_cap = 0x01, /* DisplayYesNo */
3189 .client_io_cap = 0x01, /* DisplayYesNo */
3193 static const void *client_io_cap_reject_param_func(uint8_t *len)
3195 struct test_data *data = tester_get_data();
3196 static uint8_t param[7];
3198 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
3199 param[6] = 0x18; /* Pairing Not Allowed */
3201 *len = sizeof(param);
3206 static uint16_t settings_powered_connectable_ssp[] = {
3207 MGMT_OP_SET_CONNECTABLE,
3209 MGMT_OP_SET_POWERED, 0 };
3211 static const struct generic_data pairing_acceptor_ssp_4 = {
3212 .setup_settings = settings_powered_connectable_ssp,
3213 .client_enable_ssp = true,
3214 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3215 .expect_alt_ev_len = 8,
3216 .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_NEG_REPLY,
3217 .expect_hci_func = client_io_cap_reject_param_func,
3218 .io_cap = 0x01, /* DisplayYesNo */
3219 .client_io_cap = 0x01, /* DisplayYesNo */
3220 .client_auth_req = 0x02, /* Dedicated Bonding - No MITM */
3223 static uint16_t settings_powered_sc_bondable_connectable_le_ssp[] = {
3224 MGMT_OP_SET_BONDABLE,
3225 MGMT_OP_SET_CONNECTABLE,
3228 MGMT_OP_SET_SECURE_CONN,
3229 MGMT_OP_SET_POWERED,
3232 static const struct generic_data pairing_acceptor_smp_bredr_1 = {
3233 .setup_settings = settings_powered_sc_bondable_connectable_le_ssp,
3234 .client_enable_ssp = true,
3235 .client_enable_le = true,
3236 .client_enable_sc = true,
3237 .expect_sc_key = true,
3238 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3239 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3240 .verify_alt_ev_func = verify_ltk,
3242 .io_cap = 0x03, /* NoInputNoOutput */
3243 .client_io_cap = 0x03, /* No InputNoOutput */
3244 .client_auth_req = 0x00, /* No Bonding - No MITM */
3247 static const struct generic_data pairing_acceptor_smp_bredr_2 = {
3248 .setup_settings = settings_powered_sc_bondable_connectable_le_ssp,
3249 .client_enable_ssp = true,
3250 .client_enable_le = true,
3251 .client_enable_sc = true,
3252 .expect_sc_key = true,
3253 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3254 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3255 .verify_alt_ev_func = verify_ltk,
3256 .io_cap = 0x01, /* DisplayYesNo */
3257 .client_io_cap = 0x01, /* DisplayYesNo */
3258 .client_auth_req = 0x02, /* Dedicated Bonding - No MITM */
3261 static uint16_t settings_powered_bondable_connectable_advertising[] = {
3262 MGMT_OP_SET_BONDABLE,
3263 MGMT_OP_SET_CONNECTABLE,
3264 MGMT_OP_SET_ADVERTISING,
3265 MGMT_OP_SET_POWERED, 0 };
3267 static const struct generic_data pairing_acceptor_le_1 = {
3268 .setup_settings = settings_powered_bondable_connectable_advertising,
3269 .io_cap = 0x03, /* NoInputNoOutput */
3270 .client_io_cap = 0x03, /* NoInputNoOutput */
3272 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3273 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3274 .verify_alt_ev_func = verify_ltk,
3277 static const struct generic_data pairing_acceptor_le_2 = {
3278 .setup_settings = settings_powered_bondable_connectable_advertising,
3279 .io_cap = 0x04, /* KeyboardDisplay */
3280 .client_io_cap = 0x04, /* KeyboardDisplay */
3281 .client_auth_req = 0x05, /* Bonding - MITM */
3282 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3283 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3284 .verify_alt_ev_func = verify_ltk,
3287 static const struct generic_data pairing_acceptor_le_3 = {
3288 .setup_settings = settings_powered_bondable_connectable_advertising,
3289 .io_cap = 0x04, /* KeyboardDisplay */
3290 .client_io_cap = 0x04, /* KeyboardDisplay */
3291 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3292 .expect_alt_ev_len = sizeof(struct mgmt_ev_auth_failed),
3293 .reject_confirm = true,
3296 static const struct generic_data pairing_acceptor_le_4 = {
3297 .setup_settings = settings_powered_bondable_connectable_advertising,
3298 .io_cap = 0x02, /* KeyboardOnly */
3299 .client_io_cap = 0x04, /* KeyboardDisplay */
3300 .client_auth_req = 0x05, /* Bonding - MITM */
3301 .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
3302 .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
3303 .verify_alt_ev_func = verify_ltk,
3306 static const struct generic_data pairing_acceptor_le_5 = {
3307 .setup_settings = settings_powered_bondable_connectable_advertising,
3308 .io_cap = 0x02, /* KeyboardOnly */
3309 .client_io_cap = 0x04, /* KeyboardDisplay */
3310 .client_auth_req = 0x05, /* Bonding - MITM */
3311 .reject_confirm = true,
3312 .expect_alt_ev = MGMT_EV_AUTH_FAILED,
3313 .expect_alt_ev_len = sizeof(struct mgmt_ev_auth_failed),
3316 static const char unpair_device_param[] = {
3317 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x00 };
3318 static const char unpair_device_rsp[] = {
3319 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
3320 static const char unpair_device_invalid_param_1[] = {
3321 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff, 0x00 };
3322 static const char unpair_device_invalid_param_rsp_1[] = {
3323 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3324 static const char unpair_device_invalid_param_2[] = {
3325 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x02 };
3326 static const char unpair_device_invalid_param_rsp_2[] = {
3327 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
3329 static const struct generic_data unpair_device_not_powered_test_1 = {
3330 .send_opcode = MGMT_OP_UNPAIR_DEVICE,
3331 .send_param = unpair_device_param,
3332 .send_len = sizeof(unpair_device_param),
3333 .expect_status = MGMT_STATUS_NOT_POWERED,
3334 .expect_param = unpair_device_rsp,
3335 .expect_len = sizeof(unpair_device_rsp),
3338 static const struct generic_data unpair_device_invalid_param_test_1 = {
3339 .send_opcode = MGMT_OP_UNPAIR_DEVICE,
3340 .send_param = unpair_device_invalid_param_1,
3341 .send_len = sizeof(unpair_device_invalid_param_1),
3342 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3343 .expect_param = unpair_device_invalid_param_rsp_1,
3344 .expect_len = sizeof(unpair_device_invalid_param_rsp_1),
3347 static const struct generic_data unpair_device_invalid_param_test_2 = {
3348 .send_opcode = MGMT_OP_UNPAIR_DEVICE,
3349 .send_param = unpair_device_invalid_param_2,
3350 .send_len = sizeof(unpair_device_invalid_param_2),
3351 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3352 .expect_param = unpair_device_invalid_param_rsp_2,
3353 .expect_len = sizeof(unpair_device_invalid_param_rsp_2),
3356 static const char disconnect_invalid_param_1[] = {
3357 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3358 static const char disconnect_invalid_param_rsp_1[] = {
3359 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3361 static const struct generic_data disconnect_invalid_param_test_1 = {
3362 .send_opcode = MGMT_OP_DISCONNECT,
3363 .send_param = disconnect_invalid_param_1,
3364 .send_len = sizeof(disconnect_invalid_param_1),
3365 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3366 .expect_param = disconnect_invalid_param_rsp_1,
3367 .expect_len = sizeof(disconnect_invalid_param_rsp_1),
3370 static const char block_device_invalid_param_1[] = {
3371 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3372 static const char block_device_invalid_param_rsp_1[] = {
3373 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3375 static const struct generic_data block_device_invalid_param_test_1 = {
3376 .send_opcode = MGMT_OP_BLOCK_DEVICE,
3377 .send_param = block_device_invalid_param_1,
3378 .send_len = sizeof(block_device_invalid_param_1),
3379 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3380 .expect_param = block_device_invalid_param_rsp_1,
3381 .expect_len = sizeof(block_device_invalid_param_rsp_1),
3384 static const char unblock_device_invalid_param_1[] = {
3385 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3386 static const char unblock_device_invalid_param_rsp_1[] = {
3387 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
3389 static const struct generic_data unblock_device_invalid_param_test_1 = {
3390 .send_opcode = MGMT_OP_UNBLOCK_DEVICE,
3391 .send_param = unblock_device_invalid_param_1,
3392 .send_len = sizeof(unblock_device_invalid_param_1),
3393 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3394 .expect_param = unblock_device_invalid_param_rsp_1,
3395 .expect_len = sizeof(unblock_device_invalid_param_rsp_1),
3398 static const char set_static_addr_valid_param[] = {
3399 0x11, 0x22, 0x33, 0x44, 0x55, 0xc0 };
3400 static const char set_static_addr_settings[] = { 0x00, 0x82, 0x00, 0x00 };
3402 static const struct generic_data set_static_addr_success_test = {
3403 .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
3404 .send_param = set_static_addr_valid_param,
3405 .send_len = sizeof(set_static_addr_valid_param),
3406 .expect_status = MGMT_STATUS_SUCCESS,
3407 .expect_param = set_static_addr_settings,
3408 .expect_len = sizeof(set_static_addr_settings),
3409 .expect_settings_set = MGMT_SETTING_STATIC_ADDRESS,
3412 static const char set_static_addr_settings_dual[] = { 0x80, 0x00, 0x00, 0x00 };
3414 static const struct generic_data set_static_addr_success_test_2 = {
3415 .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
3416 .send_param = set_static_addr_valid_param,
3417 .send_len = sizeof(set_static_addr_valid_param),
3418 .expect_status = MGMT_STATUS_SUCCESS,
3419 .expect_param = set_static_addr_settings_dual,
3420 .expect_len = sizeof(set_static_addr_settings_dual),
3423 static const struct generic_data set_static_addr_failure_test = {
3424 .setup_settings = settings_powered,
3425 .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
3426 .send_param = set_static_addr_valid_param,
3427 .send_len = sizeof(set_static_addr_valid_param),
3428 .expect_status = MGMT_STATUS_REJECTED,
3431 static const struct generic_data set_static_addr_failure_test_2 = {
3432 .setup_settings = settings_powered,
3433 .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
3434 .send_param = set_static_addr_valid_param,
3435 .send_len = sizeof(set_static_addr_valid_param),
3436 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
3439 static const char set_scan_params_valid_param[] = { 0x60, 0x00, 0x30, 0x00 };
3441 static const struct generic_data set_scan_params_success_test = {
3442 .send_opcode = MGMT_OP_SET_SCAN_PARAMS,
3443 .send_param = set_scan_params_valid_param,
3444 .send_len = sizeof(set_scan_params_valid_param),
3445 .expect_status = MGMT_STATUS_SUCCESS,
3448 static const char load_irks_empty_list[] = { 0x00, 0x00 };
3450 static const struct generic_data load_irks_success1_test = {
3451 .send_opcode = MGMT_OP_LOAD_IRKS,
3452 .send_param = load_irks_empty_list,
3453 .send_len = sizeof(load_irks_empty_list),
3454 .expect_status = MGMT_STATUS_SUCCESS,
3457 static const char load_irks_one_irk[] = { 0x01, 0x00,
3458 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x01,
3459 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
3460 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
3462 static const struct generic_data load_irks_success2_test = {
3463 .send_opcode = MGMT_OP_LOAD_IRKS,
3464 .send_param = load_irks_one_irk,
3465 .send_len = sizeof(load_irks_one_irk),
3466 .expect_status = MGMT_STATUS_SUCCESS,
3469 static const char load_irks_nval_addr_type[] = { 0x01, 0x00,
3470 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x00,
3471 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
3472 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
3474 static const struct generic_data load_irks_nval_param1_test = {
3475 .send_opcode = MGMT_OP_LOAD_IRKS,
3476 .send_param = load_irks_nval_addr_type,
3477 .send_len = sizeof(load_irks_nval_addr_type),
3478 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3481 static const char load_irks_nval_rand_addr[] = { 0x01, 0x00,
3482 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x02,
3483 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
3484 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
3486 static const struct generic_data load_irks_nval_param2_test = {
3487 .send_opcode = MGMT_OP_LOAD_IRKS,
3488 .send_param = load_irks_nval_rand_addr,
3489 .send_len = sizeof(load_irks_nval_rand_addr),
3490 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3493 static const char load_irks_nval_len[] = { 0x02, 0x00, 0xff, 0xff };
3495 static const struct generic_data load_irks_nval_param3_test = {
3496 .send_opcode = MGMT_OP_LOAD_IRKS,
3497 .send_param = load_irks_nval_len,
3498 .send_len = sizeof(load_irks_nval_len),
3499 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3502 static const struct generic_data load_irks_not_supported_test = {
3503 .send_opcode = MGMT_OP_LOAD_IRKS,
3504 .send_param = load_irks_empty_list,
3505 .send_len = sizeof(load_irks_empty_list),
3506 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
3509 static const char set_privacy_valid_param[] = { 0x01,
3510 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
3511 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
3512 static const char set_privacy_settings_param[] = { 0x80, 0x20, 0x00, 0x00 };
3514 static const struct generic_data set_privacy_success_test = {
3515 .send_opcode = MGMT_OP_SET_PRIVACY,
3516 .send_param = set_privacy_valid_param,
3517 .send_len = sizeof(set_privacy_valid_param),
3518 .expect_status = MGMT_STATUS_SUCCESS,
3519 .expect_param = set_privacy_settings_param,
3520 .expect_len = sizeof(set_privacy_settings_param),
3521 .expect_settings_set = MGMT_SETTING_PRIVACY,
3524 static const struct generic_data set_privacy_powered_test = {
3525 .setup_settings = settings_powered,
3526 .send_opcode = MGMT_OP_SET_PRIVACY,
3527 .send_param = set_privacy_valid_param,
3528 .send_len = sizeof(set_privacy_valid_param),
3529 .expect_status = MGMT_STATUS_REJECTED,
3532 static const char set_privacy_nval_param[] = { 0xff,
3533 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
3534 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
3535 static const struct generic_data set_privacy_nval_param_test = {
3536 .send_opcode = MGMT_OP_SET_PRIVACY,
3537 .send_param = set_privacy_nval_param,
3538 .send_len = sizeof(set_privacy_nval_param),
3539 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3542 static const void *get_conn_info_send_param_func(uint16_t *len)
3544 struct test_data *data = tester_get_data();
3545 static uint8_t param[7];
3547 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
3548 param[6] = 0x00; /* Address type */
3550 *len = sizeof(param);
3555 static const void *get_conn_info_expect_param_func(uint16_t *len)
3557 struct test_data *data = tester_get_data();
3558 static uint8_t param[10];
3560 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
3561 param[6] = 0x00; /* Address type */
3562 param[7] = 0xff; /* RSSI (= -1) */
3563 param[8] = 0xff; /* TX power (= -1) */
3564 param[9] = 0x04; /* max TX power */
3566 *len = sizeof(param);
3571 static const void *get_conn_info_error_expect_param_func(uint16_t *len)
3573 struct test_data *data = tester_get_data();
3574 static uint8_t param[10];
3576 /* All unset parameters shall be 0 in case of error */
3577 memset(param, 0, sizeof(param));
3579 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
3580 param[6] = 0x00; /* Address type */
3582 *len = sizeof(param);
3587 static const struct generic_data get_conn_info_succes1_test = {
3588 .setup_settings = settings_powered_connectable_bondable_ssp,
3589 .send_opcode = MGMT_OP_GET_CONN_INFO,
3590 .send_func = get_conn_info_send_param_func,
3591 .expect_status = MGMT_STATUS_SUCCESS,
3592 .expect_func = get_conn_info_expect_param_func,
3595 static const struct generic_data get_conn_info_ncon_test = {
3596 .setup_settings = settings_powered_connectable_bondable_ssp,
3597 .send_opcode = MGMT_OP_GET_CONN_INFO,
3598 .send_func = get_conn_info_send_param_func,
3599 .expect_status = MGMT_STATUS_NOT_CONNECTED,
3600 .expect_func = get_conn_info_error_expect_param_func,
3603 static const void *get_conn_info_expect_param_power_off_func(uint16_t *len)
3605 struct test_data *data = tester_get_data();
3606 static uint8_t param[10];
3608 memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
3609 param[6] = 0x00; /* Address type */
3610 param[7] = 127; /* RSSI */
3611 param[8] = 127; /* TX power */
3612 param[9] = 127; /* max TX power */
3614 *len = sizeof(param);
3619 static const struct generic_data get_conn_info_power_off_test = {
3620 .setup_settings = settings_powered_connectable_bondable_ssp,
3621 .send_opcode = MGMT_OP_GET_CONN_INFO,
3622 .send_func = get_conn_info_send_param_func,
3623 .force_power_off = true,
3624 .expect_status = MGMT_STATUS_NOT_POWERED,
3625 .expect_func = get_conn_info_expect_param_power_off_func,
3628 static const uint8_t load_conn_param_nval_1[16] = { 0x12, 0x11 };
3629 static const struct generic_data load_conn_params_fail_1 = {
3630 .send_opcode = MGMT_OP_LOAD_CONN_PARAM,
3631 .send_param = load_conn_param_nval_1,
3632 .send_len = sizeof(load_conn_param_nval_1),
3633 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3636 static const uint8_t add_device_nval_1[] = {
3637 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3641 static const uint8_t add_device_rsp[] = {
3642 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3645 static const struct generic_data add_device_fail_1 = {
3646 .send_opcode = MGMT_OP_ADD_DEVICE,
3647 .send_param = add_device_nval_1,
3648 .send_len = sizeof(add_device_nval_1),
3649 .expect_param = add_device_rsp,
3650 .expect_len = sizeof(add_device_rsp),
3651 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3654 static const uint8_t add_device_nval_2[] = {
3655 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3659 static const struct generic_data add_device_fail_2 = {
3660 .send_opcode = MGMT_OP_ADD_DEVICE,
3661 .send_param = add_device_nval_2,
3662 .send_len = sizeof(add_device_nval_2),
3663 .expect_param = add_device_rsp,
3664 .expect_len = sizeof(add_device_rsp),
3665 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3668 static const uint8_t add_device_nval_3[] = {
3669 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3673 static const struct generic_data add_device_fail_3 = {
3674 .send_opcode = MGMT_OP_ADD_DEVICE,
3675 .send_param = add_device_nval_3,
3676 .send_len = sizeof(add_device_nval_3),
3677 .expect_param = add_device_rsp,
3678 .expect_len = sizeof(add_device_rsp),
3679 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3682 static const uint8_t add_device_nval_4[] = {
3683 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3687 static const uint8_t add_device_rsp_4[] = {
3688 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3691 static const struct generic_data add_device_fail_4 = {
3692 .send_opcode = MGMT_OP_ADD_DEVICE,
3693 .send_param = add_device_nval_4,
3694 .send_len = sizeof(add_device_nval_4),
3695 .expect_param = add_device_rsp_4,
3696 .expect_len = sizeof(add_device_rsp_4),
3697 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3700 static const uint8_t add_device_success_param_1[] = {
3701 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3705 static const struct generic_data add_device_success_1 = {
3706 .send_opcode = MGMT_OP_ADD_DEVICE,
3707 .send_param = add_device_success_param_1,
3708 .send_len = sizeof(add_device_success_param_1),
3709 .expect_param = add_device_rsp,
3710 .expect_len = sizeof(add_device_rsp),
3711 .expect_status = MGMT_STATUS_SUCCESS,
3712 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
3713 .expect_alt_ev_param = add_device_success_param_1,
3714 .expect_alt_ev_len = sizeof(add_device_success_param_1),
3717 static const uint8_t add_device_success_param_2[] = {
3718 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3722 static const uint8_t add_device_rsp_le[] = {
3723 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3726 static const struct generic_data add_device_success_2 = {
3727 .send_opcode = MGMT_OP_ADD_DEVICE,
3728 .send_param = add_device_success_param_2,
3729 .send_len = sizeof(add_device_success_param_2),
3730 .expect_param = add_device_rsp_le,
3731 .expect_len = sizeof(add_device_rsp_le),
3732 .expect_status = MGMT_STATUS_SUCCESS,
3733 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
3734 .expect_alt_ev_param = add_device_success_param_2,
3735 .expect_alt_ev_len = sizeof(add_device_success_param_2),
3738 static const uint8_t add_device_success_param_3[] = {
3739 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3743 static const struct generic_data add_device_success_3 = {
3744 .send_opcode = MGMT_OP_ADD_DEVICE,
3745 .send_param = add_device_success_param_3,
3746 .send_len = sizeof(add_device_success_param_3),
3747 .expect_param = add_device_rsp_le,
3748 .expect_len = sizeof(add_device_rsp_le),
3749 .expect_status = MGMT_STATUS_SUCCESS,
3750 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
3751 .expect_alt_ev_param = add_device_success_param_3,
3752 .expect_alt_ev_len = sizeof(add_device_success_param_3),
3755 static const struct generic_data add_device_success_4 = {
3756 .setup_settings = settings_powered,
3757 .send_opcode = MGMT_OP_ADD_DEVICE,
3758 .send_param = add_device_success_param_1,
3759 .send_len = sizeof(add_device_success_param_1),
3760 .expect_param = add_device_rsp,
3761 .expect_len = sizeof(add_device_rsp),
3762 .expect_status = MGMT_STATUS_SUCCESS,
3763 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
3764 .expect_alt_ev_param = add_device_success_param_1,
3765 .expect_alt_ev_len = sizeof(add_device_success_param_1),
3766 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
3767 .expect_hci_param = set_connectable_scan_enable_param,
3768 .expect_hci_len = sizeof(set_connectable_scan_enable_param),
3771 static const uint8_t le_scan_enable[] = { 0x01, 0x01 };
3772 static const struct generic_data add_device_success_5 = {
3773 .setup_settings = settings_powered_le,
3774 .send_opcode = MGMT_OP_ADD_DEVICE,
3775 .send_param = add_device_success_param_2,
3776 .send_len = sizeof(add_device_success_param_2),
3777 .expect_param = add_device_rsp_le,
3778 .expect_len = sizeof(add_device_rsp_le),
3779 .expect_status = MGMT_STATUS_SUCCESS,
3780 .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
3781 .expect_alt_ev_param = add_device_success_param_2,
3782 .expect_alt_ev_len = sizeof(add_device_success_param_2),
3783 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
3784 .expect_hci_param = le_scan_enable,
3785 .expect_hci_len = sizeof(le_scan_enable),
3788 static const uint8_t remove_device_nval_1[] = {
3789 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3792 static const struct generic_data remove_device_fail_1 = {
3793 .send_opcode = MGMT_OP_REMOVE_DEVICE,
3794 .send_param = remove_device_nval_1,
3795 .send_len = sizeof(remove_device_nval_1),
3796 .expect_param = remove_device_nval_1,
3797 .expect_len = sizeof(remove_device_nval_1),
3798 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3801 static const uint8_t remove_device_param_1[] = {
3802 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3805 static const struct generic_data remove_device_fail_2 = {
3806 .send_opcode = MGMT_OP_REMOVE_DEVICE,
3807 .send_param = remove_device_param_1,
3808 .send_len = sizeof(remove_device_param_1),
3809 .expect_param = remove_device_param_1,
3810 .expect_len = sizeof(remove_device_param_1),
3811 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3814 static const uint8_t remove_device_param_3[] = {
3815 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3818 static const struct generic_data remove_device_fail_3 = {
3819 .send_opcode = MGMT_OP_REMOVE_DEVICE,
3820 .send_param = remove_device_param_3,
3821 .send_len = sizeof(remove_device_param_3),
3822 .expect_param = remove_device_param_3,
3823 .expect_len = sizeof(remove_device_param_3),
3824 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3827 static const struct generic_data remove_device_success_1 = {
3828 .send_opcode = MGMT_OP_REMOVE_DEVICE,
3829 .send_param = remove_device_param_1,
3830 .send_len = sizeof(remove_device_param_1),
3831 .expect_param = remove_device_param_1,
3832 .expect_len = sizeof(remove_device_param_1),
3833 .expect_status = MGMT_STATUS_SUCCESS,
3834 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
3835 .expect_alt_ev_param = remove_device_param_1,
3836 .expect_alt_ev_len = sizeof(remove_device_param_1),
3839 static const struct generic_data remove_device_success_2 = {
3840 .send_opcode = MGMT_OP_REMOVE_DEVICE,
3841 .send_param = remove_device_param_1,
3842 .send_len = sizeof(remove_device_param_1),
3843 .expect_param = remove_device_param_1,
3844 .expect_len = sizeof(remove_device_param_1),
3845 .expect_status = MGMT_STATUS_SUCCESS,
3846 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
3847 .expect_alt_ev_param = remove_device_param_1,
3848 .expect_alt_ev_len = sizeof(remove_device_param_1),
3849 .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
3850 .expect_hci_param = set_connectable_off_scan_enable_param,
3851 .expect_hci_len = sizeof(set_connectable_off_scan_enable_param),
3854 static const struct generic_data remove_device_success_3 = {
3855 .setup_settings = settings_powered,
3856 .send_opcode = MGMT_OP_REMOVE_DEVICE,
3857 .send_param = remove_device_param_1,
3858 .send_len = sizeof(remove_device_param_1),
3859 .expect_param = remove_device_param_1,
3860 .expect_len = sizeof(remove_device_param_1),
3861 .expect_status = MGMT_STATUS_SUCCESS,
3862 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
3863 .expect_alt_ev_param = remove_device_param_1,
3864 .expect_alt_ev_len = sizeof(remove_device_param_1),
3867 static const uint8_t remove_device_param_2[] = {
3868 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
3871 static const struct generic_data remove_device_success_4 = {
3872 .setup_settings = settings_powered,
3873 .send_opcode = MGMT_OP_REMOVE_DEVICE,
3874 .send_param = remove_device_param_2,
3875 .send_len = sizeof(remove_device_param_2),
3876 .expect_param = remove_device_param_2,
3877 .expect_len = sizeof(remove_device_param_2),
3878 .expect_status = MGMT_STATUS_SUCCESS,
3879 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
3880 .expect_alt_ev_param = remove_device_param_2,
3881 .expect_alt_ev_len = sizeof(remove_device_param_2),
3884 static const struct generic_data remove_device_success_5 = {
3885 .send_opcode = MGMT_OP_REMOVE_DEVICE,
3886 .send_param = remove_device_param_2,
3887 .send_len = sizeof(remove_device_param_2),
3888 .expect_param = remove_device_param_2,
3889 .expect_len = sizeof(remove_device_param_2),
3890 .expect_status = MGMT_STATUS_SUCCESS,
3891 .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
3892 .expect_alt_ev_param = remove_device_param_2,
3893 .expect_alt_ev_len = sizeof(remove_device_param_2),
3896 static const struct generic_data read_adv_features_invalid_param_test = {
3897 .send_opcode = MGMT_OP_READ_ADV_FEATURES,
3898 .send_param = dummy_data,
3899 .send_len = sizeof(dummy_data),
3900 .expect_status = MGMT_STATUS_INVALID_PARAMS,
3903 static const struct generic_data read_adv_features_invalid_index_test = {
3904 .send_index_none = true,
3905 .send_opcode = MGMT_OP_READ_ADV_FEATURES,
3906 .expect_status = MGMT_STATUS_INVALID_INDEX,
3909 static const uint8_t read_adv_features_rsp_1[] = {
3910 0x1f, 0x00, 0x00, 0x00, /* supported flags */
3911 0x1f, /* max_adv_data_len */
3912 0x1f, /* max_scan_rsp_len */
3913 0x05, /* max_instances */
3914 0x00, /* num_instances */
3917 static const struct generic_data read_adv_features_success_1 = {
3918 .send_opcode = MGMT_OP_READ_ADV_FEATURES,
3919 .expect_param = read_adv_features_rsp_1,
3920 .expect_len = sizeof(read_adv_features_rsp_1),
3921 .expect_status = MGMT_STATUS_SUCCESS,
3924 static const uint8_t read_adv_features_rsp_2[] = {
3925 0x1f, 0x00, 0x00, 0x00, /* supported flags */
3926 0x1f, /* max_adv_data_len */
3927 0x1f, /* max_scan_rsp_len */
3928 0x05, /* max_instances */
3929 0x01, /* num_instances */
3930 0x01, /* instance identifiers */
3933 static const struct generic_data read_adv_features_success_2 = {
3934 .send_opcode = MGMT_OP_READ_ADV_FEATURES,
3935 .expect_param = read_adv_features_rsp_2,
3936 .expect_len = sizeof(read_adv_features_rsp_2),
3937 .expect_status = MGMT_STATUS_SUCCESS,
3940 /* simple add advertising command */
3941 static const uint8_t add_advertising_param_uuid[] = {
3942 0x01, /* adv instance */
3943 0x00, 0x00, 0x00, 0x00, /* flags: none */
3944 0x00, 0x00, /* duration: default */
3945 0x00, 0x00, /* timeout: none */
3946 0x09, /* adv data len */
3947 0x00, /* scan rsp len */
3950 0x02, /* AD type: some 16 bit service class UUIDs */
3951 0x0d, 0x18, /* heart rate monitor */
3953 0xff, /* AD type: manufacturer specific data */
3954 0x01, 0x02, 0x03, /* custom advertising data */
3957 /* add advertising with scan response data */
3958 static const uint8_t add_advertising_param_scanrsp[] = {
3959 /* instance, flags, duration, timeout, adv data len: same as before */
3960 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
3961 0x0a, /* scan rsp len */
3962 /* adv data: same as before */
3963 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
3964 /* scan rsp data: */
3966 0x19, /* AD type: external appearance */
3967 0x40, 0x03, /* some custom appearance */
3969 0x03, /* AD type: all 16 bit service class UUIDs */
3970 0x0d, 0x18, /* heart rate monitor */
3971 0x0f, 0x18, /* battery service */
3974 /* add advertising with timeout */
3975 static const uint8_t add_advertising_param_timeout[] = {
3976 /* instance, flags, duration: same as before */
3977 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3978 0x05, 0x00, /* timeout: 5 seconds */
3979 /* adv data: same as before */
3980 0x09, 0x00, 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
3983 /* add advertising with connectable flag */
3984 static const uint8_t add_advertising_param_connectable[] = {
3985 0x01, /* adv instance */
3986 0x01, 0x00, 0x00, 0x00, /* flags: connectable*/
3987 /* duration, timeout, adv/scan data: same as before */
3988 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
3989 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
3992 /* add advertising with general discoverable flag */
3993 static const uint8_t add_advertising_param_general_discov[] = {
3994 0x01, /* adv instance */
3995 0x02, 0x00, 0x00, 0x00, /* flags: general discoverable*/
3996 /* duration, timeout, adv/scan data: same as before */
3997 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
3998 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4001 /* add advertising with limited discoverable flag */
4002 static const uint8_t add_advertising_param_limited_discov[] = {
4003 0x01, /* adv instance */
4004 0x04, 0x00, 0x00, 0x00, /* flags: limited discoverable */
4005 /* duration, timeout, adv/scan data: same as before */
4006 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4007 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4010 /* add advertising with managed flags */
4011 static const uint8_t add_advertising_param_managed[] = {
4012 0x01, /* adv instance */
4013 0x08, 0x00, 0x00, 0x00, /* flags: managed flags */
4014 /* duration, timeout, adv/scan data: same as before */
4015 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4016 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4019 /* add advertising with tx power flag */
4020 static const uint8_t add_advertising_param_txpwr[] = {
4021 0x01, /* adv instance */
4022 0x10, 0x00, 0x00, 0x00, /* flags: tx power */
4023 /* duration, timeout, adv/scan data: same as before */
4024 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4025 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4028 /* add advertising command for a second instance */
4029 static const uint8_t add_advertising_param_test2[] = {
4030 0x02, /* adv instance */
4031 0x00, 0x00, 0x00, 0x00, /* flags: none */
4032 0x00, 0x00, /* duration: default */
4033 0x01, 0x00, /* timeout: 1 second */
4034 0x07, /* adv data len */
4035 0x00, /* scan rsp len */
4038 0x08, /* AD type: shortened local name */
4039 0x74, 0x65, 0x73, 0x74, 0x32, /* "test2" */
4042 static const uint8_t advertising_instance1_param[] = {
4046 static const uint8_t advertising_instance2_param[] = {
4050 static const uint8_t set_adv_data_uuid[] = {
4053 /* advertise heart rate monitor and manufacturer specific data */
4054 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4056 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4057 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4061 static const uint8_t set_adv_data_test1[] = {
4062 0x07, /* adv data len */
4064 0x08, /* AD type: shortened local name */
4065 0x74, 0x65, 0x73, 0x74, 0x31, /* "test1" */
4067 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4068 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4069 0x00, 0x00, 0x00, 0x00,
4072 static const uint8_t set_adv_data_test2[] = {
4073 0x07, /* adv data len */
4075 0x08, /* AD type: shortened local name */
4076 0x74, 0x65, 0x73, 0x74, 0x32, /* "test2" */
4078 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4079 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4080 0x00, 0x00, 0x00, 0x00,
4083 static const uint8_t set_adv_data_txpwr[] = {
4084 0x03, /* adv data len */
4086 0x0a, /* AD type: tx power */
4087 0x00, /* tx power */
4089 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4090 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4091 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4094 static const uint8_t set_adv_data_general_discov[] = {
4095 0x0c, /* adv data len */
4097 0x01, /* AD type: flags */
4098 0x02, /* general discoverable */
4100 0x02, /* AD type: some 16bit service class UUIDs */
4101 0x0d, 0x18, /* heart rate monitor */
4103 0xff, /* AD type: manufacturer specific data */
4104 0x01, 0x02, 0x03, /* custom advertising data */
4106 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4107 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4110 static const uint8_t set_adv_data_limited_discov[] = {
4111 0x0c, /* adv data len */
4113 0x01, /* AD type: flags */
4114 0x01, /* limited discoverable */
4115 /* rest: same as before */
4116 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
4118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4122 static const uint8_t set_adv_data_uuid_txpwr[] = {
4123 0x0c, /* adv data len */
4125 0x02, /* AD type: some 16bit service class UUIDs */
4126 0x0d, 0x18, /* heart rate monitor */
4128 0xff, /* AD type: manufacturer specific data */
4129 0x01, 0x02, 0x03, /* custom advertising data */
4131 0x0a, /* AD type: tx power */
4132 0x00, /* tx power */
4134 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4138 static const uint8_t set_scan_rsp_uuid[] = {
4139 0x0a, /* scan rsp data len */
4141 0x19, /* AD type: external appearance */
4142 0x40, 0x03, /* some custom appearance */
4144 0x03, /* AD type: all 16 bit service class UUIDs */
4145 0x0d, 0x18, 0x0f, 0x18, /* heart rate monitor, battery service */
4147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4152 static const uint8_t add_advertising_invalid_param_1[] = {
4153 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
4154 0x03, 0x03, 0x0d, 0x18,
4155 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
4156 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
4157 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e,
4160 static const uint8_t add_advertising_invalid_param_2[] = {
4161 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4162 0x04, 0x03, 0x0d, 0x18,
4163 0x04, 0xff, 0x01, 0x02, 0x03,
4166 static const uint8_t add_advertising_invalid_param_3[] = {
4167 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4168 0x03, 0x03, 0x0d, 0x18,
4169 0x02, 0xff, 0x01, 0x02, 0x03,
4172 static const uint8_t add_advertising_invalid_param_4[] = {
4173 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
4174 0x03, 0x03, 0x0d, 0x18,
4175 0x05, 0xff, 0x01, 0x02, 0x03,
4178 static const uint8_t add_advertising_invalid_param_5[] = {
4179 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00,
4180 0x03, 0x03, 0x0d, 0x18,
4181 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
4182 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
4183 0x15, 0x16, 0x17, 0x18,
4186 static const uint8_t add_advertising_invalid_param_6[] = {
4187 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
4188 0x03, 0x03, 0x0d, 0x18,
4189 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
4190 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
4191 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e,
4194 static const uint8_t add_advertising_invalid_param_7[] = {
4195 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
4196 0x04, 0x03, 0x0d, 0x18,
4197 0x04, 0xff, 0x01, 0x02, 0x03,
4200 static const uint8_t add_advertising_invalid_param_8[] = {
4201 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
4202 0x03, 0x03, 0x0d, 0x18,
4203 0x02, 0xff, 0x01, 0x02, 0x03,
4206 static const uint8_t add_advertising_invalid_param_9[] = {
4207 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
4208 0x03, 0x03, 0x0d, 0x18,
4209 0x05, 0xff, 0x01, 0x02, 0x03,
4212 static const uint8_t add_advertising_invalid_param_10[] = {
4213 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D,
4214 0x03, 0x03, 0x0d, 0x18,
4215 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
4216 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
4217 0x15, 0x16, 0x17, 0x18,
4220 static const struct generic_data add_advertising_fail_1 = {
4221 .setup_settings = settings_powered,
4222 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4223 .send_param = add_advertising_param_uuid,
4224 .send_len = sizeof(add_advertising_param_uuid),
4225 .expect_status = MGMT_STATUS_REJECTED,
4228 static const struct generic_data add_advertising_fail_2 = {
4229 .setup_settings = settings_powered_le,
4230 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4231 .send_param = add_advertising_invalid_param_1,
4232 .send_len = sizeof(add_advertising_invalid_param_1),
4233 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4236 static const struct generic_data add_advertising_fail_3 = {
4237 .setup_settings = settings_powered_le,
4238 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4239 .send_param = add_advertising_invalid_param_2,
4240 .send_len = sizeof(add_advertising_invalid_param_2),
4241 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4244 static const struct generic_data add_advertising_fail_4 = {
4245 .setup_settings = settings_powered_le,
4246 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4247 .send_param = add_advertising_invalid_param_3,
4248 .send_len = sizeof(add_advertising_invalid_param_3),
4249 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4252 static const struct generic_data add_advertising_fail_5 = {
4253 .setup_settings = settings_powered_le,
4254 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4255 .send_param = add_advertising_invalid_param_4,
4256 .send_len = sizeof(add_advertising_invalid_param_4),
4257 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4260 static const struct generic_data add_advertising_fail_6 = {
4261 .setup_settings = settings_powered_le,
4262 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4263 .send_param = add_advertising_invalid_param_5,
4264 .send_len = sizeof(add_advertising_invalid_param_5),
4265 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4268 static const struct generic_data add_advertising_fail_7 = {
4269 .setup_settings = settings_powered_le,
4270 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4271 .send_param = add_advertising_invalid_param_6,
4272 .send_len = sizeof(add_advertising_invalid_param_6),
4273 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4276 static const struct generic_data add_advertising_fail_8 = {
4277 .setup_settings = settings_powered_le,
4278 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4279 .send_param = add_advertising_invalid_param_7,
4280 .send_len = sizeof(add_advertising_invalid_param_7),
4281 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4284 static const struct generic_data add_advertising_fail_9 = {
4285 .setup_settings = settings_powered_le,
4286 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4287 .send_param = add_advertising_invalid_param_8,
4288 .send_len = sizeof(add_advertising_invalid_param_8),
4289 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4292 static const struct generic_data add_advertising_fail_10 = {
4293 .setup_settings = settings_powered_le,
4294 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4295 .send_param = add_advertising_invalid_param_9,
4296 .send_len = sizeof(add_advertising_invalid_param_9),
4297 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4300 static const struct generic_data add_advertising_fail_11 = {
4301 .setup_settings = settings_powered_le,
4302 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4303 .send_param = add_advertising_invalid_param_10,
4304 .send_len = sizeof(add_advertising_invalid_param_10),
4305 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4308 static const struct generic_data add_advertising_fail_12 = {
4309 .setup_settings = settings_le,
4310 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4311 .send_param = add_advertising_param_timeout,
4312 .send_len = sizeof(add_advertising_param_timeout),
4313 .expect_status = MGMT_STATUS_REJECTED,
4316 static const struct generic_data add_advertising_success_1 = {
4317 .setup_settings = settings_powered_le,
4318 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4319 .send_param = add_advertising_param_uuid,
4320 .send_len = sizeof(add_advertising_param_uuid),
4321 .expect_param = advertising_instance1_param,
4322 .expect_len = sizeof(advertising_instance1_param),
4323 .expect_status = MGMT_STATUS_SUCCESS,
4324 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
4325 .expect_alt_ev_param = advertising_instance1_param,
4326 .expect_alt_ev_len = sizeof(advertising_instance1_param),
4327 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4328 .expect_hci_param = set_adv_data_uuid,
4329 .expect_hci_len = sizeof(set_adv_data_uuid),
4332 static const char set_powered_adv_instance_settings_param[] = {
4333 0x81, 0x02, 0x00, 0x00,
4336 static const struct generic_data add_advertising_success_pwron_data = {
4337 .send_opcode = MGMT_OP_SET_POWERED,
4338 .send_param = set_powered_on_param,
4339 .send_len = sizeof(set_powered_on_param),
4340 .expect_status = MGMT_STATUS_SUCCESS,
4341 .expect_param = set_powered_adv_instance_settings_param,
4342 .expect_len = sizeof(set_powered_adv_instance_settings_param),
4343 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4344 .expect_hci_param = set_adv_data_test1,
4345 .expect_hci_len = sizeof(set_adv_data_test1),
4348 static const struct generic_data add_advertising_success_pwron_enabled = {
4349 .send_opcode = MGMT_OP_SET_POWERED,
4350 .send_param = set_powered_on_param,
4351 .send_len = sizeof(set_powered_on_param),
4352 .expect_status = MGMT_STATUS_SUCCESS,
4353 .expect_param = set_powered_adv_instance_settings_param,
4354 .expect_len = sizeof(set_powered_adv_instance_settings_param),
4355 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
4356 .expect_hci_param = set_adv_on_set_adv_enable_param,
4357 .expect_hci_len = sizeof(set_adv_on_set_adv_enable_param),
4360 static const struct generic_data add_advertising_success_4 = {
4361 .send_opcode = MGMT_OP_SET_ADVERTISING,
4362 .send_param = set_adv_on_param,
4363 .send_len = sizeof(set_adv_on_param),
4364 .expect_status = MGMT_STATUS_SUCCESS,
4365 .expect_param = set_adv_settings_param_2,
4366 .expect_len = sizeof(set_adv_settings_param_2),
4367 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4368 .expect_hci_param = set_adv_data_txpwr,
4369 .expect_hci_len = sizeof(set_adv_data_txpwr),
4372 static const struct generic_data add_advertising_success_5 = {
4373 .send_opcode = MGMT_OP_SET_ADVERTISING,
4374 .send_param = set_adv_off_param,
4375 .send_len = sizeof(set_adv_off_param),
4376 .expect_status = MGMT_STATUS_SUCCESS,
4377 .expect_param = set_powered_adv_instance_settings_param,
4378 .expect_len = sizeof(set_powered_adv_instance_settings_param),
4379 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4380 .expect_hci_param = set_adv_data_test1,
4381 .expect_hci_len = sizeof(set_adv_data_test1),
4384 static const struct generic_data add_advertising_success_6 = {
4385 .setup_settings = settings_powered_le,
4386 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4387 .send_param = add_advertising_param_scanrsp,
4388 .send_len = sizeof(add_advertising_param_scanrsp),
4389 .expect_param = advertising_instance1_param,
4390 .expect_len = sizeof(advertising_instance1_param),
4391 .expect_status = MGMT_STATUS_SUCCESS,
4392 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
4393 .expect_alt_ev_param = advertising_instance1_param,
4394 .expect_alt_ev_len = sizeof(advertising_instance1_param),
4395 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4396 .expect_hci_param = set_adv_data_uuid,
4397 .expect_hci_len = sizeof(set_adv_data_uuid),
4400 static const struct generic_data add_advertising_success_7 = {
4401 .setup_settings = settings_powered_le,
4402 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4403 .send_param = add_advertising_param_scanrsp,
4404 .send_len = sizeof(add_advertising_param_scanrsp),
4405 .expect_param = advertising_instance1_param,
4406 .expect_len = sizeof(advertising_instance1_param),
4407 .expect_status = MGMT_STATUS_SUCCESS,
4408 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
4409 .expect_alt_ev_param = advertising_instance1_param,
4410 .expect_alt_ev_len = sizeof(advertising_instance1_param),
4411 .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
4412 .expect_hci_param = set_scan_rsp_uuid,
4413 .expect_hci_len = sizeof(set_scan_rsp_uuid),
4416 static const struct generic_data add_advertising_success_8 = {
4417 .setup_settings = settings_powered_le,
4418 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4419 .send_param = add_advertising_param_connectable,
4420 .send_len = sizeof(add_advertising_param_connectable),
4421 .expect_param = advertising_instance1_param,
4422 .expect_len = sizeof(advertising_instance1_param),
4423 .expect_status = MGMT_STATUS_SUCCESS,
4424 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
4425 .expect_hci_param = set_connectable_on_adv_param,
4426 .expect_hci_len = sizeof(set_connectable_on_adv_param),
4429 static const struct generic_data add_advertising_success_9 = {
4430 .setup_settings = settings_powered_le,
4431 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4432 .send_param = add_advertising_param_general_discov,
4433 .send_len = sizeof(add_advertising_param_general_discov),
4434 .expect_param = advertising_instance1_param,
4435 .expect_len = sizeof(advertising_instance1_param),
4436 .expect_status = MGMT_STATUS_SUCCESS,
4437 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4438 .expect_hci_param = set_adv_data_general_discov,
4439 .expect_hci_len = sizeof(set_adv_data_general_discov),
4442 static const struct generic_data add_advertising_success_10 = {
4443 .setup_settings = settings_powered_le,
4444 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4445 .send_param = add_advertising_param_limited_discov,
4446 .send_len = sizeof(add_advertising_param_limited_discov),
4447 .expect_param = advertising_instance1_param,
4448 .expect_len = sizeof(advertising_instance1_param),
4449 .expect_status = MGMT_STATUS_SUCCESS,
4450 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4451 .expect_hci_param = set_adv_data_limited_discov,
4452 .expect_hci_len = sizeof(set_adv_data_limited_discov),
4455 static const struct generic_data add_advertising_success_11 = {
4456 .setup_settings = settings_powered_le_discoverable,
4457 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4458 .send_param = add_advertising_param_managed,
4459 .send_len = sizeof(add_advertising_param_managed),
4460 .expect_param = advertising_instance1_param,
4461 .expect_len = sizeof(advertising_instance1_param),
4462 .expect_status = MGMT_STATUS_SUCCESS,
4463 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4464 .expect_hci_param = set_adv_data_general_discov,
4465 .expect_hci_len = sizeof(set_adv_data_general_discov),
4468 static const struct generic_data add_advertising_success_12 = {
4469 .setup_settings = settings_powered_le_discoverable,
4470 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4471 .send_param = add_advertising_param_txpwr,
4472 .send_len = sizeof(add_advertising_param_txpwr),
4473 .expect_param = advertising_instance1_param,
4474 .expect_len = sizeof(advertising_instance1_param),
4475 .expect_status = MGMT_STATUS_SUCCESS,
4476 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4477 .expect_hci_param = set_adv_data_uuid_txpwr,
4478 .expect_hci_len = sizeof(set_adv_data_uuid_txpwr),
4481 static uint16_t settings_powered_le_connectable[] = {
4482 MGMT_OP_SET_POWERED,
4484 MGMT_OP_SET_CONNECTABLE, 0 };
4486 static uint8_t set_connectable_off_scan_adv_param[] = {
4487 0x00, 0x08, /* min_interval */
4488 0x00, 0x08, /* max_interval */
4490 0x01, /* own_addr_type */
4491 0x00, /* direct_addr_type */
4492 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* direct_addr */
4493 0x07, /* channel_map */
4494 0x00, /* filter_policy */
4497 static const struct generic_data add_advertising_success_13 = {
4498 .setup_settings = settings_powered_le,
4499 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4500 .send_param = add_advertising_param_scanrsp,
4501 .send_len = sizeof(add_advertising_param_scanrsp),
4502 .expect_param = advertising_instance1_param,
4503 .expect_len = sizeof(advertising_instance1_param),
4504 .expect_status = MGMT_STATUS_SUCCESS,
4505 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
4506 .expect_hci_param = set_connectable_off_scan_adv_param,
4507 .expect_hci_len = sizeof(set_connectable_off_scan_adv_param),
4510 static const struct generic_data add_advertising_success_14 = {
4511 .setup_settings = settings_powered_le,
4512 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4513 .send_param = add_advertising_param_uuid,
4514 .send_len = sizeof(add_advertising_param_uuid),
4515 .expect_param = advertising_instance1_param,
4516 .expect_len = sizeof(advertising_instance1_param),
4517 .expect_status = MGMT_STATUS_SUCCESS,
4518 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
4519 .expect_hci_param = set_connectable_off_adv_param,
4520 .expect_hci_len = sizeof(set_connectable_off_adv_param),
4523 static const struct generic_data add_advertising_success_15 = {
4524 .setup_settings = settings_powered_le_connectable,
4525 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4526 .send_param = add_advertising_param_uuid,
4527 .send_len = sizeof(add_advertising_param_uuid),
4528 .expect_param = advertising_instance1_param,
4529 .expect_len = sizeof(advertising_instance1_param),
4530 .expect_status = MGMT_STATUS_SUCCESS,
4531 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
4532 .expect_hci_param = set_connectable_on_adv_param,
4533 .expect_hci_len = sizeof(set_connectable_on_adv_param),
4536 static const char set_connectable_settings_param_3[] = {
4537 0x83, 0x02, 0x00, 0x00 };
4539 static const struct generic_data add_advertising_success_16 = {
4540 .send_opcode = MGMT_OP_SET_CONNECTABLE,
4541 .send_param = set_connectable_on_param,
4542 .send_len = sizeof(set_connectable_on_param),
4543 .expect_status = MGMT_STATUS_SUCCESS,
4544 .expect_param = set_connectable_settings_param_3,
4545 .expect_len = sizeof(set_connectable_settings_param_3),
4546 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
4547 .expect_hci_param = set_connectable_on_adv_param,
4548 .expect_hci_len = sizeof(set_connectable_on_adv_param),
4551 static const struct generic_data add_advertising_success_17 = {
4552 .send_opcode = MGMT_OP_SET_CONNECTABLE,
4553 .send_param = set_connectable_off_param,
4554 .send_len = sizeof(set_connectable_off_param),
4555 .expect_status = MGMT_STATUS_SUCCESS,
4556 .expect_param = set_le_settings_param_2,
4557 .expect_len = sizeof(set_le_settings_param_2),
4558 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
4559 .expect_hci_param = set_connectable_off_adv_param,
4560 .expect_hci_len = sizeof(set_connectable_off_adv_param),
4563 static const char set_powered_off_le_settings_param[] = {
4564 0x80, 0x02, 0x00, 0x00
4567 static const struct generic_data add_advertising_power_off = {
4568 .send_opcode = MGMT_OP_SET_POWERED,
4569 .send_param = set_powered_off_param,
4570 .send_len = sizeof(set_powered_off_param),
4571 .expect_status = MGMT_STATUS_SUCCESS,
4572 .expect_param = set_powered_off_le_settings_param,
4573 .expect_len = sizeof(set_powered_off_le_settings_param),
4574 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
4575 .expect_alt_ev_param = advertising_instance1_param,
4576 .expect_alt_ev_len = sizeof(advertising_instance1_param),
4579 static const char set_le_settings_param_off[] = { 0x81, 0x00, 0x00, 0x00 };
4581 static const struct generic_data add_advertising_le_off = {
4582 .send_opcode = MGMT_OP_SET_LE,
4583 .send_param = set_le_off_param,
4584 .send_len = sizeof(set_le_off_param),
4585 .expect_status = MGMT_STATUS_SUCCESS,
4586 .expect_param = set_le_settings_param_off,
4587 .expect_len = sizeof(set_le_settings_param_off),
4588 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
4589 .expect_alt_ev_param = advertising_instance1_param,
4590 .expect_alt_ev_len = sizeof(advertising_instance1_param),
4593 static const struct generic_data add_advertising_success_18 = {
4594 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4595 .send_param = add_advertising_param_uuid,
4596 .send_len = sizeof(add_advertising_param_uuid),
4597 .expect_param = advertising_instance1_param,
4598 .expect_len = sizeof(advertising_instance1_param),
4599 .expect_status = MGMT_STATUS_SUCCESS,
4600 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4601 .expect_hci_param = set_adv_data_uuid,
4602 .expect_hci_len = sizeof(set_adv_data_uuid),
4605 static const struct generic_data add_advertising_timeout_expired = {
4606 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
4607 .expect_alt_ev_param = advertising_instance1_param,
4608 .expect_alt_ev_len = sizeof(advertising_instance1_param),
4609 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
4610 .expect_hci_param = set_adv_on_set_adv_disable_param,
4611 .expect_hci_len = sizeof(set_adv_on_set_adv_disable_param),
4614 static const uint8_t remove_advertising_param_1[] = {
4618 static const uint8_t remove_advertising_param_2[] = {
4622 static const struct generic_data remove_advertising_fail_1 = {
4623 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
4624 .send_param = remove_advertising_param_1,
4625 .send_len = sizeof(remove_advertising_param_1),
4626 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4629 static const struct generic_data remove_advertising_success_1 = {
4630 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
4631 .send_param = remove_advertising_param_1,
4632 .send_len = sizeof(remove_advertising_param_1),
4633 .expect_status = MGMT_STATUS_SUCCESS,
4634 .expect_param = remove_advertising_param_1,
4635 .expect_len = sizeof(remove_advertising_param_1),
4636 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
4637 .expect_alt_ev_param = advertising_instance1_param,
4638 .expect_alt_ev_len = sizeof(advertising_instance1_param),
4639 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
4640 .expect_hci_param = set_adv_off_param,
4641 .expect_hci_len = sizeof(set_adv_off_param),
4644 static const struct generic_data remove_advertising_success_2 = {
4645 .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
4646 .send_param = remove_advertising_param_2,
4647 .send_len = sizeof(remove_advertising_param_2),
4648 .expect_status = MGMT_STATUS_SUCCESS,
4649 .expect_param = remove_advertising_param_2,
4650 .expect_len = sizeof(remove_advertising_param_2),
4651 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
4652 .expect_alt_ev_param = advertising_instance1_param,
4653 .expect_alt_ev_len = sizeof(advertising_instance1_param),
4654 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
4655 .expect_hci_param = set_adv_off_param,
4656 .expect_hci_len = sizeof(set_adv_off_param),
4659 static const struct generic_data multi_advertising_switch = {
4660 .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
4661 .expect_alt_ev_param = advertising_instance1_param,
4662 .expect_alt_ev_len = sizeof(advertising_instance1_param),
4663 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4664 .expect_hci_param = set_adv_data_test2,
4665 .expect_hci_len = sizeof(set_adv_data_test2),
4668 static const struct generic_data multi_advertising_add_second = {
4669 .send_opcode = MGMT_OP_ADD_ADVERTISING,
4670 .send_param = add_advertising_param_test2,
4671 .send_len = sizeof(add_advertising_param_test2),
4672 .expect_param = advertising_instance2_param,
4673 .expect_len = sizeof(advertising_instance2_param),
4674 .expect_status = MGMT_STATUS_SUCCESS,
4675 .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
4676 .expect_alt_ev_param = advertising_instance2_param,
4677 .expect_alt_ev_len = sizeof(advertising_instance2_param),
4678 .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
4679 .expect_hci_param = set_adv_data_test2,
4680 .expect_hci_len = sizeof(set_adv_data_test2),
4683 /* based on G-Tag ADV_DATA */
4684 static const uint8_t adv_data_invalid_significant_len[] = { 0x02, 0x01, 0x06,
4685 0x0d, 0xff, 0x80, 0x01, 0x02, 0x15, 0x12, 0x34, 0x80, 0x91,
4686 0xd0, 0xf2, 0xbb, 0xc5, 0x03, 0x02, 0x0f, 0x18, 0x00, 0x00,
4687 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
4689 static const char device_found_valid[] = { 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00,
4690 0x01, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x02, 0x01,
4691 0x06, 0x0d, 0xff, 0x80, 0x01, 0x02, 0x15, 0x12, 0x34, 0x80,
4692 0x91, 0xd0, 0xf2, 0xbb, 0xc5, 0x03, 0x02, 0x0f, 0x18 };
4694 static const struct generic_data device_found_gtag = {
4695 .setup_settings = settings_powered_le,
4696 .send_opcode = MGMT_OP_START_DISCOVERY,
4697 .send_param = start_discovery_le_param,
4698 .send_len = sizeof(start_discovery_le_param),
4699 .expect_status = MGMT_STATUS_SUCCESS,
4700 .expect_param = start_discovery_le_param,
4701 .expect_len = sizeof(start_discovery_le_param),
4702 .expect_alt_ev = MGMT_EV_DEVICE_FOUND,
4703 .expect_alt_ev_param = device_found_valid,
4704 .expect_alt_ev_len = sizeof(device_found_valid),
4706 .adv_data_len = sizeof(adv_data_invalid_significant_len),
4707 .adv_data = adv_data_invalid_significant_len,
4710 static const uint8_t adv_data_invalid_field_len[] = { 0x02, 0x01, 0x01,
4711 0x05, 0x09, 0x74, 0x65, 0x73, 0x74,
4712 0xa0, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05};
4714 static const char device_found_valid2[] = { 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00,
4715 0x01, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x02, 0x01,
4716 0x01, 0x05, 0x09, 0x74, 0x65, 0x73, 0x74};
4718 static const struct generic_data device_found_invalid_field = {
4719 .setup_settings = settings_powered_le,
4720 .send_opcode = MGMT_OP_START_DISCOVERY,
4721 .send_param = start_discovery_le_param,
4722 .send_len = sizeof(start_discovery_le_param),
4723 .expect_status = MGMT_STATUS_SUCCESS,
4724 .expect_param = start_discovery_le_param,
4725 .expect_len = sizeof(start_discovery_le_param),
4726 .expect_alt_ev = MGMT_EV_DEVICE_FOUND,
4727 .expect_alt_ev_param = device_found_valid2,
4728 .expect_alt_ev_len = sizeof(device_found_valid2),
4730 .adv_data_len = sizeof(adv_data_invalid_field_len),
4731 .adv_data = adv_data_invalid_field_len,
4734 static const struct generic_data read_local_oob_not_powered_test = {
4735 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
4736 .expect_status = MGMT_STATUS_NOT_POWERED,
4739 static const struct generic_data read_local_oob_invalid_param_test = {
4740 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
4741 .send_param = dummy_data,
4742 .send_len = sizeof(dummy_data),
4743 .expect_status = MGMT_STATUS_INVALID_PARAMS,
4746 static const struct generic_data read_local_oob_invalid_index_test = {
4747 .send_index_none = true,
4748 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
4749 .expect_status = MGMT_STATUS_INVALID_INDEX,
4752 static const struct generic_data read_local_oob_legacy_pairing_test = {
4753 .setup_settings = settings_powered,
4754 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
4755 .expect_status = MGMT_STATUS_NOT_SUPPORTED,
4758 static const struct generic_data read_local_oob_success_ssp_test = {
4759 .setup_settings = settings_powered_ssp,
4760 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
4761 .expect_status = MGMT_STATUS_SUCCESS,
4762 .expect_ignore_param = true,
4763 .expect_hci_command = BT_HCI_CMD_READ_LOCAL_OOB_DATA,
4766 static const struct generic_data read_local_oob_success_sc_test = {
4767 .setup_settings = settings_powered_sc,
4768 .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
4769 .expect_status = MGMT_STATUS_SUCCESS,
4770 .expect_ignore_param = true,
4771 .expect_hci_command = BT_HCI_CMD_READ_LOCAL_OOB_EXT_DATA,
4774 static void client_cmd_complete(uint16_t opcode, uint8_t status,
4775 const void *param, uint8_t len,
4778 struct test_data *data = tester_get_data();
4779 const struct generic_data *test = data->test_data;
4780 struct bthost *bthost;
4782 bthost = hciemu_client_get_host(data->hciemu);
4785 case BT_HCI_CMD_WRITE_SCAN_ENABLE:
4786 case BT_HCI_CMD_LE_SET_ADV_ENABLE:
4787 tester_print("Client set connectable: %s (0x%02x)",
4788 mgmt_errstr(status), status);
4789 if (!status && test->client_enable_ssp) {
4790 bthost_write_ssp_mode(bthost, 0x01);
4794 case BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE:
4795 tester_print("Client enable SSP: %s (0x%02x)",
4796 mgmt_errstr(status), status);
4803 tester_setup_failed();
4805 tester_setup_complete();
4808 static void setup_bthost(void)
4810 struct test_data *data = tester_get_data();
4811 struct bthost *bthost;
4813 bthost = hciemu_client_get_host(data->hciemu);
4814 bthost_set_cmd_complete_cb(bthost, client_cmd_complete, data);
4815 if (data->hciemu_type == HCIEMU_TYPE_LE)
4816 bthost_set_adv_enable(bthost, 0x01);
4818 bthost_write_scan_enable(bthost, 0x03);
4821 static void setup_pairing_acceptor(const void *test_data)
4823 struct test_data *data = tester_get_data();
4824 const struct generic_data *test = data->test_data;
4829 mgmt_send(data->mgmt, MGMT_OP_SET_IO_CAPABILITY, data->mgmt_index,
4830 sizeof(test->io_cap), &test->io_cap,
4836 static void setup_powered_callback(uint8_t status, uint16_t length,
4837 const void *param, void *user_data)
4839 if (status != MGMT_STATUS_SUCCESS) {
4840 tester_setup_failed();
4844 tester_print("Controller powered on");
4849 static void setup_class(const void *test_data)
4851 struct test_data *data = tester_get_data();
4852 unsigned char param[] = { 0x01 };
4853 unsigned char class_param[] = { 0x01, 0x0c };
4855 tester_print("Setting device class and powering on");
4857 mgmt_send(data->mgmt, MGMT_OP_SET_DEV_CLASS, data->mgmt_index,
4858 sizeof(class_param), class_param,
4861 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
4862 sizeof(param), param,
4863 setup_powered_callback, NULL, NULL);
4866 static void discovering_event(uint16_t index, uint16_t length,
4867 const void *param, void *user_data)
4869 struct test_data *data = tester_get_data();
4870 const struct mgmt_ev_discovering *ev = param;
4872 mgmt_unregister(data->mgmt, data->mgmt_discov_ev_id);
4874 if (length != sizeof(*ev)) {
4875 tester_warn("Incorrect discovering event length");
4876 tester_setup_failed();
4880 if (!ev->discovering) {
4881 tester_warn("Unexpected discovery stopped event");
4882 tester_setup_failed();
4886 tester_setup_complete();
4889 static void setup_discovery_callback(uint8_t status, uint16_t length,
4890 const void *param, void *user_data)
4892 if (status != MGMT_STATUS_SUCCESS) {
4893 tester_setup_failed();
4897 tester_print("Discovery started");
4900 static void setup_start_discovery(const void *test_data)
4902 struct test_data *data = tester_get_data();
4903 const struct generic_data *test = data->test_data;
4904 const void *send_param = test->setup_send_param;
4905 uint16_t send_len = test->setup_send_len;
4908 id = mgmt_register(data->mgmt, MGMT_EV_DISCOVERING, data->mgmt_index,
4909 discovering_event, NULL, NULL);
4910 data->mgmt_discov_ev_id = id;
4912 mgmt_send(data->mgmt, test->setup_send_opcode, data->mgmt_index,
4913 send_len, send_param, setup_discovery_callback,
4917 static void setup_multi_uuid32(const void *test_data)
4919 struct test_data *data = tester_get_data();
4920 unsigned char param[] = { 0x01 };
4922 tester_print("Powering on controller (with 32-bit UUID)");
4924 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
4925 sizeof(param), param, NULL, NULL, NULL);
4927 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
4928 sizeof(add_uuid32_param_1), add_uuid32_param_1,
4930 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
4931 sizeof(add_uuid32_param_2), add_uuid32_param_2,
4933 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
4934 sizeof(add_uuid32_param_3), add_uuid32_param_3,
4937 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
4938 sizeof(param), param,
4939 setup_powered_callback, NULL, NULL);
4942 static void setup_multi_uuid32_2(const void *test_data)
4944 struct test_data *data = tester_get_data();
4945 unsigned char param[] = { 0x01 };
4946 unsigned char uuid_param[] = {
4947 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
4948 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4952 tester_print("Powering on controller (with many 32-bit UUIDs)");
4954 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
4955 sizeof(param), param, NULL, NULL, NULL);
4957 for (i = 0; i < 58; i++) {
4958 uint32_t val = htobl(0xffffffff - i);
4959 memcpy(&uuid_param[12], &val, sizeof(val));
4960 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
4961 sizeof(uuid_param), uuid_param,
4965 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
4966 sizeof(param), param,
4967 setup_powered_callback, NULL, NULL);
4970 static void setup_multi_uuid128(const void *test_data)
4972 struct test_data *data = tester_get_data();
4973 unsigned char param[] = { 0x01 };
4975 tester_print("Powering on controller (with 128-bit UUID)");
4977 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
4978 sizeof(param), param, NULL, NULL, NULL);
4980 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
4981 sizeof(add_uuid128_param_1), add_uuid128_param_1,
4984 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
4985 sizeof(param), param,
4986 setup_powered_callback, NULL, NULL);
4989 static void setup_multi_uuid128_2(const void *test_data)
4991 struct test_data *data = tester_get_data();
4992 unsigned char param[] = { 0x01 };
4993 unsigned char uuid_param[] = {
4994 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
4995 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00,
4999 tester_print("Powering on controller (with many 128-bit UUIDs)");
5001 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
5002 sizeof(param), param, NULL, NULL, NULL);
5004 for (i = 0; i < 13; i++) {
5006 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
5007 sizeof(uuid_param), uuid_param,
5011 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5012 sizeof(param), param,
5013 setup_powered_callback, NULL, NULL);
5016 static void setup_multi_uuid16(const void *test_data)
5018 struct test_data *data = tester_get_data();
5019 unsigned char param[] = { 0x01 };
5021 tester_print("Powering on controller (with SPP UUID)");
5023 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
5024 sizeof(param), param, NULL, NULL, NULL);
5026 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
5027 sizeof(add_spp_uuid_param), add_spp_uuid_param,
5029 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
5030 sizeof(add_dun_uuid_param), add_dun_uuid_param,
5032 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
5033 sizeof(add_sync_uuid_param), add_sync_uuid_param,
5036 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5037 sizeof(param), param,
5038 setup_powered_callback, NULL, NULL);
5041 static void setup_multi_uuid16_2(const void *test_data)
5043 struct test_data *data = tester_get_data();
5044 unsigned char param[] = { 0x01 };
5045 unsigned char uuid_param[] = {
5046 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
5047 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5051 tester_print("Powering on controller (with many 16-bit UUIDs)");
5053 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
5054 sizeof(param), param, NULL, NULL, NULL);
5056 for (i = 0; i < 117; i++) {
5057 uint16_t val = htobs(i + 0x2000);
5058 memcpy(&uuid_param[12], &val, sizeof(val));
5059 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
5060 sizeof(uuid_param), uuid_param,
5064 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5065 sizeof(param), param,
5066 setup_powered_callback, NULL, NULL);
5069 static void setup_uuid_mix(const void *test_data)
5071 struct test_data *data = tester_get_data();
5072 unsigned char param[] = { 0x01 };
5074 tester_print("Powering on controller (with mixed UUIDs)");
5076 mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
5077 sizeof(param), param, NULL, NULL, NULL);
5079 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
5080 sizeof(add_spp_uuid_param), add_spp_uuid_param,
5082 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
5083 sizeof(add_uuid32_param_1), add_uuid32_param_1,
5085 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
5086 sizeof(add_uuid128_param_1), add_uuid128_param_1,
5089 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
5090 sizeof(add_dun_uuid_param), add_dun_uuid_param,
5092 mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
5093 sizeof(add_uuid32_param_2), add_uuid32_param_2,
5096 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5097 sizeof(param), param,
5098 setup_powered_callback, NULL, NULL);
5101 static void setup_add_device(const void *test_data)
5103 struct test_data *data = tester_get_data();
5104 unsigned char param[] = { 0x01 };
5105 const unsigned char *add_param;
5106 size_t add_param_len;
5108 tester_print("Powering on controller (with added device)");
5110 if (data->hciemu_type == HCIEMU_TYPE_LE) {
5111 add_param = add_device_success_param_2;
5112 add_param_len = sizeof(add_device_success_param_2);
5114 add_param = add_device_success_param_1;
5115 add_param_len = sizeof(add_device_success_param_1);
5118 mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
5119 add_param_len, add_param, NULL, NULL, NULL);
5121 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5122 sizeof(param), param,
5123 setup_powered_callback, NULL, NULL);
5126 static void setup_add_advertising_callback(uint8_t status, uint16_t length,
5127 const void *param, void *user_data)
5129 struct mgmt_rp_add_advertising *rp =
5130 (struct mgmt_rp_add_advertising *) param;
5132 if (status != MGMT_STATUS_SUCCESS) {
5133 tester_setup_failed();
5137 tester_print("Add Advertising setup complete (instance %d)",
5143 #define TESTER_ADD_ADV_DATA_LEN 7
5145 static void setup_add_adv_param(struct mgmt_cp_add_advertising *cp,
5148 memset(cp, 0, sizeof(*cp));
5149 cp->instance = instance;
5150 cp->adv_data_len = TESTER_ADD_ADV_DATA_LEN;
5151 cp->data[0] = TESTER_ADD_ADV_DATA_LEN - 1; /* AD len */
5152 cp->data[1] = 0x08; /* AD type: shortened local name */
5153 cp->data[2] = 't'; /* adv data ... */
5157 cp->data[6] = '0' + instance;
5160 static void setup_add_advertising_not_powered(const void *test_data)
5162 struct test_data *data = tester_get_data();
5163 struct mgmt_cp_add_advertising *cp;
5164 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
5165 unsigned char param[] = { 0x01 };
5167 tester_print("Adding advertising instance while unpowered");
5169 cp = (struct mgmt_cp_add_advertising *) adv_param;
5170 setup_add_adv_param(cp, 1);
5172 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
5173 sizeof(param), ¶m,
5176 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
5177 sizeof(adv_param), adv_param,
5178 setup_add_advertising_callback,
5182 static void setup_add_advertising(const void *test_data)
5184 struct test_data *data = tester_get_data();
5185 struct mgmt_cp_add_advertising *cp;
5186 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
5187 unsigned char param[] = { 0x01 };
5189 tester_print("Adding advertising instance while powered");
5191 cp = (struct mgmt_cp_add_advertising *) adv_param;
5192 setup_add_adv_param(cp, 1);
5194 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
5195 sizeof(param), ¶m,
5198 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5199 sizeof(param), ¶m,
5202 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
5203 sizeof(adv_param), adv_param,
5204 setup_add_advertising_callback,
5208 static void setup_add_advertising_connectable(const void *test_data)
5210 struct test_data *data = tester_get_data();
5211 struct mgmt_cp_add_advertising *cp;
5212 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
5213 unsigned char param[] = { 0x01 };
5215 tester_print("Adding advertising instance while connectable");
5217 cp = (struct mgmt_cp_add_advertising *) adv_param;
5218 setup_add_adv_param(cp, 1);
5220 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
5221 sizeof(param), ¶m,
5224 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5225 sizeof(param), ¶m,
5228 mgmt_send(data->mgmt, MGMT_OP_SET_CONNECTABLE, data->mgmt_index,
5229 sizeof(param), ¶m,
5232 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
5233 sizeof(adv_param), adv_param,
5234 setup_add_advertising_callback,
5238 static void setup_add_advertising_timeout(const void *test_data)
5240 struct test_data *data = tester_get_data();
5241 struct mgmt_cp_add_advertising *cp;
5242 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
5243 unsigned char param[] = { 0x01 };
5245 tester_print("Adding advertising instance with timeout");
5247 cp = (struct mgmt_cp_add_advertising *) adv_param;
5248 setup_add_adv_param(cp, 1);
5251 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
5252 sizeof(param), ¶m,
5255 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5256 sizeof(param), ¶m,
5259 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
5260 sizeof(adv_param), adv_param,
5261 setup_add_advertising_callback,
5265 static void setup_add_advertising_duration(const void *test_data)
5267 struct test_data *data = tester_get_data();
5268 struct mgmt_cp_add_advertising *cp;
5269 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
5270 unsigned char param[] = { 0x01 };
5272 tester_print("Adding instance with long timeout/short duration");
5274 cp = (struct mgmt_cp_add_advertising *) adv_param;
5275 setup_add_adv_param(cp, 1);
5279 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
5280 sizeof(param), ¶m,
5283 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5284 sizeof(param), ¶m,
5287 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
5288 sizeof(adv_param), adv_param,
5289 setup_add_advertising_callback,
5293 static void setup_power_cycle_callback(uint8_t status, uint16_t length,
5294 const void *param, void *user_data)
5296 struct test_data *data = tester_get_data();
5297 unsigned char param_off[] = { 0x00 };
5299 if (status != MGMT_STATUS_SUCCESS) {
5300 tester_setup_failed();
5304 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5305 sizeof(param_off), ¶m_off,
5311 static void setup_add_advertising_power_cycle(const void *test_data)
5313 struct test_data *data = tester_get_data();
5314 struct mgmt_cp_add_advertising *cp;
5315 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
5316 unsigned char param_on[] = { 0x01 };
5318 tester_print("Adding instance without timeout and power cycle");
5320 cp = (struct mgmt_cp_add_advertising *) adv_param;
5321 setup_add_adv_param(cp, 1);
5323 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
5324 sizeof(param_on), ¶m_on,
5327 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5328 sizeof(param_on), ¶m_on,
5331 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
5332 sizeof(adv_param), adv_param,
5333 setup_power_cycle_callback,
5337 static void setup_set_and_add_advertising(const void *test_data)
5339 struct test_data *data = tester_get_data();
5340 struct mgmt_cp_add_advertising *cp;
5341 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
5342 unsigned char param[] = { 0x01 };
5344 tester_print("Set and add advertising instance");
5346 cp = (struct mgmt_cp_add_advertising *) adv_param;
5347 setup_add_adv_param(cp, 1);
5349 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
5350 sizeof(param), ¶m,
5353 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5354 sizeof(param), ¶m,
5357 mgmt_send(data->mgmt, MGMT_OP_SET_ADVERTISING, data->mgmt_index,
5358 sizeof(param), ¶m,
5361 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
5362 sizeof(adv_param), adv_param,
5363 setup_add_advertising_callback,
5367 static void setup_multi_adv_second_instance(uint8_t status, uint16_t length,
5368 const void *param, void *user_data) {
5369 struct mgmt_rp_add_advertising *rp =
5370 (struct mgmt_rp_add_advertising *) param;
5371 struct test_data *data = tester_get_data();
5372 struct mgmt_cp_add_advertising *cp;
5373 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
5375 if (status != MGMT_STATUS_SUCCESS) {
5376 tester_setup_failed();
5380 tester_print("Add Advertising setup complete (instance %d)",
5383 cp = (struct mgmt_cp_add_advertising *) adv_param;
5384 setup_add_adv_param(cp, 2);
5388 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
5389 sizeof(adv_param), adv_param,
5390 setup_add_advertising_callback,
5394 static void setup_multi_adv(const void *test_data)
5396 struct test_data *data = tester_get_data();
5397 struct mgmt_cp_add_advertising *cp;
5398 unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
5399 unsigned char param[] = { 0x01 };
5401 tester_print("Adding two instances with timeout 1 and duration 1");
5403 cp = (struct mgmt_cp_add_advertising *) adv_param;
5404 setup_add_adv_param(cp, 1);
5408 mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
5409 sizeof(param), ¶m,
5412 mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
5413 sizeof(param), ¶m,
5416 mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
5417 sizeof(adv_param), adv_param,
5418 setup_multi_adv_second_instance,
5422 static void setup_complete(uint8_t status, uint16_t length,
5423 const void *param, void *user_data)
5425 struct test_data *data = tester_get_data();
5427 if (status != MGMT_STATUS_SUCCESS) {
5428 tester_setup_failed();
5432 tester_print("Initial settings completed");
5434 if (data->test_setup)
5435 data->test_setup(data);
5440 static void pin_code_request_callback(uint16_t index, uint16_t length,
5441 const void *param, void *user_data)
5443 const struct mgmt_ev_pin_code_request *ev = param;
5444 struct test_data *data = user_data;
5445 const struct generic_data *test = data->test_data;
5446 struct mgmt_cp_pin_code_reply cp;
5448 test_condition_complete(data);
5450 memset(&cp, 0, sizeof(cp));
5451 memcpy(&cp.addr, &ev->addr, sizeof(cp.addr));
5454 mgmt_reply(data->mgmt, MGMT_OP_PIN_CODE_NEG_REPLY,
5455 data->mgmt_index, sizeof(cp.addr), &cp.addr,
5460 cp.pin_len = test->pin_len;
5461 memcpy(cp.pin_code, test->pin, test->pin_len);
5463 mgmt_reply(data->mgmt, MGMT_OP_PIN_CODE_REPLY, data->mgmt_index,
5464 sizeof(cp), &cp, NULL, NULL, NULL);
5467 static void user_confirm_request_callback(uint16_t index, uint16_t length,
5471 const struct mgmt_ev_user_confirm_request *ev = param;
5472 struct test_data *data = user_data;
5473 const struct generic_data *test = data->test_data;
5474 struct mgmt_cp_user_confirm_reply cp;
5477 if (test->just_works) {
5478 tester_warn("User Confirmation received for just-works case");
5479 tester_test_failed();
5483 memset(&cp, 0, sizeof(cp));
5484 memcpy(&cp.addr, &ev->addr, sizeof(cp.addr));
5486 if (test->reject_confirm)
5487 opcode = MGMT_OP_USER_CONFIRM_NEG_REPLY;
5489 opcode = MGMT_OP_USER_CONFIRM_REPLY;
5491 mgmt_reply(data->mgmt, opcode, data->mgmt_index, sizeof(cp), &cp,
5495 static void user_passkey_request_callback(uint16_t index, uint16_t length,
5499 const struct mgmt_ev_user_passkey_request *ev = param;
5500 struct test_data *data = user_data;
5501 const struct generic_data *test = data->test_data;
5502 struct mgmt_cp_user_passkey_reply cp;
5504 if (test->just_works) {
5505 tester_warn("User Passkey Request for just-works case");
5506 tester_test_failed();
5510 memset(&cp, 0, sizeof(cp));
5511 memcpy(&cp.addr, &ev->addr, sizeof(cp.addr));
5513 if (test->reject_confirm) {
5514 mgmt_reply(data->mgmt, MGMT_OP_USER_PASSKEY_NEG_REPLY,
5515 data->mgmt_index, sizeof(cp.addr), &cp.addr,
5520 mgmt_reply(data->mgmt, MGMT_OP_USER_PASSKEY_REPLY, data->mgmt_index,
5521 sizeof(cp), &cp, NULL, NULL, NULL);
5524 static void test_setup(const void *test_data)
5526 struct test_data *data = tester_get_data();
5527 const struct generic_data *test = data->test_data;
5528 struct bthost *bthost = hciemu_client_get_host(data->hciemu);
5529 const uint16_t *cmd;
5534 if (test->pin || test->expect_pin) {
5535 mgmt_register(data->mgmt, MGMT_EV_PIN_CODE_REQUEST,
5536 data->mgmt_index, pin_code_request_callback,
5538 test_add_condition(data);
5541 mgmt_register(data->mgmt, MGMT_EV_USER_CONFIRM_REQUEST,
5542 data->mgmt_index, user_confirm_request_callback,
5545 mgmt_register(data->mgmt, MGMT_EV_USER_PASSKEY_REQUEST,
5546 data->mgmt_index, user_passkey_request_callback,
5549 if (test->client_pin)
5550 bthost_set_pin_code(bthost, test->client_pin,
5551 test->client_pin_len);
5553 if (test->client_io_cap)
5554 bthost_set_io_capability(bthost, test->client_io_cap);
5556 if (test->client_auth_req)
5557 bthost_set_auth_req(bthost, test->client_auth_req);
5558 else if (!test->just_works)
5559 bthost_set_auth_req(bthost, 0x01);
5561 if (test->client_reject_confirm)
5562 bthost_set_reject_user_confirm(bthost, true);
5564 if (test->client_enable_le)
5565 bthost_write_le_host_supported(bthost, 0x01);
5567 if (test->client_enable_sc)
5568 bthost_set_sc_support(bthost, 0x01);
5571 if (!test || !test->setup_settings) {
5572 if (data->test_setup)
5573 data->test_setup(data);
5575 tester_setup_complete();
5579 for (cmd = test->setup_settings; *cmd; cmd++) {
5580 unsigned char simple_param[] = { 0x01 };
5581 unsigned char discov_param[] = { 0x01, 0x00, 0x00 };
5582 unsigned char privacy_param[] = { 0x01,
5583 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
5584 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
5585 unsigned char *param = simple_param;
5586 size_t param_size = sizeof(simple_param);
5587 mgmt_request_func_t func = NULL;
5589 /* If this is the last command (next one is 0) request
5590 * for a callback. */
5592 func = setup_complete;
5594 if (*cmd == MGMT_OP_SET_DISCOVERABLE) {
5595 if (test->setup_limited_discov) {
5596 discov_param[0] = 0x02;
5597 discov_param[1] = 0x01;
5599 param_size = sizeof(discov_param);
5600 param = discov_param;
5603 if (*cmd == MGMT_OP_SET_PRIVACY) {
5604 param_size = sizeof(privacy_param);
5605 param = privacy_param;
5608 if (*cmd == MGMT_OP_SET_LE && test->setup_nobredr) {
5609 unsigned char off[] = { 0x00 };
5610 mgmt_send(data->mgmt, *cmd, data->mgmt_index,
5611 param_size, param, NULL, NULL, NULL);
5612 mgmt_send(data->mgmt, MGMT_OP_SET_BREDR,
5613 data->mgmt_index, sizeof(off), off,
5616 mgmt_send(data->mgmt, *cmd, data->mgmt_index,
5617 param_size, param, func, data, NULL);
5622 static void command_generic_new_settings(uint16_t index, uint16_t length,
5623 const void *param, void *user_data)
5625 struct test_data *data = tester_get_data();
5627 tester_print("New settings event received");
5629 mgmt_unregister(data->mgmt, data->mgmt_settings_id);
5631 tester_test_failed();
5634 static void command_generic_new_settings_alt(uint16_t index, uint16_t length,
5635 const void *param, void *user_data)
5637 struct test_data *data = tester_get_data();
5638 const struct generic_data *test = data->test_data;
5642 tester_warn("Invalid parameter size for new settings event");
5643 tester_test_failed();
5647 settings = get_le32(param);
5649 tester_print("New settings 0x%08x received", settings);
5651 if (test->expect_settings_unset) {
5652 if ((settings & test->expect_settings_unset) != 0)
5657 if (!test->expect_settings_set)
5660 if ((settings & test->expect_settings_set) != test->expect_settings_set)
5664 tester_print("Unregistering new settings notification");
5666 mgmt_unregister(data->mgmt_alt, data->mgmt_alt_settings_id);
5668 test_condition_complete(data);
5671 static bool verify_alt_ev(const void *param, uint16_t length)
5673 struct test_data *data = tester_get_data();
5674 const struct generic_data *test = data->test_data;
5676 if (length != test->expect_alt_ev_len) {
5677 tester_warn("Invalid length %u != %u", length,
5678 test->expect_alt_ev_len);
5682 if (test->expect_alt_ev_param &&
5683 memcmp(test->expect_alt_ev_param, param, length)) {
5684 tester_warn("Event parameters do not match");
5691 static void command_generic_event_alt(uint16_t index, uint16_t length,
5695 struct test_data *data = tester_get_data();
5696 const struct generic_data *test = data->test_data;
5697 bool (*verify)(const void *param, uint16_t length);
5699 tester_print("New %s event received", mgmt_evstr(test->expect_alt_ev));
5701 mgmt_unregister(data->mgmt_alt, data->mgmt_alt_ev_id);
5703 if (test->verify_alt_ev_func)
5704 verify = test->verify_alt_ev_func;
5706 verify = verify_alt_ev;
5708 if (!verify(param, length)) {
5709 tester_warn("Incorrect %s event parameters",
5710 mgmt_evstr(test->expect_alt_ev));
5711 tester_test_failed();
5715 test_condition_complete(data);
5718 static void command_generic_callback(uint8_t status, uint16_t length,
5719 const void *param, void *user_data)
5721 struct test_data *data = tester_get_data();
5722 const struct generic_data *test = data->test_data;
5723 const void *expect_param = test->expect_param;
5724 uint16_t expect_len = test->expect_len;
5726 tester_print("%s (0x%04x): %s (0x%02x)", mgmt_opstr(test->send_opcode),
5727 test->send_opcode, mgmt_errstr(status), status);
5729 if (status != test->expect_status) {
5730 tester_test_failed();
5734 if (!test->expect_ignore_param) {
5735 if (test->expect_func)
5736 expect_param = test->expect_func(&expect_len);
5738 if (length != expect_len) {
5739 tester_warn("Invalid cmd response parameter size");
5740 tester_test_failed();
5744 if (expect_param && expect_len > 0 &&
5745 memcmp(param, expect_param, length)) {
5746 tester_warn("Unexpected cmd response parameter value");
5747 tester_test_failed();
5752 test_condition_complete(data);
5755 static void command_hci_callback(uint16_t opcode, const void *param,
5756 uint8_t length, void *user_data)
5758 struct test_data *data = user_data;
5759 const struct generic_data *test = data->test_data;
5760 const void *expect_hci_param = test->expect_hci_param;
5761 uint8_t expect_hci_len = test->expect_hci_len;
5763 tester_print("HCI Command 0x%04x length %u", opcode, length);
5765 if (opcode != test->expect_hci_command)
5768 if (test->expect_hci_func)
5769 expect_hci_param = test->expect_hci_func(&expect_hci_len);
5771 if (length != expect_hci_len) {
5772 tester_warn("Invalid parameter size for HCI command");
5773 tester_test_failed();
5777 if (memcmp(param, expect_hci_param, length) != 0) {
5778 tester_warn("Unexpected HCI command parameter value");
5779 tester_test_failed();
5783 test_condition_complete(data);
5786 static bool power_off(uint16_t index)
5790 sk = hci_open_dev(index);
5794 err = ioctl(sk, HCIDEVDOWN, index);
5804 static void test_command_generic(const void *test_data)
5806 struct test_data *data = tester_get_data();
5807 const struct generic_data *test = data->test_data;
5808 const void *send_param = test->send_param;
5809 uint16_t send_len = test->send_len;
5813 index = test->send_index_none ? MGMT_INDEX_NONE : data->mgmt_index;
5815 if (test->expect_settings_set || test->expect_settings_unset) {
5816 tester_print("Registering new settings notification");
5818 id = mgmt_register(data->mgmt, MGMT_EV_NEW_SETTINGS, index,
5819 command_generic_new_settings, NULL, NULL);
5820 data->mgmt_settings_id = id;
5822 id = mgmt_register(data->mgmt_alt, MGMT_EV_NEW_SETTINGS, index,
5823 command_generic_new_settings_alt, NULL, NULL);
5824 data->mgmt_alt_settings_id = id;
5825 test_add_condition(data);
5828 if (test->expect_alt_ev) {
5829 tester_print("Registering %s notification",
5830 mgmt_evstr(test->expect_alt_ev));
5831 id = mgmt_register(data->mgmt_alt, test->expect_alt_ev, index,
5832 command_generic_event_alt, NULL, NULL);
5833 data->mgmt_alt_ev_id = id;
5834 test_add_condition(data);
5837 if (test->expect_hci_command) {
5838 tester_print("Registering HCI command callback");
5839 hciemu_add_master_post_command_hook(data->hciemu,
5840 command_hci_callback, data);
5841 test_add_condition(data);
5844 if (test->send_opcode == 0x0000) {
5845 tester_print("Executing no-op test");
5849 tester_print("Sending %s (0x%04x)", mgmt_opstr(test->send_opcode),
5852 if (test->send_func)
5853 send_param = test->send_func(&send_len);
5855 if (test->force_power_off) {
5856 mgmt_send_nowait(data->mgmt, test->send_opcode, index,
5857 send_len, send_param,
5858 command_generic_callback, NULL, NULL);
5859 power_off(data->mgmt_index);
5861 mgmt_send(data->mgmt, test->send_opcode, index, send_len,
5862 send_param, command_generic_callback,
5866 test_add_condition(data);
5869 static void check_scan(void *user_data)
5871 struct test_data *data = tester_get_data();
5873 if (hciemu_get_master_le_scan_enable(data->hciemu)) {
5874 tester_warn("LE scan still enabled");
5875 tester_test_failed();
5879 if (hciemu_get_master_scan_enable(data->hciemu)) {
5880 tester_warn("BR/EDR scan still enabled");
5881 tester_test_failed();
5885 test_condition_complete(data);
5888 static void test_remove_device(const void *test_data)
5890 struct test_data *data = tester_get_data();
5892 test_command_generic(test_data);
5893 tester_wait(1, check_scan, NULL);
5894 test_add_condition(data);
5897 static void test_device_found(const void *test_data)
5899 struct test_data *data = tester_get_data();
5900 const struct generic_data *test = data->test_data;
5901 struct bthost *bthost;
5903 bthost = hciemu_client_get_host(data->hciemu);
5905 if ((data->hciemu_type == HCIEMU_TYPE_LE) ||
5906 (data->hciemu_type == HCIEMU_TYPE_BREDRLE)) {
5908 bthost_set_adv_data(bthost, test->adv_data,
5909 test->adv_data_len);
5911 bthost_set_adv_enable(bthost, 0x01);
5914 if (data->hciemu_type != HCIEMU_TYPE_LE)
5915 bthost_write_scan_enable(bthost, 0x03);
5917 test_command_generic(test_data);
5920 static void pairing_new_conn(uint16_t handle, void *user_data)
5922 struct test_data *data = tester_get_data();
5923 struct bthost *bthost;
5925 tester_print("New connection with handle 0x%04x", handle);
5927 bthost = hciemu_client_get_host(data->hciemu);
5929 bthost_request_auth(bthost, handle);
5932 static void test_pairing_acceptor(const void *test_data)
5934 struct test_data *data = tester_get_data();
5935 const struct generic_data *test = data->test_data;
5936 const uint8_t *master_bdaddr;
5937 struct bthost *bthost;
5940 if (test->expect_alt_ev) {
5943 tester_print("Registering %s notification",
5944 mgmt_evstr(test->expect_alt_ev));
5945 id = mgmt_register(data->mgmt_alt, test->expect_alt_ev,
5947 command_generic_event_alt, NULL, NULL);
5948 data->mgmt_alt_ev_id = id;
5949 test_add_condition(data);
5952 master_bdaddr = hciemu_get_master_bdaddr(data->hciemu);
5953 if (!master_bdaddr) {
5954 tester_warn("No master bdaddr");
5955 tester_test_failed();
5959 bthost = hciemu_client_get_host(data->hciemu);
5960 bthost_set_connect_cb(bthost, pairing_new_conn, data);
5962 if (data->hciemu_type == HCIEMU_TYPE_BREDRLE)
5963 addr_type = BDADDR_BREDR;
5965 addr_type = BDADDR_LE_PUBLIC;
5967 bthost_hci_connect(bthost, master_bdaddr, addr_type);
5970 static void connected_event(uint16_t index, uint16_t length, const void *param,
5973 struct test_data *data = tester_get_data();
5974 const struct generic_data *test = data->test_data;
5975 const void *send_param = test->send_param;
5976 uint16_t send_len = test->send_len;
5978 tester_print("Sending %s 0x%04x", mgmt_opstr(test->send_opcode),
5981 if (test->send_func)
5982 send_param = test->send_func(&send_len);
5984 if (test->force_power_off) {
5985 mgmt_send_nowait(data->mgmt, test->send_opcode, index,
5986 send_len, send_param,
5987 command_generic_callback, NULL, NULL);
5988 power_off(data->mgmt_index);
5990 mgmt_send(data->mgmt, test->send_opcode, index, send_len,
5991 send_param, command_generic_callback,
5995 test_add_condition(data);
5997 /* Complete MGMT_EV_DEVICE_CONNECTED *after* adding new one */
5998 test_condition_complete(data);
6001 static void test_command_generic_connect(const void *test_data)
6003 struct test_data *data = tester_get_data();
6005 const uint8_t *master_bdaddr;
6007 struct bthost *bthost;
6009 tester_print("Registering %s notification",
6010 mgmt_evstr(MGMT_EV_DEVICE_CONNECTED));
6011 id = mgmt_register(data->mgmt_alt, MGMT_EV_DEVICE_CONNECTED,
6012 data->mgmt_index, connected_event,
6014 data->mgmt_alt_ev_id = id;
6015 test_add_condition(data);
6017 master_bdaddr = hciemu_get_master_bdaddr(data->hciemu);
6018 if (!master_bdaddr) {
6019 tester_warn("No master bdaddr");
6020 tester_test_failed();
6024 addr_type = data->hciemu_type == HCIEMU_TYPE_BREDRLE ? BDADDR_BREDR :
6027 bthost = hciemu_client_get_host(data->hciemu);
6028 bthost_hci_connect(bthost, master_bdaddr, addr_type);
6031 int main(int argc, char *argv[])
6033 tester_init(&argc, &argv);
6035 test_bredrle("Controller setup",
6036 NULL, NULL, controller_setup);
6037 test_bredr("Controller setup (BR/EDR-only)",
6038 NULL, NULL, controller_setup);
6039 test_le("Controller setup (LE)",
6040 NULL, NULL, controller_setup);
6042 test_bredrle("Invalid command",
6043 &invalid_command_test,
6044 NULL, test_command_generic);
6046 test_bredrle("Read version - Success",
6047 &read_version_success_test,
6048 NULL, test_command_generic);
6049 test_bredrle("Read version - Invalid parameters",
6050 &read_version_invalid_param_test,
6051 NULL, test_command_generic);
6052 test_bredrle("Read version - Invalid index",
6053 &read_version_invalid_index_test,
6054 NULL, test_command_generic);
6055 test_bredrle("Read commands - Invalid parameters",
6056 &read_commands_invalid_param_test,
6057 NULL, test_command_generic);
6058 test_bredrle("Read commands - Invalid index",
6059 &read_commands_invalid_index_test,
6060 NULL, test_command_generic);
6061 test_bredrle("Read index list - Invalid parameters",
6062 &read_index_list_invalid_param_test,
6063 NULL, test_command_generic);
6064 test_bredrle("Read index list - Invalid index",
6065 &read_index_list_invalid_index_test,
6066 NULL, test_command_generic);
6067 test_bredrle("Read info - Invalid parameters",
6068 &read_info_invalid_param_test,
6069 NULL, test_command_generic);
6070 test_bredrle("Read info - Invalid index",
6071 &read_info_invalid_index_test,
6072 NULL, test_command_generic);
6073 test_bredrle("Read unconfigured index list - Invalid parameters",
6074 &read_unconf_index_list_invalid_param_test,
6075 NULL, test_command_generic);
6076 test_bredrle("Read unconfigured index list - Invalid index",
6077 &read_unconf_index_list_invalid_index_test,
6078 NULL, test_command_generic);
6079 test_bredrle("Read configuration info - Invalid parameters",
6080 &read_config_info_invalid_param_test,
6081 NULL, test_command_generic);
6082 test_bredrle("Read configuration info - Invalid index",
6083 &read_config_info_invalid_index_test,
6084 NULL, test_command_generic);
6085 test_bredrle("Read extended index list - Invalid parameters",
6086 &read_ext_index_list_invalid_param_test,
6087 NULL, test_command_generic);
6088 test_bredrle("Read extended index list - Invalid index",
6089 &read_ext_index_list_invalid_index_test,
6090 NULL, test_command_generic);
6092 test_bredrle("Set powered on - Success",
6093 &set_powered_on_success_test,
6094 NULL, test_command_generic);
6095 test_bredrle("Set powered on - Invalid parameters 1",
6096 &set_powered_on_invalid_param_test_1,
6097 NULL, test_command_generic);
6098 test_bredrle("Set powered on - Invalid parameters 2",
6099 &set_powered_on_invalid_param_test_2,
6100 NULL, test_command_generic);
6101 test_bredrle("Set powered on - Invalid parameters 3",
6102 &set_powered_on_invalid_param_test_3,
6103 NULL, test_command_generic);
6104 test_bredrle("Set powered on - Invalid index",
6105 &set_powered_on_invalid_index_test,
6106 NULL, test_command_generic);
6107 test_le("Set powered on - Privacy and Advertising",
6108 &set_powered_on_privacy_adv_test,
6109 NULL, test_command_generic);
6111 test_bredrle("Set powered off - Success",
6112 &set_powered_off_success_test,
6113 NULL, test_command_generic);
6114 test_bredrle("Set powered off - Class of Device",
6115 &set_powered_off_class_test,
6116 setup_class, test_command_generic);
6117 test_bredrle("Set powered off - Invalid parameters 1",
6118 &set_powered_off_invalid_param_test_1,
6119 NULL, test_command_generic);
6120 test_bredrle("Set powered off - Invalid parameters 2",
6121 &set_powered_off_invalid_param_test_2,
6122 NULL, test_command_generic);
6123 test_bredrle("Set powered off - Invalid parameters 3",
6124 &set_powered_off_invalid_param_test_3,
6125 NULL, test_command_generic);
6127 test_bredrle("Set connectable on - Success 1",
6128 &set_connectable_on_success_test_1,
6129 NULL, test_command_generic);
6130 test_bredrle("Set connectable on - Success 2",
6131 &set_connectable_on_success_test_2,
6132 NULL, test_command_generic);
6133 test_bredrle("Set connectable on - Invalid parameters 1",
6134 &set_connectable_on_invalid_param_test_1,
6135 NULL, test_command_generic);
6136 test_bredrle("Set connectable on - Invalid parameters 2",
6137 &set_connectable_on_invalid_param_test_2,
6138 NULL, test_command_generic);
6139 test_bredrle("Set connectable on - Invalid parameters 3",
6140 &set_connectable_on_invalid_param_test_3,
6141 NULL, test_command_generic);
6142 test_bredrle("Set connectable on - Invalid index",
6143 &set_connectable_on_invalid_index_test,
6144 NULL, test_command_generic);
6146 test_le("Set connectable on (LE) - Success 1",
6147 &set_connectable_on_le_test_1,
6148 NULL, test_command_generic);
6149 test_le("Set connectable on (LE) - Success 2",
6150 &set_connectable_on_le_test_2,
6151 NULL, test_command_generic);
6152 test_le("Set connectable on (LE) - Success 3",
6153 &set_connectable_on_le_test_3,
6154 NULL, test_command_generic);
6156 test_bredrle("Set connectable off - Success 1",
6157 &set_connectable_off_success_test_1,
6158 NULL, test_command_generic);
6159 test_bredrle("Set connectable off - Success 2",
6160 &set_connectable_off_success_test_2,
6161 NULL, test_command_generic);
6162 test_bredrle("Set connectable off - Success 3",
6163 &set_connectable_off_success_test_3,
6164 NULL, test_command_generic);
6165 test_bredrle("Set connectable off - Success 4",
6166 &set_connectable_off_success_test_4,
6167 setup_add_device, test_command_generic);
6169 test_le("Set connectable off (LE) - Success 1",
6170 &set_connectable_off_le_test_1,
6171 NULL, test_command_generic);
6172 test_le("Set connectable off (LE) - Success 2",
6173 &set_connectable_off_le_test_2,
6174 NULL, test_command_generic);
6175 test_le("Set connectable off (LE) - Success 3",
6176 &set_connectable_off_le_test_3,
6177 NULL, test_command_generic);
6178 test_le("Set connectable off (LE) - Success 4",
6179 &set_connectable_off_le_test_4,
6180 NULL, test_command_generic);
6182 test_bredrle("Set fast connectable on - Success 1",
6183 &set_fast_conn_on_success_test_1,
6184 NULL, test_command_generic);
6185 test_bredrle("Set fast connectable on - Success 2",
6186 &set_fast_conn_on_success_test_2,
6187 NULL, test_command_generic);
6188 test_bredrle("Set fast connectable on - Success 3",
6189 &set_fast_conn_on_success_test_3,
6190 NULL, test_command_generic);
6191 test_bredrle("Set fast connectable on - Invalid Params 1",
6192 &set_fast_conn_nval_param_test_1,
6193 NULL, test_command_generic);
6194 test_le("Set fast connectable on - Not Supported 1",
6195 &set_fast_conn_on_not_supported_test_1,
6196 NULL, test_command_generic);
6198 test_bredrle("Set bondable on - Success",
6199 &set_bondable_on_success_test,
6200 NULL, test_command_generic);
6201 test_bredrle("Set bondable on - Invalid parameters 1",
6202 &set_bondable_on_invalid_param_test_1,
6203 NULL, test_command_generic);
6204 test_bredrle("Set bondable on - Invalid parameters 2",
6205 &set_bondable_on_invalid_param_test_2,
6206 NULL, test_command_generic);
6207 test_bredrle("Set bondable on - Invalid parameters 3",
6208 &set_bondable_on_invalid_param_test_3,
6209 NULL, test_command_generic);
6210 test_bredrle("Set bondable on - Invalid index",
6211 &set_bondable_on_invalid_index_test,
6212 NULL, test_command_generic);
6214 test_bredrle("Set discoverable on - Invalid parameters 1",
6215 &set_discoverable_on_invalid_param_test_1,
6216 NULL, test_command_generic);
6217 test_bredrle("Set discoverable on - Invalid parameters 2",
6218 &set_discoverable_on_invalid_param_test_2,
6219 NULL, test_command_generic);
6220 test_bredrle("Set discoverable on - Invalid parameters 3",
6221 &set_discoverable_on_invalid_param_test_3,
6222 NULL, test_command_generic);
6223 test_bredrle("Set discoverable on - Invalid parameters 4",
6224 &set_discoverable_on_invalid_param_test_4,
6225 NULL, test_command_generic);
6226 test_bredrle("Set discoverable on - Not powered 1",
6227 &set_discoverable_on_not_powered_test_1,
6228 NULL, test_command_generic);
6229 test_bredrle("Set discoverable on - Not powered 2",
6230 &set_discoverable_on_not_powered_test_2,
6231 NULL, test_command_generic);
6232 test_bredrle("Set discoverable on - Rejected 1",
6233 &set_discoverable_on_rejected_test_1,
6234 NULL, test_command_generic);
6235 test_bredrle("Set discoverable on - Rejected 2",
6236 &set_discoverable_on_rejected_test_2,
6237 NULL, test_command_generic);
6238 test_bredrle("Set discoverable on - Rejected 3",
6239 &set_discoverable_on_rejected_test_3,
6240 NULL, test_command_generic);
6241 test_bredrle("Set discoverable on - Success 1",
6242 &set_discoverable_on_success_test_1,
6243 NULL, test_command_generic);
6244 test_bredrle("Set discoverable on - Success 2",
6245 &set_discoverable_on_success_test_2,
6246 NULL, test_command_generic);
6247 test_le("Set discoverable on (LE) - Success 1",
6248 &set_discov_on_le_success_1,
6249 NULL, test_command_generic);
6250 test_bredrle("Set discoverable off - Success 1",
6251 &set_discoverable_off_success_test_1,
6252 NULL, test_command_generic);
6253 test_bredrle("Set discoverable off - Success 2",
6254 &set_discoverable_off_success_test_2,
6255 NULL, test_command_generic);
6256 test_bredrle("Set limited discoverable on - Success 1",
6257 &set_limited_discov_on_success_1,
6258 NULL, test_command_generic);
6259 test_bredrle("Set limited discoverable on - Success 2",
6260 &set_limited_discov_on_success_2,
6261 NULL, test_command_generic);
6262 test_bredrle("Set limited discoverable on - Success 3",
6263 &set_limited_discov_on_success_3,
6264 NULL, test_command_generic);
6265 test_le("Set limited discoverable on (LE) - Success 1",
6266 &set_limited_discov_on_le_success_1,
6267 NULL, test_command_generic);
6269 test_bredrle("Set link security on - Success 1",
6270 &set_link_sec_on_success_test_1,
6271 NULL, test_command_generic);
6272 test_bredrle("Set link security on - Success 2",
6273 &set_link_sec_on_success_test_2,
6274 NULL, test_command_generic);
6275 test_bredrle("Set link security on - Success 3",
6276 &set_link_sec_on_success_test_3,
6277 NULL, test_command_generic);
6278 test_bredrle("Set link security on - Invalid parameters 1",
6279 &set_link_sec_on_invalid_param_test_1,
6280 NULL, test_command_generic);
6281 test_bredrle("Set link security on - Invalid parameters 2",
6282 &set_link_sec_on_invalid_param_test_2,
6283 NULL, test_command_generic);
6284 test_bredrle("Set link security on - Invalid parameters 3",
6285 &set_link_sec_on_invalid_param_test_3,
6286 NULL, test_command_generic);
6287 test_bredrle("Set link security on - Invalid index",
6288 &set_link_sec_on_invalid_index_test,
6289 NULL, test_command_generic);
6291 test_bredrle("Set link security off - Success 1",
6292 &set_link_sec_off_success_test_1,
6293 NULL, test_command_generic);
6294 test_bredrle("Set link security off - Success 2",
6295 &set_link_sec_off_success_test_2,
6296 NULL, test_command_generic);
6298 test_bredrle("Set SSP on - Success 1",
6299 &set_ssp_on_success_test_1,
6300 NULL, test_command_generic);
6301 test_bredrle("Set SSP on - Success 2",
6302 &set_ssp_on_success_test_2,
6303 NULL, test_command_generic);
6304 test_bredrle("Set SSP on - Success 3",
6305 &set_ssp_on_success_test_3,
6306 NULL, test_command_generic);
6307 test_bredrle("Set SSP on - Invalid parameters 1",
6308 &set_ssp_on_invalid_param_test_1,
6309 NULL, test_command_generic);
6310 test_bredrle("Set SSP on - Invalid parameters 2",
6311 &set_ssp_on_invalid_param_test_2,
6312 NULL, test_command_generic);
6313 test_bredrle("Set SSP on - Invalid parameters 3",
6314 &set_ssp_on_invalid_param_test_3,
6315 NULL, test_command_generic);
6316 test_bredrle("Set SSP on - Invalid index",
6317 &set_ssp_on_invalid_index_test,
6318 NULL, test_command_generic);
6320 test_bredrle("Set Secure Connections on - Success 1",
6321 &set_sc_on_success_test_1,
6322 NULL, test_command_generic);
6323 test_bredrle("Set Secure Connections on - Success 2",
6324 &set_sc_on_success_test_2,
6325 NULL, test_command_generic);
6326 test_bredrle("Set Secure Connections on - Invalid params 1",
6327 &set_sc_on_invalid_param_test_1,
6328 NULL, test_command_generic);
6329 test_bredrle("Set Secure Connections on - Invalid params 2",
6330 &set_sc_on_invalid_param_test_2,
6331 NULL, test_command_generic);
6332 test_bredrle("Set Secure Connections on - Invalid params 3",
6333 &set_sc_on_invalid_param_test_3,
6334 NULL, test_command_generic);
6335 test_bredrle("Set Secure Connections on - Invalid index",
6336 &set_sc_on_invalid_index_test,
6337 NULL, test_command_generic);
6338 test_bredr("Set Secure Connections on - Not supported 1",
6339 &set_sc_on_not_supported_test_1,
6340 NULL, test_command_generic);
6341 test_bredr("Set Secure Connections on - Not supported 2",
6342 &set_sc_on_not_supported_test_2,
6343 NULL, test_command_generic);
6345 test_bredrle("Set Secure Connections Only on - Success 1",
6346 &set_sc_only_on_success_test_1,
6347 NULL, test_command_generic);
6348 test_bredrle("Set Secure Connections Only on - Success 2",
6349 &set_sc_only_on_success_test_2,
6350 NULL, test_command_generic);
6352 test_bredrle("Set High Speed on - Success",
6353 &set_hs_on_success_test,
6354 NULL, test_command_generic);
6355 test_bredrle("Set High Speed on - Invalid parameters 1",
6356 &set_hs_on_invalid_param_test_1,
6357 NULL, test_command_generic);
6358 test_bredrle("Set High Speed on - Invalid parameters 2",
6359 &set_hs_on_invalid_param_test_2,
6360 NULL, test_command_generic);
6361 test_bredrle("Set High Speed on - Invalid parameters 3",
6362 &set_hs_on_invalid_param_test_3,
6363 NULL, test_command_generic);
6364 test_bredrle("Set High Speed on - Invalid index",
6365 &set_hs_on_invalid_index_test,
6366 NULL, test_command_generic);
6368 test_bredrle("Set Low Energy on - Success 1",
6369 &set_le_on_success_test_1,
6370 NULL, test_command_generic);
6371 test_bredrle("Set Low Energy on - Success 2",
6372 &set_le_on_success_test_2,
6373 NULL, test_command_generic);
6374 test_bredrle("Set Low Energy on - Success 3",
6375 &set_le_on_success_test_3,
6376 NULL, test_command_generic);
6377 test_bredrle("Set Low Energy on - Invalid parameters 1",
6378 &set_le_on_invalid_param_test_1,
6379 NULL, test_command_generic);
6380 test_bredrle("Set Low Energy on - Invalid parameters 2",
6381 &set_le_on_invalid_param_test_2,
6382 NULL, test_command_generic);
6383 test_bredrle("Set Low Energy on - Invalid parameters 3",
6384 &set_le_on_invalid_param_test_3,
6385 NULL, test_command_generic);
6386 test_bredrle("Set Low Energy on - Invalid index",
6387 &set_le_on_invalid_index_test,
6388 NULL, test_command_generic);
6390 test_bredrle("Set Advertising on - Success 1",
6391 &set_adv_on_success_test_1,
6392 NULL, test_command_generic);
6393 test_bredrle("Set Advertising on - Success 2",
6394 &set_adv_on_success_test_2,
6395 NULL, test_command_generic);
6396 test_bredrle("Set Advertising on - Rejected 1",
6397 &set_adv_on_rejected_test_1,
6398 NULL, test_command_generic);
6400 test_bredrle("Set BR/EDR off - Success 1",
6401 &set_bredr_off_success_test_1,
6402 NULL, test_command_generic);
6403 test_bredrle("Set BR/EDR on - Success 1",
6404 &set_bredr_on_success_test_1,
6405 NULL, test_command_generic);
6406 test_bredrle("Set BR/EDR on - Success 2",
6407 &set_bredr_on_success_test_2,
6408 NULL, test_command_generic);
6409 test_bredr("Set BR/EDR off - Not Supported 1",
6410 &set_bredr_off_notsupp_test,
6411 NULL, test_command_generic);
6412 test_le("Set BR/EDR off - Not Supported 2",
6413 &set_bredr_off_notsupp_test,
6414 NULL, test_command_generic);
6415 test_bredrle("Set BR/EDR off - Rejected 1",
6416 &set_bredr_off_failure_test_1,
6417 NULL, test_command_generic);
6418 test_bredrle("Set BR/EDR off - Rejected 2",
6419 &set_bredr_off_failure_test_2,
6420 NULL, test_command_generic);
6421 test_bredrle("Set BR/EDR off - Invalid Parameters 1",
6422 &set_bredr_off_failure_test_3,
6423 NULL, test_command_generic);
6425 test_bredr("Set Local Name - Success 1",
6426 &set_local_name_test_1,
6427 NULL, test_command_generic);
6428 test_bredr("Set Local Name - Success 2",
6429 &set_local_name_test_2,
6430 NULL, test_command_generic);
6431 test_bredr("Set Local Name - Success 3",
6432 &set_local_name_test_3,
6433 NULL, test_command_generic);
6435 test_bredrle("Start Discovery - Not powered 1",
6436 &start_discovery_not_powered_test_1,
6437 NULL, test_command_generic);
6438 test_bredrle("Start Discovery - Invalid parameters 1",
6439 &start_discovery_invalid_param_test_1,
6440 NULL, test_command_generic);
6441 test_bredrle("Start Discovery - Not supported 1",
6442 &start_discovery_not_supported_test_1,
6443 NULL, test_command_generic);
6444 test_bredrle("Start Discovery - Success 1",
6445 &start_discovery_valid_param_test_1,
6446 NULL, test_command_generic);
6447 test_le("Start Discovery - Success 2",
6448 &start_discovery_valid_param_test_2,
6449 NULL, test_command_generic);
6450 test_bredrle("Start Discovery - Power Off 1",
6451 &start_discovery_valid_param_power_off_1,
6452 NULL, test_command_generic);
6454 test_bredrle("Stop Discovery - Success 1",
6455 &stop_discovery_success_test_1,
6456 setup_start_discovery, test_command_generic);
6457 test_bredr("Stop Discovery - BR/EDR (Inquiry) Success 1",
6458 &stop_discovery_bredr_success_test_1,
6459 setup_start_discovery, test_command_generic);
6460 test_bredrle("Stop Discovery - Rejected 1",
6461 &stop_discovery_rejected_test_1,
6462 NULL, test_command_generic);
6463 test_bredrle("Stop Discovery - Invalid parameters 1",
6464 &stop_discovery_invalid_param_test_1,
6465 setup_start_discovery, test_command_generic);
6467 test_bredrle("Start Service Discovery - Not powered 1",
6468 &start_service_discovery_not_powered_test_1,
6469 NULL, test_command_generic);
6470 test_bredrle("Start Service Discovery - Invalid parameters 1",
6471 &start_service_discovery_invalid_param_test_1,
6472 NULL, test_command_generic);
6473 test_bredrle("Start Service Discovery - Not supported 1",
6474 &start_service_discovery_not_supported_test_1,
6475 NULL, test_command_generic);
6476 test_bredrle("Start Service Discovery - Success 1",
6477 &start_service_discovery_valid_param_test_1,
6478 NULL, test_command_generic);
6479 test_le("Start Service Discovery - Success 2",
6480 &start_service_discovery_valid_param_test_2,
6481 NULL, test_command_generic);
6483 test_bredrle("Set Device Class - Success 1",
6484 &set_dev_class_valid_param_test_1,
6485 NULL, test_command_generic);
6486 test_bredrle("Set Device Class - Success 2",
6487 &set_dev_class_valid_param_test_2,
6488 NULL, test_command_generic);
6489 test_bredrle("Set Device Class - Invalid parameters 1",
6490 &set_dev_class_invalid_param_test_1,
6491 NULL, test_command_generic);
6493 test_bredrle("Add UUID - UUID-16 1",
6495 NULL, test_command_generic);
6496 test_bredrle("Add UUID - UUID-16 multiple 1",
6497 &add_multi_uuid16_test_1,
6498 setup_multi_uuid16, test_command_generic);
6499 test_bredrle("Add UUID - UUID-16 partial 1",
6500 &add_multi_uuid16_test_2,
6501 setup_multi_uuid16_2, test_command_generic);
6502 test_bredrle("Add UUID - UUID-32 1",
6504 NULL, test_command_generic);
6505 test_bredrle("Add UUID - UUID-32 multiple 1",
6506 &add_uuid32_multi_test_1,
6507 setup_multi_uuid32, test_command_generic);
6508 test_bredrle("Add UUID - UUID-32 partial 1",
6509 &add_uuid32_multi_test_2,
6510 setup_multi_uuid32_2, test_command_generic);
6511 test_bredrle("Add UUID - UUID-128 1",
6512 &add_uuid128_test_1,
6513 NULL, test_command_generic);
6514 test_bredrle("Add UUID - UUID-128 multiple 1",
6515 &add_uuid128_multi_test_1,
6516 setup_multi_uuid128, test_command_generic);
6517 test_bredrle("Add UUID - UUID-128 partial 1",
6518 &add_uuid128_multi_test_2,
6519 setup_multi_uuid128_2, test_command_generic);
6520 test_bredrle("Add UUID - UUID mix",
6521 &add_uuid_mix_test_1,
6522 setup_uuid_mix, test_command_generic);
6524 test_bredrle("Load Link Keys - Empty List Success 1",
6525 &load_link_keys_success_test_1,
6526 NULL, test_command_generic);
6527 test_bredrle("Load Link Keys - Empty List Success 2",
6528 &load_link_keys_success_test_2,
6529 NULL, test_command_generic);
6530 test_bredrle("Load Link Keys - Invalid Parameters 1",
6531 &load_link_keys_invalid_params_test_1,
6532 NULL, test_command_generic);
6533 test_bredrle("Load Link Keys - Invalid Parameters 2",
6534 &load_link_keys_invalid_params_test_2,
6535 NULL, test_command_generic);
6536 test_bredrle("Load Link Keys - Invalid Parameters 3",
6537 &load_link_keys_invalid_params_test_3,
6538 NULL, test_command_generic);
6540 test_bredrle("Load Long Term Keys - Success 1",
6541 &load_ltks_success_test_1,
6542 NULL, test_command_generic);
6543 test_bredrle("Load Long Term Keys - Invalid Parameters 1",
6544 &load_ltks_invalid_params_test_1,
6545 NULL, test_command_generic);
6546 test_bredrle("Load Long Term Keys - Invalid Parameters 2",
6547 &load_ltks_invalid_params_test_2,
6548 NULL, test_command_generic);
6549 test_bredrle("Load Long Term Keys - Invalid Parameters 3",
6550 &load_ltks_invalid_params_test_3,
6551 NULL, test_command_generic);
6552 test_bredrle("Load Long Term Keys - Invalid Parameters 4",
6553 &load_ltks_invalid_params_test_4,
6554 NULL, test_command_generic);
6556 test_bredrle("Set IO Capability - Invalid Params 1",
6557 &set_io_cap_invalid_param_test_1,
6558 NULL, test_command_generic);
6560 test_bredrle("Pair Device - Not Powered 1",
6561 &pair_device_not_powered_test_1,
6562 NULL, test_command_generic);
6563 test_bredrle("Pair Device - Power off 1",
6564 &pair_device_power_off_test_1,
6565 NULL, test_command_generic);
6566 test_le("Pair Device - Incorrect transport reject 1",
6567 &pair_device_not_supported_test_1,
6568 NULL, test_command_generic);
6569 test_bredr("Pair Device - Incorrect transport reject 2",
6570 &pair_device_not_supported_test_2,
6571 NULL, test_command_generic);
6572 test_bredrle("Pair Device - Reject on not enabled transport 1",
6573 &pair_device_reject_transport_not_enabled_1,
6574 NULL, test_command_generic);
6575 test_bredrle("Pair Device - Reject on not enabled transport 2",
6576 &pair_device_reject_transport_not_enabled_2,
6577 NULL, test_command_generic);
6578 test_bredrle("Pair Device - Invalid Parameters 1",
6579 &pair_device_invalid_param_test_1,
6580 NULL, test_command_generic);
6581 test_bredrle("Pair Device - Invalid Parameters 2",
6582 &pair_device_invalid_param_test_2,
6583 NULL, test_command_generic);
6584 test_bredrle("Pair Device - Legacy Success 1",
6585 &pair_device_success_test_1,
6586 NULL, test_command_generic);
6587 test_bredrle("Pair Device - Legacy Non-bondable 1",
6588 &pair_device_legacy_nonbondable_1,
6589 NULL, test_command_generic);
6590 test_bredrle("Pair Device - Sec Mode 3 Success 1",
6591 &pair_device_success_test_2,
6592 NULL, test_command_generic);
6593 test_bredrle("Pair Device - Legacy Reject 1",
6594 &pair_device_reject_test_1,
6595 NULL, test_command_generic);
6596 test_bredrle("Pair Device - Legacy Reject 2",
6597 &pair_device_reject_test_2,
6598 NULL, test_command_generic);
6599 test_bredrle("Pair Device - Sec Mode 3 Reject 1",
6600 &pair_device_reject_test_3,
6601 NULL, test_command_generic);
6602 test_bredrle("Pair Device - Sec Mode 3 Reject 2",
6603 &pair_device_reject_test_4,
6604 NULL, test_command_generic);
6605 test_bredrle("Pair Device - SSP Just-Works Success 1",
6606 &pair_device_ssp_test_1,
6607 NULL, test_command_generic);
6608 test_bredrle("Pair Device - SSP Just-Works Success 2",
6609 &pair_device_ssp_test_2,
6610 NULL, test_command_generic);
6611 test_bredrle("Pair Device - SSP Just-Works Success 3",
6612 &pair_device_ssp_test_3,
6613 NULL, test_command_generic);
6614 test_bredrle("Pair Device - SSP Confirm Success 1",
6615 &pair_device_ssp_test_4,
6616 NULL, test_command_generic);
6617 test_bredrle("Pair Device - SSP Confirm Success 2",
6618 &pair_device_ssp_test_5,
6619 NULL, test_command_generic);
6620 test_bredrle("Pair Device - SSP Confirm Success 3",
6621 &pair_device_ssp_test_6,
6622 NULL, test_command_generic);
6623 test_bredrle("Pair Device - SSP Confirm Reject 1",
6624 &pair_device_ssp_reject_1,
6625 NULL, test_command_generic);
6626 test_bredrle("Pair Device - SSP Confirm Reject 2",
6627 &pair_device_ssp_reject_2,
6628 NULL, test_command_generic);
6629 test_bredrle("Pair Device - SSP Non-bondable 1",
6630 &pair_device_ssp_nonbondable_1,
6631 NULL, test_command_generic);
6632 test_bredrle("Pair Device - SMP over BR/EDR Success 1",
6633 &pair_device_smp_bredr_test_1,
6634 NULL, test_command_generic);
6635 test_bredrle("Pair Device - SMP over BR/EDR Success 2",
6636 &pair_device_smp_bredr_test_2,
6637 NULL, test_command_generic);
6638 test_le("Pair Device - LE Success 1",
6639 &pair_device_le_success_test_1,
6640 NULL, test_command_generic);
6641 test_le("Pair Device - LE Success 2",
6642 &pair_device_le_success_test_2,
6643 NULL, test_command_generic);
6644 test_le("Pair Device - LE Reject 1",
6645 &pair_device_le_reject_test_1,
6646 NULL, test_command_generic);
6647 test_le("Pair Device - LE SC Legacy 1",
6648 &pair_device_le_sc_legacy_test_1,
6649 NULL, test_command_generic);
6650 test_le("Pair Device - LE SC Success 1",
6651 &pair_device_le_sc_success_test_1,
6652 NULL, test_command_generic);
6653 test_le("Pair Device - LE SC Success 2",
6654 &pair_device_le_sc_success_test_2,
6655 NULL, test_command_generic);
6657 test_bredrle("Pairing Acceptor - Legacy 1",
6658 &pairing_acceptor_legacy_1, NULL,
6659 test_pairing_acceptor);
6660 test_bredrle("Pairing Acceptor - Legacy 2",
6661 &pairing_acceptor_legacy_2, NULL,
6662 test_pairing_acceptor);
6663 test_bredrle("Pairing Acceptor - Legacy 3",
6664 &pairing_acceptor_legacy_3, NULL,
6665 test_pairing_acceptor);
6666 test_bredrle("Pairing Acceptor - Link Sec 1",
6667 &pairing_acceptor_linksec_1, NULL,
6668 test_pairing_acceptor);
6669 test_bredrle("Pairing Acceptor - Link Sec 2",
6670 &pairing_acceptor_linksec_2, NULL,
6671 test_pairing_acceptor);
6672 test_bredrle("Pairing Acceptor - SSP 1",
6673 &pairing_acceptor_ssp_1, setup_pairing_acceptor,
6674 test_pairing_acceptor);
6675 test_bredrle("Pairing Acceptor - SSP 2",
6676 &pairing_acceptor_ssp_2, setup_pairing_acceptor,
6677 test_pairing_acceptor);
6678 test_bredrle("Pairing Acceptor - SSP 3",
6679 &pairing_acceptor_ssp_3, setup_pairing_acceptor,
6680 test_pairing_acceptor);
6681 test_bredrle("Pairing Acceptor - SSP 4",
6682 &pairing_acceptor_ssp_4, setup_pairing_acceptor,
6683 test_pairing_acceptor);
6684 test_bredrle("Pairing Acceptor - SMP over BR/EDR 1",
6685 &pairing_acceptor_smp_bredr_1,
6686 setup_pairing_acceptor, test_pairing_acceptor);
6687 test_bredrle("Pairing Acceptor - SMP over BR/EDR 2",
6688 &pairing_acceptor_smp_bredr_2,
6689 setup_pairing_acceptor, test_pairing_acceptor);
6690 test_le("Pairing Acceptor - LE 1",
6691 &pairing_acceptor_le_1, setup_pairing_acceptor,
6692 test_pairing_acceptor);
6693 test_le("Pairing Acceptor - LE 2",
6694 &pairing_acceptor_le_2, setup_pairing_acceptor,
6695 test_pairing_acceptor);
6696 test_le("Pairing Acceptor - LE 3",
6697 &pairing_acceptor_le_3, setup_pairing_acceptor,
6698 test_pairing_acceptor);
6699 test_le("Pairing Acceptor - LE 4",
6700 &pairing_acceptor_le_4, setup_pairing_acceptor,
6701 test_pairing_acceptor);
6702 test_le("Pairing Acceptor - LE 5",
6703 &pairing_acceptor_le_5, setup_pairing_acceptor,
6704 test_pairing_acceptor);
6706 test_bredrle("Unpair Device - Not Powered 1",
6707 &unpair_device_not_powered_test_1,
6708 NULL, test_command_generic);
6709 test_bredrle("Unpair Device - Invalid Parameters 1",
6710 &unpair_device_invalid_param_test_1,
6711 NULL, test_command_generic);
6712 test_bredrle("Unpair Device - Invalid Parameters 2",
6713 &unpair_device_invalid_param_test_2,
6714 NULL, test_command_generic);
6716 test_bredrle("Disconnect - Invalid Parameters 1",
6717 &disconnect_invalid_param_test_1,
6718 NULL, test_command_generic);
6720 test_bredrle("Block Device - Invalid Parameters 1",
6721 &block_device_invalid_param_test_1,
6722 NULL, test_command_generic);
6724 test_bredrle("Unblock Device - Invalid Parameters 1",
6725 &unblock_device_invalid_param_test_1,
6726 NULL, test_command_generic);
6728 test_le("Set Static Address - Success 1",
6729 &set_static_addr_success_test,
6730 NULL, test_command_generic);
6731 test_bredrle("Set Static Address - Success 2",
6732 &set_static_addr_success_test_2,
6733 NULL, test_command_generic);
6734 test_bredrle("Set Static Address - Failure 1",
6735 &set_static_addr_failure_test,
6736 NULL, test_command_generic);
6737 test_bredr("Set Static Address - Failure 2",
6738 &set_static_addr_failure_test_2,
6739 NULL, test_command_generic);
6741 test_bredrle("Set Scan Parameters - Success",
6742 &set_scan_params_success_test,
6743 NULL, test_command_generic);
6745 test_bredrle("Load IRKs - Success 1",
6746 &load_irks_success1_test,
6747 NULL, test_command_generic);
6748 test_bredrle("Load IRKs - Success 2",
6749 &load_irks_success2_test,
6750 NULL, test_command_generic);
6751 test_bredrle("Load IRKs - Invalid Parameters 1",
6752 &load_irks_nval_param1_test,
6753 NULL, test_command_generic);
6754 test_bredrle("Load IRKs - Invalid Parameters 2",
6755 &load_irks_nval_param2_test,
6756 NULL, test_command_generic);
6757 test_bredrle("Load IRKs - Invalid Parameters 3",
6758 &load_irks_nval_param3_test,
6759 NULL, test_command_generic);
6760 test_bredr("Load IRKs - Not Supported",
6761 &load_irks_not_supported_test,
6762 NULL, test_command_generic);
6764 test_bredrle("Set Privacy - Success",
6765 &set_privacy_success_test,
6766 NULL, test_command_generic);
6767 test_bredrle("Set Privacy - Rejected",
6768 &set_privacy_powered_test,
6769 NULL, test_command_generic);
6770 test_bredrle("Set Privacy - Invalid Parameters",
6771 &set_privacy_nval_param_test,
6772 NULL, test_command_generic);
6774 test_bredrle("Get Conn Info - Success",
6775 &get_conn_info_succes1_test, NULL,
6776 test_command_generic_connect);
6777 test_bredrle("Get Conn Info - Not Connected",
6778 &get_conn_info_ncon_test, NULL,
6779 test_command_generic);
6780 test_bredrle("Get Conn Info - Power off",
6781 &get_conn_info_power_off_test, NULL,
6782 test_command_generic_connect);
6784 test_bredrle("Load Connection Parameters - Invalid Params 1",
6785 &load_conn_params_fail_1,
6786 NULL, test_command_generic);
6788 test_bredrle("Add Device - Invalid Params 1",
6790 NULL, test_command_generic);
6791 test_bredrle("Add Device - Invalid Params 2",
6793 NULL, test_command_generic);
6794 test_bredrle("Add Device - Invalid Params 3",
6796 NULL, test_command_generic);
6797 test_bredrle("Add Device - Invalid Params 4",
6799 NULL, test_command_generic);
6800 test_bredrle("Add Device - Success 1",
6801 &add_device_success_1,
6802 NULL, test_command_generic);
6803 test_bredrle("Add Device - Success 2",
6804 &add_device_success_2,
6805 NULL, test_command_generic);
6806 test_bredrle("Add Device - Success 3",
6807 &add_device_success_3,
6808 NULL, test_command_generic);
6809 test_bredrle("Add Device - Success 4",
6810 &add_device_success_4,
6811 NULL, test_command_generic);
6812 test_bredrle("Add Device - Success 5",
6813 &add_device_success_5,
6814 NULL, test_command_generic);
6816 test_bredrle("Remove Device - Invalid Params 1",
6817 &remove_device_fail_1,
6818 NULL, test_command_generic);
6819 test_bredrle("Remove Device - Invalid Params 2",
6820 &remove_device_fail_2,
6821 NULL, test_command_generic);
6822 test_bredrle("Remove Device - Invalid Params 3",
6823 &remove_device_fail_3,
6824 NULL, test_command_generic);
6825 test_bredrle("Remove Device - Success 1",
6826 &remove_device_success_1,
6827 setup_add_device, test_command_generic);
6828 test_bredrle("Remove Device - Success 2",
6829 &remove_device_success_2,
6830 setup_add_device, test_command_generic);
6831 test_bredrle("Remove Device - Success 3",
6832 &remove_device_success_3,
6833 setup_add_device, test_remove_device);
6834 test_le("Remove Device - Success 4",
6835 &remove_device_success_4,
6836 setup_add_device, test_remove_device);
6837 test_le("Remove Device - Success 5",
6838 &remove_device_success_5,
6839 setup_add_device, test_remove_device);
6841 test_bredrle("Read Advertising Features - Invalid parameters",
6842 &read_adv_features_invalid_param_test,
6843 NULL, test_command_generic);
6844 test_bredrle("Read Advertising Features - Invalid index",
6845 &read_adv_features_invalid_index_test,
6846 NULL, test_command_generic);
6847 test_bredrle("Read Advertising Features - Success 1 (No instance)",
6848 &read_adv_features_success_1,
6849 NULL, test_command_generic);
6850 test_bredrle("Read Advertising Features - Success 2 (One instance)",
6851 &read_adv_features_success_2,
6852 setup_add_advertising,
6853 test_command_generic);
6855 test_bredrle("Add Advertising - Failure: LE off",
6856 &add_advertising_fail_1,
6857 NULL, test_command_generic);
6858 test_bredrle("Add Advertising - Invalid Params 1 (AD too long)",
6859 &add_advertising_fail_2,
6860 NULL, test_command_generic);
6861 test_bredrle("Add Advertising - Invalid Params 2 (Malformed len)",
6862 &add_advertising_fail_3,
6863 NULL, test_command_generic);
6864 test_bredrle("Add Advertising - Invalid Params 3 (Malformed len)",
6865 &add_advertising_fail_4,
6866 NULL, test_command_generic);
6867 test_bredrle("Add Advertising - Invalid Params 4 (Malformed len)",
6868 &add_advertising_fail_5,
6869 NULL, test_command_generic);
6870 test_le("Add Advertising - Invalid Params 5 (AD too long)",
6871 &add_advertising_fail_6,
6872 NULL, test_command_generic);
6873 test_bredrle("Add Advertising - Invalid Params 6 (ScRsp too long)",
6874 &add_advertising_fail_7,
6875 NULL, test_command_generic);
6876 test_bredrle("Add Advertising - Invalid Params 7 (Malformed len)",
6877 &add_advertising_fail_8,
6878 NULL, test_command_generic);
6879 test_bredrle("Add Advertising - Invalid Params 8 (Malformed len)",
6880 &add_advertising_fail_9,
6881 NULL, test_command_generic);
6882 test_bredrle("Add Advertising - Invalid Params 9 (Malformed len)",
6883 &add_advertising_fail_10,
6884 NULL, test_command_generic);
6885 test_le("Add Advertising - Invalid Params 10 (ScRsp too long)",
6886 &add_advertising_fail_11,
6887 NULL, test_command_generic);
6888 test_bredrle("Add Advertising - Rejected (Timeout, !Powered)",
6889 &add_advertising_fail_12,
6890 NULL, test_command_generic);
6891 test_bredrle("Add Advertising - Success 1 (Powered, Add Adv Inst)",
6892 &add_advertising_success_1,
6893 NULL, test_command_generic);
6894 test_bredrle("Add Advertising - Success 2 (!Powered, Add Adv Inst)",
6895 &add_advertising_success_pwron_data,
6896 setup_add_advertising_not_powered,
6897 test_command_generic);
6898 test_bredrle("Add Advertising - Success 3 (!Powered, Adv Enable)",
6899 &add_advertising_success_pwron_enabled,
6900 setup_add_advertising_not_powered,
6901 test_command_generic);
6902 test_bredrle("Add Advertising - Success 4 (Set Adv on override)",
6903 &add_advertising_success_4,
6904 setup_add_advertising,
6905 test_command_generic);
6906 test_bredrle("Add Advertising - Success 5 (Set Adv off override)",
6907 &add_advertising_success_5,
6908 setup_set_and_add_advertising,
6909 test_command_generic);
6910 test_bredrle("Add Advertising - Success 6 (Scan Rsp Dta, Adv ok)",
6911 &add_advertising_success_6,
6912 NULL, test_command_generic);
6913 test_bredrle("Add Advertising - Success 7 (Scan Rsp Dta, Scan ok) ",
6914 &add_advertising_success_7,
6915 NULL, test_command_generic);
6916 test_bredrle("Add Advertising - Success 8 (Connectable Flag)",
6917 &add_advertising_success_8,
6918 NULL, test_command_generic);
6919 test_bredrle("Add Advertising - Success 9 (General Discov Flag)",
6920 &add_advertising_success_9,
6921 NULL, test_command_generic);
6922 test_bredrle("Add Advertising - Success 10 (Limited Discov Flag)",
6923 &add_advertising_success_10,
6924 NULL, test_command_generic);
6925 test_bredrle("Add Advertising - Success 11 (Managed Flags)",
6926 &add_advertising_success_11,
6927 NULL, test_command_generic);
6928 test_bredrle("Add Advertising - Success 12 (TX Power Flag)",
6929 &add_advertising_success_12,
6930 NULL, test_command_generic);
6931 test_bredrle("Add Advertising - Success 13 (ADV_SCAN_IND)",
6932 &add_advertising_success_13,
6933 NULL, test_command_generic);
6934 test_bredrle("Add Advertising - Success 14 (ADV_NONCONN_IND)",
6935 &add_advertising_success_14,
6936 NULL, test_command_generic);
6937 test_bredrle("Add Advertising - Success 15 (ADV_IND)",
6938 &add_advertising_success_15,
6939 NULL, test_command_generic);
6940 test_bredrle("Add Advertising - Success 16 (Connectable -> on)",
6941 &add_advertising_success_16,
6942 setup_add_advertising,
6943 test_command_generic);
6944 test_bredrle("Add Advertising - Success 17 (Connectable -> off)",
6945 &add_advertising_success_17,
6946 setup_add_advertising_connectable,
6947 test_command_generic);
6948 /* Adv instances with a timeout do NOT survive a power cycle. */
6949 test_bredrle("Add Advertising - Success 18 (Power -> off, Remove)",
6950 &add_advertising_power_off,
6951 setup_add_advertising_timeout,
6952 test_command_generic);
6953 /* Adv instances without timeout survive a power cycle. */
6954 test_bredrle("Add Advertising - Success 19 (Power -> off, Keep)",
6955 &add_advertising_success_pwron_data,
6956 setup_add_advertising_power_cycle,
6957 test_command_generic);
6958 /* Changing an advertising instance while it is still being
6959 * advertised will immediately update the advertised data if
6960 * there is no other instance to switch to.
6962 test_bredrle("Add Advertising - Success 20 (Add Adv override)",
6963 &add_advertising_success_18,
6964 setup_add_advertising,
6965 test_command_generic);
6966 /* An instance should be removed when its timeout has been reached.
6967 * Advertising will also be disabled if this was the last instance.
6969 test_bredrle_full("Add Advertising - Success 21 (Timeout expires)",
6970 &add_advertising_timeout_expired,
6971 setup_add_advertising_timeout,
6972 test_command_generic, 3);
6973 /* LE off will clear (remove) all instances. */
6974 test_bredrle("Add Advertising - Success 22 (LE -> off, Remove)",
6975 &add_advertising_le_off,
6976 setup_add_advertising,
6977 test_command_generic);
6980 test_bredrle("Remove Advertising - Invalid Params 1",
6981 &remove_advertising_fail_1,
6982 NULL, test_command_generic);
6983 test_bredrle("Remove Advertising - Success 1",
6984 &remove_advertising_success_1,
6985 setup_add_advertising,
6986 test_command_generic);
6987 test_bredrle("Remove Advertising - Success 2",
6988 &remove_advertising_success_2,
6989 setup_add_advertising,
6990 test_command_generic);
6992 /* When advertising two instances, the instances should be
6993 * advertised in a round-robin fashion.
6995 test_bredrle("Multi Advertising - Success 1 (Instance Switch)",
6996 &multi_advertising_switch,
6998 test_command_generic);
6999 /* Adding a new instance when one is already being advertised
7000 * will switch to the new instance after the first has reached
7001 * its duration. A long timeout has been set to
7003 test_bredrle_full("Multi Advertising - Success 2 (Add Second Inst)",
7004 &multi_advertising_add_second,
7005 setup_add_advertising_duration,
7006 test_command_generic, 3);
7008 test_bredrle("Read Local OOB Data - Not powered",
7009 &read_local_oob_not_powered_test,
7010 NULL, test_command_generic);
7011 test_bredrle("Read Local OOB Data - Invalid parameters",
7012 &read_local_oob_invalid_param_test,
7013 NULL, test_command_generic);
7014 test_bredrle("Read Local OOB Data - Invalid index",
7015 &read_local_oob_invalid_index_test,
7016 NULL, test_command_generic);
7017 test_bredr20("Read Local OOB Data - Legacy pairing",
7018 &read_local_oob_legacy_pairing_test,
7019 NULL, test_command_generic);
7020 test_bredrle("Read Local OOB Data - Success SSP",
7021 &read_local_oob_success_ssp_test,
7022 NULL, test_command_generic);
7023 test_bredrle("Read Local OOB Data - Success SC",
7024 &read_local_oob_success_sc_test,
7025 NULL, test_command_generic);
7027 test_bredrle("Device Found - Advertising data - Zero padded",
7029 NULL, test_device_found);
7030 test_bredrle("Device Found - Advertising data - Invalid field",
7031 &device_found_invalid_field,
7032 NULL, test_device_found);
7034 return tester_run();