mesh: Config client net_key_del

Adds a Config Client API for deleting netkeys on the target node, with
matching shell command.

this is port of c4e3ca040b307a1418c30922e5bb14eee3c5e878
This commit is contained in:
Krzysztof Kopyściński
2021-01-12 14:05:19 +01:00
committed by Łukasz Rymanowski
parent 27cb1c9411
commit 0e77feeec2
3 changed files with 76 additions and 0 deletions
+3
View File
@@ -69,6 +69,9 @@ int bt_mesh_cfg_net_key_add(u16_t net_idx, u16_t addr, u16_t key_net_idx,
int bt_mesh_cfg_net_key_get(u16_t net_idx, u16_t addr, u16_t *keys,
size_t *key_cnt);
int bt_mesh_cfg_net_key_del(uint16_t net_idx, uint16_t addr,
uint16_t key_net_idx, uint8_t *status);
int bt_mesh_cfg_app_key_add(u16_t net_idx, u16_t addr, u16_t key_net_idx,
u16_t key_app_idx, const u8_t app_key[16],
u8_t *status);
+39
View File
@@ -1057,6 +1057,45 @@ int bt_mesh_cfg_net_key_get(u16_t net_idx, u16_t addr, u16_t *keys,
return cli_wait();
}
int bt_mesh_cfg_net_key_del(uint16_t net_idx, uint16_t addr,
uint16_t key_net_idx, uint8_t *status)
{
struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_NET_KEY_DEL, 2);
struct bt_mesh_msg_ctx ctx = {
.net_idx = net_idx,
.app_idx = BT_MESH_KEY_DEV_REMOTE,
.addr = addr,
.send_ttl = BT_MESH_TTL_DEFAULT,
};
struct net_key_param param = {
.status = status,
.net_idx = key_net_idx,
};
int err;
err = cli_prepare(&param, OP_NET_KEY_STATUS);
if (err) {
return err;
}
bt_mesh_model_msg_init(msg, OP_NET_KEY_DEL);
net_buf_simple_add_le16(msg, key_net_idx);
err = bt_mesh_model_send(cli->model, &ctx, msg, NULL, NULL);
if (err) {
BT_ERR("model_send() failed (err %d)", err);
cli_reset();
return err;
}
if (!status) {
cli_reset();
return 0;
}
return cli_wait();
}
int bt_mesh_cfg_app_key_add(u16_t net_idx, u16_t addr, u16_t key_net_idx,
u16_t key_app_idx, const u8_t app_key[16],
u8_t *status)
+34
View File
@@ -1360,6 +1360,35 @@ struct shell_cmd_help cmd_net_key_get_help = {
NULL, NULL, NULL
};
static int cmd_net_key_del(size_t argc, char *argv[])
{
uint16_t key_net_idx;
uint8_t status;
int err;
key_net_idx = strtoul(argv[1], NULL, 0);
err = bt_mesh_cfg_net_key_del(net.net_idx, net.dst, key_net_idx,
&status);
if (err) {
printk("Unable to send NetKeyDel (err %d)", err);
return 0;
}
if (status) {
printk("NetKeyDel failed with status 0x%02x",
status);
} else {
printk("NetKey 0x%03x deleted", key_net_idx);
}
return 0;
}
struct shell_cmd_help cmd_net_key_del_help = {
NULL, "<NetKeyIndex>", NULL
};
static int cmd_app_key_add(int argc, char *argv[])
{
u8_t key_val[16];
@@ -3276,6 +3305,11 @@ static const struct shell_cmd mesh_commands[] = {
.sc_cmd_func = cmd_net_key_get,
.help = &cmd_net_key_get_help,
},
{
.sc_cmd = "net-key-del",
.sc_cmd_func = cmd_net_key_del,
.help = &cmdcmd_net_key_del_help,
},
{
.sc_cmd = "app-key-add",
.sc_cmd_func = cmd_app_key_add,