From: Brian Gix <brian.gix@gmail.com>
To: linux-bluetooth@vger.kernel.org
Cc: Brian Gix <brian.gix@intel.com>
Subject: [PATCH BlueZ v2 10/11] tools/mesh: Add support for Mesh Private Beacons
Date: Fri, 20 Jan 2023 11:47:30 -0800 [thread overview]
Message-ID: <20230120194731.90065-11-brian.gix@gmail.com> (raw)
In-Reply-To: <20230120194731.90065-1-brian.gix@gmail.com>
From: Brian Gix <brian.gix@intel.com>
This allows generation of Mesh Private Beacon server commands, and
recognition of the resulting Status messages.
---
tools/mesh-cfgclient.c | 9 ++++--
tools/mesh/cfgcli.c | 62 +++++++++++++++++++++++++++++++++++-------
tools/mesh/util.c | 3 ++
3 files changed, 62 insertions(+), 12 deletions(-)
diff --git a/tools/mesh-cfgclient.c b/tools/mesh-cfgclient.c
index f3e9af8fb..50be82bcf 100644
--- a/tools/mesh-cfgclient.c
+++ b/tools/mesh-cfgclient.c
@@ -44,6 +44,8 @@
#define CFG_SRV_MODEL 0x0000
#define CFG_CLI_MODEL 0x0001
#define RPR_SVR_MODEL 0xFFFF0004
+#define PRV_BEACON_SVR 0x0008
+#define PRV_BEACON_CLI 0x0009
#define UNPROV_SCAN_MAX_SECS 300
@@ -58,7 +60,7 @@
struct meshcfg_el {
const char *path;
uint8_t index;
- uint16_t mods[2];
+ uint16_t mods[4];
};
struct meshcfg_app {
@@ -143,7 +145,8 @@ static struct meshcfg_app app = {
.ele = {
.path = "/mesh/cfgclient/ele0",
.index = 0,
- .mods = {CFG_SRV_MODEL, CFG_CLI_MODEL}
+ .mods = {CFG_SRV_MODEL, CFG_CLI_MODEL,
+ PRV_BEACON_SVR, PRV_BEACON_CLI}
}
};
@@ -1889,6 +1892,8 @@ static bool mod_getter(struct l_dbus *dbus,
l_dbus_message_builder_enter_array(builder, "(qa{sv})");
build_model(builder, app.ele.mods[0], false, false);
build_model(builder, app.ele.mods[1], false, false);
+ build_model(builder, app.ele.mods[2], false, false);
+ build_model(builder, app.ele.mods[3], false, false);
l_dbus_message_builder_leave_array(builder);
return true;
diff --git a/tools/mesh/cfgcli.c b/tools/mesh/cfgcli.c
index ad572f694..4f6248e48 100644
--- a/tools/mesh/cfgcli.c
+++ b/tools/mesh/cfgcli.c
@@ -21,6 +21,7 @@
#include "src/shared/util.h"
#include "mesh/mesh-defs.h"
+#include "mesh/prv-beacon.h"
#include "mesh/util.h"
#include "mesh/crypto.h"
@@ -73,9 +74,12 @@ static struct cfg_cmd cmds[] = {
{ OP_APPKEY_UPDATE, OP_APPKEY_STATUS, "AppKeyUpdate" },
{ OP_DEV_COMP_GET, OP_DEV_COMP_STATUS, "DeviceCompositionGet" },
{ OP_DEV_COMP_STATUS, NO_RESPONSE, "DeviceCompositionStatus" },
- { OP_CONFIG_BEACON_GET, OP_CONFIG_BEACON_STATUS, "BeaconGet" },
- { OP_CONFIG_BEACON_SET, OP_CONFIG_BEACON_STATUS, "BeaconSet" },
- { OP_CONFIG_BEACON_STATUS, NO_RESPONSE, "BeaconStatus" },
+ { OP_CONFIG_BEACON_GET, OP_CONFIG_BEACON_STATUS, "SNBGet" },
+ { OP_CONFIG_BEACON_SET, OP_CONFIG_BEACON_STATUS, "SNBSet" },
+ { OP_CONFIG_BEACON_STATUS, NO_RESPONSE, "SNBStatus" },
+ { OP_PRIVATE_BEACON_GET, OP_PRIVATE_BEACON_STATUS, "MPBGet" },
+ { OP_PRIVATE_BEACON_SET, OP_PRIVATE_BEACON_STATUS, "MPBSet" },
+ { OP_PRIVATE_BEACON_STATUS, NO_RESPONSE, "MPBStatus" },
{ OP_CONFIG_DEFAULT_TTL_GET, OP_CONFIG_DEFAULT_TTL_STATUS,
"DefaultTTLGet" },
{ OP_CONFIG_DEFAULT_TTL_SET, OP_CONFIG_DEFAULT_TTL_STATUS,
@@ -617,12 +621,20 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
if (len != 1)
return true;
- bt_shell_printf("Node %4.4x: Config Beacon Status 0x%02x\n",
+ bt_shell_printf("Node %4.4x: SecBeacon Status 0x%02x\n",
src, data[0]);
saved = mesh_db_node_set_beacon(src, data[0] != 0);
break;
+ case OP_PRIVATE_BEACON_STATUS:
+ if (len != 2)
+ return true;
+
+ bt_shell_printf("Node %4.4x: PrivBeacon Status 0x%02x 0x%02x\n",
+ src, data[0], data[1]);
+ break;
+
case OP_CONFIG_RELAY_STATUS:
if (len != 2)
return true;
@@ -1345,7 +1357,7 @@ static void cmd_del_binding(int argc, char *argv[])
cmd_bind(OP_MODEL_APP_UNBIND, argc, argv);
}
-static void cmd_beacon_set(int argc, char *argv[])
+static void cmd_snb_set(int argc, char *argv[])
{
uint16_t n;
uint8_t msg[2 + 1];
@@ -1367,11 +1379,41 @@ static void cmd_beacon_set(int argc, char *argv[])
return bt_shell_noninteractive_quit(EXIT_SUCCESS);
}
-static void cmd_beacon_get(int argc, char *argv[])
+static void cmd_mpb_set(int argc, char *argv[])
+{
+ uint16_t n;
+ uint8_t msg[2 + 2];
+ uint32_t parm_cnt;
+
+ n = mesh_opcode_set(OP_PRIVATE_BEACON_SET, msg);
+
+ parm_cnt = read_input_parameters(argc, argv);
+ if (parm_cnt != 1 && parm_cnt != 2) {
+ bt_shell_printf("bad arguments\n");
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
+
+ msg[n++] = parms[0];
+
+ if (parm_cnt == 2)
+ msg[n++] = parms[1];
+
+ if (!config_send(msg, n, OP_PRIVATE_BEACON_SET))
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+
+ return bt_shell_noninteractive_quit(EXIT_SUCCESS);
+}
+
+static void cmd_snb_get(int argc, char *argv[])
{
cmd_default(OP_CONFIG_BEACON_GET);
}
+static void cmd_mpb_get(int argc, char *argv[])
+{
+ cmd_default(OP_PRIVATE_BEACON_GET);
+}
+
static void cmd_ident_set(int argc, char *argv[])
{
uint16_t n;
@@ -2077,10 +2119,10 @@ static const struct bt_shell_menu cfg_menu = {
"Set node identity state"},
{"ident-get", "<net_idx>", cmd_ident_get,
"Get node identity state"},
- {"beacon-set", "<state>", cmd_beacon_set,
- "Set node identity state"},
- {"beacon-get", NULL, cmd_beacon_get,
- "Get node beacon state"},
+ {"snb-set", "<state>", cmd_snb_set, "Set node SNB state"},
+ {"snb-get", NULL, cmd_snb_get, "Get node SNB state"},
+ {"mpb-set", "<state> <period>", cmd_mpb_set, "Set node MPB state"},
+ {"mpb-get", NULL, cmd_mpb_get, "Get node MPB state"},
{"relay-set", "<relay> <rexmt count> <rexmt steps>", cmd_relay_set,
"Set relay"},
{"relay-get", NULL, cmd_relay_get,
diff --git a/tools/mesh/util.c b/tools/mesh/util.c
index 29641439f..d8c47c0e9 100644
--- a/tools/mesh/util.c
+++ b/tools/mesh/util.c
@@ -20,6 +20,7 @@
#include "src/shared/util.h"
#include "mesh/mesh-defs.h"
+#include "mesh/prv-beacon.h"
#include "tools/mesh/util.h"
@@ -137,6 +138,8 @@ const char *sig_model_string(uint16_t sig_model_id)
case 0x0001: return "Configuration Client";
case 0x0002: return "Health Server";
case 0x0003: return "Health Client";
+ case 0x0008: return "Private Beacon Server";
+ case 0x0009: return "Private Beacon Client";
case 0x1000: return "Generic OnOff Server";
case 0x1001: return "Generic OnOff Client";
case 0x1002: return "Generic Level Server";
--
2.39.0
next prev parent reply other threads:[~2023-01-20 19:47 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-20 19:47 [PATCH BlueZ v2 00/11] Mesh v1.1 additions Brian Gix
2023-01-20 19:47 ` [PATCH BlueZ v2 01/11] doc/mesh: Add Remote Provisioning DBus APIs Brian Gix
2023-01-20 22:51 ` Mesh v1.1 additions bluez.test.bot
2023-01-20 19:47 ` [PATCH BlueZ v2 02/11] mesh: Add Remote Provisioning Brian Gix
2023-01-20 19:47 ` [PATCH BlueZ v2 03/11] tools/mesh: Optimize for multiple RPR servers and NPPI Brian Gix
2023-01-20 19:47 ` [PATCH BlueZ v2 04/11] mesh: Rename parameter list per crypto usage Brian Gix
2023-01-20 19:47 ` [PATCH BlueZ v2 05/11] unit/mesh: Add unit testing of Mesh Private Beaconing Brian Gix
2023-01-20 19:47 ` [PATCH BlueZ v2 06/11] mesh: Add storage of Mesh Private Beacon settings Brian Gix
2023-01-20 19:47 ` [PATCH BlueZ v2 07/11] mesh: Add Mesh Private Beacon server Brian Gix
2023-01-20 19:47 ` [PATCH BlueZ v2 08/11] mesh: Add Tx/Rx support of Mesh Private Beacons Brian Gix
2023-01-20 19:47 ` [PATCH BlueZ v2 09/11] mesh: Add internal Mesh Private Beacon model Brian Gix
2023-01-20 19:47 ` Brian Gix [this message]
2023-01-20 19:47 ` [PATCH BlueZ v2 11/11] mesh: Switch beaconing net key Brian Gix
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230120194731.90065-11-brian.gix@gmail.com \
--to=brian.gix@gmail.com \
--cc=brian.gix@intel.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.