Bsim: Bluetooth: Mesh: Rename/refactor send_ra
Renames `bt_mesh_test_send_ra` to `bt_mesh_test_send_data` and changes the corresponding callback funciton as it is used outside of the replay attack tests, and can be used to send custom data. The function is extended to accept a UUID parameter to allow sending data to virtual addresses. Signed-off-by: Håvard Reierstad <haavard.reierstad@nordicsemi.no>
This commit is contained in:
parent
e7c3434685
commit
77e017306e
4 changed files with 50 additions and 54 deletions
|
@ -28,7 +28,7 @@ K_MEM_SLAB_DEFINE_STATIC(msg_pool, sizeof(struct bt_mesh_test_msg),
|
|||
static K_QUEUE_DEFINE(recv);
|
||||
struct bt_mesh_test_stats test_stats;
|
||||
struct bt_mesh_msg_ctx test_send_ctx;
|
||||
static void (*ra_cb)(uint8_t *, size_t);
|
||||
static void (*data_cb)(uint8_t *, size_t);
|
||||
|
||||
static int msg_rx(const struct bt_mesh_model *mod, struct bt_mesh_msg_ctx *ctx,
|
||||
struct net_buf_simple *buf)
|
||||
|
@ -78,8 +78,8 @@ static int msg_rx(const struct bt_mesh_model *mod, struct bt_mesh_msg_ctx *ctx,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ra_rx(const struct bt_mesh_model *mod, struct bt_mesh_msg_ctx *ctx,
|
||||
struct net_buf_simple *buf)
|
||||
static int data_rx(const struct bt_mesh_model *mod, struct bt_mesh_msg_ctx *ctx,
|
||||
struct net_buf_simple *buf)
|
||||
{
|
||||
LOG_INF("\tlen: %d bytes", buf->len);
|
||||
LOG_INF("\tsrc: 0x%04x", ctx->addr);
|
||||
|
@ -87,18 +87,15 @@ static int ra_rx(const struct bt_mesh_model *mod, struct bt_mesh_msg_ctx *ctx,
|
|||
LOG_INF("\tttl: %u", ctx->recv_ttl);
|
||||
LOG_INF("\trssi: %d", ctx->recv_rssi);
|
||||
|
||||
if (ra_cb) {
|
||||
ra_cb(buf->data, buf->len);
|
||||
if (data_cb) {
|
||||
data_cb(buf->data, buf->len);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct bt_mesh_model_op model_op[] = {
|
||||
{ TEST_MSG_OP_1, 0, msg_rx },
|
||||
{ TEST_MSG_OP_2, 0, ra_rx },
|
||||
BT_MESH_MODEL_OP_END
|
||||
};
|
||||
{TEST_MSG_OP_1, 0, msg_rx}, {TEST_MSG_OP_2, 0, data_rx}, BT_MESH_MODEL_OP_END};
|
||||
|
||||
int __weak test_model_pub_update(const struct bt_mesh_model *mod)
|
||||
{
|
||||
|
@ -534,15 +531,15 @@ int bt_mesh_test_send(uint16_t addr, const uint8_t *uuid, size_t len,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int bt_mesh_test_send_ra(uint16_t addr, uint8_t *data, size_t len,
|
||||
const struct bt_mesh_send_cb *send_cb,
|
||||
void *cb_data)
|
||||
int bt_mesh_test_send_data(uint16_t addr, const uint8_t *uuid, uint8_t *data, size_t len,
|
||||
const struct bt_mesh_send_cb *send_cb, void *cb_data)
|
||||
{
|
||||
int err;
|
||||
|
||||
test_send_ctx.addr = addr;
|
||||
test_send_ctx.send_rel = 0;
|
||||
test_send_ctx.send_ttl = BT_MESH_TTL_DEFAULT;
|
||||
test_send_ctx.uuid = uuid;
|
||||
|
||||
BT_MESH_MODEL_BUF_DEFINE(buf, TEST_MSG_OP_2, BT_MESH_TX_SDU_MAX);
|
||||
bt_mesh_model_msg_init(&buf, TEST_MSG_OP_2);
|
||||
|
@ -558,9 +555,9 @@ int bt_mesh_test_send_ra(uint16_t addr, uint8_t *data, size_t len,
|
|||
return 0;
|
||||
}
|
||||
|
||||
void bt_mesh_test_ra_cb_setup(void (*cb)(uint8_t *, size_t))
|
||||
void bt_mesh_test_data_cb_setup(void (*cb)(uint8_t *, size_t))
|
||||
{
|
||||
ra_cb = cb;
|
||||
data_cb = cb;
|
||||
}
|
||||
|
||||
uint16_t bt_mesh_test_own_addr_get(uint16_t start_addr)
|
||||
|
|
|
@ -196,10 +196,9 @@ int bt_mesh_test_send_async(uint16_t addr, const uint8_t *uuid, size_t len,
|
|||
enum bt_mesh_test_send_flags flags,
|
||||
const struct bt_mesh_send_cb *send_cb,
|
||||
void *cb_data);
|
||||
int bt_mesh_test_send_ra(uint16_t addr, uint8_t *data, size_t len,
|
||||
const struct bt_mesh_send_cb *send_cb,
|
||||
void *cb_data);
|
||||
void bt_mesh_test_ra_cb_setup(void (*cb)(uint8_t *, size_t));
|
||||
int bt_mesh_test_send_data(uint16_t addr, const uint8_t *uuid, uint8_t *data, size_t len,
|
||||
const struct bt_mesh_send_cb *send_cb, void *cb_data);
|
||||
void bt_mesh_test_data_cb_setup(void (*cb)(uint8_t *, size_t));
|
||||
|
||||
uint16_t bt_mesh_test_own_addr_get(uint16_t start_addr);
|
||||
|
||||
|
|
|
@ -293,7 +293,7 @@ static void tester_device_configure(uint16_t net_key_idx, uint16_t addr)
|
|||
LOG_INF("Device 0x%04x configured", addr);
|
||||
}
|
||||
|
||||
static void tester_ra_cb(uint8_t *data, size_t length)
|
||||
static void tester_data_cb(uint8_t *data, size_t length)
|
||||
{
|
||||
uint8_t type = data[0];
|
||||
|
||||
|
@ -309,18 +309,18 @@ static void tester_ra_cb(uint8_t *data, size_t length)
|
|||
k_sem_give(&status_msg_recvd_sem);
|
||||
}
|
||||
|
||||
static int send_data(uint16_t dst, uint8_t payload)
|
||||
static int send_data(uint16_t dst, uint8_t payload, const uint8_t *uuid)
|
||||
{
|
||||
uint8_t data[2] = {MSG_TYPE_DATA, payload};
|
||||
|
||||
return bt_mesh_test_send_ra(dst, data, sizeof(data), NULL, NULL);
|
||||
return bt_mesh_test_send_data(dst, uuid, data, sizeof(data), NULL, NULL);
|
||||
}
|
||||
|
||||
static int send_get(uint16_t dst)
|
||||
static int send_get(uint16_t dst, const uint8_t *uuid)
|
||||
{
|
||||
uint8_t data[1] = {MSG_TYPE_GET};
|
||||
|
||||
return bt_mesh_test_send_ra(dst, data, sizeof(data), NULL, NULL);
|
||||
return bt_mesh_test_send_data(dst, uuid, data, sizeof(data), NULL, NULL);
|
||||
}
|
||||
|
||||
struct bridged_addresses_entry {
|
||||
|
@ -363,7 +363,7 @@ static void bridge_table_verify(uint16_t net_idx1, uint16_t net_idx2, uint16_t s
|
|||
}
|
||||
}
|
||||
|
||||
static void device_ra_cb(uint8_t *data, size_t length)
|
||||
static void device_data_cb(uint8_t *data, size_t length)
|
||||
{
|
||||
uint8_t type = data[0];
|
||||
|
||||
|
@ -385,7 +385,7 @@ static void device_ra_cb(uint8_t *data, size_t length)
|
|||
|
||||
memcpy(&test_data[2], recvd_msgs, recvd_msgs_cnt * sizeof(recvd_msgs[0]));
|
||||
|
||||
ASSERT_OK(bt_mesh_test_send_ra(PROV_ADDR, test_data,
|
||||
ASSERT_OK(bt_mesh_test_send_data(PROV_ADDR, NULL, test_data,
|
||||
2 + recvd_msgs_cnt * sizeof(recvd_msgs[0]), NULL,
|
||||
NULL));
|
||||
|
||||
|
@ -432,7 +432,7 @@ static void send_and_receive(void)
|
|||
uint8_t payload = i | i << 4;
|
||||
|
||||
for (int j = 0; j < msgs_cnt; j++) {
|
||||
ASSERT_OK(send_data(DEVICE_ADDR_START + i, payload + j));
|
||||
ASSERT_OK(send_data(DEVICE_ADDR_START + i, payload + j, NULL));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -441,7 +441,7 @@ static void send_and_receive(void)
|
|||
for (int i = 0; i < REMOTE_NODES; i++) {
|
||||
uint8_t payload = i | i << 4;
|
||||
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START + i));
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START + i, NULL));
|
||||
ASSERT_OK(k_sem_take(&status_msg_recvd_sem, K_SECONDS(5)));
|
||||
|
||||
ASSERT_EQUAL(recvd_msgs_cnt, msgs_cnt);
|
||||
|
@ -480,7 +480,7 @@ static void test_tester_simple(void)
|
|||
|
||||
tester_workaround();
|
||||
|
||||
bt_mesh_test_ra_cb_setup(tester_ra_cb);
|
||||
bt_mesh_test_data_cb_setup(tester_data_cb);
|
||||
|
||||
LOG_INF("Step 1: Checking bridging table...");
|
||||
|
||||
|
@ -499,7 +499,7 @@ static void test_tester_simple(void)
|
|||
uint8_t payload = i | i << 4;
|
||||
|
||||
for (int j = 0; j < 3; j++) {
|
||||
ASSERT_OK(send_data(DEVICE_ADDR_START + i, payload + j));
|
||||
ASSERT_OK(send_data(DEVICE_ADDR_START + i, payload + j, NULL));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -512,7 +512,7 @@ static void test_tester_simple(void)
|
|||
|
||||
LOG_INF("Checking data...");
|
||||
for (int i = 0; i < REMOTE_NODES; i++) {
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START + i));
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START + i, NULL));
|
||||
ASSERT_OK(k_sem_take(&status_msg_recvd_sem, K_SECONDS(5)));
|
||||
|
||||
ASSERT_EQUAL(recvd_msgs_cnt, 0);
|
||||
|
@ -543,26 +543,26 @@ static void test_tester_table_state_change(void)
|
|||
|
||||
tester_workaround();
|
||||
|
||||
bt_mesh_test_ra_cb_setup(tester_ra_cb);
|
||||
bt_mesh_test_data_cb_setup(tester_data_cb);
|
||||
|
||||
/* Bridge Table is empty, will not get any message back. */
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START));
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START, NULL));
|
||||
err = k_sem_take(&status_msg_recvd_sem, K_SECONDS(5));
|
||||
ASSERT_EQUAL(err, -EAGAIN);
|
||||
|
||||
/* DATA and GET messages should reach Device 1, but STATUS message won't be received. */
|
||||
bridge_entry_add(PROV_ADDR, DEVICE_ADDR_START, 0, 1, BT_MESH_BRG_CFG_DIR_ONEWAY);
|
||||
|
||||
ASSERT_OK(send_data(DEVICE_ADDR_START, 0xAA));
|
||||
ASSERT_OK(send_data(DEVICE_ADDR_START, 0xAA, NULL));
|
||||
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START));
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START, NULL));
|
||||
err = k_sem_take(&status_msg_recvd_sem, K_SECONDS(5));
|
||||
ASSERT_EQUAL(err, -EAGAIN);
|
||||
|
||||
/* Sending DATA message again before adding a new entry as the previous GET message resets
|
||||
* received messages counter on Devices
|
||||
*/
|
||||
ASSERT_OK(send_data(DEVICE_ADDR_START, 0xAA));
|
||||
ASSERT_OK(send_data(DEVICE_ADDR_START, 0xAA, NULL));
|
||||
/* Adding a reverse entry. This should be added to the bridge table as a separate entry as
|
||||
* the addresses and net keys indexs are provided in the opposite order.
|
||||
*/
|
||||
|
@ -581,7 +581,7 @@ static void test_tester_table_state_change(void)
|
|||
k_sleep(K_SECONDS(1));
|
||||
|
||||
/* Now we should receive STATUS message. */
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START));
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START, NULL));
|
||||
ASSERT_OK(k_sem_take(&status_msg_recvd_sem, K_SECONDS(5)));
|
||||
|
||||
ASSERT_EQUAL(recvd_msgs_cnt, 1);
|
||||
|
@ -599,7 +599,7 @@ static void test_tester_table_state_change(void)
|
|||
1);
|
||||
bridge_table_verify(1, 0, 0, NULL, 0);
|
||||
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START));
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START, NULL));
|
||||
ASSERT_OK(k_sem_take(&status_msg_recvd_sem, K_SECONDS(5)));
|
||||
ASSERT_EQUAL(recvd_msgs_cnt, 0);
|
||||
|
||||
|
@ -640,7 +640,7 @@ static void test_tester_net_key_remove(void)
|
|||
|
||||
tester_workaround();
|
||||
|
||||
bt_mesh_test_ra_cb_setup(tester_ra_cb);
|
||||
bt_mesh_test_data_cb_setup(tester_data_cb);
|
||||
|
||||
/* Adding devices to bridge table */
|
||||
for (int i = 0; i < REMOTE_NODES; i++) {
|
||||
|
@ -648,8 +648,8 @@ static void test_tester_net_key_remove(void)
|
|||
BT_MESH_BRG_CFG_DIR_TWOWAY);
|
||||
}
|
||||
|
||||
ASSERT_OK(send_data(DEVICE_ADDR_START, 0xAA));
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START));
|
||||
ASSERT_OK(send_data(DEVICE_ADDR_START, 0xAA, NULL));
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START, NULL));
|
||||
ASSERT_OK(k_sem_take(&status_msg_recvd_sem, K_SECONDS(5)));
|
||||
ASSERT_EQUAL(recvd_msgs_cnt, 1);
|
||||
ASSERT_EQUAL(recvd_msgs[0], 0xAA);
|
||||
|
@ -657,7 +657,7 @@ static void test_tester_net_key_remove(void)
|
|||
/* Removing subnet 1 from Subnet Bridge. */
|
||||
net_key_remove(BRIDGE_ADDR, 0, 1);
|
||||
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START));
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START, NULL));
|
||||
err = k_sem_take(&status_msg_recvd_sem, K_SECONDS(5));
|
||||
ASSERT_EQUAL(err, -EAGAIN);
|
||||
|
||||
|
@ -762,7 +762,7 @@ static void msg_cache_workaround(void)
|
|||
|
||||
for (int i = 0; i < REMOTE_NODES; i++) {
|
||||
for (int j = 0; j < CONFIG_BT_MESH_MSG_CACHE_SIZE; j++) {
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START + i));
|
||||
ASSERT_OK(send_get(DEVICE_ADDR_START + i, NULL));
|
||||
/* k_sem_take is needed to not overflow network buffer pool. The result
|
||||
* of the semaphor is not important as we just need to bump sequence number
|
||||
* enough to bypass message cache.
|
||||
|
@ -841,7 +841,7 @@ static void test_tester_ivu(void)
|
|||
|
||||
tester_workaround();
|
||||
|
||||
bt_mesh_test_ra_cb_setup(tester_ra_cb);
|
||||
bt_mesh_test_data_cb_setup(tester_data_cb);
|
||||
|
||||
ASSERT_TRUE(!atomic_test_bit(bt_mesh.flags, BT_MESH_IVU_IN_PROGRESS));
|
||||
ASSERT_TRUE(bt_mesh.iv_index == test_ividx);
|
||||
|
@ -929,7 +929,7 @@ static void device_setup(void)
|
|||
ASSERT_OK(k_sem_take(&prov_sem, K_SECONDS(40)));
|
||||
LOG_INF("Node is provisioned");
|
||||
|
||||
bt_mesh_test_ra_cb_setup(device_ra_cb);
|
||||
bt_mesh_test_data_cb_setup(device_data_cb);
|
||||
}
|
||||
|
||||
static void test_device_simple(void)
|
||||
|
|
|
@ -137,8 +137,8 @@ static void test_tx_immediate_replay_attack(void)
|
|||
is_tx_succeeded = false;
|
||||
|
||||
memset(test_data, i, sizeof(test_data));
|
||||
ASSERT_OK(bt_mesh_test_send_ra(rx_cfg.addr, test_data,
|
||||
sizeof(test_data), &send_cb, &sem));
|
||||
ASSERT_OK(bt_mesh_test_send_data(rx_cfg.addr, NULL, test_data, sizeof(test_data),
|
||||
&send_cb, &sem));
|
||||
|
||||
if (k_sem_take(&sem, K_SECONDS(TEST_DATA_WAITING_TIME))) {
|
||||
LOG_ERR("Send timed out");
|
||||
|
@ -155,8 +155,8 @@ static void test_tx_immediate_replay_attack(void)
|
|||
is_tx_succeeded = true;
|
||||
|
||||
memset(test_data, i, sizeof(test_data));
|
||||
ASSERT_OK(bt_mesh_test_send_ra(rx_cfg.addr, test_data,
|
||||
sizeof(test_data), &send_cb, &sem));
|
||||
ASSERT_OK(bt_mesh_test_send_data(rx_cfg.addr, NULL, test_data, sizeof(test_data),
|
||||
&send_cb, &sem));
|
||||
|
||||
if (k_sem_take(&sem, K_SECONDS(TEST_DATA_WAITING_TIME))) {
|
||||
LOG_ERR("Send timed out");
|
||||
|
@ -174,7 +174,7 @@ static void test_rx_immediate_replay_attack(void)
|
|||
{
|
||||
bt_mesh_test_setup();
|
||||
rx_sar_conf();
|
||||
bt_mesh_test_ra_cb_setup(rx_ended);
|
||||
bt_mesh_test_data_cb_setup(rx_ended);
|
||||
|
||||
k_sleep(K_SECONDS(6 * TEST_DATA_WAITING_TIME));
|
||||
|
||||
|
@ -200,8 +200,8 @@ static void test_tx_power_replay_attack(void)
|
|||
is_tx_succeeded = true;
|
||||
|
||||
memset(test_data, i, sizeof(test_data));
|
||||
ASSERT_OK(bt_mesh_test_send_ra(rx_cfg.addr, test_data,
|
||||
sizeof(test_data), &send_cb, &sem));
|
||||
ASSERT_OK(bt_mesh_test_send_data(rx_cfg.addr, NULL, test_data, sizeof(test_data),
|
||||
&send_cb, &sem));
|
||||
|
||||
if (k_sem_take(&sem, K_SECONDS(TEST_DATA_WAITING_TIME))) {
|
||||
LOG_ERR("Send timed out");
|
||||
|
@ -216,8 +216,8 @@ static void test_tx_power_replay_attack(void)
|
|||
is_tx_succeeded = false;
|
||||
|
||||
memset(test_data, i, sizeof(test_data));
|
||||
ASSERT_OK(bt_mesh_test_send_ra(rx_cfg.addr, test_data,
|
||||
sizeof(test_data), &send_cb, &sem));
|
||||
ASSERT_OK(bt_mesh_test_send_data(rx_cfg.addr, NULL, test_data, sizeof(test_data),
|
||||
&send_cb, &sem));
|
||||
|
||||
if (k_sem_take(&sem, K_SECONDS(TEST_DATA_WAITING_TIME))) {
|
||||
LOG_ERR("Send timed out");
|
||||
|
@ -235,7 +235,7 @@ static void test_rx_power_replay_attack(void)
|
|||
{
|
||||
bt_mesh_test_setup();
|
||||
rx_sar_conf();
|
||||
bt_mesh_test_ra_cb_setup(rx_ended);
|
||||
bt_mesh_test_data_cb_setup(rx_ended);
|
||||
|
||||
k_sleep(K_SECONDS(6 * TEST_DATA_WAITING_TIME));
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue