linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Gix, Brian" <brian.gix@intel.com>
To: "linux-bluetooth@vger.kernel.org"
	<linux-bluetooth@vger.kernel.org>,
	"Stotland, Inga" <inga.stotland@intel.com>
Subject: Re: [PATCH BlueZ v3] tools/mesh-cfgclient: Fix model app list parsing
Date: Thu, 7 May 2020 15:06:31 +0000	[thread overview]
Message-ID: <eea13971e7365bae385099f0a98b69d69805f2d2.camel@intel.com> (raw)
In-Reply-To: <20200506214449.20099-1-inga.stotland@intel.com>

Applied

On Wed, 2020-05-06 at 14:44 -0700, Inga Stotland wrote:
> This fixes parsing of Model AppKey List & Vendor Model Appkey List
> messages: taking into account the packt that AppKey indices are parked
> two in three octets.
> 
> Also, when printing key indices, print in both decimal and hexadecimal
> formats.
> ---
>  tools/mesh-cfgclient.c |  6 ++--
>  tools/mesh/cfgcli.c    | 80 ++++++++++++++++++++++++++----------------
>  tools/mesh/keys.c      |  6 ++--
>  tools/mesh/remote.c    |  6 ++--
>  4 files changed, 59 insertions(+), 39 deletions(-)
> 
> diff --git a/tools/mesh-cfgclient.c b/tools/mesh-cfgclient.c
> index d7318ffb7..fe82a8bbe 100644
> --- a/tools/mesh-cfgclient.c
> +++ b/tools/mesh-cfgclient.c
> @@ -338,12 +338,14 @@ static bool send_key(void *user_data, uint16_t dst, uint16_t key_idx,
>  	}
>  
>  	if (!is_appkey && !keys_subnet_exists(key_idx)) {
> -		bt_shell_printf("Local NetKey %u not found\n", key_idx);
> +		bt_shell_printf("Local NetKey %u (0x%3.3x) not found\n",
> +							key_idx, key_idx);
>  		return false;
>  	}
>  
>  	if (is_appkey && (keys_get_bound_key(key_idx) == NET_IDX_INVALID)) {
> -		bt_shell_printf("Local AppKey %u not found\n", key_idx);
> +		bt_shell_printf("Local AppKey %u (0x%3.3x) not found\n",
> +							key_idx, key_idx);
>  		return false;
>  	}
>  
> diff --git a/tools/mesh/cfgcli.c b/tools/mesh/cfgcli.c
> index d9f1c9b72..b96c6c9e6 100644
> --- a/tools/mesh/cfgcli.c
> +++ b/tools/mesh/cfgcli.c
> @@ -351,7 +351,8 @@ static void print_pub(uint16_t ele_addr, uint32_t mod_id,
>  		bt_shell_printf("\tModel: %4.4x\n",
>  				(uint16_t) (mod_id & 0xffff));
>  
> -	bt_shell_printf("\tApp Key Idx: %4.4x\n", pub->app_idx);
> +	bt_shell_printf("\tApp Key Idx: %u (0x%3.3x)\n", pub->app_idx,
> +								pub->app_idx);
>  	bt_shell_printf("\tTTL: %2.2x\n", pub->ttl);
>  }
>  
> @@ -374,6 +375,27 @@ static void print_sub_list(uint16_t addr, bool is_vendor, uint8_t *data,
>  		bt_shell_printf("\t\t%4.4x\n ", get_le16(data + i));
>  }
>  
> +static void print_appkey_list(uint16_t len, uint8_t *data)
> +{
> +	uint16_t app_idx;
> +
> +	bt_shell_printf("AppKeys:\n");
> +
> +	while (len >= 3) {
> +		app_idx = l_get_le16(data) & 0xfff;
> +		bt_shell_printf("\t%u (0x%3.3x)\n", app_idx, app_idx);
> +		app_idx = l_get_le16(data + 1) >> 4;
> +		bt_shell_printf("\t%u (0x%3.3x)\n", app_idx, app_idx);
> +		data += 3;
> +		len -= 3;
> +	}
> +
> +	if (len == 2) {
> +		app_idx = l_get_le16(data) & 0xfff;
> +		bt_shell_printf("\t %u (0x%3.3x)\n", app_idx, app_idx);
> +	}
> +}
> +
>  static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  							uint16_t len)
>  {
> @@ -384,7 +406,6 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  	uint32_t mod_id;
>  	struct model_pub pub;
>  	int n;
> -	uint16_t i;
>  	struct pending_req *req;
>  
>  	if (mesh_opcode_get(data, len, &opcode, &n)) {
> @@ -424,8 +445,8 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  		net_idx = get_le16(data + 1) & 0xfff;
>  		app_idx = get_le16(data + 2) >> 4;
>  
> -		bt_shell_printf("NetKey\t%3.3x\n", net_idx);
> -		bt_shell_printf("AppKey\t%3.3x\n", app_idx);
> +		bt_shell_printf("NetKey\t%u (0x%3.3x)\n", net_idx, net_idx);
> +		bt_shell_printf("AppKey\t%u (0x%3.3x)\n", app_idx, app_idx);
>  
>  		if (data[0] != MESH_STATUS_SUCCESS)
>  			break;
> @@ -449,24 +470,16 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  
>  		bt_shell_printf("AppKey List (node %4.4x) Status %s\n",
>  						src, mesh_status_str(data[0]));
> -		bt_shell_printf("NetKey %3.3x\n", l_get_le16(&data[1]));
> +
> +		net_idx = l_get_le16(&data[1]);
> +		bt_shell_printf("NetKey %u (0x%3.3x)\n", net_idx, net_idx);
>  		len -= 3;
>  
>  		if (data[0] != MESH_STATUS_SUCCESS)
>  			break;
>  
> -		bt_shell_printf("AppKeys:\n");
>  		data += 3;
> -
> -		while (len >= 3) {
> -			bt_shell_printf("\t%3.3x\n", l_get_le16(data) & 0xfff);
> -			bt_shell_printf("\t%3.3x\n", l_get_le16(data + 1) >> 4);
> -			len -= 3;
> -			data += 3;
> -		}
> -
> -		if (len == 2)
> -			bt_shell_printf("\t%3.3x\n", l_get_le16(data));
> +		print_appkey_list(len, data);
>  
>  		break;
>  
> @@ -478,7 +491,7 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  						mesh_status_str(data[0]));
>  		net_idx = get_le16(data + 1) & 0xfff;
>  
> -		bt_shell_printf("\tNetKey %3.3x\n", net_idx);
> +		bt_shell_printf("\tNetKey %u (0x%3.3x)\n", net_idx, net_idx);
>  
>  		if (data[0] != MESH_STATUS_SUCCESS)
>  			break;
> @@ -504,15 +517,17 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  
>  		while (len >= 3) {
>  			net_idx = l_get_le16(data) & 0xfff;
> -			bt_shell_printf("\t%3.3x\n", net_idx);
> +			bt_shell_printf("\t%u (0x%3.3x)\n", net_idx, net_idx);
>  			net_idx = l_get_le16(data + 1) >> 4;
> -			bt_shell_printf("\t%3.3x\n", net_idx);
> +			bt_shell_printf("\t%u (0x%3.3x)\n", net_idx, net_idx);
>  			data += 3;
>  			len -= 3;
>  		}
>  
> -		if (len == 2)
> -			bt_shell_printf("\t%3.3x\n", l_get_le16(data) & 0xfff);
> +		if (len == 2) {
> +			net_idx = l_get_le16(data) & 0xfff;
> +			bt_shell_printf("\t %u (0x%3.3x)\n", net_idx, net_idx);
> +		}
>  
>  		break;
>  
> @@ -524,7 +539,7 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  						mesh_status_str(data[0]));
>  		net_idx = get_le16(data + 1) & 0xfff;
>  
> -		bt_shell_printf("\tNetKey %3.3x\n", net_idx);
> +		bt_shell_printf("\tNetKey %u (0x%3.3x)\n", net_idx, net_idx);
>  		bt_shell_printf("\tKR Phase %2.2x\n", data[3]);
>  		break;
>  
> @@ -541,7 +556,7 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  
>  		print_mod_id(data + 5, len == 9, "");
>  
> -		bt_shell_printf("AppIdx\t\t%3.3x\n ", app_idx);
> +		bt_shell_printf("AppIdx\t\t%u (0x%3.3x)\n ", app_idx, app_idx);
>  
>  		break;
>  
> @@ -673,9 +688,10 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  		bt_shell_printf("Element Addr\t%4.4x\n", get_le16(data + 1));
>  		bt_shell_printf("Model ID\t%4.4x\n", get_le16(data + 3));
>  
> -		for (i = 5; i < len; i += 2)
> -			bt_shell_printf("Model AppIdx\t%4.4x\n",
> -							get_le16(data + i));
> +		data += 5;
> +		len -= 5;
> +		print_appkey_list(len, data);
> +
>  		break;
>  
>  	case OP_VEND_MODEL_APP_LIST:
> @@ -691,9 +707,10 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  		bt_shell_printf("Element Addr\t%4.4x\n", get_le16(data + 1));
>  		print_mod_id(data + 3, true, "");
>  
> -		for (i = 7; i < len; i += 2)
> -			bt_shell_printf("Model AppIdx\t%4.4x\n",
> -							get_le16(data + i));
> +		data += 7;
> +		len -= 7;
> +		print_appkey_list(len, data);
> +
>  		break;
>  
>  	/* Per Mesh Profile 4.3.2.63 */
> @@ -709,7 +726,8 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  		bt_shell_printf("Period\t\t%2.2x\n", data[4]);
>  		bt_shell_printf("TTL\t\t%2.2x\n", data[5]);
>  		bt_shell_printf("Features\t%4.4x\n", get_le16(data + 6));
> -		bt_shell_printf("Net_Idx\t%4.4x\n", get_le16(data + 8));
> +		net_idx = get_le16(data + 8);
> +		bt_shell_printf("Net_Idx\t%u (0x%3.3x)\n", net_idx, net_idx);
>  		break;
>  
>  	/* Per Mesh Profile 4.3.2.66 */
> @@ -733,7 +751,7 @@ static bool msg_recvd(uint16_t src, uint16_t idx, uint8_t *data,
>  		if (len != 1)
>  			return true;
>  
> -		bt_shell_printf("Node %4.4x: Network transmit cnt %d, steps %d\n",
> +		bt_shell_printf("Node %4.4x: Net transmit cnt %d, steps %d\n",
>  				src, data[0] & 7, data[0] >> 3);
>  		break;
>  
> diff --git a/tools/mesh/keys.c b/tools/mesh/keys.c
> index ff3b23f61..c4070cb75 100644
> --- a/tools/mesh/keys.c
> +++ b/tools/mesh/keys.c
> @@ -193,15 +193,15 @@ static void print_appkey(void *app_key, void *user_data)
>  {
>  	uint16_t app_idx = L_PTR_TO_UINT(app_key);
>  
> -	bt_shell_printf("0x%3.3x, ", app_idx);
> +	bt_shell_printf("%u (0x%3.3x), ", app_idx, app_idx);
>  }
>  
>  static void print_netkey(void *net_key, void *user_data)
>  {
>  	struct net_key *key = net_key;
>  
> -	bt_shell_printf(COLOR_YELLOW "NetKey: 0x%3.3x, phase: %u\n" COLOR_OFF,
> -							key->idx, key->phase);
> +	bt_shell_printf(COLOR_YELLOW "NetKey: %u (0x%3.3x), phase: %u\n"
> +				COLOR_OFF, key->idx, key->idx, key->phase);
>  
>  	if (!key->app_keys || l_queue_isempty(key->app_keys))
>  		return;
> diff --git a/tools/mesh/remote.c b/tools/mesh/remote.c
> index b9bc6b5c0..24bc59129 100644
> --- a/tools/mesh/remote.c
> +++ b/tools/mesh/remote.c
> @@ -217,11 +217,11 @@ uint16_t remote_get_subnet_idx(uint16_t addr)
>  	return (uint16_t) net_idx;
>  }
>  
> -static void print_key(void *net_key, void *user_data)
> +static void print_key(void *key, void *user_data)
>  {
> -	uint16_t net_idx = L_PTR_TO_UINT(net_key);
> +	uint16_t idx = L_PTR_TO_UINT(key);
>  
> -	bt_shell_printf("%3.3x, ", net_idx);
> +	bt_shell_printf("%u (0x%3.3x), ", idx, idx);
>  }
>  
>  static void print_node(void *rmt, void *user_data)

      reply	other threads:[~2020-05-07 15:12 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-06 21:44 [PATCH BlueZ v3] tools/mesh-cfgclient: Fix model app list parsing Inga Stotland
2020-05-07 15:06 ` Gix, Brian [this message]

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=eea13971e7365bae385099f0a98b69d69805f2d2.camel@intel.com \
    --to=brian.gix@intel.com \
    --cc=inga.stotland@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 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).