tools/mesh-cfgclient: Fix model app list parsing 22/234222/1
authorInga Stotland <inga.stotland@intel.com>
Wed, 6 May 2020 21:44:49 +0000 (14:44 -0700)
committerAbhay Agarwal <ay.agarwal@samsung.com>
Fri, 22 May 2020 04:23:43 +0000 (09:53 +0530)
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.

Change-Id: Iad95817a4f2f0789838f6701045959d7597d00c4
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
tools/mesh-cfgclient.c
tools/mesh/cfgcli.c
tools/mesh/keys.c
tools/mesh/remote.c

index 35aad26..84d85f1 100644 (file)
@@ -340,12 +340,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;
        }
 
index d9f1c9b..b96c6c9 100644 (file)
@@ -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;
 
index ff3b23f..c4070cb 100644 (file)
@@ -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;
index b9bc6b5..24bc591 100644 (file)
@@ -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)