From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH v3 5/6] monitor: Add basic decoding for Mesh Provisioning
Date: Thu, 20 Jul 2017 14:36:16 +0300 [thread overview]
Message-ID: <20170720113617.6895-5-luiz.dentz@gmail.com> (raw)
In-Reply-To: <20170720113617.6895-1-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds basic decoding for Mesh Provisioning packets such as:
< HCI Command: LE Set Advertising Data (0x08|0x0008) plen 32
Length: 24
Mesh Provision: 024874cb0003dddd0000000000000000000000000000
Link ID: 0x024874cb
Transaction Number: 0
Provisioning Bearer Control (0x03)
Link Open (0x00)
Device UUID: 03dddd00000000000000000000000000
> HCI Event: LE Meta Event (0x3e) plen 20
LE Advertising Report (0x02)
Num reports: 1
Event type: Non connectable undirected - ADV_NONCONN_IND (0x03)
Address type: Random (0x01)
Address: 34:11:85:DC:41:39 (Non-Resolvable)
Data length: 8
Mesh Provision: 024874cb0007
Link ID: 0x024874cb
Transaction Number: 0
Provisioning Bearer Control (0x03)
Link Ack (0x01)
RSSI: -28 dBm (0xe4)
---
monitor/packet.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 92 insertions(+), 1 deletion(-)
diff --git a/monitor/packet.c b/monitor/packet.c
index 345a7da..3906eee 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -3594,6 +3594,97 @@ static void print_mesh_beacon(const uint8_t *data, uint8_t len)
}
}
+static void print_mesh_prov(const uint8_t *data, uint8_t len)
+{
+ print_hex_field("Mesh Provisioning", data, len);
+
+ if (len < 6) {
+ packet_hexdump(data, len);
+ return;
+ }
+
+ print_field(" Link ID: 0x%08x", get_be32(data));
+ print_field(" Transaction Number: %u", data[4]);
+
+ data += 5;
+ len -= 5;
+
+ switch (data[0] & 0x03) {
+ case 0x00:
+ print_field(" Transaction Start (0x00)");
+ if (len < 5) {
+ packet_hexdump(data + 1, len - 1);
+ return;
+ }
+ print_field(" SeqN: %u", data[0] & 0xfc >> 2);
+ print_field(" TotalLength: %u", get_be16(data + 1));
+ print_field(" FCS: 0x%2.2x", data[3]);
+ print_hex_field(" Data", data + 4, len - 4);
+ packet_hexdump(data + 5, len - 5);
+ break;
+ case 0x01:
+ print_field(" Transaction Acknowledgment (0x01)");
+ packet_hexdump(data + 1, len - 1);
+ break;
+ case 0x02:
+ print_field(" Transaction Continuation (0x02)");
+ print_field(" SegmentIndex: %u", data[0] >> 2);
+ if (len < 2) {
+ packet_hexdump(data + 1, len - 1);
+ return;
+ }
+ print_hex_field(" Data", data + 1, len - 1);
+ packet_hexdump(data + 2, len - 2);
+ break;
+ case 0x03:
+ print_field(" Provisioning Bearer Control (0x03)");
+ switch (data[0] >> 2) {
+ case 0x00:
+ print_field(" Link Open (0x00)");
+ if (len < 17) {
+ packet_hexdump(data + 1, len - 1);
+ break;
+ }
+ print_hex_field(" Device UUID", data, 16);
+ break;
+ case 0x01:
+ print_field(" Link Ack (0x01)");
+ break;
+ case 0x02:
+ print_field(" Link Close (0x02)");
+ if (len < 2) {
+ packet_hexdump(data + 1, len - 1);
+ break;
+ }
+
+ switch (data[1]) {
+ case 0x00:
+ print_field(" Reason: Success (0x00)");
+ break;
+ case 0x01:
+ print_field(" Reason: Timeout (0x01)");
+ break;
+ case 0x02:
+ print_field(" Reason: Fail (0x02)");
+ break;
+ default:
+ print_field(" Reason: Unrecognized (0x%2.2x)",
+ data[1]);
+ }
+ packet_hexdump(data + 2, len - 2);
+ break;
+ default:
+ packet_hexdump(data + 1, len - 1);
+ break;
+ }
+ break;
+ default:
+ print_field(" Invalid Command (0x%02x)", data[0]);
+ packet_hexdump(data, len);
+ break;
+ }
+}
+
static void print_eir(const uint8_t *eir, uint8_t eir_len, bool le)
{
uint16_t len = 0;
@@ -3823,7 +3914,7 @@ static void print_eir(const uint8_t *eir, uint8_t eir_len, bool le)
break;
case BT_EIR_MESH_PROV:
- print_hex_field("Mesh Provisioning", data, data_len);
+ print_mesh_prov(data, data_len);
break;
case BT_EIR_MESH_BEACON:
--
2.9.4
next prev parent reply other threads:[~2017-07-20 11:36 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-20 11:36 [PATCH v3 1/6] monitor: Add AD/EIR types for mesh Luiz Augusto von Dentz
2017-07-20 11:36 ` [PATCH v3 2/6] monitor: Add decoding of GATT Mesh Services Luiz Augusto von Dentz
2017-07-20 11:36 ` [PATCH v3 3/6] monitor: Filter duplicated advertisements Luiz Augusto von Dentz
2017-07-20 11:36 ` [PATCH v3 4/6] monitor: Add basic decoding for Mesh Beacon Luiz Augusto von Dentz
2017-07-20 11:36 ` Luiz Augusto von Dentz [this message]
2017-07-20 18:20 ` [PATCH v3 5/6] monitor: Add basic decoding for Mesh Provisioning Marcel Holtmann
2017-07-20 11:36 ` [PATCH v3 6/6] monitor: Add basic decoding for Mesh Data Luiz Augusto von Dentz
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=20170720113617.6895-5-luiz.dentz@gmail.com \
--to=luiz.dentz@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).