From 5ca46bc7edee1a08303b479e2bc8ca55b868f34e Mon Sep 17 00:00:00 2001 From: Pavel Vasilyev Date: Wed, 21 Jun 2023 13:50:18 +0200 Subject: [PATCH] bluetooth: tester: Add commands to add and delete virtual addresses Virtual address behavior has been changed in this PR: https://github.com/zephyrproject-rtos/zephyr/pull/57878 Now it is required to register virtual address before using it. Corresponding PR to auto-pts: https://github.com/auto-pts/auto-pts/pull/961 Signed-off-by: Pavel Vasilyev --- tests/bluetooth/tester/src/btp/btp_mesh.h | 13 +++++ tests/bluetooth/tester/src/btp_mesh.c | 63 +++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/tests/bluetooth/tester/src/btp/btp_mesh.h b/tests/bluetooth/tester/src/btp/btp_mesh.h index 096f61bcb1619d..d7d2b2cdc7b8a7 100644 --- a/tests/bluetooth/tester/src/btp/btp_mesh.h +++ b/tests/bluetooth/tester/src/btp/btp_mesh.h @@ -747,6 +747,19 @@ struct btp_mesh_cfg_krp_set_rp { uint8_t phase; } __packed; +#define BTP_MESH_VA_ADD 0x4D +struct btp_mesh_va_add_cmd { + uint8_t label_uuid[16]; +} __packed; +struct btp_mesh_va_add_rp { + uint16_t addr; +} __packed; + +#define BTP_MESH_VA_DEL 0x4E +struct btp_mesh_va_del_cmd { + uint8_t label_uuid[16]; +} __packed; + #define BTP_MESH_PROXY_CONNECT 0x77 struct btp_proxy_connect_cmd { diff --git a/tests/bluetooth/tester/src/btp_mesh.c b/tests/bluetooth/tester/src/btp_mesh.c index 37dd04ab3e4771..c922c812631dd4 100644 --- a/tests/bluetooth/tester/src/btp_mesh.c +++ b/tests/bluetooth/tester/src/btp_mesh.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #define LOG_MODULE_NAME bttester_mesh @@ -172,6 +173,8 @@ static uint8_t supported_commands(const void *cmd, uint16_t cmd_len, tester_set_bit(rp->data, BTP_MESH_PROVISION_ADV); tester_set_bit(rp->data, BTP_MESH_CFG_KRP_GET); tester_set_bit(rp->data, BTP_MESH_CFG_KRP_SET); + tester_set_bit(rp->data, BTP_MESH_VA_ADD); + tester_set_bit(rp->data, BTP_MESH_VA_DEL); *rsp_len = sizeof(*rp) + 10; @@ -736,6 +739,10 @@ static uint8_t net_send(const void *cmd, uint16_t cmd_len, .send_ttl = cp->ttl, }; + if (BT_MESH_ADDR_IS_VIRTUAL(ctx.addr)) { + ctx.uuid = bt_mesh_va_uuid_get(ctx.addr, NULL, NULL); + } + LOG_DBG("ttl 0x%02x dst 0x%04x payload_len %d", ctx.send_ttl, ctx.addr, cp->payload_len); @@ -756,6 +763,48 @@ static uint8_t net_send(const void *cmd, uint16_t cmd_len, return BTP_STATUS_SUCCESS; } +static uint8_t va_add(const void *cmd, uint16_t cmd_len, + void *rsp, uint16_t *rsp_len) +{ + const struct btp_mesh_va_add_cmd *cp = cmd; + struct btp_mesh_va_add_rp *rp = rsp; + const struct bt_mesh_va *va; + int err; + + err = bt_mesh_va_add(cp->label_uuid, &va); + if (err) { + LOG_ERR("Failed to add Label UUID (err %d)", err); + return BTP_STATUS_FAILED; + } + + rp->addr = sys_cpu_to_le16(va->addr); + *rsp_len = sizeof(*rp); + + return BTP_STATUS_SUCCESS; +} + +static uint8_t va_del(const void *cmd, uint16_t cmd_len, + void *rsp, uint16_t *rsp_len) +{ + const struct btp_mesh_va_del_cmd *cp = cmd; + const struct bt_mesh_va *va; + int err; + + va = bt_mesh_va_find(cp->label_uuid); + if (!va) { + LOG_ERR("Failed to find Label UUID"); + return BTP_STATUS_FAILED; + } + + err = bt_mesh_va_del(va->uuid); + if (err) { + LOG_ERR("Failed to delete Label UUID (err %d)", err); + return BTP_STATUS_FAILED; + } + + return BTP_STATUS_SUCCESS; +} + static uint8_t health_generate_faults(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len) { @@ -815,6 +864,10 @@ static uint8_t model_send(const void *cmd, uint16_t cmd_len, .send_ttl = BT_MESH_TTL_DEFAULT, }; + if (BT_MESH_ADDR_IS_VIRTUAL(ctx.addr)) { + ctx.uuid = bt_mesh_va_uuid_get(ctx.addr, NULL, NULL); + } + src = sys_le16_to_cpu(cp->src); /* Lookup source address */ @@ -2844,6 +2897,16 @@ static const struct btp_handler handlers[] = { .expect_len = sizeof(struct btp_mesh_cfg_krp_set_cmd), .func = config_krp_set, }, + { + .opcode = BTP_MESH_VA_ADD, + .expect_len = sizeof(struct btp_mesh_va_add_cmd), + .func = va_add, + }, + { + .opcode = BTP_MESH_VA_DEL, + .expect_len = sizeof(struct btp_mesh_va_del_cmd), + .func = va_del, + }, #if defined(CONFIG_BT_TESTING) { .opcode = BTP_MESH_LPN_SUBSCRIBE,