Skip to content

Commit

Permalink
bluetooth: tester: Add commands to add and delete virtual addresses
Browse files Browse the repository at this point in the history
Virtual address behavior has been changed in this PR:
zephyrproject-rtos#57878

Now it is required to register virtual address before using it.

Corresponding PR to auto-pts:
auto-pts/auto-pts#961

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
  • Loading branch information
PavelVPV committed Jun 28, 2023
1 parent a7498c3 commit a7d3eab
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 0 deletions.
13 changes: 13 additions & 0 deletions tests/bluetooth/tester/src/btp/btp_mesh.h
Expand Up @@ -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 {
Expand Down
71 changes: 71 additions & 0 deletions tests/bluetooth/tester/src/btp_mesh.c
Expand Up @@ -13,6 +13,7 @@
#include <zephyr/bluetooth/mesh/cfg.h>
#include <zephyr/sys/byteorder.h>
#include <app_keys.h>
#include <va.h>

#include <zephyr/logging/log.h>
#define LOG_MODULE_NAME bttester_mesh
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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);

Expand All @@ -756,6 +763,56 @@ 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;

if (cmd_len != sizeof(*cp)) {
return BTP_STATUS_FAILED;
}

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 = 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;

if (cmd_len != sizeof(*cp)) {
return BTP_STATUS_FAILED;
}

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)
{
Expand Down Expand Up @@ -815,6 +872,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 */
Expand Down Expand Up @@ -2844,6 +2905,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,
Expand Down

0 comments on commit a7d3eab

Please sign in to comment.