Coverage Report

Created: 2025-02-15 06:25

/src/wireshark/epan/dissectors/packet-zbncp.c
Line
Count
Source (jump to first uncovered line)
1
/* packet-zbncp.c
2
 * Dissector routines for the ZBOSS Network Co-Processor (NCP)
3
 * Copyright 2021 DSR Corporation, http://dsr-wireless.com/
4
 *
5
 * Wireshark - Network traffic analyzer
6
 * By Gerald Combs <gerald@wireshark.org>
7
 * Copyright 1998 Gerald Combs
8
 *
9
 * SPDX-License-Identifier: GPL-2.0-or-later
10
 */
11
12
#include <config.h>
13
#include <epan/packet.h>
14
#include <epan/conversation.h>
15
#include <epan/tfs.h>
16
#include <wiretap/wtap.h>
17
#include <wsutil/array.h>
18
19
#include "packet-ieee802154.h"
20
#include "packet-zbncp.h"
21
22
void proto_reg_handoff_zbncp(void);
23
void proto_register_zbncp(void);
24
extern void dissect_zbee_nwk_status_code(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset);
25
extern void dissect_zbee_aps_status_code(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset);
26
27
14
#define ZBNCP_PROTOABBREV "zbncp"
28
29
0
#define ZBNCP_SIGN_FST_BYTE                                                                0xDEU
30
0
#define ZBNCP_SIGN_SEC_BYTE                                                                0xADU
31
#define ZBNCP_HDR_SIZE                                                                     7
32
33
14
#define ZBNCP_HDR_FLAGS_ISACK_MASK                                                         0x01
34
14
#define ZBNCP_HDR_FLAGS_RETRANS_MASK                                                       0x02
35
14
#define ZBNCP_HDR_FLAGS_PKT_SEQ_MASK                                                       0x0C
36
14
#define ZBNCP_HDR_FLAGS_ACK_SEQ_MASK                                                       0x30
37
14
#define ZBNCP_HDR_FLAGS_ISFIRST_MASK                                                       0x40
38
14
#define ZBNCP_HDR_FLAGS_ISLAST_MASK                                                        0x80
39
40
0
#define ZBNCP_DUMP_INFO_SIGN                                                               "ZBNCP"
41
0
#define ZBNCP_DUMP_INFO_SIGN_SIZE                                                          (sizeof(ZBNCP_DUMP_INFO_SIGN) - 1)
42
0
#define ZBNCP_DUMP_INFO_PAYLOAD_SIZE                                                       3
43
0
#define ZBNCP_DUMP_INFO_NCP_TYPE                                                           0x06U
44
0
#define ZBNCP_DUMP_INFO_SIZE                                                               (ZBNCP_DUMP_INFO_SIGN_SIZE + ZBNCP_DUMP_INFO_PAYLOAD_SIZE)
45
14
#define ZBNCP_DUMP_DIR_MASK                                                                0x01U
46
14
#define ZBNCP_DUMP_HOST_INT_DUMP_MASK                                                      0x02U
47
14
#define ZBNCP_DUMP_POTENTIAL_TX_RX_ERROR_MASK                                              0x04U
48
49
/*  Bit Masks for Configuration Parameters Field   */
50
14
#define CONF_PARAMS_RESERVED                                                            0x07
51
14
#define CONF_PARAMS_DIS_PANID_CHANGE                                                    0x08
52
14
#define CONF_PARAMS_DIS_CHAN_CHANGE                                                     0x10
53
14
#define CONF_PARAMS_LEAVE_REQ_ALLOW                                                     0x20
54
14
#define CONF_PARAMS_REQ_TCLK                                                            0x40
55
14
#define CONF_PARAMS_RESTRICT_MODE_EN                                                    0x80
56
57
58
/* decryption helpers */
59
static unsigned dissect_zbncp_ll_hdr(tvbuff_t *, packet_info *, proto_tree *, unsigned, uint8_t *);
60
static void dissect_zbncp_body(tvbuff_t *, packet_info *, proto_tree *, unsigned, uint16_t *);
61
static void dissect_zbncp_high_level(tvbuff_t *, packet_info *, proto_tree *, unsigned, uint16_t *);
62
static unsigned dissect_zbncp_high_level_hdr(tvbuff_t *, packet_info *, proto_tree *, unsigned, uint8_t *, uint16_t *);
63
static void dissect_zbncp_high_level_body(tvbuff_t *, packet_info *, proto_tree *, unsigned, uint8_t, uint16_t);
64
static void dissect_zbncp_fragmentation_body(tvbuff_t *, packet_info *, proto_tree *, unsigned);
65
static unsigned dissect_zbncp_packet(tvbuff_t *, packet_info *, proto_tree *, unsigned);
66
static unsigned dissect_zbncp_status(tvbuff_t *, packet_info *, proto_tree *, unsigned);
67
68
static tvbuff_t *dissect_zbncp_dump_info(tvbuff_t *, packet_info *, proto_tree *);
69
70
/*-------------------------------------
71
 * Dissector Function Prototypes
72
 *-------------------------------------
73
 */
74
/* Dissection Routines. */
75
76
/* Initialize Protocol and Registered fields */
77
78
/* ZBNCP hdr */
79
static int zbncp_frame = -1;
80
static int proto_zbncp;
81
82
static int hf_zbncp_hdr_sign;
83
static int hf_zbncp_packet_len;
84
static int hf_zbncp_hdr_type;
85
static int hf_zbncp_hdr_flags;
86
static int hf_zbncp_hdr_flags_isack;
87
static int hf_zbncp_hdr_flags_retrans;
88
static int hf_zbncp_hdr_flags_packetseq;
89
static int hf_zbncp_hdr_flags_ackseq;
90
static int hf_zbncp_hdr_flags_first_frag;
91
static int hf_zbncp_hdr_flags_last_frag;
92
static int hf_zbncp_hdr_crc8;
93
94
static int hf_zbncp_body_data_crc16;
95
static int hf_zbncp_data_hl_version;
96
static int hf_zbncp_data_hl_packet_type;
97
static int hf_zbncp_data_hl_call_id;
98
static int hf_zbncp_data_hl_tsn;
99
static int hf_zbncp_data_hl_status_cat;
100
static int hf_zbncp_data_hl_status;
101
static int hf_zbncp_data_hl_status_generic;
102
static int hf_zbncp_data_hl_status_mac;
103
static int hf_zbncp_data_hl_status_nwk;
104
static int hf_zbncp_data_hl_status_cbke;
105
static int hf_zbncp_data_fw_vers;
106
static int hf_zbncp_data_stack_vers;
107
static int hf_zbncp_data_proto_vers;
108
static int hf_zbncp_data_reset_opt;
109
static int hf_zbncp_data_zb_role;
110
static int hf_zbncp_data_ch_list_len;
111
static int hf_zbncp_data_page;
112
static int hf_zbncp_data_ch_mask;
113
static int hf_zbncp_data_channel;
114
static int hf_zbncp_data_channel4;
115
static int hf_zbncp_data_pan_id;
116
static int hf_zbncp_data_mac_int_num;
117
static int hf_zbncp_data_index;
118
static int hf_zbncp_data_enable;
119
static int hf_zbncp_data_bind_type;
120
static int hf_zbncp_data_ieee_addr;
121
static int hf_zbncp_data_ext_pan_id;
122
static int hf_zbncp_data_coordinator_version;
123
static int hf_zbncp_data_trust_center_addres;
124
static int hf_zbncp_data_remote_ieee_addr;
125
static int hf_zbncp_data_src_ieee_addr;
126
static int hf_zbncp_data_dst_ieee_addr;
127
static int hf_zbncp_data_partner_ieee_addr;
128
static int hf_zbncp_data_trace_mask;
129
static int hf_zbncp_data_trace_wireless_traf;
130
static int hf_zbncp_data_trace_reserved;
131
static int hf_zbncp_data_trace_ncp_ll_proto;
132
static int hf_zbncp_data_trace_host_int_line;
133
static int hf_zbncp_data_trace_sleep_awake;
134
static int hf_zbncp_data_trace_input_output;
135
static int hf_zbncp_data_trace_timestamp;
136
static int hf_zbncp_data_trace;
137
static int hf_zbncp_data_key_neg_method;
138
static int hf_zbncp_data_psk_secrets;
139
static int hf_zbncp_data_r22_join_usage;
140
static int hf_zbncp_data_nwk_conf_preset;
141
static int hf_zbncp_data_short_address;
142
static int hf_zbncp_data_raw_data;
143
static int hf_zbncp_data_conf_params;
144
static int hf_zbncp_data_channel_page_count;
145
static int hf_zbncp_data_config_mask;
146
static int hf_zbncp_data_dest_short_address;
147
static int hf_zbncp_data_current_parents_short_address;
148
static int hf_zbncp_data_current_parents_lqi;
149
static int hf_zbncp_data_potential_parent_count;
150
static int hf_zbncp_data_classification_mask;
151
static int hf_zbncp_data_total_beacons_surveyed;
152
static int hf_zbncp_data_current_pan_id_beacons;
153
static int hf_zbncp_data_current_nwk_potential_parents;
154
static int hf_zbncp_data_other_zigbee_beacons;
155
static int hf_zbncp_data_pan_id_conflict_tlv;
156
static int hf_zbncp_data_eui64_count;
157
static int hf_zbncp_data_eui64;
158
static int hf_zbncp_data_target_ieee_addr;
159
static int hf_zbncp_data_initial_join_auth;
160
static int hf_zbncp_data_key_update_method;
161
static int hf_zbncp_data_next_pan_id_change;
162
static int hf_zbncp_data_next_channel_change;
163
static int hf_zbncp_data_error_count;
164
static int hf_zbncp_data_keepalive;
165
static int hf_zbncp_data_rx_on_idle;
166
static int hf_zbncp_data_res_tx_power;
167
static int hf_zbncp_data_req_tx_power;
168
static int hf_zbncp_data_joined;
169
static int hf_zbncp_data_joined_bit;
170
static int hf_zbncp_data_parent_bit;
171
static int hf_zbncp_data_authenticated;
172
static int hf_zbncp_data_timeout;
173
static int hf_zbncp_data_keepalive_mode;
174
static int hf_zbncp_force_route_record_sending;
175
static int hf_zbncp_data_nwk_addr;
176
static int hf_zbncp_data_nwk_parent_addr;
177
static int hf_zbncp_data_src_nwk_addr;
178
static int hf_zbncp_data_dst_nwk_addr;
179
static int hf_zbncp_data_remote_nwk_addr;
180
static int hf_zbncp_data_group_nwk_addr;
181
static int hf_zbncp_data_src_mac_addr;
182
static int hf_zbncp_data_dst_mac_addr;
183
static int hf_zbncp_data_nwk_key;
184
static int hf_zbncp_data_key_num;
185
static int hf_zbncp_data_serial_num;
186
static int hf_zbncp_data_size;
187
static int hf_zbncp_data_vendor_data;
188
static int hf_zbncp_data_dump_type;
189
static int hf_zbncp_data_dump_text;
190
static int hf_zbncp_data_dump_bin;
191
static int hf_zbncp_data_parameter_id;
192
static int hf_zbncp_data_value8_dec;
193
static int hf_zbncp_data_value16_dec;
194
static int hf_zbncp_data_aps_ack_to_non_sleepy;
195
static int hf_zbncp_data_aps_ack_to_sleepy;
196
static int hf_zbncp_data_min16;
197
static int hf_zbncp_data_max16;
198
static int hf_zbncp_data_default8_sign;
199
static int hf_zbncp_data_current8_sign;
200
static int hf_zbncp_data_is_concentrator;
201
static int hf_zbncp_data_concentrator_radius;
202
static int hf_zbncp_data_time16;
203
static int hf_zbncp_data_lock_status;
204
static int hf_zbncp_data_reset_source;
205
static int hf_zbncp_nwk_leave_allowed;
206
static int hf_zbncp_data_nvram_dataset_quantity;
207
static int hf_zbncp_data_nvram_dataset_type;
208
static int hf_zbncp_data_nvram_version;
209
static int hf_zbncp_data_dataset_version;
210
static int hf_zbncp_data_dataset_length;
211
static int hf_zbncp_data_nvram_dataset_data;
212
static int hf_zbncp_data_tc_policy_type;
213
static int hf_zbncp_data_tc_policy_value;
214
static int hf_zbncp_ed_capacity;
215
static int hf_zbncp_max_joins;
216
static int hf_zbncp_zdo_leave_allowed;
217
static int hf_zbncp_zdo_leave_wo_rejoin_allowed;
218
static int hf_zbncp_data_aps_key;
219
static int hf_zbncp_data_endpoint;
220
static int hf_zbncp_data_aps_group_num;
221
static int hf_zbncp_data_aps_group;
222
static int hf_zbncp_data_src_endpoint;
223
static int hf_zbncp_data_dst_endpoint;
224
static int hf_zbncp_data_poll_pkt_cnt;
225
static int hf_zbncp_data_poll_timeout;
226
static int hf_zbncp_data_poll_permit_flag;
227
static int hf_zbncp_data_profile_id;
228
static int hf_zbncp_data_device_id;
229
static int hf_zbncp_data_dev_version;
230
static int hf_zbncp_data_in_cl_cnt;
231
static int hf_zbncp_data_out_cl_cnt;
232
static int hf_zbncp_data_cluster_id;
233
static int hf_zbncp_data_mac_cap;
234
static int hf_zbncp_data_manuf_id;
235
static int hf_zbncp_data_cur_pwr_mode;
236
static int hf_zbncp_data_cur_pwr_lvl;
237
static int hf_zbncp_data_susp_period;
238
static int hf_zbncp_data_av_pwr_src;
239
static int hf_zbncp_data_cur_pwr_src;
240
static int hf_zbncp_data_pwr_src_const;
241
static int hf_zbncp_data_pwr_src_recharge;
242
static int hf_zbncp_data_pwr_src_disposable;
243
static int hf_zbncp_data_req_type;
244
static int hf_zbncp_data_start_idx;
245
static int hf_zbncp_data_start_idx_16b;
246
static int hf_zbncp_data_upd_idx;
247
static int hf_zbncp_data_entry_idx;
248
static int hf_zbncp_data_num_asoc_dec;
249
static int hf_zbncp_data_pwr_desc;
250
static int hf_zbncp_data_pwr_desc_cur_power_mode;
251
static int hf_zbncp_data_pwr_desc_av_pwr_src;
252
static int hf_zbncp_data_pwr_desc_cur_pwr_src;
253
static int hf_zbncp_data_pwr_desc_cur_pwr_lvl;
254
static int hf_zbncp_data_max_buf_size;
255
static int hf_zbncp_data_max_inc_trans_size;
256
static int hf_zbncp_data_max_out_trans_size;
257
static int hf_zbncp_data_desc_cap;
258
static int hf_zbncp_data_desc_cap_ext_act_ep_list_av;
259
static int hf_zbncp_data_desc_cap_ext_simple_desc_list_av;
260
static int hf_zbncp_data_flags8;
261
static int hf_zbncp_data_flags_permit_join;
262
static int hf_zbncp_data_flags_router_cap;
263
static int hf_zbncp_data_flags_ed_cap;
264
static int hf_zbncp_data_flags_stack_profile;
265
static int hf_zbncp_data_flags16;
266
static int hf_zbncp_data_flags_zb_role;
267
static int hf_zbncp_data_flags_comp_desc_av;
268
static int hf_zbncp_data_flags_user_desc_av;
269
static int hf_zbncp_data_flags_freq_868;
270
static int hf_zbncp_data_flags_freq_902;
271
static int hf_zbncp_data_flags_freq_2400;
272
static int hf_zbncp_data_flags_freq_eu_sub_ghz;
273
static int hf_zbncp_data_srv_msk;
274
static int hf_zbncp_data_srv_msk_prim_tc;
275
static int hf_zbncp_data_srv_msk_backup_tc;
276
static int hf_zbncp_data_srv_msk_prim_bind_tbl_cache;
277
static int hf_zbncp_data_srv_msk_backup_bind_tbl_cache;
278
static int hf_zbncp_data_remote_bind_offset;
279
static int hf_zbncp_data_srv_msk_prim_disc_cache;
280
static int hf_zbncp_data_srv_msk_backup_disc_cache;
281
static int hf_zbncp_data_srv_msk_nwk_manager;
282
static int hf_zbncp_data_srv_msk_stack_compl_rev;
283
static int hf_zbncp_data_ep_cnt;
284
static int hf_zbncp_data_dst_addr_mode;
285
static int hf_zbncp_data_leave_flags;
286
static int hf_zbncp_data_leave_flags_remove_chil;
287
static int hf_zbncp_data_leave_flags_rejoin;
288
static int hf_zbncp_data_permit_dur;
289
static int hf_zbncp_data_tc_sign;
290
static int hf_zbncp_data_secur_rejoin;
291
static int hf_zbncp_data_zdo_rejoin_flags;
292
static int hf_zbncp_data_zdo_rejoin_flags_tcsw_happened;
293
static int hf_zbncp_data_dlen8;
294
static int hf_zbncp_data_dlen16;
295
static int hf_zbncp_data_param_len;
296
static int hf_zbncp_data_radius;
297
static int hf_zbncp_data_time_between_disc;
298
static int hf_zbncp_data_enable_flag;
299
static int hf_zbncp_data_array;
300
static int hf_zbncp_data_use_alias;
301
static int hf_zbncp_data_alias_src;
302
static int hf_zbncp_data_alias_seq;
303
static int hf_zbncp_data_tx_opt;
304
static int hf_zbncp_data_tx_opt_secur;
305
static int hf_zbncp_data_tx_opt_obsolete;
306
static int hf_zbncp_data_tx_opt_ack;
307
static int hf_zbncp_data_tx_opt_frag;
308
static int hf_zbncp_data_tx_opt_inc_ext_nonce;
309
static int hf_zbncp_data_tx_opt_force_mesh_route;
310
static int hf_zbncp_data_tx_opt_send_route_record;
311
static int hf_zbncp_data_lqi;
312
static int hf_zbncp_data_rssi;
313
static int hf_zbncp_data_do_cleanup;
314
static int hf_zbncp_data_max_rx_bcast;
315
static int hf_zbncp_data_mac_tx_bcast;
316
static int hf_zbncp_data_mac_rx_ucast;
317
static int hf_zbncp_data_mac_tx_ucast_total_zcl;
318
static int hf_zbncp_data_mac_tx_ucast_failures_zcl;
319
static int hf_zbncp_data_mac_tx_ucast_retries_zcl;
320
static int hf_zbncp_data_mac_tx_ucast_total;
321
static int hf_zbncp_data_mac_tx_ucast_failures;
322
static int hf_zbncp_data_mac_tx_ucast_retries;
323
static int hf_zbncp_data_mac_validate_drop_cnt;
324
static int hf_zbncp_data_mac_phy_cca_fail_count;
325
static int hf_zbncp_data_phy_to_mac_que_lim_reached;
326
static int hf_zbncp_data_period_of_time;
327
static int hf_zbncp_data_last_msg_lqi;
328
static int hf_zbncp_data_last_msg_rssi;
329
static int hf_zbncp_data_number_of_resets;
330
static int hf_zbncp_data_aps_tx_bcast;
331
static int hf_zbncp_data_aps_tx_ucast_success;
332
static int hf_zbncp_data_aps_tx_ucast_retry;
333
static int hf_zbncp_data_aps_tx_ucast_fail;
334
static int hf_zbncp_data_route_disc_initiated;
335
static int hf_zbncp_data_nwk_neighbor_added;
336
static int hf_zbncp_data_nwk_neighbor_removed;
337
static int hf_zbncp_data_nwk_neighbor_stale;
338
static int hf_zbncp_upd_status_code;
339
static int hf_zbncp_data_join_indication;
340
static int hf_zbncp_data_childs_removed;
341
static int hf_zbncp_data_aps_decrypt_failure;
342
static int hf_zbncp_data_packet_buffer_allocate_failures;
343
static int hf_zbncp_data_aps_unauthorized_key;
344
static int hf_zbncp_data_nwk_decrypt_failure;
345
static int hf_zbncp_data_average_mac_retry_per_aps_message_sent;
346
static int hf_zbncp_data_nwk_fc_failure;
347
static int hf_zbncp_data_aps_fc_failure;
348
static int hf_zbncp_data_nwk_retry_overflow;
349
static int hf_zbncp_data_nwk_bcast_table_full;
350
static int hf_zbncp_data_status;
351
static int hf_zbncp_zdo_auth_type;
352
static int hf_zbncp_zdo_leg_auth_status_code;
353
static int hf_zbncp_zdo_tclk_auth_status_code;
354
static int hf_zbncp_zdo_server_mask;
355
static int hf_zbncp_zdo_start_entry_idx;
356
static int hf_zbncp_zdo_scan_duration;
357
static int hf_zbncp_zdo_scan_cnt;
358
static int hf_zbncp_zdo_scan_mgr_addr;
359
static int hf_zbncp_data_aps_cnt;
360
static int hf_zbncp_data_aps_fc;
361
static int hf_zbncp_data_aps_fc_deliv_mode;
362
static int hf_zbncp_data_aps_fc_secur;
363
static int hf_zbncp_data_aps_fc_ack_retrans;
364
static int hf_zbncp_data_aps_key_attr;
365
static int hf_zbncp_data_aps_key_attr_key_src;
366
static int hf_zbncp_data_aps_key_attr_key_used;
367
static int hf_zbncp_data_pkt_len;
368
static int hf_zbncp_data_pkt;
369
static int hf_zbncp_data_scan_dur;
370
static int hf_zbncp_data_distr_nwk_flag;
371
static int hf_zbncp_data_nwk_count;
372
static int hf_zbncp_data_nwk_upd_id;
373
static int hf_zbncp_data_rejoin;
374
static int hf_zbncp_data_rejoin_nwk;
375
static int hf_zbncp_data_secur_en;
376
static int hf_zbncp_data_beacon_type;
377
static int hf_zbncp_data_beacon_order;
378
static int hf_zbncp_data_superframe_order;
379
static int hf_zbncp_data_battery_life_ext;
380
static int hf_zbncp_data_enh_beacon;
381
static int hf_zbncp_data_mac_if;
382
static int hf_zbncp_data_mac_if_idx;
383
static int hf_zbncp_data_ed_config;
384
static int hf_zbncp_data_timeout_cnt;
385
static int hf_zbncp_data_dev_timeout;
386
static int hf_zbncp_data_relationship;
387
static int hf_zbncp_data_tx_fail_cnt;
388
static int hf_zbncp_data_out_cost;
389
static int hf_zbncp_data_age;
390
static int hf_zbncp_data_keepalive_rec;
391
static int hf_zbncp_data_fast_poll_int;
392
static int hf_zbncp_data_long_poll_int;
393
static int hf_zbncp_data_fast_poll_flag;
394
static int hf_zbncp_data_stop_fast_poll_result;
395
static int hf_zbncp_data_time;
396
static int hf_zbncp_data_pan_id_cnt;
397
static int hf_zbncp_data_ic;
398
static int hf_zbncp_data_ic_table_size;
399
static int hf_zbncp_data_ic_ent_cnt;
400
static int hf_zbncp_data_cs;
401
static int hf_zbncp_data_ca_pub_key;
402
static int hf_zbncp_data_ca_priv_key;
403
static int hf_zbncp_data_cert;
404
static int hf_zbncp_data_ic_en;
405
static int hf_zbncp_data_key_type;
406
static int hf_zbncp_data_issuer;
407
static int hf_zbncp_data_tx_power;
408
static int hf_zbncp_data_seed;
409
static int hf_zbncp_data_tx_time;
410
static int hf_zbncp_data_link_key;
411
static int hf_zbncp_data_aps_link_key_type;
412
static int hf_zbncp_data_key_src;
413
static int hf_zbncp_data_key_attr;
414
static int hf_zbncp_data_out_frame_cnt;
415
static int hf_zbncp_data_inc_frame_cnt;
416
static int hf_zbncp_data_offset;
417
static int hf_zbncp_data_do_erase;
418
static int hf_zbncp_data_calibration_status;
419
static int hf_zbncp_data_calibration_value;
420
static int hf_zbncp_data_zgp_key_type;
421
static int hf_zbncp_data_zgp_link_key;
422
static int hf_zbncp_data_prod_conf_hdr_crc;
423
static int hf_zbncp_data_prod_conf_hdr_len;
424
static int hf_zbncp_data_prod_conf_hdr_version;
425
static int hf_zbncp_data_prod_conf_body;
426
427
/* IEEE802.15.4 capability info (copied from IEEE802.15.4 95e212e6c7 commit)*/
428
static int hf_ieee802154_cinfo_alt_coord;
429
static int hf_ieee802154_cinfo_device_type;
430
static int hf_ieee802154_cinfo_power_src;
431
static int hf_ieee802154_cinfo_idle_rx;
432
static int hf_ieee802154_cinfo_sec_capable;
433
static int hf_ieee802154_cinfo_alloc_addr;
434
435
/* Configuration parameters */
436
static int hf_zbncp_data_conf_params_reserved;
437
static int hf_zbncp_data_conf_params_disable_pan_id_change;
438
static int hf_zbncp_data_conf_params_disable_channel_change;
439
static int hf_zbncp_data_conf_params_leave_request_allowed;
440
static int hf_zbncp_data_conf_params_require_tclk;
441
static int hf_zbncp_data_conf_params_restricted_enabled;
442
443
/* ZBNCP traffic dump */
444
static int hf_zbncp_dump_preamble;
445
static int hf_zbncp_dump_version;
446
static int hf_zbncp_dump_type;
447
static int hf_zbncp_dump_options;
448
static int hf_zbncp_dump_options_dir;
449
static int hf_zbncp_dump_options_int_state;
450
static int hf_zbncp_dump_options_tx_conflict;
451
452
/* Initialize subtree pointers */
453
static int ett_zbncp_hdr;
454
static int ett_zbncp_hdr_flags;
455
static int ett_zbncp_ll_body;
456
static int ett_zbncp_hl_hdr;
457
static int ett_zbncp_hl_body;
458
static int ett_zbncp_data_in_cl_list;
459
static int ett_zbncp_data_out_cl_list;
460
static int ett_zbncp_data_mac_cap;
461
static int ett_zbncp_data_pwr_src;
462
static int ett_zbncp_data_cur_pwr_src;
463
static int ett_zbncp_data_asoc_nwk_list;
464
static int ett_zbncp_data_pwr_desc;
465
static int ett_zbncp_data_desc_cap;
466
static int ett_zbncp_data_flags;
467
static int ett_zbncp_data_server_mask;
468
static int ett_zbncp_data_ep_list;
469
static int ett_zbncp_data_leave_flags;
470
static int ett_zbncp_data_tx_opt;
471
static int ett_zbncp_data_zdo_rejoin_flags;
472
static int ett_zbncp_data_apc_fc;
473
static int ett_zbncp_data_prod_conf_hdr;
474
static int ett_zbncp_data_aps_key_attr;
475
static int ett_zbncp_data_ch_list;
476
static int ett_zbncp_data_channel;
477
static int ett_zbncp_data_nwk_descr;
478
static int ett_zbncp_data_cmd_opt;
479
static int ett_zbncp_data_joind_bitmask;
480
static int ett_zbncp_data_trace_bitmask;
481
static int ett_zbncp_data_conf_params;
482
483
static int ett_zbncp_dump;
484
static int ett_zbncp_dump_opt;
485
486
static dissector_handle_t zbncp_handle;
487
488
static const value_string zbncp_hl_type[] =
489
{
490
    {ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST, "Request"},
491
    {ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE, "Response"},
492
    {ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION, "Indication"},
493
    {0, NULL}
494
};
495
496
static const value_string zbncp_hl_status_cat[] =
497
{
498
    {ZBNCP_HIGH_LVL_STAT_CAT_GENERIC, "Generic"},
499
    {ZBNCP_HIGH_LVL_STAT_CAT_SYSTEM, "System"},
500
    {ZBNCP_HIGH_LVL_STAT_CAT_MAC, "MAC"},
501
    {ZBNCP_HIGH_LVL_STAT_CAT_NWK, "NWK"},
502
    {ZBNCP_HIGH_LVL_STAT_CAT_APS, "APS"},
503
    {ZBNCP_HIGH_LVL_STAT_CAT_ZDO, "ZDO"},
504
    {ZBNCP_HIGH_LVL_STAT_CAT_CBKE, "CBKE"},
505
    {0, NULL}
506
};
507
508
static const value_string zbncp_reset_opt[] =
509
{
510
    {0, "No options"},
511
    {1, "Erase NVRAM"},
512
    {2, "Factory Reset"},
513
    {3, "Locking reading keys"},
514
    {0, NULL}
515
};
516
517
static const value_string zbncp_zb_role[] =
518
{
519
    {0, "ZC"},
520
    {1, "ZR"},
521
    {2, "ZED"},
522
    {0, NULL}
523
};
524
525
static const value_string zbncp_bind_type_vals[] =
526
{
527
    {0, "NCP_HL_UNUSED_BINDING"},
528
    {1, "NCP_HL_UNICAST_BINDING"},
529
    {0, NULL}
530
};
531
532
static const value_string zbncp_tc_policy_types[] =
533
{
534
    {0, "TC Link Keys Required"},
535
    {1, "IC Required"},
536
    {2, "TC Rejoin Enabled"},
537
    {3, "Ignore TC Rejoin"},
538
    {4, "APS Insecure Join"},
539
    {5, "Disable NWK MGMT Channel Update"},
540
    {6, "Unsecure TC Rejoin Enable"},
541
    {7, "Enable Device Interview"},
542
    {8, "Set APS encryption for ZDO"},
543
    {0, NULL}
544
};
545
546
static const value_string zbncp_dev_update_status_code[] =
547
{
548
    {0, "Standard Device Secured Rejoin"},
549
    {1, "Standard Device Unsecured Join"},
550
    {2, "Device Left"},
551
    {3, "Standard Device Trust Center Rejoin"},
552
    {0, NULL}
553
};
554
555
static const value_string zbncp_nwk_conf_behavior[] =
556
{
557
    {0, "None"},
558
    {1, "R22 Behavior"},
559
    {2, "R23 Behavior"},
560
    {0, NULL}
561
};
562
563
static const value_string zbncp_hl_call_id[] =
564
{
565
    {ZBNCP_CMD_GET_MODULE_VERSION, "GET_MODULE_VERSION"},
566
    {ZBNCP_CMD_NCP_RESET, "NCP_RESET"},
567
    {ZBNCP_CMD_GET_ZIGBEE_ROLE, "GET_ZIGBEE_ROLE"},
568
    {ZBNCP_CMD_SET_ZIGBEE_ROLE, "SET_ZIGBEE_ROLE"},
569
    {ZBNCP_CMD_GET_ZIGBEE_CHANNEL_MASK, "GET_ZIGBEE_CHANNEL_MASK"},
570
    {ZBNCP_CMD_SET_ZIGBEE_CHANNEL_MASK, "SET_ZIGBEE_CHANNEL_MASK"},
571
    {ZBNCP_CMD_GET_ZIGBEE_CHANNEL, "GET_ZIGBEE_CHANNEL"},
572
    {ZBNCP_CMD_GET_PAN_ID, "GET_PAN_ID"},
573
    {ZBNCP_CMD_SET_PAN_ID, "SET_PAN_ID"},
574
    {ZBNCP_CMD_GET_LOCAL_IEEE_ADDR, "GET_LOCAL_IEEE_ADDR"},
575
    {ZBNCP_CMD_SET_LOCAL_IEEE_ADDR, "SET_LOCAL_IEEE_ADDR"},
576
    {ZBNCP_CMD_SET_TRACE, "SET_TRACE"},
577
    {ZBNCP_CMD_GET_KEEPALIVE_TIMEOUT, "GET_KEEPALIVE_TIMEOUT"},
578
    {ZBNCP_CMD_SET_KEEPALIVE_TIMEOUT, "SET_KEEPALIVE_TIMEOUT"},
579
    {ZBNCP_CMD_GET_TX_POWER, "GET_TX_POWER"},
580
    {ZBNCP_CMD_SET_TX_POWER, "SET_TX_POWER"},
581
    {ZBNCP_CMD_GET_RX_ON_WHEN_IDLE, "GET_RX_ON_WHEN_IDLE"},
582
    {ZBNCP_CMD_SET_RX_ON_WHEN_IDLE, "SET_RX_ON_WHEN_IDLE"},
583
    {ZBNCP_CMD_GET_JOINED, "GET_JOINED"},
584
    {ZBNCP_CMD_GET_AUTHENTICATED, "GET_AUTHENTICATED"},
585
    {ZBNCP_CMD_GET_ED_TIMEOUT, "GET_ED_TIMEOUT"},
586
    {ZBNCP_CMD_SET_ED_TIMEOUT, "SET_ED_TIMEOUT"},
587
    {ZBNCP_CMD_ADD_VISIBLE_DEV, "ADD_VISIBLE_DEV"},
588
    {ZBNCP_CMD_ADD_INVISIBLE_SHORT, "ADD_INVISIBLE_SHORT"},
589
    {ZBNCP_CMD_RM_INVISIBLE_SHORT, "RM_INVISIBLE_SHORT"},
590
    {ZBNCP_CMD_SET_NWK_KEY, "SET_NWK_KEY"},
591
    {ZBNCP_CMD_GET_SERIAL_NUMBER, "GET_SERIAL_NUMBER"},
592
    {ZBNCP_CMD_GET_VENDOR_DATA, "GET_VENDOR_DATA"},
593
    {ZBNCP_CMD_GET_NWK_KEYS, "GET_NWK_KEYS"},
594
    {ZBNCP_CMD_GET_APS_KEY_BY_IEEE, "GET_APS_KEY_BY_IEEE"},
595
    {ZBNCP_CMD_BIG_PKT_TO_NCP, "BIG_PKT_TO_NCP"},
596
    {ZBNCP_CMD_GET_PARENT_ADDR, "GET_PARENT_ADDR"},
597
    {ZBNCP_CMD_GET_EXT_PAN_ID, "GET_EXT_PAN_ID"},
598
    {ZBNCP_CMD_GET_COORDINATOR_VERSION, "GET_COORDINATOR_VERSION"},
599
    {ZBNCP_CMD_GET_SHORT_ADDRESS, "GET_SHORT_ADDRESS"},
600
    {ZBNCP_CMD_GET_TRUST_CENTER_ADDRESS, "GET_TRUST_CENTER_ADDRESS"},
601
    {ZBNCP_CMD_DEBUG_WRITE, "DEBUG_WRITE"},
602
    {ZBNCP_CMD_GET_CONFIG_PARAMETER, "GET_CONFIG_PARAMETER"},
603
    {ZBNCP_CMD_GET_LOCK_STATUS, "GET_LOCK_STATUS"},
604
    {ZBNCP_CMD_GET_TRACE, "GET_TRACE"},
605
    {ZBNCP_CMD_NCP_RESET_IND, "NCP_RESET_IND"},
606
    {ZBNCP_CMD_SET_NWK_LEAVE_ALLOWED, "SET_NWK_LEAVE_ALLOWED"},
607
    {ZBNCP_CMD_GET_NWK_LEAVE_ALLOWED, "GET_NWK_LEAVE_ALLOWED"},
608
    {ZBNCP_CMD_NVRAM_WRITE, "NVRAM_WRITE"},
609
    {ZBNCP_CMD_NVRAM_READ, "NVRAM_READ"},
610
    {ZBCNP_CMD_NVRAM_CLEAR, "NVRAM_CLEAR"},
611
    {ZBNCP_CMD_NVRAM_ERASE, "NVRAM_ERASE"},
612
    {ZBNCP_CMD_SET_TC_POLICY, "SET_TC_POLICY"},
613
    {ZBNCP_CMD_SET_EXTENDED_PAN_ID, "SET_EXTENDED_PAN_ID"},
614
    {ZBNCP_CMD_SET_ED_CAPACITY, "SET_ED_CAPACITY"},
615
    {ZBNCP_CMD_GET_ED_CAPACITY, "GET_ED_CAPACITY"},
616
    {ZBNCP_CMD_SET_ZDO_LEAVE_ALLOWED, "SET_ZDO_LEAVE_ALLOWED"},
617
    {ZBNCP_CMD_GET_ZDO_LEAVE_ALLOWED, "GET_ZDO_LEAVE_ALLOWED"},
618
    {ZBNCP_CMD_SET_LEAVE_WO_REJOIN_ALLOWED, "SET_LEAVE_WO_REJOIN_ALLOWED"},
619
    {ZBNCP_CMD_GET_LEAVE_WO_REJOIN_ALLOWED, "GET_LEAVE_WO_REJOIN_ALLOWED"},
620
    {ZBNCP_CMD_DISABLE_GPPB, "DISABLE_GPPB"},
621
    {ZBNCP_CMD_GP_SET_SHARED_KEY_TYPE, "GP_SET_SHARED_KEY_TYPE"},
622
    {ZBNCP_CMD_GP_SET_DEFAULT_LINK_KEY, "GP_SET_DEFAULT_LINK_KEY"},
623
    {ZBNCP_CMD_PRODUCTION_CONFIG_READ, "PRODUCTION_CONFIG_READ"},
624
    {ZBNCP_CMD_SET_MAX_JOINS, "SET_MAX_JOINS"},
625
    {ZBNCP_CMD_GET_MAX_JOINS, "GET_MAX_JOINS"},
626
    {ZBNCP_CMD_TRACE_IND, "TRACE_IND"},
627
    {ZBNCP_CMD_GET_KEY_NEG_METHOD, "GET_KEY_NEG_METHOD"},
628
    {ZBNCP_CMD_SET_KEY_NEG_METHOD, "SET_KEY_NEG_METHOD"},
629
    {ZBNCP_CMD_GET_PSK_SECRETS, "GET_PSK_SECRETS"},
630
    {ZBNCP_CMD_SET_PSK_SECRETS, "SET_PSK_SECRETS"},
631
    {ZBNCP_CMD_SET_R22_JOIN_USAGE, "SET_R22_JOIN_USAGE"},
632
    {ZBNCP_CMD_SET_NWK_CONF_PRESET, "SET_NWK_CONF_PRESET"},
633
    {ZBNCP_CMD_DEBUG_BROAD_NWK_KEY, "DEBUG_BROAD_NWK_KEY"},
634
    {ZBNCP_CMD_DEBUG_BROAD_APS_KEY, "DEBUG_BROAD_APS_KEY"},
635
    {ZBNCP_CMD_AF_SET_SIMPLE_DESC, "AF_SET_SIMPLE_DESC"},
636
    {ZBNCP_CMD_AF_DEL_EP, "AF_DEL_EP"},
637
    {ZBNCP_CMD_AF_SET_NODE_DESC, "AF_SET_NODE_DESC"},
638
    {ZBNCP_CMD_AF_SET_POWER_DESC, "AF_SET_POWER_DESC"},
639
    {ZBNCP_CMD_AF_SUBGHZ_SUSPEND_IND, "AF_SUBGHZ_SUSPEND_IND"},
640
    {ZBNCP_CMD_AF_SUBGHZ_RESUME_IND, "AF_SUBGHZ_RESUME_IND"},
641
    {ZBNCP_CMD_ZDO_NWK_ADDR_REQ, "ZDO_NWK_ADDR_REQ"},
642
    {ZBNCP_CMD_ZDO_IEEE_ADDR_REQ, "ZDO_IEEE_ADDR_REQ"},
643
    {ZBNCP_CMD_ZDO_POWER_DESC_REQ, "ZDO_POWER_DESC_REQ"},
644
    {ZBNCP_CMD_ZDO_NODE_DESC_REQ, "ZDO_NODE_DESC_REQ"},
645
    {ZBNCP_CMD_ZDO_SIMPLE_DESC_REQ, "ZDO_SIMPLE_DESC_REQ"},
646
    {ZBNCP_CMD_ZDO_ACTIVE_EP_REQ, "ZDO_ACTIVE_EP_REQ"},
647
    {ZBNCP_CMD_ZDO_MATCH_DESC_REQ, "ZDO_MATCH_DESC_REQ"},
648
    {ZBNCP_CMD_ZDO_BIND_REQ, "ZDO_BIND_REQ"},
649
    {ZBNCP_CMD_ZDO_UNBIND_REQ, "ZDO_UNBIND_REQ"},
650
    {ZBNCP_CMD_ZDO_MGMT_LEAVE_REQ, "ZDO_MGMT_LEAVE_REQ"},
651
    {ZBNCP_CMD_ZDO_PERMIT_JOINING_REQ, "ZDO_PERMIT_JOINING_REQ"},
652
    {ZBNCP_CMD_ZDO_DEV_ANNCE_IND, "ZDO_DEV_ANNCE_IND"},
653
    {ZBNCP_CMD_ZDO_REJOIN, "ZDO_REJOIN"},
654
    {ZBNCP_CMD_ZDO_SYSTEM_SRV_DISCOVERY_REQ, "ZDO_SYSTEM_SRV_DISCOVERY_REQ"},
655
    {ZBNCP_CMD_ZDO_MGMT_BIND_REQ, "ZDO_MGMT_BIND_REQ"},
656
    {ZBNCP_CMD_ZDO_MGMT_LQI_REQ, "ZDO_MGMT_LQI_REQ"},
657
    {ZBNCP_CMD_ZDO_MGMT_NWK_UPDATE_REQ, "ZDO_MGMT_NWK_UPDATE_REQ"},
658
    {ZBNCP_CMD_ZDO_REMOTE_CMD_IND, "ZDO_REMOTE_CMD_IND"},
659
    {ZBNCP_CMD_ZDO_GET_STATS, "ZDO_GET_STATS"},
660
    {ZBNCP_CMD_ZDO_DEV_AUTHORIZED_IND, "ZDO_DEV_AUTHORIZED_IND"},
661
    {ZBNCP_CMD_ZDO_DEV_UPDATE_IND, "ZDO_DEV_UPDATE_IND"},
662
    {ZBNCP_CMD_ZDO_SET_NODE_DESC_MANUF_CODE, "ZDO_SET_NODE_DESC_MANUF_CODE"},
663
    {ZBNCP_CMD_HL_ZDO_GET_DIAG_DATA_REQ, "ZDO_GET_DIAG_DATA_REQ"},
664
    {ZBNCP_CMD_HL_ZDO_RAW_REQ, "ZDO_RAW_REQ"},
665
    {ZBNCP_CMD_HL_ZDO_SEND_CONF_PARAMS_REQ, "ZDO_SEND_CONF_PARAMS_REQ"},
666
    {ZBNCP_CMD_HL_ZDO_MGMT_BEACON_SURVEY_REQ, "ZDO_MGMT_BEACON_SURVEY_REQ"},
667
    {ZBNCP_CMD_HL_ZDO_DECOMMISSION_REQ, "ZDO_DECOMMISSION_REQ"},
668
    {ZBNCP_CMD_HL_ZDO_GET_AUTH_LEVEL_REQ, "ZDO_GET_AUTH_LEVEL_REQ"},
669
    {ZBNCP_CMD_APSDE_DATA_REQ, "APSDE_DATA_REQ"},
670
    {ZBNCP_CMD_APSME_BIND, "APSME_BIND"},
671
    {ZBNCP_CMD_APSME_UNBIND, "APSME_UNBIND"},
672
    {ZBNCP_CMD_APSME_ADD_GROUP, "APSME_ADD_GROUP"},
673
    {ZBNCP_CMD_APSME_RM_GROUP, "APSME_RM_GROUP"},
674
    {ZBNCP_CMD_APSDE_DATA_IND, "APSDE_DATA_IND"},
675
    {ZBNCP_CMD_APSME_RM_ALL_GROUPS, "APSME_RM_ALL_GROUPS"},
676
    {ZBNCP_CMD_APS_GET_GROUP_TABLE, "APS_GET_GROUP_TABLE"},
677
    {ZBNCP_CMD_APSME_UNBIND_ALL, "APSME_UNBIND_ALL"},
678
    {ZBNCP_CMD_APSME_RM_BIND_ENTRY_BY_ID, "APSME_RM_BIND_ENTRY_BY_ID"},
679
    {ZBNCP_CMD_APSME_CLEAR_BIND_TABLE, "APSME_CLEAR_BIND_TABLE"},
680
    {ZBNCP_CMD_APSME_REMOTE_BIND_IND, "APSME_REMOTE_BIND_IND"},
681
    {ZBNCP_CMD_APSME_REMOTE_UNBIND_IND, "APSME_REMOTE_UNBIND_IND"},
682
    {ZBNCP_CMD_APSME_SET_REMOTE_BIND_OFFSET, "APSME_SET_REMOTE_BIND_OFFSET"},
683
    {ZBNCP_CMD_APSME_GET_REMOTE_BIND_OFFSET, "APSME_GET_REMOTE_BIND_OFFSET"},
684
    {ZBNCP_CMD_APSME_GET_BIND_ENTRY_BY_ID, "APSME_GET_BIND_ENTRY_BY_ID"},
685
    {ZBNCP_CMD_NWK_FORMATION, "NWK_FORMATION"},
686
    {ZBNCP_CMD_NWK_DISCOVERY, "NWK_DISCOVERY"},
687
    {ZBNCP_CMD_NWK_NLME_JOIN, "NWK_NLME_JOIN"},
688
    {ZBNCP_CMD_NWK_PERMIT_JOINING, "NWK_PERMIT_JOINING"},
689
    {ZBNCP_CMD_NWK_GET_IEEE_BY_SHORT, "NWK_GET_IEEE_BY_SHORT"},
690
    {ZBNCP_CMD_NWK_GET_SHORT_BY_IEEE, "NWK_GET_SHORT_BY_IEEE"},
691
    {ZBNCP_CMD_NWK_GET_NEIGHBOR_BY_IEEE, "NWK_GET_NEIGHBOR_BY_IEEE"},
692
    {ZBNCP_CMD_NWK_STARTED_IND, "NWK_STARTED_IND"},
693
    {ZBNCP_CMD_NWK_REJOINED_IND, "NWK_REJOINED_IND"},
694
    {ZBNCP_CMD_NWK_REJOIN_FAILED_IND, "NWK_REJOIN_FAILED_IND"},
695
    {ZBNCP_CMD_NWK_LEAVE_IND, "NWK_LEAVE_IND"},
696
    {ZBNCP_CMD_PIM_SET_FAST_POLL_INTERVAL, "PIM_SET_FAST_POLL_INTERVAL"},
697
    {ZBNCP_CMD_PIM_SET_LONG_POLL_INTERVAL, "PIM_SET_LONG_POLL_INTERVAL"},
698
    {ZBNCP_CMD_PIM_START_FAST_POLL, "PIM_START_FAST_POLL"},
699
    {ZBNCP_CMD_PIM_START_POLL, "PIM_START_POLL"},
700
    {ZBNCP_CMD_PIM_SET_ADAPTIVE_POLL, "PIM_SET_ADAPTIVE_POLL"},
701
    {ZBNCP_CMD_PIM_STOP_FAST_POLL, "PIM_STOP_FAST_POLL"},
702
    {ZBNCP_CMD_PIM_STOP_POLL, "PIM_STOP_POLL"},
703
    {ZBNCP_CMD_PIM_ENABLE_TURBO_POLL, "PIM_ENABLE_TURBO_POLL"},
704
    {ZBNCP_CMD_PIM_DISABLE_TURBO_POLL, "PIM_DISABLE_TURBO_POLL"},
705
    {ZBNCP_CMD_NWK_GET_FIRST_NBT_ENTRY, "NWK_GET_FIRST_NBT_ENTRY"},
706
    {ZBNCP_CMD_NWK_GET_NEXT_NBT_ENTRY, "NWK_GET_NEXT_NBT_ENTRY"},
707
    {ZBNCP_CMD_NWK_PAN_ID_CONFLICT_RESOLVE, "NWK_PAN_ID_CONFLICT_RESOLVE"},
708
    {ZBNCP_CMD_NWK_PAN_ID_CONFLICT_IND, "NWK_PAN_ID_CONFLICT_IND"},
709
    {ZBNCP_CMD_NWK_ADDRESS_UPDATE_IND, "NWK_ADDRESS_UPDATE_IND"},
710
    {ZBNCP_CMD_NWK_START_WITHOUT_FORMATION, "NWK_START_WITHOUT_FORMATION"},
711
    {ZBNCP_CMD_NWK_NLME_ROUTER_START, "NWK_NLME_ROUTER_START"},
712
    {ZBNCP_CMD_PIM_SINGLE_POLL, "PIM_SINGLE_POLL"},
713
    {ZBNCP_CMD_PARENT_LOST_IND, "PARENT_LOST_IND"},
714
    {ZBNCP_CMD_PIM_START_TURBO_POLL_PACKETS, "PIM_START_TURBO_POLL_PACKETS"},
715
    {ZBNCP_CMD_PIM_START_TURBO_POLL_CONTINUOUS, "PIM_START_TURBO_POLL_CONTINUOUS"},
716
    {ZBNCP_CMD_PIM_TURBO_POLL_CONTINUOUS_LEAVE, "PIM_TURBO_POLL_CONTINUOUS_LEAVE"},
717
    {ZBNCP_CMD_PIM_TURBO_POLL_PACKETS_LEAVE, "PIM_TURBO_POLL_PACKETS_LEAVE"},
718
    {ZBNCP_CMD_PIM_PERMIT_TURBO_POLL, "PIM_PERMIT_TURBO_POLL"},
719
    {ZBNCP_CMD_PIM_SET_FAST_POLL_TIMEOUT, "PIM_SET_FAST_POLL_TIMEOUT"},
720
    {ZBNCP_CMD_PIM_GET_LONG_POLL_INTERVAL, "PIM_GET_LONG_POLL_INTERVAL"},
721
    {ZBNCP_CMD_PIM_GET_IN_FAST_POLL_FLAG, "PIM_GET_IN_FAST_POLL_FLAG"},
722
    {ZBNCP_CMD_SET_KEEPALIVE_MODE, "SET_KEEPALIVE_MODE"},
723
    {ZBNCP_CMD_START_CONCENTRATOR_MODE, "START_CONCENTRATOR_MODE"},
724
    {ZBNCP_CMD_STOP_CONCENTRATOR_MODE, "STOP_CONCENTRATOR_MODE"},
725
    {ZBNCP_CMD_NWK_ENABLE_PAN_ID_CONFLICT_RESOLUTION, "NWK_ENABLE_PAN_ID_CONFLICT_RESOLUTION"},
726
    {ZBNCP_CMD_NWK_ENABLE_AUTO_PAN_ID_CONFLICT_RESOLUTION, "NWK_ENABLE_AUTO_PAN_ID_CONFLICT_RESOLUTION"},
727
    {ZBNCP_CMD_PIM_TURBO_POLL_CANCEL_PACKET, "PIM_TURBO_POLL_CANCEL_PACKET"},
728
    {ZBNCP_CMD_SET_FORCE_ROUTE_RECORD, "SET_FORCE_ROUTE_RECORD"},
729
    {ZBNCP_CMD_GET_FORCE_ROUTE_RECORD, "GET_FORCE_ROUTE_RECORD"},
730
    {ZBNCP_CMD_NWK_NBR_ITERATOR_NEXT, "NWK_NBR_ITERATOR_NEXT"},
731
    {ZBNCP_CMD_ZB_DEBUG_SIGNAL_TCLK_READY_IND, "DEBUG_SIGNAL_TCLK_READY_IND"},
732
    {ZBNCP_CMD_ZB_DEVICE_READY_FOR_INTERVIEW_IND, "DEVICE_READY_FOR_INTERVIEW_IND"},
733
    {ZBNCP_CMD_ZB_DEVICE_INTERVIEW_FINISHED_IND, "DEVICE_INTERVIEW_FINISHED_IND"},
734
    {ZBNCP_CMD_ZB_PREPARE_NETWORK_FOR_CHANNEL_PAN_ID_CHANGE, "PREPARE_NETWORK_FOR_CHANNEL_PAN_ID_CHANGE"},
735
    {ZBNCP_CMD_ZB_PREPARE_NETWORK_FOR_CHANNEL_CHANGE, "PREPARE_NETWORK_FOR_CHANNEL_CHANGE"},
736
    {ZBNCP_CMD_ZB_START_CHANNEL_CHANGE, "START_CHANNEL_CHANGE"},
737
    {ZBNCP_CMD_ZB_START_PAN_ID_CHANGE, "START_PAN_ID_CHANGE"},
738
    {ZBNCP_CMD_SECUR_SET_LOCAL_IC, "SECUR_SET_LOCAL_IC"},
739
    {ZBNCP_CMD_SECUR_ADD_IC, "SECUR_ADD_IC"},
740
    {ZBNCP_CMD_SECUR_DEL_IC, "SECUR_DEL_IC"},
741
    {ZBNCP_CMD_SECUR_ADD_CERT, "SECUR_ADD_CERT"},
742
    {ZBNCP_CMD_SECUR_DEL_CERT, "SECUR_DEL_CERT"},
743
    {ZBNCP_CMD_SECUR_START_KE, "SECUR_START_KE"},
744
    {ZBNCP_CMD_SECUR_START_PARTNER_LK, "SECUR_START_PARTNER_LK"},
745
    {ZBNCP_CMD_SECUR_CBKE_SRV_FINISHED_IND, "SECUR_CBKE_SRV_FINISHED_IND"},
746
    {ZBNCP_CMD_SECUR_PARTNER_LK_FINISHED_IND, "SECUR_PARTNER_LK_FINISHED_IND"},
747
    {ZBNCP_CMD_SECUR_KE_WHITELIST_ADD, "SECUR_KE_WHITELIST_ADD"},
748
    {ZBNCP_CMD_SECUR_KE_WHITELIST_DEL, "SECUR_KE_WHITELIST_DEL"},
749
    {ZBNCP_CMD_SECUR_KE_WHITELIST_DEL_ALL, "SECUR_KE_WHITELIST_DEL_ALL"},
750
    {ZBNCP_CMD_SECUR_JOIN_USES_IC, "SECUR_JOIN_USES_IC"},
751
    {ZBNCP_CMD_SECUR_GET_IC_BY_IEEE, "SECUR_GET_IC_BY_IEEE"},
752
    {ZBNCP_CMD_SECUR_GET_CERT, "SECUR_GET_CERT"},
753
    {ZBNCP_CMD_SECUR_GET_LOCAL_IC, "SECUR_GET_LOCAL_IC"},
754
    {ZBNCP_CMD_SECUR_TCLK_IND, "SECUR_TCLK_IND"},
755
    {ZBNCP_CMD_SECUR_TCLK_EXCHANGE_FAILED_IND, "SECUR_TCLK_EXCHANGE_FAILED_IND"},
756
    {ZBNCP_CMD_SECUR_GET_KEY_IDX, "SECUR_GET_KEY_IDX"},
757
    {ZBNCP_CMD_SECUR_GET_KEY, "SECUR_GET_KEY"},
758
    {ZBNCP_CMD_SECUR_ERASE_KEY, "SECUR_ERASE_KEY"},
759
    {ZBNCP_CMD_SECUR_CLEAR_KEY_TABLE, "SECUR_CLEAR_KEY_TABLE"},
760
    {ZBNCP_CMD_SECUR_NWK_INITIATE_KEY_SWITCH_PROCEDURE, "SECUR_NWK_INITIATE_KEY_SWITCH_PROCEDURE"},
761
    {ZBNCP_CMD_SECUR_GET_IC_LIST, "SECUR_GET_IC_LIST"},
762
    {ZBNCP_CMD_SECUR_GET_IC_BY_IDX, "SECUR_GET_IC_BY_IDX"},
763
    {ZBNCP_CMD_SECUR_REMOVE_ALL_IC, "SECUR_REMOVE_ALL_IC"},
764
    {ZBNCP_CMD_SECUR_PARTNER_LK_ENABLE, "SECUR_PARTNER_LK_ENABLE"},
765
    {ZBNCP_CMD_SECUR_AUTH_DEVICE_AFTER_INTERVIEW, "SECUR_AUTH_DEVICE_AFTER_INTERVIEW"},
766
    {ZBNCP_CMD_ZDO_SECUR_UPDATE_DEVICE_TCLK, "SECUR_UPDATE_DEVICE_TCLK"},
767
    {ZBNCP_CMD_MANUF_MODE_START, "MANUF_MODE_START"},
768
    {ZBNCP_CMD_MANUF_MODE_END, "MANUF_MODE_END"},
769
    {ZBNCP_CMD_MANUF_SET_CHANNEL, "MANUF_SET_CHANNEL"},
770
    {ZBNCP_CMD_MANUF_GET_CHANNEL, "MANUF_GET_CHANNEL"},
771
    {ZBNCP_CMD_MANUF_SET_POWER, "MANUF_SET_POWER"},
772
    {ZBNCP_CMD_MANUF_GET_POWER, "MANUF_GET_POWER"},
773
    {ZBNCP_CMD_MANUF_START_TONE, "MANUF_START_TONE"},
774
    {ZBNCP_CMD_MANUF_STOP_TONE, "MANUF_STOP_TONE"},
775
    {ZBNCP_CMD_MANUF_START_STREAM_RANDOM, "MANUF_START_STREAM_RANDOM"},
776
    {ZBNCP_CMD_MANUF_STOP_STREAM_RANDOM, "MANUF_STOP_STREAM_RANDOM"},
777
    {ZBNCP_CMD_NCP_HL_MANUF_SEND_SINGLE_PACKET, "MANUF_SEND_SINGLE_PACKET"},
778
    {ZBNCP_CMD_MANUF_START_TEST_RX, "MANUF_START_TEST_RX"},
779
    {ZBNCP_CMD_MANUF_STOP_TEST_RX, "MANUF_STOP_TEST_RX"},
780
    {ZBNCP_CMD_MANUF_RX_PACKET_IND, "MANUF_RX_PACKET_IND"},
781
    {ZBNCP_CMD_OTA_RUN_BOOTLOADER, "OTA_RUN_BOOTLOADER"},
782
    {ZBNCP_CMD_OTA_START_UPGRADE_IND, "OTA_START_UPGRADE_IND"},
783
    {ZBNCP_CMD_OTA_SEND_PORTION_FW, "OTA_SEND_PORTION_FW"},
784
    {ZBNCP_CMD_READ_NVRAM_RESERVED, "READ_NVRAM_RESERVED"},
785
    {ZBNCP_CMD_WRITE_NVRAM_RESERVED, "WRITE_NVRAM_RESERVED"},
786
    {ZBNCP_CMD_GET_CALIBRATION_INFO, "GET_CALIBRATION_INFO"},
787
    {0, NULL}
788
};
789
790
static const value_string zbncp_parameter_id_list[] =
791
{
792
    {ZBNCP_PARAMETER_ID_IEEE_ADDR_TABLE_SIZE, "IEEE_ADDR_TABLE_SIZE"},
793
    {ZBNCP_PARAMETER_ID_NEIGHBOR_TABLE_SIZE, "NEIGHBOR_TABLE_SIZE"},
794
    {ZBNCP_PARAMETER_ID_APS_SRC_BINDING_TABLE_SIZE, "APS_SRC_BINDING_TABLE_SIZE"},
795
    {ZBNCP_PARAMETER_ID_APS_GROUP_TABLE_SIZE, "APS_GROUP_TABLE_SIZE"},
796
    {ZBNCP_PARAMETER_ID_NWK_ROUTING_TABLE_SIZE, "NWK_ROUTING_TABLE_SIZE"},
797
    {ZBNCP_PARAMETER_ID_NWK_ROUTE_DISCOVERY_TABLE_SIZE, "NWK_ROUTE_DISCOVERY_TABLE_SIZE"},
798
    {ZBNCP_PARAMETER_ID_IOBUF_POOL_SIZE, "IOBUF_POOL_SIZE"},
799
    {ZBNCP_PARAMETER_ID_PANID_TABLE_SIZE, "PANID_TABLE_SIZE"},
800
    {ZBNCP_PARAMETER_ID_APS_DUPS_TABLE_SIZE, "APS_DUPS_TABLE_SIZE"},
801
    {ZBNCP_PARAMETER_ID_APS_BIND_TRANS_TABLE_SIZE, "APS_BIND_TRANS_TABLE_SIZE"},
802
    {ZBNCP_PARAMETER_ID_N_APS_RETRANS_ENTRIES, "N_APS_RETRANS_ENTRIES"},
803
    {ZBNCP_PARAMETER_ID_NWK_MAX_HOPS, "NWK_MAX_HOPS"},
804
    {ZBNCP_PARAMETER_ID_NIB_MAX_CHILDREN, "NIB_MAX_CHILDREN"},
805
    {ZBNCP_PARAMETER_ID_N_APS_KEY_PAIR_ARR_MAX_SIZE, "N_APS_KEY_PAIR_ARR_MAX_SIZE"},
806
    {ZBNCP_PARAMETER_ID_NWK_MAX_SRC_ROUTES, "NWK_MAX_SRC_ROUTES"},
807
    {ZBNCP_PARAMETER_ID_APS_MAX_WINDOW_SIZE, "APS_MAX_WINDOW_SIZE"},
808
    {ZBNCP_PARAMETER_ID_APS_INTERFRAME_DELAY, "APS_INTERFRAME_DELAY"},
809
    {ZBNCP_PARAMETER_ID_ZDO_ED_BIND_TIMEOUT, "ZDO_ED_BIND_TIMEOUT"},
810
    {ZBNCP_PARAMETER_ID_NIB_PASSIVE_ASK_TIMEOUT, "NIB_PASSIVE_ASK_TIMEOUT"},
811
    {ZBNCP_PARAMETER_ID_APS_ACK_TIMEOUTS, "APS_ACK_TIMEOUTS"},
812
    {ZBNCP_PARAMETER_ID_MAC_BEACON_JITTER, "MAC_BEACON_JITTER"},
813
    {ZBNCP_PARAMETER_ID_TX_POWER, "TX_POWER"},
814
    {ZBNCP_PARAMETER_ID_ZLL_DEFAULT_RSSI_THRESHOLD, "ZLL_DEFAULT_RSSI_THRESHOLD"},
815
    {ZBNCP_PARAMETER_ID_NIB_MTORR, "NIB_MTORR"},
816
    {0, NULL}
817
};
818
819
static const value_string zbncp_rst_src_list[] =
820
{
821
    {0, "ZB_RESET_SRC_POWER_ON"},
822
    {1, "ZB_RESET_SRC_SW_RESET"},
823
    {2, "ZB_RESET_SRC_RESET_PIN"},
824
    {3, "ZB_RESET_SRC_BROWN_OUT"},
825
    {4, "ZB_RESET_SRC_CLOCK_LOSS"},
826
    {5, "ZB_RESET_SRC_OTHER"},
827
    {0, NULL}
828
};
829
830
static const value_string zbncp_power_level[] =
831
{
832
    {0, "Critical"},
833
    {4, "33%"},
834
    {8, "66%"},
835
    {12, "100%"},
836
    {0, NULL}
837
};
838
839
static const value_string zbncp_nwk_req_type[] =
840
{
841
    {0, "Single device response"},
842
    {1, "Extended response"},
843
    {0, NULL}
844
};
845
846
static const value_string zbncp_hl_status_generic[] =
847
{
848
    {0, "OK"},
849
    {1, "ERROR"},
850
    {2, "BLOCKED"},
851
    {3, "EXIT"},
852
    {4, "BUSY"},
853
    {5, "EOF"},
854
    {6, "OUT_OF_RANGE"},
855
    {7, "EMPTY"},
856
    {8, "CANCELLED"},
857
    {10, "INVALID_PARAMETER_1"},
858
    {11, "INVALID_PARAMETER_2"},
859
    {12, "INVALID_PARAMETER_3"},
860
    {13, "INVALID_PARAMETER_4"},
861
    {14, "INVALID_PARAMETER_5"},
862
    {15, "INVALID_PARAMETER_6"},
863
    {16, "INVALID_PARAMETER_7"},
864
    {17, "INVALID_PARAMETER_8"},
865
    {18, "INVALID_PARAMETER_9"},
866
    {19, "INVALID_PARAMETER_10"},
867
    {20, "INVALID_PARAMETER_11_OR_MORE"},
868
    {21, "PENDING"},
869
    {22, "NO_MEMORY"},
870
    {23, "INVALID_PARAMETER"},
871
    {24, "OPERATION_FAILED"},
872
    {25, "BUFFER_TOO_SMALL"},
873
    {26, "END_OF_LIST"},
874
    {27, "ALREADY_EXISTS"},
875
    {28, "NOT_FOUND"},
876
    {29, "OVERFLOW"},
877
    {30, "TIMEOUT"},
878
    {31, "NOT_IMPLEMENTED"},
879
    {32, "NO_RESOURCES"},
880
    {33, "UNINITIALIZED"},
881
    {34, "NO_SERVER"},
882
    {35, "INVALID_STATE"},
883
    {37, "CONNECTION_FAILED"},
884
    {38, "CONNECTION_LOST"},
885
    {40, "UNAUTHORIZED"},
886
    {41, "CONFLICT"},
887
    {42, "INVALID_FORMAT"},
888
    {43, "NO_MATCH"},
889
    {44, "PROTOCOL_ERROR"},
890
    {45, "VERSION"},
891
    {46, "MALFORMED_ADDRESS"},
892
    {47, "COULD_NOT_READ_FILE"},
893
    {48, "FILE_NOT_FOUND"},
894
    {49, "DIRECTORY_NOT_FOUND"},
895
    {50, "CONVERSION_ERROR"},
896
    {51, "INCOMPATIBLE_TYPES"},
897
    {56, "FILE_CORRUPTED"},
898
    {57, "PAGE_NOT_FOUND"},
899
    {62, "ILLEGAL_REQUEST"},
900
    {64, "INVALID_GROUP"},
901
    {65, "TABLE_FULL"},
902
    {69, "IGNORE"},
903
    {70, "AGAIN"},
904
    {71, "DEVICE_NOT_FOUND"},
905
    {72, "OBSOLETE"},
906
    {0, NULL}
907
};
908
909
static const value_string zb_mac_state[] =
910
{
911
    {MAC_ENUM_SUCCESS, "SUCCESS"},
912
    {MAC_ENUM_BEACON_LOSS, "BEACON_LOSS"},
913
    {MAC_ENUM_CHANNEL_ACCESS_FAILURE, "CHANNEL_ACCESS_FAILURE"},
914
    {MAC_ENUM_COUNTER_ERROR, "COUNTER_ERROR"},
915
    {MAC_ENUM_DENIED, "DENIED"},
916
    {MAC_ENUM_DISABLE_TRX_FAILURE, "DISABLE_TRX_FAILURE"},
917
    {MAC_ENUM_FRAME_TOO_LONG, "FRAME_TOO_LONG"},
918
    {MAC_ENUM_IMPROPER_KEY_TYPE, "IMPROPER_KEY_TYPE"},
919
    {MAC_ENUM_IMPROPER_SECURITY_LEVEL, "IMPROPER_SECURITY_LEVEL"},
920
    {MAC_ENUM_INVALID_ADDRESS, "INVALID_ADDRESS"},
921
    {MAC_ENUM_INVALID_GTS, "INVALID_GTS"},
922
    {MAC_ENUM_INVALID_HANDLE, "INVALID_HANDLE"},
923
    {MAC_ENUM_INVALID_INDEX, "INVALID_INDEX"},
924
    {MAC_ENUM_INVALID_PARAMETER, "INVALID_PARAMETER"},
925
    {MAC_ENUM_LIMIT_REACHED, "LIMIT_REACHED"},
926
    {MAC_ENUM_NO_ACK, "NO_ACK"},
927
    {MAC_ENUM_NO_BEACON, "NO_BEACON"},
928
    {MAC_ENUM_NO_DATA, "NO_DATA"},
929
    {MAC_ENUM_NO_SHORT_ADDRESS, "NO_SHORT_ADDRESS"},
930
    {MAC_ENUM_ON_TIME_TOO_LONG, "ON_TIME_TOO_LONG"},
931
    {MAC_ENUM_OUT_OF_CAP, "OUT_OF_CAP"},
932
    {MAC_ENUM_PAN_ID_CONFLICT, "PAN_ID_CONFLICT"},
933
    {MAC_ENUM_PAST_TIME, "PAST_TIME"},
934
    {MAC_ENUM_READ_ONLY, "READ_ONLY"},
935
    {MAC_ENUM_REALIGNMENT, "REALIGNMENT"},
936
    {MAC_ENUM_SCAN_IN_PROGRESS, "SCAN_IN_PROGRESS"},
937
    {MAC_ENUM_SECURITY_ERROR, "SECURITY_ERROR"},
938
    {MAC_ENUM_SUPERFRAME_OVERLAP, "SUPERFRAME_OVERLAP"},
939
    {MAC_ENUM_TRACKING_OFF, "TRACKING_OFF"},
940
    {MAC_ENUM_TRANSACTION_EXPIRED, "TRANSACTION_EXPIRED"},
941
    {MAC_ENUM_TRANSACTION_OVERFLOW, "TRANSACTION_OVERFLOW"},
942
    {MAC_ENUM_TX_ACTIVE, "TX_ACTIVE"},
943
    {MAC_ENUM_UNAVAILABLE_KEY, "UNAVAILABLE_KEY"},
944
    {MAC_ENUM_UNSUPPORTED_LEGACY, "UNSUPPORTED_LEGACY"},
945
    {MAC_ENUM_UNSUPPORTED_SECURITY, "UNSUPPORTED_SECURITY"},
946
    {0, NULL}
947
};
948
949
static const value_string zb_nwk_state[] =
950
{
951
    {ZBNCP_NWK_STATUS_SUCCESS, "SUCCESS"},
952
    {ZBNCP_NWK_STATUS_INVALID_PARAMETER, "INVALID_PARAMETER"},
953
    {ZBNCP_NWK_STATUS_INVALID_REQUEST, "INVALID_REQUEST"},
954
    {ZBNCP_NWK_STATUS_NOT_PERMITTED, "NOT_PERMITTED, "},
955
    {ZBNCP_NWK_STATUS_ALREADY_PRESENT, "ALREADY_PRESENT"},
956
    {ZBNCP_NWK_STATUS_SYNC_FAILURE, "SYNC_FAILURE"},
957
    {ZBNCP_NWK_STATUS_NEIGHBOR_TABLE_FULL, "NEIGHBOR_TABLE_FULL"},
958
    {ZBNCP_NWK_STATUS_UNKNOWN_DEVICE, "UNKNOWN_DEVICE"},
959
    {ZBNCP_NWK_STATUS_UNSUPPORTED_ATTRIBUTE, "UNSUPPORTED_ATTRIBUTE"},
960
    {ZBNCP_NWK_STATUS_NO_NETWORKS, "NO_NETWORKS"},
961
    {ZBNCP_NWK_STATUS_MAX_FRM_COUNTER, "MAX_FRM_COUNTER"},
962
    {ZBNCP_NWK_STATUS_NO_KEY, "NO_KEY"},
963
    {ZBNCP_NWK_STATUS_ROUTE_DISCOVERY_FAILED, "ROUTE_DISCOVERY_FAILED"},
964
    {ZBNCP_NWK_STATUS_ROUTE_ERROR, "ROUTE_ERROR"},
965
    {ZBNCP_NWK_STATUS_BT_TABLE_FULL, "BT_TABLE_FULL"},
966
    {ZBNCP_NWK_STATUS_FRAME_NOT_BUFFERED, "FRAME_NOT_BUFFERED"},
967
    {ZBNCP_NWK_STATUS_INVALID_INTERFACE, "INVALID_INTERFACE"},
968
    {0, NULL}
969
};
970
971
static const value_string zb_cbke_state[] =
972
{
973
    {ZBNCP_CBKE_STATUS_OK, "OK"},
974
    {ZBNCP_CBKE_STATUS_UNKNOWN_ISSUER, "UNKNOWN_ISSUER"},
975
    {ZBNCP_CBKE_STATUS_BAD_KEY_CONFIRM, "BAD_KEY_CONFIRM"},
976
    {ZBNCP_CBKE_STATUS_BAD_MESSAGE, "BAD_MESSAGE"},
977
    {ZBNCP_CBKE_STATUS_NO_RESOURCES, "NO_RESOURCES"},
978
    {ZBNCP_CBKE_STATUS_UNSUPPORTED_SUITE, "UNSUPPORTED_SUITE"},
979
    {ZBNCP_CBKE_STATUS_INVALID_CERTIFICATE, "INVALID_CERTIFICATE"},
980
    {ZBNCP_CBKE_STATUS_NO_KE_EP, "NO_KE_EP"},
981
    {0, NULL}
982
};
983
984
static const value_string zb_nvram_database_types[] =
985
{
986
    {ZB_NVRAM_RESERVED, "ZB_NVRAM_RESERVED"},
987
    {ZB_NVRAM_COMMON_DATA, "ZB_NVRAM_COMMON_DATA"},
988
    {ZB_NVRAM_HA_DATA, "ZB_NVRAM_HA_DATA"},
989
    {ZB_NVRAM_ZCL_REPORTING_DATA, "ZB_NVRAM_ZCL_REPORTING_DATA"},
990
    {ZB_NVRAM_APS_SECURE_DATA_GAP, "ZB_NVRAM_APS_SECURE_DATA_GAP"},
991
    {ZB_NVRAM_APS_BINDING_DATA_GAP, "ZB_NVRAM_APS_BINDING_DATA_GAP"},
992
    {ZB_NVRAM_HA_POLL_CONTROL_DATA, "ZB_NVRAM_HA_POLL_CONTROL_DATA"},
993
    {ZB_IB_COUNTERS, "ZB_IB_COUNTERS"},
994
    {ZB_NVRAM_DATASET_GRPW_DATA, "ZB_NVRAM_DATASET_GRPW_DATA"},
995
    {ZB_NVRAM_APP_DATA1, "ZB_NVRAM_APP_DATA1"},
996
    {ZB_NVRAM_APP_DATA2, "ZB_NVRAM_APP_DATA2"},
997
    {ZB_NVRAM_ADDR_MAP, "ZB_NVRAM_ADDR_MAP"},
998
    {ZB_NVRAM_NEIGHBOUR_TBL, "ZB_NVRAM_NEIGHBOUR_TBL"},
999
    {ZB_NVRAM_INSTALLCODES, "ZB_NVRAM_INSTALLCODES"},
1000
    {ZB_NVRAM_APS_SECURE_DATA, "ZB_NVRAM_APS_SECURE_DATA"},
1001
    {ZB_NVRAM_APS_BINDING_DATA, "ZB_NVRAM_APS_BINDING_DATA"},
1002
    {ZB_NVRAM_DATASET_GP_PRPOXYT, "ZB_NVRAM_DATASET_GP_PRPOXYT"},
1003
    {ZB_NVRAM_DATASET_GP_SINKT, "ZB_NVRAM_DATASET_GP_SINKT"},
1004
    {ZB_NVRAM_DATASET_GP_CLUSTER, "ZB_NVRAM_DATASET_GP_CLUSTER"},
1005
    {ZB_NVRAM_APS_GROUPS_DATA, "ZB_NVRAM_APS_GROUPS_DATA"},
1006
    {ZB_NVRAM_DATASET_SE_CERTDB, "ZB_NVRAM_DATASET_SE_CERTDB"},
1007
    {ZB_NVRAM_DATASET_GP_APP_TBL, "ZB_NVRAM_DATASET_GP_APP_TBL"},
1008
    {ZB_NVRAM_APP_DATA3, "ZB_NVRAM_APP_DATA3"},
1009
    {ZB_NVRAM_APP_DATA4, "ZB_NVRAM_APP_DATA4"},
1010
    {ZB_NVRAM_KE_WHITELIST, "ZB_NVRAM_KE_WHITELIST"},
1011
    {ZB_NVRAM_ZDO_DIAGNOSTICS_DATA, "ZB_NVRAM_ZDO_DIAGNOSTICS_DATA"},
1012
    {ZB_NVRAM_DATASET_NUMBER, "ZB_NVRAM_DATASET_NUMBER"},
1013
    {ZB_NVRAM_DATA_SET_TYPE_PAGE_HDR, "ZB_NVRAM_DATA_SET_TYPE_PAGE_HDR"},
1014
    {0, NULL}
1015
};
1016
1017
static const value_string zbncp_zgp_key_types[] =
1018
{
1019
    {0, "No key"},
1020
    {1, "Zigbee NWK key"},
1021
    {2, "ZGPD group key"},
1022
    {3, "NWK-key derived ZGPD group key"},
1023
    {4, "(Individual) out-of-the-box ZGPD key"},
1024
    {7, "Derived individual ZGPD key"},
1025
    {0, NULL}
1026
};
1027
1028
static const value_string zbncp_deliv_mode[] =
1029
{
1030
    {0, "Unicast"},
1031
    {2, "Broadcast"},
1032
    {3, "Group"},
1033
    {0, NULL}
1034
};
1035
1036
static const value_string zbncp_aps_key_src[] =
1037
{
1038
    {0, "Unknown"},
1039
    {1, "CBKE"},
1040
    {0, NULL}
1041
};
1042
1043
static const value_string zbncp_aps_key_used[] =
1044
{
1045
    {0, "Provisional TCLK"},
1046
    {1, "Unverified TCLK"},
1047
    {2, "Verified TCLK"},
1048
    {3, "Application LK"},
1049
    {0, NULL}
1050
};
1051
1052
static const value_string zbncp_rejoin_nwk[] =
1053
{
1054
    {0, "Associate"},
1055
    {2, "Rejoin"},
1056
    {0, NULL}
1057
};
1058
1059
static const value_string zbncp_beacon_type[] =
1060
{
1061
    {0, "Non-enhanced beacon"},
1062
    {1, "Enhanced Beacon"},
1063
    {0, NULL}
1064
};
1065
1066
static const value_string zbncp_relationship[] =
1067
{
1068
    {0x00, "neighbor is the parent"},
1069
    {0x01, "neighbor is a child"},
1070
    {0x02, "neighbor is a sibling"},
1071
    {0x03, "none of the above"},
1072
    {0x04, "previous child"},
1073
    {0x05, "unauthenticated child"},
1074
    {0, NULL}
1075
};
1076
1077
static const value_string zbncp_keepalive_mode[] =
1078
{
1079
    {0, "ED_KEEPALIVE_DISABLED"},
1080
    {1, "MAC_DATA_POLL_KEEPALIVE"},
1081
    {2, "ED_TIMEOUT_REQUEST_KEEPALIVE"},
1082
    {3, "BOTH_KEEPALIVE_METHODS"},
1083
    {0, NULL}
1084
};
1085
1086
static const value_string zbncp_stop_fast_poll_result[] =
1087
{
1088
    {0, "Not started"},
1089
    {1, "Not stopped"},
1090
    {2, "Stopped"},
1091
    {0, NULL}
1092
};
1093
1094
static const value_string zbncp_aps_addr_modes[] =
1095
{
1096
    {ZB_APSDE_DST_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT, "No addr, no EP"},
1097
    {ZB_APSDE_DST_ADDR_MODE_16_GROUP_ENDP_NOT_PRESENT, "16-bit group addr, no EP"},
1098
    {ZB_APSDE_DST_ADDR_MODE_16_ENDP_PRESENT, "16-bit short addr and EP"},
1099
    {ZB_APSDE_DST_ADDR_MODE_64_ENDP_PRESENT, "64-bit ext addr and EP"},
1100
    {ZB_APSDE_DST_ADDR_MODE_BIND_TBL_ID, "From the dst binding table"},
1101
    {0, NULL}
1102
};
1103
1104
static const value_string zbncp_cs[] =
1105
{
1106
    {1, "KEC Crypto-suite #1"},
1107
    {2, "KEC Crypto-suite #2"},
1108
    {0, NULL}
1109
};
1110
1111
static const value_string zbncp_key_src[] =
1112
{
1113
    {0, "Unknown"},
1114
    {1, "CBKE"},
1115
    {0, NULL}
1116
};
1117
1118
static const value_string zbncp_key_attr[] =
1119
{
1120
    {0, "Provisional key"},
1121
    {1, "Unverified key"},
1122
    {2, "Verified key"},
1123
    {3, "Application key"},
1124
    {0, NULL}
1125
};
1126
1127
static const value_string zbncp_zdo_auth_types[] =
1128
{
1129
    {ZB_ZDO_AUTH_LEGACY_TYPE, "legacy"},
1130
    {ZB_ZDO_AUTH_TCLK_TYPE, "TCLK"},
1131
    {0, NULL}
1132
};
1133
1134
static const value_string zbncp_zdo_leg_auth_status_codes[] =
1135
{
1136
    {0, "Authorization Success"},
1137
    {1, "Authorization Failure"},
1138
    {0, NULL}
1139
};
1140
1141
static const value_string zbncp_zdo_tclk_auth_status_codes[] =
1142
{
1143
    {0, "Authorization Success"},
1144
    {1, "Authorization Timeout"},
1145
    {2, "Authorization Failure"},
1146
    {0, NULL}
1147
};
1148
1149
static const value_string zbncp_dump_type[] =
1150
{
1151
    {0, "Text"},
1152
    {1, "Binary"},
1153
    {0, NULL}
1154
};
1155
1156
static const value_string zbncp_calibration_status[] =
1157
{
1158
    {0x00, "Customer value"},
1159
    {0x01, "Default value"},
1160
    {0x02, "Error"},
1161
    {0, NULL}
1162
};
1163
1164
static const value_string zbncp_force_route_record_sending_modes[] =
1165
{
1166
    {0x00, "Disabled"},
1167
    {0x01, "Enabled"},
1168
    {0, NULL}
1169
};
1170
1171
static const true_false_string tfs_cinfo_device_type = {"FFD", "RFD"};
1172
static const true_false_string tfs_cinfo_power_src = {"AC/Mains Power", "Battery"};
1173
1174
/* Returns changed offset */
1175
static unsigned
1176
dissect_zbncp_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset)
1177
0
{
1178
0
    unsigned status_category = tvb_get_uint8(tvb, offset);
1179
0
    unsigned status;
1180
1181
0
    proto_tree_add_item(tree, hf_zbncp_data_hl_status_cat, tvb, offset, 1, ENC_NA);
1182
0
    offset += 1;
1183
1184
    /* Add status */
1185
0
    status = tvb_get_uint8(tvb, offset);
1186
0
    switch (status_category)
1187
0
    {
1188
0
    case ZBNCP_HIGH_LVL_STAT_CAT_GENERIC:
1189
0
        proto_tree_add_item(tree, hf_zbncp_data_hl_status_generic, tvb, offset, 1, ENC_NA);
1190
0
        col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zbncp_hl_status_generic, "Unknown Status"));
1191
0
        break;
1192
1193
0
    case ZBNCP_HIGH_LVL_STAT_CAT_MAC:
1194
0
        proto_tree_add_item(tree, hf_zbncp_data_hl_status_mac, tvb, offset, 1, ENC_NA);
1195
0
        col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_mac_state, "Unknown Status"));
1196
0
        break;
1197
1198
0
    case ZBNCP_HIGH_LVL_STAT_CAT_NWK:
1199
0
        proto_tree_add_item(tree, hf_zbncp_data_hl_status_nwk, tvb, offset, 1, ENC_NA);
1200
0
        col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_nwk_state, "Unknown Status"));
1201
0
        break;
1202
1203
0
    case ZBNCP_HIGH_LVL_STAT_CAT_APS:
1204
0
        dissect_zbee_aps_status_code(tvb, pinfo, tree, offset);
1205
0
        break;
1206
1207
0
    case ZBNCP_HIGH_LVL_STAT_CAT_CBKE:
1208
0
        proto_tree_add_item(tree, hf_zbncp_data_hl_status_cbke, tvb, offset, 1, ENC_NA);
1209
0
        col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_cbke_state, "Unknown Status"));
1210
0
        break;
1211
1212
0
    default:
1213
0
        proto_tree_add_item(tree, hf_zbncp_data_hl_status, tvb, offset, 1, ENC_NA);
1214
0
        col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: 0x%x", status);
1215
0
    }
1216
0
    offset += 1;
1217
1218
0
    return offset;
1219
0
}
1220
1221
static tvbuff_t *
1222
dissect_zbncp_dump_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1223
0
{
1224
0
    proto_tree *zbncp_dump_info_tree;
1225
0
    unsigned idx, offset;
1226
0
    uint8_t options;
1227
1228
0
    static int *const options_field[] = {
1229
0
        &hf_zbncp_dump_options_dir,
1230
0
        &hf_zbncp_dump_options_int_state,
1231
0
        &hf_zbncp_dump_options_tx_conflict,
1232
0
        NULL};
1233
1234
    /* check is it ZBNCP dump sign or not */
1235
0
    for (idx = 0; idx < ZBNCP_DUMP_INFO_SIGN_SIZE; idx++)
1236
0
    {
1237
0
        if (tvb_get_uint8(tvb, idx) != ZBNCP_DUMP_INFO_SIGN[idx])
1238
0
        {
1239
0
            return tvb;
1240
0
        }
1241
0
    }
1242
1243
    /* Check type */
1244
0
    if (tvb_get_uint8(tvb, ZBNCP_DUMP_INFO_SIGN_SIZE + 1) != ZBNCP_DUMP_INFO_NCP_TYPE)
1245
0
    {
1246
0
        return tvb;
1247
0
    }
1248
1249
0
    zbncp_dump_info_tree = proto_tree_add_subtree(tree, tvb, 0, ZBNCP_DUMP_INFO_SIZE, ett_zbncp_dump, NULL, "ZBNCP Dump");
1250
1251
0
    proto_tree_add_item(zbncp_dump_info_tree, hf_zbncp_dump_preamble, tvb, 0, ZBNCP_DUMP_INFO_SIGN_SIZE, ENC_ASCII|ENC_NA);
1252
0
    offset = ZBNCP_DUMP_INFO_SIGN_SIZE;
1253
1254
0
    proto_tree_add_item(zbncp_dump_info_tree, hf_zbncp_dump_version, tvb, offset, 1, ENC_NA);
1255
0
    offset += 1;
1256
1257
0
    proto_tree_add_item(zbncp_dump_info_tree, hf_zbncp_dump_type, tvb, offset, 1, ENC_NA);
1258
0
    offset += 1;
1259
1260
    /* options subtree */
1261
0
    options = tvb_get_uint8(tvb, offset);
1262
0
    proto_tree_add_bitmask(zbncp_dump_info_tree, tvb, offset, hf_zbncp_dump_options, ett_zbncp_dump_opt, options_field, ENC_NA);
1263
0
    offset += 1;
1264
1265
0
    if (options & ZBNCP_DUMP_DIR_MASK)
1266
0
    {
1267
0
        col_set_str(pinfo->cinfo, COL_DEF_SRC, "NCP");
1268
0
        col_set_str(pinfo->cinfo, COL_DEF_DST, "HOST");
1269
0
    }
1270
0
    else
1271
0
    {
1272
0
        col_set_str(pinfo->cinfo, COL_DEF_SRC, "HOST");
1273
0
        col_set_str(pinfo->cinfo, COL_DEF_DST, "NCP");
1274
0
    }
1275
1276
0
    if (options & ZBNCP_DUMP_POTENTIAL_TX_RX_ERROR_MASK)
1277
0
    {
1278
0
        col_append_str(pinfo->cinfo, COL_INFO, ", Potential RX/TX Conflict");
1279
0
    }
1280
1281
0
    return tvb_new_subset_remaining(tvb, offset);
1282
0
}
1283
1284
static unsigned
1285
dissect_zbncp_high_level_hdr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned offset, uint8_t *ptype, uint16_t *call_id)
1286
0
{
1287
0
    proto_tree *zbncp_comm_hdr_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_zbncp_hl_hdr, NULL, "High Level Header");
1288
1289
    /* Dissect common header */
1290
1291
0
    proto_tree_add_item(zbncp_comm_hdr_tree, hf_zbncp_data_hl_version, tvb, offset, 1, ENC_NA);
1292
0
    offset += 1;
1293
1294
0
    *ptype = tvb_get_uint8(tvb, offset);
1295
0
    proto_tree_add_item(zbncp_comm_hdr_tree, hf_zbncp_data_hl_packet_type, tvb, offset, 1, ENC_NA);
1296
0
    offset += 1;
1297
1298
0
    *call_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
1299
0
    proto_tree_add_item(zbncp_comm_hdr_tree, hf_zbncp_data_hl_call_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1300
0
    offset += 2;
1301
1302
    /* Update col */
1303
0
    col_append_str(pinfo->cinfo, COL_INFO, val_to_str_const(*ptype, zbncp_hl_type, "Unknown Type"));
1304
0
    col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", val_to_str_const(*call_id, zbncp_hl_call_id, "Unknown Call ID"));
1305
1306
    /* Dissect additional values */
1307
1308
0
    if (*ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST ||
1309
0
        *ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1310
0
    {
1311
        /* add TSN */
1312
0
        proto_tree_add_item(zbncp_comm_hdr_tree, hf_zbncp_data_hl_tsn, tvb, offset, 1, ENC_NA);
1313
0
        offset += 1;
1314
0
    }
1315
1316
0
    if (*ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1317
0
    {
1318
0
        offset = dissect_zbncp_status(tvb, pinfo, zbncp_comm_hdr_tree, offset);
1319
0
    }
1320
1321
0
    return offset;
1322
0
}
1323
1324
static void
1325
dissect_zbncp_high_level(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned offset, uint16_t *cmd_id)
1326
0
{
1327
0
    uint8_t packet_type;
1328
1329
0
    offset = dissect_zbncp_high_level_hdr(tvb, pinfo, tree, offset, &packet_type, cmd_id);
1330
1331
0
    dissect_zbncp_high_level_body(tvb, pinfo, tree, offset, packet_type, *cmd_id);
1332
0
}
1333
1334
static void
1335
dissect_zbncp_dst_addrs(proto_tree *zbncp_hl_body_tree, tvbuff_t *tvb, unsigned dst_addr_mode_offset, unsigned *offset)
1336
0
{
1337
0
    uint8_t dst_addr_mode = tvb_get_uint8(tvb, dst_addr_mode_offset);
1338
1339
0
    if (dst_addr_mode == ZB_APSDE_DST_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT || dst_addr_mode == ZB_APSDE_DST_ADDR_MODE_64_ENDP_PRESENT || dst_addr_mode == ZB_APSDE_DST_ADDR_MODE_BIND_TBL_ID)
1340
0
    {
1341
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_ieee_addr, tvb, *offset, 8, ENC_NA);
1342
0
        *offset += 8;
1343
0
    }
1344
0
    else if (dst_addr_mode == ZB_APSDE_DST_ADDR_MODE_16_GROUP_ENDP_NOT_PRESENT || dst_addr_mode == ZB_APSDE_DST_ADDR_MODE_16_ENDP_PRESENT)
1345
0
    {
1346
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_nwk_addr, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
1347
0
        *offset += 8;
1348
0
    }
1349
0
}
1350
1351
static void
1352
dissect_zbncp_high_level_body(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned offset, uint8_t ptype _U_, uint16_t cmd_id)
1353
0
{
1354
0
    proto_tree *zbncp_hl_body_tree;
1355
1356
0
    if (offset >= tvb_reported_length(tvb))
1357
0
    {
1358
0
        return;
1359
0
    }
1360
1361
0
    zbncp_hl_body_tree = proto_tree_add_subtree_format(tree, tvb, offset, tvb_reported_length(tvb) - offset, ett_zbncp_hl_body, NULL, "Data");
1362
1363
0
    switch (cmd_id)
1364
0
    {
1365
    /* NCP Configuration API */
1366
0
    case ZBNCP_CMD_GET_MODULE_VERSION:
1367
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1368
0
        {
1369
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_fw_vers, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1370
0
            offset += 4;
1371
1372
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_stack_vers, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1373
0
            offset += 4;
1374
1375
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_proto_vers, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1376
0
            offset += 4;
1377
0
        }
1378
0
        break;
1379
1380
0
    case ZBNCP_CMD_NCP_RESET:
1381
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1382
0
        {
1383
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_reset_opt, tvb, offset, 1, ENC_NA);
1384
0
            offset += 1;
1385
0
        }
1386
0
        break;
1387
1388
0
    case ZBNCP_CMD_GET_ZIGBEE_ROLE:
1389
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1390
0
        {
1391
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_zb_role, tvb, offset, 1, ENC_NA);
1392
0
            offset += 1;
1393
0
        }
1394
0
        break;
1395
1396
0
    case ZBNCP_CMD_SET_ZIGBEE_ROLE:
1397
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1398
0
        {
1399
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_zb_role, tvb, offset, 1, ENC_NA);
1400
0
            offset += 1;
1401
0
        }
1402
0
        break;
1403
1404
0
    case ZBNCP_CMD_GET_ZIGBEE_CHANNEL_MASK:
1405
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1406
0
        {
1407
0
            unsigned i;
1408
0
            uint8_t ch_list_len = tvb_get_uint8(tvb, offset);
1409
1410
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ch_list_len, tvb, offset, 1, ENC_NA);
1411
0
            offset += 1;
1412
1413
0
            if (ch_list_len)
1414
0
            {
1415
0
                proto_tree *zbncp_hl_body_data_ch_list = proto_tree_add_subtree_format(
1416
0
                    zbncp_hl_body_tree, tvb, offset, ch_list_len * 5, ett_zbncp_data_ch_list, NULL, "Channel List");
1417
0
                for (i = 0; i < ch_list_len; i++)
1418
0
                {
1419
0
                    proto_tree *zbncp_hl_body_data_channel_tree = proto_tree_add_subtree_format(
1420
0
                        zbncp_hl_body_data_ch_list, tvb, offset, 5, ett_zbncp_data_channel, NULL, "Channel");
1421
1422
0
                    proto_tree_add_item(zbncp_hl_body_data_channel_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
1423
0
                    offset += 1;
1424
1425
0
                    proto_tree_add_item(zbncp_hl_body_data_channel_tree, hf_zbncp_data_ch_mask, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1426
0
                    offset += 4;
1427
0
                }
1428
0
            }
1429
0
        }
1430
0
        break;
1431
1432
0
    case ZBNCP_CMD_SET_ZIGBEE_CHANNEL_MASK:
1433
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1434
0
        {
1435
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
1436
0
            offset += 1;
1437
1438
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ch_mask, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1439
0
            offset += 4;
1440
0
        }
1441
0
        break;
1442
1443
0
    case ZBNCP_CMD_GET_ZIGBEE_CHANNEL:
1444
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1445
0
        {
1446
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
1447
0
            offset += 1;
1448
1449
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_channel, tvb, offset, 1, ENC_NA);
1450
0
            offset += 1;
1451
0
        }
1452
0
        break;
1453
1454
0
    case ZBNCP_CMD_GET_PAN_ID:
1455
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1456
0
        {
1457
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_pan_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1458
0
            offset += 2;
1459
0
        }
1460
0
        break;
1461
1462
0
    case ZBNCP_CMD_SET_PAN_ID:
1463
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1464
0
        {
1465
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_pan_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1466
0
            offset += 2;
1467
0
        }
1468
0
        break;
1469
1470
0
    case ZBNCP_CMD_GET_LOCAL_IEEE_ADDR:
1471
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_int_num, tvb, offset, 1, ENC_NA);
1472
0
        offset += 1;
1473
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1474
0
        {
1475
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
1476
0
            offset += 8;
1477
0
        }
1478
0
        break;
1479
1480
0
    case ZBNCP_CMD_SET_LOCAL_IEEE_ADDR:
1481
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1482
0
        {
1483
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_int_num, tvb, offset, 1, ENC_NA);
1484
0
            offset += 1;
1485
1486
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
1487
0
            offset += 8;
1488
0
        }
1489
0
        break;
1490
1491
0
    case ZBNCP_CMD_SET_TRACE:
1492
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1493
0
        {
1494
0
            static int *const trace_bitmask[] = {
1495
0
                &hf_zbncp_data_trace_wireless_traf,
1496
0
                &hf_zbncp_data_trace_reserved,
1497
0
                &hf_zbncp_data_trace_ncp_ll_proto,
1498
0
                &hf_zbncp_data_trace_host_int_line,
1499
0
                &hf_zbncp_data_trace_sleep_awake,
1500
0
                NULL};
1501
1502
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_trace_mask, ett_zbncp_data_trace_bitmask, trace_bitmask, ENC_LITTLE_ENDIAN);
1503
0
            offset += 4;
1504
0
        }
1505
0
        break;
1506
1507
0
    case ZBNCP_CMD_GET_KEEPALIVE_TIMEOUT:
1508
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1509
0
        {
1510
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_keepalive, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1511
0
            offset += 4;
1512
0
        }
1513
0
        break;
1514
1515
0
    case ZBNCP_CMD_SET_KEEPALIVE_TIMEOUT:
1516
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1517
0
        {
1518
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_keepalive, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1519
0
            offset += 4;
1520
0
        }
1521
0
        break;
1522
1523
0
    case ZBNCP_CMD_GET_TX_POWER:
1524
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1525
0
        {
1526
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_res_tx_power, tvb, offset, 1, ENC_NA);
1527
0
            offset += 1;
1528
0
        }
1529
0
        break;
1530
1531
0
    case ZBNCP_CMD_SET_TX_POWER:
1532
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1533
0
        {
1534
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_req_tx_power, tvb, offset, 1, ENC_NA);
1535
0
            offset += 1;
1536
0
        }
1537
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1538
0
        {
1539
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_res_tx_power, tvb, offset, 1, ENC_NA);
1540
0
            offset += 1;
1541
0
        }
1542
0
        break;
1543
1544
0
    case ZBNCP_CMD_GET_RX_ON_WHEN_IDLE:
1545
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1546
0
        {
1547
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rx_on_idle, tvb, offset, 1, ENC_NA);
1548
0
            offset += 1;
1549
0
        }
1550
0
        break;
1551
1552
0
    case ZBNCP_CMD_SET_RX_ON_WHEN_IDLE:
1553
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1554
0
        {
1555
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rx_on_idle, tvb, offset, 1, ENC_NA);
1556
0
            offset += 1;
1557
0
        }
1558
0
        break;
1559
1560
0
    case ZBNCP_CMD_GET_JOINED:
1561
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1562
0
        {
1563
0
            static int *const join_bitmask[] = {
1564
0
                &hf_zbncp_data_joined_bit,
1565
0
                &hf_zbncp_data_parent_bit,
1566
0
                NULL};
1567
1568
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_joined, ett_zbncp_data_joind_bitmask, join_bitmask, ENC_NA);
1569
0
            offset += 1;
1570
0
        }
1571
0
        break;
1572
1573
0
    case ZBNCP_CMD_GET_AUTHENTICATED:
1574
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1575
0
        {
1576
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_authenticated, tvb, offset, 1, ENC_NA);
1577
0
            offset += 1;
1578
0
        }
1579
0
        break;
1580
1581
0
    case ZBNCP_CMD_GET_ED_TIMEOUT:
1582
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1583
0
        {
1584
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_timeout, tvb, offset, 1, ENC_NA);
1585
0
            offset += 1;
1586
0
        }
1587
0
        break;
1588
1589
0
    case ZBNCP_CMD_SET_ED_TIMEOUT:
1590
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1591
0
        {
1592
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_timeout, tvb, offset, 1, ENC_NA);
1593
0
            offset += 1;
1594
0
        }
1595
0
        break;
1596
1597
0
    case ZBNCP_CMD_ADD_VISIBLE_DEV:
1598
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1599
0
        {
1600
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
1601
0
            offset += 8;
1602
0
        }
1603
0
        break;
1604
1605
0
    case ZBNCP_CMD_ADD_INVISIBLE_SHORT:
1606
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1607
0
        {
1608
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1609
0
            offset += 2;
1610
0
        }
1611
0
        break;
1612
1613
0
    case ZBNCP_CMD_RM_INVISIBLE_SHORT:
1614
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1615
0
        {
1616
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1617
0
            offset += 2;
1618
0
        }
1619
0
        break;
1620
1621
0
    case ZBNCP_CMD_SET_NWK_KEY:
1622
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1623
0
        {
1624
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_key, tvb, offset, 16, ENC_NA);
1625
0
            offset += 16;
1626
1627
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_key_num, tvb, offset, 1, ENC_NA);
1628
0
            offset += 1;
1629
0
        }
1630
0
        break;
1631
1632
0
    case ZBNCP_CMD_GET_SERIAL_NUMBER:
1633
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1634
0
        {
1635
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_serial_num, tvb, offset, 16, ENC_NA);
1636
0
            offset += 16;
1637
0
        }
1638
0
        break;
1639
1640
0
    case ZBNCP_CMD_GET_VENDOR_DATA:
1641
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1642
0
        {
1643
0
            uint8_t size = tvb_get_uint8(tvb, offset);
1644
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_size, tvb, offset, 1, ENC_NA);
1645
0
            offset += 1;
1646
1647
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_vendor_data, tvb, offset, size, ENC_NA);
1648
0
            offset += size;
1649
0
        }
1650
0
        break;
1651
1652
0
    case ZBNCP_CMD_GET_NWK_KEYS:
1653
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1654
0
        {
1655
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_key, tvb, offset, 16, ENC_NA);
1656
0
            offset += 16;
1657
1658
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_key_num, tvb, offset, 1, ENC_NA);
1659
0
            offset += 1;
1660
1661
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_key, tvb, offset, 16, ENC_NA);
1662
0
            offset += 16;
1663
1664
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_key_num, tvb, offset, 1, ENC_NA);
1665
0
            offset += 1;
1666
1667
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_key, tvb, offset, 16, ENC_NA);
1668
0
            offset += 16;
1669
1670
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_key_num, tvb, offset, 1, ENC_NA);
1671
0
            offset += 1;
1672
0
        }
1673
0
        break;
1674
1675
0
    case ZBNCP_CMD_GET_APS_KEY_BY_IEEE:
1676
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1677
0
        {
1678
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
1679
0
            offset += 8;
1680
0
        }
1681
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1682
0
        {
1683
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_key, tvb, offset, 16, ENC_NA);
1684
0
            offset += 16;
1685
0
        }
1686
0
        break;
1687
1688
0
    case ZBNCP_CMD_BIG_PKT_TO_NCP:
1689
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1690
0
        {
1691
0
            uint16_t pkt_len;
1692
1693
0
            pkt_len = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
1694
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_pkt_len, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1695
0
            offset += 2;
1696
1697
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_pkt, tvb, offset, pkt_len, ENC_NA);
1698
0
            offset += pkt_len;
1699
0
        }
1700
0
        break;
1701
1702
0
    case ZBNCP_CMD_GET_PARENT_ADDR:
1703
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1704
0
        {
1705
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_parent_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1706
0
            offset += 2;
1707
0
        }
1708
0
        break;
1709
1710
0
    case ZBNCP_CMD_GET_EXT_PAN_ID:
1711
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1712
0
        {
1713
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ext_pan_id, tvb, offset, 8, ENC_LITTLE_ENDIAN);
1714
0
            offset += 8;
1715
0
        }
1716
0
        break;
1717
1718
0
    case ZBNCP_CMD_GET_COORDINATOR_VERSION:
1719
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1720
0
        {
1721
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_coordinator_version, tvb, offset++, 1, ENC_NA);
1722
0
        }
1723
0
        break;
1724
1725
0
    case ZBNCP_CMD_GET_SHORT_ADDRESS:
1726
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1727
0
        {
1728
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1729
0
            offset += 2;
1730
0
        }
1731
0
        break;
1732
1733
0
    case ZBNCP_CMD_GET_TRUST_CENTER_ADDRESS:
1734
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1735
0
        {
1736
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_trust_center_addres, tvb, offset, 8, ENC_NA);
1737
0
            offset += 8;
1738
0
        }
1739
0
        break;
1740
1741
0
    case ZBNCP_CMD_DEBUG_WRITE:
1742
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1743
0
        {
1744
0
            int dump_len;
1745
1746
0
            uint8_t dump_type = tvb_get_uint8(tvb, offset);
1747
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dump_type, tvb, offset, 1, ENC_NA);
1748
0
            offset += 1;
1749
1750
0
            dump_len = tvb_reported_length(tvb) - offset;
1751
0
            if (dump_type == 0)
1752
0
            {
1753
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dump_text, tvb, offset, dump_len, ENC_ASCII | ENC_NA);
1754
0
                offset += dump_len;
1755
0
            }
1756
0
            else if (dump_type == 1)
1757
0
            {
1758
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dump_bin, tvb, offset, dump_len, ENC_NA);
1759
0
                offset += dump_len;
1760
0
            }
1761
0
        }
1762
0
        break;
1763
1764
0
    case ZBNCP_CMD_GET_CONFIG_PARAMETER:
1765
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1766
0
        {
1767
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_parameter_id, tvb, offset, 1, ENC_NA);
1768
0
            offset += 1;
1769
0
        }
1770
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1771
0
        {
1772
0
            uint8_t param_id;
1773
1774
0
            param_id = tvb_get_uint8(tvb, offset);
1775
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_parameter_id, tvb, offset, 1, ENC_NA);
1776
0
            offset += 1;
1777
1778
0
            switch (param_id)
1779
0
            {
1780
0
            case ZBNCP_PARAMETER_ID_IEEE_ADDR_TABLE_SIZE:
1781
0
            case ZBNCP_PARAMETER_ID_NEIGHBOR_TABLE_SIZE:
1782
0
            case ZBNCP_PARAMETER_ID_APS_SRC_BINDING_TABLE_SIZE:
1783
0
            case ZBNCP_PARAMETER_ID_APS_GROUP_TABLE_SIZE:
1784
0
            case ZBNCP_PARAMETER_ID_NWK_ROUTE_DISCOVERY_TABLE_SIZE:
1785
0
            case ZBNCP_PARAMETER_ID_IOBUF_POOL_SIZE:
1786
0
            case ZBNCP_PARAMETER_ID_PANID_TABLE_SIZE:
1787
0
            case ZBNCP_PARAMETER_ID_APS_DUPS_TABLE_SIZE:
1788
0
            case ZBNCP_PARAMETER_ID_APS_BIND_TRANS_TABLE_SIZE:
1789
0
            case ZBNCP_PARAMETER_ID_N_APS_RETRANS_ENTRIES:
1790
0
            case ZBNCP_PARAMETER_ID_NWK_MAX_HOPS:
1791
0
            case ZBNCP_PARAMETER_ID_NIB_MAX_CHILDREN:
1792
0
            case ZBNCP_PARAMETER_ID_N_APS_KEY_PAIR_ARR_MAX_SIZE:
1793
0
            case ZBNCP_PARAMETER_ID_NWK_MAX_SRC_ROUTES:
1794
0
            case ZBNCP_PARAMETER_ID_APS_MAX_WINDOW_SIZE:
1795
0
            case ZBNCP_PARAMETER_ID_APS_INTERFRAME_DELAY:
1796
0
            case ZBNCP_PARAMETER_ID_ZDO_ED_BIND_TIMEOUT:
1797
0
            case ZBNCP_PARAMETER_ID_ZLL_DEFAULT_RSSI_THRESHOLD:
1798
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_value8_dec, tvb, offset, 1, ENC_NA);
1799
0
                offset += 1;
1800
0
                break;
1801
1802
0
            case ZBNCP_PARAMETER_ID_NIB_PASSIVE_ASK_TIMEOUT:
1803
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_value16_dec, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1804
0
                offset += 2;
1805
0
                break;
1806
1807
0
            case ZBNCP_PARAMETER_ID_APS_ACK_TIMEOUTS:
1808
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_ack_to_non_sleepy, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1809
0
                offset += 2;
1810
1811
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_ack_to_sleepy, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1812
0
                offset += 2;
1813
0
                break;
1814
1815
0
            case ZBNCP_PARAMETER_ID_MAC_BEACON_JITTER:
1816
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_min16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1817
0
                offset += 2;
1818
1819
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_max16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1820
0
                offset += 2;
1821
0
                break;
1822
1823
0
            case ZBNCP_PARAMETER_ID_TX_POWER:
1824
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_default8_sign, tvb, offset, 1, ENC_NA);
1825
0
                offset += 1;
1826
1827
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_current8_sign, tvb, offset, 1, ENC_NA);
1828
0
                offset += 1;
1829
1830
0
                break;
1831
1832
0
            case ZBNCP_PARAMETER_ID_NIB_MTORR:
1833
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_is_concentrator, tvb, offset, 1, ENC_NA);
1834
0
                offset += 1;
1835
1836
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_concentrator_radius, tvb, offset, 1, ENC_NA);
1837
0
                offset += 1;
1838
1839
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_time16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1840
0
                offset += 2;
1841
0
                break;
1842
0
            }
1843
0
        }
1844
0
        break;
1845
1846
0
    case ZBNCP_CMD_GET_LOCK_STATUS:
1847
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1848
0
        {
1849
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_lock_status, tvb, offset, 1, ENC_NA);
1850
0
            offset += 1;
1851
0
        }
1852
0
        break;
1853
1854
0
    case ZBNCP_CMD_GET_TRACE:
1855
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1856
0
        {
1857
0
            static int *const trace_bitmask[] = {
1858
0
                &hf_zbncp_data_trace_wireless_traf,
1859
0
                &hf_zbncp_data_trace_ncp_ll_proto,
1860
0
                &hf_zbncp_data_trace_host_int_line,
1861
0
                &hf_zbncp_data_trace_sleep_awake,
1862
0
                NULL};
1863
1864
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_trace_mask, ett_zbncp_data_trace_bitmask, trace_bitmask, ENC_LITTLE_ENDIAN);
1865
0
            offset += 4;
1866
0
        }
1867
0
        break;
1868
1869
0
    case ZBNCP_CMD_NCP_RESET_IND:
1870
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
1871
0
        {
1872
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_reset_source, tvb, offset, 1, ENC_NA);
1873
0
            offset += 1;
1874
0
        }
1875
0
        break;
1876
1877
0
    case ZBNCP_CMD_SET_NWK_LEAVE_ALLOWED:
1878
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1879
0
        {
1880
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_nwk_leave_allowed, tvb, offset, 1, ENC_NA);
1881
0
            offset += 1;
1882
0
        }
1883
0
        break;
1884
1885
0
    case ZBNCP_CMD_GET_NWK_LEAVE_ALLOWED:
1886
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1887
0
        {
1888
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_nwk_leave_allowed, tvb, offset, 1, ENC_NA);
1889
0
            offset += 1;
1890
0
        }
1891
0
        break;
1892
1893
0
    case ZBNCP_CMD_NVRAM_WRITE:
1894
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1895
0
        {
1896
0
            unsigned dataset_count, idx;
1897
0
            uint16_t dataset_len;
1898
1899
0
            dataset_count = tvb_get_uint8(tvb, offset);
1900
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nvram_dataset_quantity, tvb, offset, 1, ENC_NA);
1901
0
            offset += 1;
1902
1903
            /* multiple datasets */
1904
0
            for (idx = 0; idx < dataset_count; idx++)
1905
0
            {
1906
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nvram_dataset_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1907
0
                offset += 2;
1908
1909
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dataset_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1910
0
                offset += 2;
1911
1912
0
                dataset_len = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
1913
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dataset_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1914
0
                offset += 2;
1915
1916
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nvram_dataset_data, tvb, offset, dataset_len, ENC_NA);
1917
0
                offset += dataset_len;
1918
0
            }
1919
0
        }
1920
0
        break;
1921
1922
0
    case ZBNCP_CMD_NVRAM_READ:
1923
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1924
0
        {
1925
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nvram_dataset_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1926
0
            offset += 2;
1927
0
        }
1928
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1929
0
        {
1930
0
            uint16_t dataset_len;
1931
1932
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nvram_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1933
0
            offset += 2;
1934
1935
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nvram_dataset_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1936
0
            offset += 2;
1937
1938
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dataset_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1939
0
            offset += 2;
1940
1941
0
            dataset_len = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
1942
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dataset_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1943
0
            offset += 2;
1944
1945
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nvram_dataset_data, tvb, offset, dataset_len, ENC_NA);
1946
0
            offset += dataset_len;
1947
0
        }
1948
0
        break;
1949
1950
0
    case ZBNCP_CMD_SET_TC_POLICY:
1951
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1952
0
        {
1953
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_tc_policy_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1954
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_tc_policy_value, tvb, offset + 2, 1, ENC_NA);
1955
0
            offset += 3;
1956
0
        }
1957
0
        break;
1958
1959
0
    case ZBNCP_CMD_SET_EXTENDED_PAN_ID:
1960
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1961
0
        {
1962
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ext_pan_id, tvb, offset, 8, ENC_LITTLE_ENDIAN);
1963
0
            offset += 8;
1964
0
        }
1965
0
        break;
1966
1967
0
    case ZBNCP_CMD_SET_ED_CAPACITY:
1968
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1969
0
        {
1970
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_ed_capacity, tvb, offset, 1, ENC_NA);
1971
0
            offset += 1;
1972
0
        }
1973
0
        break;
1974
1975
0
    case ZBNCP_CMD_GET_ED_CAPACITY:
1976
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1977
0
        {
1978
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_ed_capacity, tvb, offset, 1, ENC_NA);
1979
0
            offset += 1;
1980
0
        }
1981
0
        break;
1982
1983
0
    case ZBNCP_CMD_SET_ZDO_LEAVE_ALLOWED:
1984
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
1985
0
        {
1986
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_leave_allowed, tvb, offset, 1, ENC_NA);
1987
0
            offset += 1;
1988
0
        }
1989
0
        break;
1990
1991
0
    case ZBNCP_CMD_GET_ZDO_LEAVE_ALLOWED:
1992
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
1993
0
        {
1994
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_leave_allowed, tvb, offset, 1, ENC_NA);
1995
0
            offset += 1;
1996
0
        }
1997
0
        break;
1998
1999
0
    case ZBNCP_CMD_SET_LEAVE_WO_REJOIN_ALLOWED:
2000
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2001
0
        {
2002
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_leave_wo_rejoin_allowed, tvb, offset, 1, ENC_NA);
2003
0
            offset += 1;
2004
0
        }
2005
0
        break;
2006
2007
0
    case ZBNCP_CMD_GET_LEAVE_WO_REJOIN_ALLOWED:
2008
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2009
0
        {
2010
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_leave_wo_rejoin_allowed, tvb, offset, 1, ENC_NA);
2011
0
            offset += 1;
2012
0
        }
2013
0
        break;
2014
2015
0
    case ZBNCP_CMD_GP_SET_SHARED_KEY_TYPE:
2016
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2017
0
        {
2018
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_zgp_key_type, tvb, offset, 1, ENC_NA);
2019
0
            offset += 1;
2020
0
        }
2021
0
        break;
2022
2023
0
    case ZBNCP_CMD_GP_SET_DEFAULT_LINK_KEY:
2024
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2025
0
        {
2026
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_zgp_link_key, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2027
0
            offset += 2;
2028
0
        }
2029
0
        break;
2030
2031
0
    case ZBNCP_CMD_PRODUCTION_CONFIG_READ:
2032
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2033
0
        {
2034
0
            proto_tree *prod_conf_hdr_subtree;
2035
0
            prod_conf_hdr_subtree = proto_tree_add_subtree(zbncp_hl_body_tree, tvb, offset, 8, ett_zbncp_data_prod_conf_hdr, NULL, "Production config header");
2036
2037
0
            proto_tree_add_item(prod_conf_hdr_subtree, hf_zbncp_data_prod_conf_hdr_crc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
2038
0
            offset += 4;
2039
2040
0
            proto_tree_add_item(prod_conf_hdr_subtree, hf_zbncp_data_prod_conf_hdr_len, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2041
0
            offset += 2;
2042
2043
0
            proto_tree_add_item(prod_conf_hdr_subtree, hf_zbncp_data_prod_conf_hdr_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2044
0
            offset += 2;
2045
2046
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_prod_conf_body, tvb, offset, tvb_captured_length(tvb) - offset, ENC_NA);
2047
0
            offset = tvb_captured_length(tvb);
2048
0
        }
2049
0
        break;
2050
2051
0
    case ZBNCP_CMD_SET_MAX_JOINS:
2052
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2053
0
        {
2054
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_max_joins, tvb, offset, 1, ENC_NA);
2055
0
            offset += 1;
2056
0
        }
2057
0
        break;
2058
2059
0
    case ZBNCP_CMD_GET_MAX_JOINS:
2060
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2061
0
        {
2062
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_max_joins, tvb, offset, 1, ENC_NA);
2063
0
            offset += 1;
2064
0
        }
2065
0
        break;
2066
2067
0
    case ZBNCP_CMD_TRACE_IND:
2068
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
2069
0
        {
2070
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_trace_input_output, tvb, offset, 1, ENC_NA);
2071
0
            offset += 1;
2072
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_trace_timestamp, tvb, offset, 4, ENC_LITTLE_ENDIAN);
2073
0
            offset += 4;
2074
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_trace, tvb, offset, tvb_captured_length(tvb) - offset, ENC_NA);
2075
0
            offset = tvb_captured_length(tvb);
2076
0
        }
2077
0
        break;
2078
2079
0
    case ZBNCP_CMD_GET_KEY_NEG_METHOD:
2080
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2081
0
        {
2082
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_key_neg_method, tvb, offset, 1, ENC_NA);
2083
0
            offset += 1;
2084
0
        }
2085
0
        break;
2086
2087
0
    case ZBNCP_CMD_SET_KEY_NEG_METHOD:
2088
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2089
0
        {
2090
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_key_neg_method, tvb, offset, 1, ENC_NA);
2091
0
            offset += 1;
2092
0
        }
2093
0
        break;
2094
2095
0
    case ZBNCP_CMD_GET_PSK_SECRETS:
2096
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2097
0
        {
2098
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_psk_secrets, tvb, offset, 1, ENC_NA);
2099
0
            offset += 1;
2100
0
        }
2101
0
        break;
2102
2103
0
    case ZBNCP_CMD_SET_PSK_SECRETS:
2104
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2105
0
        {
2106
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_psk_secrets, tvb, offset, 1, ENC_NA);
2107
0
            offset += 1;
2108
0
        }
2109
0
        break;
2110
2111
0
    case ZBNCP_CMD_SET_R22_JOIN_USAGE:
2112
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2113
0
        {
2114
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_r22_join_usage, tvb, offset, 1, ENC_NA);
2115
0
            offset += 1;
2116
0
        }
2117
0
        break;
2118
2119
0
    case ZBNCP_CMD_SET_NWK_CONF_PRESET:
2120
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2121
0
        {
2122
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_conf_preset, tvb, offset, 1, ENC_NA);
2123
0
            offset += 1;
2124
0
        }
2125
0
        break;
2126
2127
    /* AF API */
2128
0
    case ZBNCP_CMD_AF_SET_SIMPLE_DESC:
2129
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2130
0
        {
2131
0
            unsigned i;
2132
0
            uint8_t in_cl_cnt;
2133
0
            uint8_t out_cl_cnt;
2134
2135
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_endpoint, tvb, offset, 1, ENC_NA);
2136
0
            offset += 1;
2137
2138
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_profile_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2139
0
            offset += 2;
2140
2141
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_device_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2142
0
            offset += 2;
2143
2144
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dev_version, tvb, offset, 1, ENC_NA);
2145
0
            offset += 1;
2146
2147
0
            in_cl_cnt = tvb_get_uint8(tvb, offset);
2148
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_in_cl_cnt, tvb, offset, 1, ENC_NA);
2149
0
            offset += 1;
2150
2151
0
            out_cl_cnt = tvb_get_uint8(tvb, offset);
2152
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_out_cl_cnt, tvb, offset, 1, ENC_NA);
2153
0
            offset += 1;
2154
2155
0
            if (in_cl_cnt)
2156
0
            {
2157
0
                proto_tree *zbncp_hl_body_in_cl_list_tree =
2158
0
                    proto_tree_add_subtree_format(zbncp_hl_body_tree, tvb, offset, 2 * in_cl_cnt, ett_zbncp_data_in_cl_list, NULL, "Input Cluster List");
2159
0
                for (i = 0; i < in_cl_cnt; i++)
2160
0
                {
2161
0
                    proto_tree_add_item(zbncp_hl_body_in_cl_list_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2162
0
                    offset += 2;
2163
0
                }
2164
0
            }
2165
2166
0
            if (out_cl_cnt)
2167
0
            {
2168
0
                proto_tree *zbncp_hl_body_out_cl_list_tree =
2169
0
                    proto_tree_add_subtree_format(zbncp_hl_body_tree, tvb, offset, 2 * out_cl_cnt, ett_zbncp_data_out_cl_list, NULL, "Output Cluster List");
2170
0
                for (i = 0; i < out_cl_cnt; i++)
2171
0
                {
2172
0
                    proto_tree_add_item(zbncp_hl_body_out_cl_list_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2173
0
                    offset += 2;
2174
0
                }
2175
0
            }
2176
0
        }
2177
0
        break;
2178
2179
0
    case ZBNCP_CMD_AF_DEL_EP:
2180
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2181
0
        {
2182
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_endpoint, tvb, offset, 1, ENC_NA);
2183
0
            offset += 1;
2184
0
        }
2185
0
        break;
2186
2187
0
    case ZBNCP_CMD_AF_SET_NODE_DESC:
2188
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2189
0
        {
2190
            /* copy-pasted from packet-ieee802154.c */
2191
0
            static int *const capability[] = {
2192
0
                &hf_ieee802154_cinfo_alt_coord,
2193
0
                &hf_ieee802154_cinfo_device_type,
2194
0
                &hf_ieee802154_cinfo_power_src,
2195
0
                &hf_ieee802154_cinfo_idle_rx,
2196
0
                &hf_ieee802154_cinfo_sec_capable,
2197
0
                &hf_ieee802154_cinfo_alloc_addr,
2198
0
                NULL};
2199
2200
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_zb_role, tvb, offset, 1, ENC_NA);
2201
0
            offset += 1;
2202
2203
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_mac_cap, ett_zbncp_data_mac_cap, capability, ENC_NA);
2204
0
            offset += 1;
2205
2206
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_manuf_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2207
0
            offset += 2;
2208
0
        }
2209
0
        break;
2210
2211
0
    case ZBNCP_CMD_AF_SET_POWER_DESC:
2212
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2213
0
        {
2214
0
            static int *const pwr_sources[] = {
2215
0
                &hf_zbncp_data_pwr_src_const,
2216
0
                &hf_zbncp_data_pwr_src_recharge,
2217
0
                &hf_zbncp_data_pwr_src_disposable,
2218
0
                NULL};
2219
2220
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cur_pwr_mode, tvb, offset, 1, ENC_NA);
2221
0
            offset += 1;
2222
2223
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_av_pwr_src, ett_zbncp_data_pwr_src, pwr_sources, ENC_NA);
2224
0
            offset += 1;
2225
2226
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_cur_pwr_src, ett_zbncp_data_cur_pwr_src, pwr_sources, ENC_NA);
2227
0
            offset += 1;
2228
2229
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cur_pwr_lvl, tvb, offset, 1, ENC_NA);
2230
0
            offset += 1;
2231
0
        }
2232
0
        break;
2233
2234
0
    case ZBNCP_CMD_AF_SUBGHZ_SUSPEND_IND:
2235
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
2236
0
        {
2237
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_susp_period, tvb, offset, 1, ENC_NA);
2238
0
            offset += 1;
2239
0
        }
2240
0
        break;
2241
2242
0
    case ZBNCP_CMD_AF_SUBGHZ_RESUME_IND:
2243
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
2244
0
        {
2245
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_susp_period, tvb, offset, 1, ENC_NA);
2246
0
            offset += 1;
2247
0
        }
2248
0
        break;
2249
2250
    /* ZDO API */
2251
0
    case ZBNCP_CMD_ZDO_NWK_ADDR_REQ:
2252
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2253
0
        {
2254
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2255
0
            offset += 2;
2256
2257
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
2258
0
            offset += 8;
2259
2260
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_req_type, tvb, offset, 1, ENC_NA);
2261
0
            offset += 1;
2262
2263
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_start_idx, tvb, offset, 1, ENC_NA);
2264
0
            offset += 1;
2265
0
        }
2266
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2267
0
        {
2268
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_remote_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
2269
0
            offset += 8;
2270
2271
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_remote_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2272
0
            offset += 2;
2273
2274
0
            if (offset < tvb_reported_length(tvb))
2275
0
            {
2276
0
                uint8_t num_assoc_dev = tvb_get_uint8(tvb, offset);
2277
2278
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_num_asoc_dec, tvb, offset, 1, ENC_NA);
2279
0
                offset += 1;
2280
2281
0
                if (num_assoc_dev)
2282
0
                {
2283
0
                    unsigned i;
2284
0
                    proto_tree *zbncp_hl_body_asoc_nwk_list;
2285
2286
0
                    proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_start_idx, tvb, offset, 1, ENC_NA);
2287
0
                    offset += 1;
2288
2289
0
                    zbncp_hl_body_asoc_nwk_list =
2290
0
                        proto_tree_add_subtree_format(zbncp_hl_body_tree, tvb, offset, 2 * num_assoc_dev, ett_zbncp_data_asoc_nwk_list, NULL, "Assoc Dev NWK Addr List");
2291
2292
0
                    for (i = 0; i < num_assoc_dev; i++)
2293
0
                    {
2294
0
                        proto_tree_add_item(zbncp_hl_body_asoc_nwk_list, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2295
0
                        offset += 2;
2296
0
                    }
2297
0
                }
2298
0
            }
2299
0
        }
2300
0
        break;
2301
2302
0
    case ZBNCP_CMD_ZDO_IEEE_ADDR_REQ:
2303
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2304
0
        {
2305
0
            if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2306
0
            {
2307
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2308
0
                offset += 2;
2309
2310
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2311
0
                offset += 2;
2312
2313
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_req_type, tvb, offset, 1, ENC_NA);
2314
0
                offset += 1;
2315
2316
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_start_idx, tvb, offset, 1, ENC_NA);
2317
0
                offset += 1;
2318
0
            }
2319
0
        }
2320
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2321
0
        {
2322
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_remote_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
2323
0
            offset += 8;
2324
2325
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_remote_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2326
0
            offset += 2;
2327
2328
0
            if (offset < tvb_reported_length(tvb))
2329
0
            {
2330
0
                uint8_t num_assoc_dev = tvb_get_uint8(tvb, offset);
2331
2332
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_num_asoc_dec, tvb, offset, 1, ENC_NA);
2333
0
                offset += 1;
2334
2335
0
                if (num_assoc_dev)
2336
0
                {
2337
0
                    unsigned i;
2338
0
                    proto_tree *zbncp_hl_body_asoc_nwk_list;
2339
2340
0
                    proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_start_idx, tvb, offset, 1, ENC_NA);
2341
0
                    offset += 1;
2342
2343
0
                    zbncp_hl_body_asoc_nwk_list =
2344
0
                        proto_tree_add_subtree_format(zbncp_hl_body_tree, tvb, offset, 2 * num_assoc_dev, ett_zbncp_data_asoc_nwk_list, NULL, "Assoc Dev NWK Addr List");
2345
2346
0
                    for (i = 0; i < num_assoc_dev; i++)
2347
0
                    {
2348
0
                        proto_tree_add_item(zbncp_hl_body_asoc_nwk_list, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2349
0
                        offset += 2;
2350
0
                    }
2351
0
                }
2352
0
            }
2353
0
        }
2354
0
        break;
2355
2356
0
    case ZBNCP_CMD_ZDO_POWER_DESC_REQ:
2357
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2358
0
        {
2359
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2360
0
            offset += 2;
2361
0
        }
2362
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2363
0
        {
2364
0
            static int *const pwr_desc[] = {
2365
0
                &hf_zbncp_data_pwr_desc_cur_power_mode,
2366
0
                &hf_zbncp_data_pwr_desc_av_pwr_src,
2367
0
                &hf_zbncp_data_pwr_desc_cur_pwr_src,
2368
0
                &hf_zbncp_data_pwr_desc_cur_pwr_lvl,
2369
0
                NULL};
2370
2371
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_pwr_desc, ett_zbncp_data_pwr_desc, pwr_desc, ENC_LITTLE_ENDIAN);
2372
0
            offset += 2;
2373
2374
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2375
0
            offset += 2;
2376
0
        }
2377
0
        break;
2378
2379
0
    case ZBNCP_CMD_ZDO_NODE_DESC_REQ:
2380
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2381
0
        {
2382
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2383
0
            offset += 2;
2384
0
        }
2385
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2386
0
        {
2387
0
            static int *const flags[] = {
2388
0
                &hf_zbncp_data_flags_zb_role,
2389
0
                &hf_zbncp_data_flags_comp_desc_av,
2390
0
                &hf_zbncp_data_flags_user_desc_av,
2391
0
                &hf_zbncp_data_flags_freq_868,
2392
0
                &hf_zbncp_data_flags_freq_902,
2393
0
                &hf_zbncp_data_flags_freq_2400,
2394
0
                &hf_zbncp_data_flags_freq_eu_sub_ghz,
2395
0
                NULL};
2396
2397
0
            static int *const mac_capability[] = {
2398
0
                &hf_ieee802154_cinfo_alt_coord,
2399
0
                &hf_ieee802154_cinfo_device_type,
2400
0
                &hf_ieee802154_cinfo_power_src,
2401
0
                &hf_ieee802154_cinfo_idle_rx,
2402
0
                &hf_ieee802154_cinfo_sec_capable,
2403
0
                &hf_ieee802154_cinfo_alloc_addr,
2404
0
                NULL};
2405
2406
0
            static int *const server_mask[] = {
2407
0
                &hf_zbncp_data_srv_msk_prim_tc,
2408
0
                &hf_zbncp_data_srv_msk_backup_tc,
2409
0
                &hf_zbncp_data_srv_msk_prim_bind_tbl_cache,
2410
0
                &hf_zbncp_data_srv_msk_backup_bind_tbl_cache,
2411
0
                &hf_zbncp_data_srv_msk_prim_disc_cache,
2412
0
                &hf_zbncp_data_srv_msk_backup_disc_cache,
2413
0
                &hf_zbncp_data_srv_msk_nwk_manager,
2414
0
                &hf_zbncp_data_srv_msk_stack_compl_rev,
2415
0
                NULL};
2416
2417
0
            static int *const desc_capability[] = {
2418
0
                &hf_zbncp_data_desc_cap_ext_act_ep_list_av,
2419
0
                &hf_zbncp_data_desc_cap_ext_simple_desc_list_av,
2420
0
                NULL};
2421
2422
0
            proto_tree_add_bitmask_with_flags(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_flags16, ett_zbncp_data_flags, flags, ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
2423
0
            offset += 2;
2424
2425
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_mac_cap, ett_zbncp_data_mac_cap, mac_capability, ENC_NA);
2426
0
            offset += 1;
2427
2428
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_manuf_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2429
0
            offset += 2;
2430
2431
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_max_buf_size, tvb, offset, 1, ENC_NA);
2432
0
            offset += 1;
2433
2434
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_max_inc_trans_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2435
0
            offset += 2;
2436
2437
0
            proto_tree_add_bitmask_with_flags(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_srv_msk, ett_zbncp_data_server_mask, server_mask, ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
2438
0
            offset += 2;
2439
2440
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_max_out_trans_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2441
0
            offset += 2;
2442
2443
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_desc_cap, ett_zbncp_data_desc_cap, desc_capability, ENC_NA);
2444
0
            offset += 1;
2445
2446
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2447
0
            offset += 2;
2448
0
        }
2449
0
        break;
2450
2451
0
    case ZBNCP_CMD_ZDO_SIMPLE_DESC_REQ:
2452
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2453
0
        {
2454
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2455
0
            offset += 2;
2456
2457
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_endpoint, tvb, offset, 1, ENC_NA);
2458
0
            offset += 1;
2459
0
        }
2460
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2461
0
        {
2462
0
            unsigned i;
2463
0
            uint8_t in_cl_cnt;
2464
0
            uint8_t out_cl_cnt;
2465
2466
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_endpoint, tvb, offset, 1, ENC_NA);
2467
0
            offset += 1;
2468
2469
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_profile_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2470
0
            offset += 2;
2471
2472
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_device_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2473
0
            offset += 2;
2474
2475
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dev_version, tvb, offset, 1, ENC_NA);
2476
0
            offset += 1;
2477
2478
0
            in_cl_cnt = tvb_get_uint8(tvb, offset);
2479
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_in_cl_cnt, tvb, offset, 1, ENC_NA);
2480
0
            offset += 1;
2481
2482
0
            out_cl_cnt = tvb_get_uint8(tvb, offset);
2483
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_out_cl_cnt, tvb, offset, 1, ENC_NA);
2484
0
            offset += 1;
2485
2486
0
            if (in_cl_cnt)
2487
0
            {
2488
0
                proto_tree *zbncp_hl_body_in_cl_list_tree =
2489
0
                    proto_tree_add_subtree_format(zbncp_hl_body_tree, tvb, offset, 2 * in_cl_cnt, ett_zbncp_data_in_cl_list, NULL, "Input Cluster List");
2490
0
                for (i = 0; i < in_cl_cnt; i++)
2491
0
                {
2492
0
                    proto_tree_add_item(zbncp_hl_body_in_cl_list_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2493
0
                    offset += 2;
2494
0
                }
2495
0
            }
2496
2497
0
            if (out_cl_cnt)
2498
0
            {
2499
0
                proto_tree *zbncp_hl_body_out_cl_list_tree =
2500
0
                    proto_tree_add_subtree_format(zbncp_hl_body_tree, tvb, offset, 2 * out_cl_cnt, ett_zbncp_data_out_cl_list, NULL, "Output Cluster List");
2501
0
                for (i = 0; i < out_cl_cnt; i++)
2502
0
                {
2503
0
                    proto_tree_add_item(zbncp_hl_body_out_cl_list_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2504
0
                    offset += 2;
2505
0
                }
2506
0
            }
2507
2508
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2509
0
            offset += 2;
2510
0
        }
2511
0
        break;
2512
2513
0
    case ZBNCP_CMD_ZDO_ACTIVE_EP_REQ:
2514
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2515
0
        {
2516
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2517
0
            offset += 2;
2518
0
        }
2519
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2520
0
        {
2521
0
            unsigned i;
2522
0
            uint8_t ep_cnt = tvb_get_uint8(tvb, offset);
2523
2524
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ep_cnt, tvb, offset, 1, ENC_NA);
2525
0
            offset += 1;
2526
2527
0
            if (ep_cnt)
2528
0
            {
2529
0
                proto_tree *zbncp_hl_body_tree_ep_list =
2530
0
                    proto_tree_add_subtree_format(zbncp_hl_body_tree, tvb, offset, ep_cnt, ett_zbncp_data_ep_list, NULL, "Endpoint List");
2531
0
                for (i = 0; i < ep_cnt; i++)
2532
0
                {
2533
0
                    proto_tree_add_item(zbncp_hl_body_tree_ep_list, hf_zbncp_data_endpoint, tvb, offset, 1, ENC_NA);
2534
0
                    offset += 1;
2535
0
                }
2536
0
            }
2537
2538
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2539
0
            offset += 2;
2540
0
        }
2541
0
        break;
2542
2543
0
    case ZBNCP_CMD_ZDO_MATCH_DESC_REQ:
2544
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2545
0
        {
2546
0
            unsigned i;
2547
0
            uint8_t in_cl_cnt;
2548
0
            uint8_t out_cl_cnt;
2549
2550
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2551
0
            offset += 2;
2552
2553
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_profile_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2554
0
            offset += 2;
2555
2556
0
            in_cl_cnt = tvb_get_uint8(tvb, offset);
2557
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_in_cl_cnt, tvb, offset, 1, ENC_NA);
2558
0
            offset += 1;
2559
2560
0
            out_cl_cnt = tvb_get_uint8(tvb, offset);
2561
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_out_cl_cnt, tvb, offset, 1, ENC_NA);
2562
0
            offset += 1;
2563
2564
0
            if (in_cl_cnt)
2565
0
            {
2566
0
                proto_tree *zbncp_hl_body_in_cl_list_tree =
2567
0
                    proto_tree_add_subtree_format(zbncp_hl_body_tree, tvb, offset, 2 * in_cl_cnt, ett_zbncp_data_in_cl_list, NULL, "Input Cluster List");
2568
0
                for (i = 0; i < in_cl_cnt; i++)
2569
0
                {
2570
0
                    proto_tree_add_item(zbncp_hl_body_in_cl_list_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2571
0
                    offset += 2;
2572
0
                }
2573
0
            }
2574
2575
0
            if (out_cl_cnt)
2576
0
            {
2577
0
                proto_tree *zbncp_hl_body_out_cl_list_tree =
2578
0
                    proto_tree_add_subtree_format(zbncp_hl_body_tree, tvb, offset, 2 * out_cl_cnt, ett_zbncp_data_out_cl_list, NULL, "Output Cluster List");
2579
0
                for (i = 0; i < out_cl_cnt; i++)
2580
0
                {
2581
0
                    proto_tree_add_item(zbncp_hl_body_out_cl_list_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2582
0
                    offset += 2;
2583
0
                }
2584
0
            }
2585
0
        }
2586
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2587
0
        {
2588
0
            unsigned i;
2589
0
            uint8_t ep_cnt = tvb_get_uint8(tvb, offset);
2590
2591
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ep_cnt, tvb, offset, 1, ENC_NA);
2592
0
            offset += 1;
2593
2594
0
            if (ep_cnt)
2595
0
            {
2596
0
                proto_tree *zbncp_hl_body_tree_ep_list =
2597
0
                    proto_tree_add_subtree_format(zbncp_hl_body_tree, tvb, offset, ep_cnt, ett_zbncp_data_ep_list, NULL, "Endpoint List");
2598
0
                for (i = 0; i < ep_cnt; i++)
2599
0
                {
2600
0
                    proto_tree_add_item(zbncp_hl_body_tree_ep_list, hf_zbncp_data_endpoint, tvb, offset, 1, ENC_NA);
2601
0
                    offset += 1;
2602
0
                }
2603
0
            }
2604
2605
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2606
0
            offset += 2;
2607
0
        }
2608
0
        break;
2609
2610
0
    case ZBNCP_CMD_ZDO_BIND_REQ:
2611
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2612
0
        {
2613
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2614
0
            offset += 2;
2615
2616
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
2617
0
            offset += 8;
2618
2619
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
2620
0
            offset += 1;
2621
2622
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2623
0
            offset += 2;
2624
2625
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_addr_mode, tvb, offset, 1, ENC_NA);
2626
0
            offset += 1;
2627
2628
0
            dissect_zbncp_dst_addrs(zbncp_hl_body_tree, tvb, offset - 1, &offset);
2629
2630
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
2631
0
            offset += 1;
2632
0
        }
2633
0
        break;
2634
2635
0
    case ZBNCP_CMD_ZDO_UNBIND_REQ:
2636
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2637
0
        {
2638
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2639
0
            offset += 2;
2640
2641
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_ieee_addr, tvb, offset, 8, ENC_NA);
2642
0
            offset += 8;
2643
2644
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
2645
0
            offset += 1;
2646
2647
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2648
0
            offset += 2;
2649
2650
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_addr_mode, tvb, offset, 1, ENC_NA);
2651
0
            offset += 1;
2652
2653
0
            dissect_zbncp_dst_addrs(zbncp_hl_body_tree, tvb, offset - 1, &offset);
2654
2655
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
2656
0
            offset += 1;
2657
0
        }
2658
0
        break;
2659
2660
0
    case ZBNCP_CMD_ZDO_MGMT_LEAVE_REQ:
2661
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2662
0
        {
2663
0
            static int *const leave_flags[] = {
2664
0
                &hf_zbncp_data_leave_flags_remove_chil,
2665
0
                &hf_zbncp_data_leave_flags_rejoin,
2666
0
                NULL};
2667
2668
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2669
0
            offset += 2;
2670
2671
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
2672
0
            offset += 8;
2673
2674
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_leave_flags, ett_zbncp_data_leave_flags, leave_flags, ENC_NA);
2675
0
            offset += 1;
2676
0
        }
2677
0
        break;
2678
2679
0
    case ZBNCP_CMD_ZDO_PERMIT_JOINING_REQ:
2680
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2681
0
        {
2682
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2683
0
            offset += 2;
2684
2685
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_permit_dur, tvb, offset, 1, ENC_NA);
2686
0
            offset += 1;
2687
2688
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_tc_sign, tvb, offset, 1, ENC_NA);
2689
0
            offset += 1;
2690
0
        }
2691
0
        break;
2692
2693
0
    case ZBNCP_CMD_ZDO_DEV_ANNCE_IND:
2694
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
2695
0
        {
2696
0
            static int *const mac_capability[] = {
2697
0
                &hf_ieee802154_cinfo_alt_coord,
2698
0
                &hf_ieee802154_cinfo_device_type,
2699
0
                &hf_ieee802154_cinfo_power_src,
2700
0
                &hf_ieee802154_cinfo_idle_rx,
2701
0
                &hf_ieee802154_cinfo_sec_capable,
2702
0
                &hf_ieee802154_cinfo_alloc_addr,
2703
0
                NULL};
2704
2705
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2706
0
            offset += 2;
2707
2708
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
2709
0
            offset += 8;
2710
2711
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_mac_cap, ett_zbncp_data_mac_cap, mac_capability, ENC_NA);
2712
0
            offset += 1;
2713
0
        }
2714
0
        break;
2715
2716
0
    case ZBNCP_CMD_ZDO_REJOIN:
2717
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2718
0
        {
2719
0
            unsigned i;
2720
0
            uint8_t ch_list_len;
2721
2722
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ext_pan_id, tvb, offset, 8, ENC_LITTLE_ENDIAN);
2723
0
            offset += 8;
2724
2725
0
            ch_list_len = tvb_get_uint8(tvb, offset);
2726
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ch_list_len, tvb, offset, 1, ENC_NA);
2727
0
            offset += 1;
2728
2729
0
            if (ch_list_len)
2730
0
            {
2731
0
                proto_tree *zbncp_hl_body_data_ch_list = proto_tree_add_subtree_format(
2732
0
                    zbncp_hl_body_tree, tvb, offset, ch_list_len * 5, ett_zbncp_data_ch_list, NULL, "Channel List");
2733
0
                for (i = 0; i < ch_list_len; i++)
2734
0
                {
2735
0
                    proto_tree *zbncp_hl_body_data_channel_tree = proto_tree_add_subtree_format(
2736
0
                        zbncp_hl_body_data_ch_list, tvb, offset, 5, ett_zbncp_data_channel, NULL, "Channel");
2737
2738
0
                    proto_tree_add_item(zbncp_hl_body_data_channel_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
2739
0
                    offset += 1;
2740
2741
0
                    proto_tree_add_item(zbncp_hl_body_data_channel_tree, hf_zbncp_data_ch_mask, tvb, offset, 4, ENC_LITTLE_ENDIAN);
2742
0
                    offset += 4;
2743
0
                }
2744
0
            }
2745
2746
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_secur_rejoin, tvb, offset, 1, ENC_NA);
2747
0
            offset += 1;
2748
0
        }
2749
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2750
0
        {
2751
0
            static int *const zdo_rejoin_flags[] = {
2752
0
                &hf_zbncp_data_zdo_rejoin_flags_tcsw_happened,
2753
0
                NULL};
2754
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_zdo_rejoin_flags, ett_zbncp_data_zdo_rejoin_flags, zdo_rejoin_flags, ENC_NA);
2755
0
            offset += 1;
2756
0
        }
2757
0
        break;
2758
2759
0
    case ZBNCP_CMD_ZDO_SYSTEM_SRV_DISCOVERY_REQ:
2760
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2761
0
        {
2762
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_server_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2763
0
            offset += 2;
2764
0
        }
2765
0
        break;
2766
2767
0
    case ZBNCP_CMD_ZDO_MGMT_BIND_REQ:
2768
0
    case ZBNCP_CMD_ZDO_MGMT_LQI_REQ:
2769
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2770
0
        {
2771
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2772
0
            offset += 2;
2773
2774
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_start_entry_idx, tvb, offset, 1, ENC_NA);
2775
0
            offset += 1;
2776
0
        }
2777
0
        break;
2778
2779
0
    case ZBNCP_CMD_ZDO_MGMT_NWK_UPDATE_REQ:
2780
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2781
0
        {
2782
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ch_mask, tvb, offset, 4, ENC_LITTLE_ENDIAN);
2783
0
            offset += 4;
2784
2785
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_scan_duration, tvb, offset, 1, ENC_NA);
2786
0
            offset += 1;
2787
2788
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_scan_cnt, tvb, offset, 1, ENC_NA);
2789
0
            offset += 1;
2790
2791
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_scan_mgr_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2792
0
            offset += 2;
2793
2794
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2795
0
            offset += 2;
2796
0
        }
2797
0
        break;
2798
2799
0
    case ZBNCP_CMD_ZDO_REMOTE_CMD_IND:
2800
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
2801
0
        {
2802
0
            uint16_t data_len;
2803
0
            static int *const aps_fc[] = {
2804
0
                &hf_zbncp_data_aps_fc_deliv_mode,
2805
0
                &hf_zbncp_data_aps_fc_secur,
2806
0
                &hf_zbncp_data_aps_fc_ack_retrans,
2807
0
                NULL};
2808
2809
0
            static int *const aps_key_attr[] = {
2810
0
                &hf_zbncp_data_aps_key_attr_key_src,
2811
0
                &hf_zbncp_data_aps_key_attr_key_used,
2812
0
                NULL};
2813
2814
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_param_len, tvb, offset, 1, ENC_NA);
2815
0
            offset += 1;
2816
2817
0
            data_len = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
2818
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dlen16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2819
0
            offset += 2;
2820
2821
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_aps_fc, ett_zbncp_data_apc_fc, aps_fc, ENC_NA);
2822
0
            offset += 1;
2823
2824
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2825
0
            offset += 2;
2826
2827
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2828
0
            offset += 2;
2829
2830
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_group_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2831
0
            offset += 2;
2832
2833
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
2834
0
            offset += 1;
2835
2836
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
2837
0
            offset += 1;
2838
2839
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2840
0
            offset += 2;
2841
2842
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_profile_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2843
0
            offset += 2;
2844
2845
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_cnt, tvb, offset, 1, ENC_NA);
2846
0
            offset += 1;
2847
2848
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_mac_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2849
0
            offset += 2;
2850
2851
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_mac_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2852
0
            offset += 2;
2853
2854
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_lqi, tvb, offset, 1, ENC_NA);
2855
0
            offset += 1;
2856
2857
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rssi, tvb, offset, 1, ENC_NA);
2858
0
            offset += 1;
2859
2860
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_aps_key_attr, ett_zbncp_data_aps_key_attr, aps_key_attr, ENC_NA);
2861
0
            offset += 1;
2862
2863
0
            if (data_len > (tvb_reported_length(tvb) - offset))
2864
0
            {
2865
0
                data_len = tvb_reported_length(tvb) - offset;
2866
0
            }
2867
2868
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_array, tvb, offset, data_len, ENC_NA);
2869
0
            offset += data_len;
2870
0
        }
2871
0
        break;
2872
2873
0
    case ZBNCP_CMD_ZDO_GET_STATS:
2874
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
2875
0
        {
2876
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_do_cleanup, tvb, offset, 1, ENC_NA);
2877
0
            offset += 1;
2878
0
        }
2879
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
2880
0
        {
2881
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_max_rx_bcast, tvb, offset, 4, ENC_LITTLE_ENDIAN);
2882
0
            offset += 4;
2883
2884
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_tx_bcast, tvb, offset, 4, ENC_LITTLE_ENDIAN);
2885
0
            offset += 4;
2886
2887
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_rx_ucast, tvb, offset, 4, ENC_LITTLE_ENDIAN);
2888
0
            offset += 4;
2889
2890
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_tx_ucast_total_zcl, tvb, offset, 4, ENC_LITTLE_ENDIAN);
2891
0
            offset += 4;
2892
2893
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_tx_ucast_failures_zcl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2894
0
            offset += 2;
2895
2896
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_tx_ucast_retries_zcl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2897
0
            offset += 2;
2898
2899
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_tx_ucast_total, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2900
0
            offset += 2;
2901
2902
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_tx_ucast_failures, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2903
0
            offset += 2;
2904
2905
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_tx_ucast_retries, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2906
0
            offset += 2;
2907
2908
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_phy_to_mac_que_lim_reached, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2909
0
            offset += 2;
2910
2911
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_validate_drop_cnt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2912
0
            offset += 2;
2913
2914
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_phy_cca_fail_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2915
0
            offset += 2;
2916
2917
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_period_of_time, tvb, offset, 1, ENC_NA);
2918
0
            offset += 1;
2919
2920
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_last_msg_lqi, tvb, offset, 1, ENC_NA);
2921
0
            offset += 1;
2922
2923
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_last_msg_rssi, tvb, offset, 1, ENC_NA);
2924
0
            offset += 1;
2925
2926
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_number_of_resets, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2927
0
            offset += 2;
2928
2929
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_tx_bcast, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2930
0
            offset += 2;
2931
2932
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_tx_ucast_success, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2933
0
            offset += 2;
2934
2935
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_tx_ucast_retry, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2936
0
            offset += 2;
2937
2938
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_tx_ucast_fail, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2939
0
            offset += 2;
2940
2941
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_route_disc_initiated, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2942
0
            offset += 2;
2943
2944
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_neighbor_added, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2945
0
            offset += 2;
2946
2947
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_neighbor_removed, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2948
0
            offset += 2;
2949
2950
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_neighbor_stale, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2951
0
            offset += 2;
2952
2953
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_join_indication, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2954
0
            offset += 2;
2955
2956
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_childs_removed, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2957
0
            offset += 2;
2958
2959
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_fc_failure, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2960
0
            offset += 2;
2961
2962
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_fc_failure, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2963
0
            offset += 2;
2964
2965
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_unauthorized_key, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2966
0
            offset += 2;
2967
2968
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_decrypt_failure, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2969
0
            offset += 2;
2970
2971
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_decrypt_failure, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2972
0
            offset += 2;
2973
2974
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_packet_buffer_allocate_failures, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2975
0
            offset += 2;
2976
2977
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_average_mac_retry_per_aps_message_sent, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2978
0
            offset += 2;
2979
2980
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_retry_overflow, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2981
0
            offset += 2;
2982
2983
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_bcast_table_full, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2984
0
            offset += 2;
2985
2986
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_status, tvb, offset, 1, ENC_NA);
2987
0
            offset += 1;
2988
0
        }
2989
0
        break;
2990
2991
0
    case ZBNCP_CMD_ZDO_DEV_AUTHORIZED_IND:
2992
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
2993
0
        {
2994
0
            uint8_t auth_type;
2995
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
2996
0
            offset += 8;
2997
2998
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
2999
0
            offset += 2;
3000
3001
0
            auth_type = tvb_get_uint8(tvb, offset);
3002
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_auth_type, tvb, offset, 1, ENC_NA);
3003
0
            offset += 1;
3004
3005
0
            if (auth_type == ZB_ZDO_AUTH_LEGACY_TYPE)
3006
0
            {
3007
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_leg_auth_status_code, tvb, offset, 1, ENC_NA);
3008
0
                offset += 1;
3009
0
            }
3010
0
            else if (auth_type == ZB_ZDO_AUTH_TCLK_TYPE)
3011
0
            {
3012
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_zdo_tclk_auth_status_code, tvb, offset, 1, ENC_NA);
3013
0
                offset += 1;
3014
0
            }
3015
0
        }
3016
0
        break;
3017
3018
0
    case ZBNCP_CMD_ZDO_DEV_UPDATE_IND:
3019
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
3020
0
        {
3021
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3022
0
            offset += 8;
3023
3024
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3025
0
            offset += 2;
3026
3027
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_upd_status_code, tvb, offset, 1, ENC_NA);
3028
0
            offset += 1;
3029
0
        }
3030
0
        break;
3031
3032
0
    case ZBNCP_CMD_ZDO_SET_NODE_DESC_MANUF_CODE:
3033
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3034
0
        {
3035
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_manuf_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3036
0
            offset += 2;
3037
0
        }
3038
0
        break;
3039
3040
0
    case ZBNCP_CMD_HL_ZDO_GET_DIAG_DATA_REQ:
3041
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3042
0
        {
3043
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3044
0
            offset += 2;
3045
0
        }
3046
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3047
0
        {
3048
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_lqi, tvb, offset, 1, ENC_NA);
3049
0
            offset += 1;
3050
3051
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rssi, tvb, offset, 1, ENC_NA);
3052
0
            offset += 1;
3053
0
        }
3054
0
        break;
3055
3056
0
    case ZBNCP_CMD_HL_ZDO_RAW_REQ:
3057
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3058
0
        {
3059
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3060
0
            offset += 2;
3061
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_short_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3062
0
            offset += 2;
3063
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_raw_data, tvb, offset, tvb_captured_length(tvb) - offset, ENC_NA);
3064
0
            offset = tvb_captured_length(tvb);
3065
0
        }
3066
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3067
0
        {
3068
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3069
0
            offset += 2;
3070
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_short_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3071
0
            offset += 2;
3072
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_raw_data, tvb, offset, tvb_captured_length(tvb) - offset, ENC_NA);
3073
0
            offset = tvb_captured_length(tvb);
3074
0
        }
3075
0
        break;
3076
3077
0
    case ZBNCP_CMD_HL_ZDO_SEND_CONF_PARAMS_REQ:
3078
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3079
0
        {
3080
0
            static int *const parameters[] = {
3081
0
                &hf_zbncp_data_conf_params_reserved,
3082
0
                &hf_zbncp_data_conf_params_disable_pan_id_change,
3083
0
                &hf_zbncp_data_conf_params_disable_channel_change,
3084
0
                &hf_zbncp_data_conf_params_leave_request_allowed,
3085
0
                &hf_zbncp_data_conf_params_require_tclk,
3086
0
                &hf_zbncp_data_conf_params_restricted_enabled,
3087
0
                NULL
3088
0
            };
3089
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_short_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3090
0
            offset += 2;
3091
3092
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_conf_params, ett_zbncp_data_conf_params, parameters, ENC_NA);
3093
0
            offset += 1;
3094
0
        }
3095
0
        break;
3096
3097
0
    case ZBNCP_CMD_HL_ZDO_MGMT_BEACON_SURVEY_REQ:
3098
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3099
0
        {
3100
0
            unsigned i;
3101
0
            uint8_t ch_list_len;
3102
3103
0
            ch_list_len = tvb_get_uint8(tvb, offset);
3104
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_channel_page_count, tvb, offset, 1, ENC_NA);
3105
0
            offset += 1;
3106
3107
0
            if (ch_list_len)
3108
0
            {
3109
0
                proto_tree *zbncp_hl_body_data_ch_list = proto_tree_add_subtree_format(
3110
0
                    zbncp_hl_body_tree, tvb, offset, ch_list_len * 4, ett_zbncp_data_ch_list, NULL, "Channel List");
3111
0
                for (i = 0; i < ch_list_len; i++)
3112
0
                {
3113
0
                    proto_tree_add_item(zbncp_hl_body_data_ch_list, hf_zbncp_data_ch_mask, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3114
0
                    offset += 4;
3115
0
                }
3116
0
            }
3117
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_config_mask, tvb, offset, 1, ENC_NA);
3118
0
            offset += 1;
3119
3120
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dest_short_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3121
0
            offset += 2;
3122
0
        }
3123
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3124
0
        {
3125
0
            unsigned i;
3126
0
            uint8_t parent_list_len;
3127
3128
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status, tvb, offset, 1, ENC_NA);
3129
0
            offset += 1;
3130
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_current_parents_short_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3131
0
            offset += 2;
3132
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_current_parents_lqi, tvb, offset, 1, ENC_NA);
3133
0
            offset += 1;
3134
3135
0
            parent_list_len = tvb_get_uint8(tvb, offset);
3136
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_potential_parent_count, tvb, offset, 1, ENC_NA);
3137
0
            offset += 1;
3138
3139
0
            if (parent_list_len)
3140
0
            {
3141
0
                proto_tree *zbncp_hl_body_data_parent_list = proto_tree_add_subtree_format(
3142
0
                    zbncp_hl_body_tree, tvb, offset, parent_list_len * 5, ett_zbncp_data_ch_list, NULL, "Potential Parent Surveys");
3143
0
                for (i = 0; i < parent_list_len; i++)
3144
0
                {
3145
0
                    proto_tree *zbncp_hl_body_data_parent_tree = proto_tree_add_subtree_format(
3146
0
                        zbncp_hl_body_data_parent_list, tvb, offset, 5, ett_zbncp_data_channel, NULL, "Parent");
3147
3148
0
                    proto_tree_add_item(zbncp_hl_body_data_parent_tree, hf_zbncp_data_short_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3149
0
                    offset += 2;
3150
0
                    proto_tree_add_item(zbncp_hl_body_data_parent_tree, hf_zbncp_data_rssi, tvb, offset, 1, ENC_NA);
3151
0
                    offset += 1;
3152
0
                    proto_tree_add_item(zbncp_hl_body_data_parent_tree, hf_zbncp_data_lqi, tvb, offset, 1, ENC_NA);
3153
0
                    offset += 1;
3154
0
                    proto_tree_add_item(zbncp_hl_body_data_parent_tree, hf_zbncp_data_classification_mask, tvb, offset, 1, ENC_NA);
3155
0
                    offset += 1;
3156
0
                }
3157
0
            }
3158
3159
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_total_beacons_surveyed, tvb, offset, 1, ENC_NA);
3160
0
            offset += 1;
3161
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_current_pan_id_beacons, tvb, offset, 1, ENC_NA);
3162
0
            offset += 1;
3163
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_current_nwk_potential_parents, tvb, offset, 1, ENC_NA);
3164
0
            offset += 1;
3165
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_other_zigbee_beacons, tvb, offset, 1, ENC_NA);
3166
0
            offset += 1;
3167
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_pan_id_conflict_tlv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3168
0
            offset += 2;
3169
0
        }
3170
0
        break;
3171
3172
0
    case ZBNCP_CMD_HL_ZDO_DECOMMISSION_REQ:
3173
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3174
0
        {
3175
0
            unsigned i;
3176
0
            uint8_t eui64_list_len;
3177
3178
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dest_short_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3179
0
            offset += 2;
3180
3181
0
            eui64_list_len = tvb_get_uint8(tvb, offset);
3182
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_eui64_count, tvb, offset, 1, ENC_NA);
3183
0
            offset += 1;
3184
3185
0
            if (eui64_list_len)
3186
0
            {
3187
0
                proto_tree *zbncp_hl_body_data_parent_list = proto_tree_add_subtree_format(
3188
0
                    zbncp_hl_body_tree, tvb, offset, eui64_list_len * 8, ett_zbncp_data_ch_list, NULL, "EUI64s");
3189
0
                for (i = 0; i < eui64_list_len; i++)
3190
0
                {
3191
0
                    proto_tree_add_item(zbncp_hl_body_data_parent_list, hf_zbncp_data_eui64, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3192
0
                    offset += 8;
3193
0
                }
3194
0
            }
3195
0
        }
3196
0
        break;
3197
3198
0
    case ZBNCP_CMD_HL_ZDO_GET_AUTH_LEVEL_REQ:
3199
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3200
0
        {
3201
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_target_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3202
0
            offset += 8;
3203
0
        }
3204
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3205
0
        {
3206
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status, tvb, offset, 1, ENC_NA);
3207
0
            offset += 1;
3208
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_target_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3209
0
            offset += 8;
3210
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_initial_join_auth, tvb, offset, 1, ENC_NA);
3211
0
            offset += 1;
3212
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_key_update_method, tvb, offset, 1, ENC_NA);
3213
0
            offset += 1;
3214
0
        }
3215
0
        break;
3216
3217
    /* APS API */
3218
0
    case ZBNCP_CMD_APSDE_DATA_REQ:
3219
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3220
0
        {
3221
0
            uint16_t data_len;
3222
0
            static int *const tx_options[] = {
3223
0
                &hf_zbncp_data_tx_opt_secur,
3224
0
                &hf_zbncp_data_tx_opt_obsolete,
3225
0
                &hf_zbncp_data_tx_opt_ack,
3226
0
                &hf_zbncp_data_tx_opt_frag,
3227
0
                &hf_zbncp_data_tx_opt_inc_ext_nonce,
3228
0
                &hf_zbncp_data_tx_opt_force_mesh_route,
3229
0
                &hf_zbncp_data_tx_opt_send_route_record,
3230
0
                NULL};
3231
3232
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_param_len, tvb, offset, 1, ENC_NA);
3233
0
            offset += 1;
3234
3235
0
            data_len = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
3236
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dlen16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3237
0
            offset += 2;
3238
3239
0
            dissect_zbncp_dst_addrs(zbncp_hl_body_tree, tvb, offset + ZBNCP_CMD_APSDE_DATA_REQ_DST_ADDR_MODE_OFFSET, &offset);
3240
3241
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_profile_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3242
0
            offset += 2;
3243
3244
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3245
0
            offset += 2;
3246
3247
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
3248
0
            offset += 1;
3249
3250
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
3251
0
            offset += 1;
3252
3253
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_radius, tvb, offset, 1, ENC_NA);
3254
0
            offset += 1;
3255
3256
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_addr_mode, tvb, offset, 1, ENC_NA);
3257
0
            offset += 1;
3258
3259
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_tx_opt, ett_zbncp_data_tx_opt, tx_options, ENC_NA);
3260
0
            offset += 1;
3261
3262
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_use_alias, tvb, offset, 1, ENC_NA);
3263
0
            offset += 1;
3264
3265
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_alias_src, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3266
0
            offset += 2;
3267
3268
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_alias_seq, tvb, offset, 1, ENC_NA);
3269
0
            offset += 1;
3270
3271
0
            if (data_len > (tvb_reported_length(tvb) - offset))
3272
0
            {
3273
0
                data_len = tvb_reported_length(tvb) - offset;
3274
0
            }
3275
3276
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_array, tvb, offset, data_len, ENC_NA);
3277
0
            offset += data_len;
3278
0
        }
3279
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3280
0
        {
3281
0
            dissect_zbncp_dst_addrs(zbncp_hl_body_tree, tvb, offset + ZBNCP_CMD_APSDE_DATA_REQ_RSP_DST_ADDR_MODE_OFFSET, &offset);
3282
3283
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
3284
0
            offset += 1;
3285
3286
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
3287
0
            offset += 1;
3288
3289
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_tx_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3290
0
            offset += 4;
3291
3292
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_addr_mode, tvb, offset, 1, ENC_NA);
3293
0
            offset += 1;
3294
0
        }
3295
0
        break;
3296
3297
0
    case ZBNCP_CMD_APSME_BIND:
3298
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3299
0
        {
3300
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3301
0
            offset += 8;
3302
3303
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
3304
0
            offset += 1;
3305
3306
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3307
0
            offset += 2;
3308
3309
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_addr_mode, tvb, offset, 1, ENC_NA);
3310
0
            offset += 1;
3311
3312
0
            dissect_zbncp_dst_addrs(zbncp_hl_body_tree, tvb, offset - 1, &offset);
3313
3314
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
3315
0
            offset += 1;
3316
0
        }
3317
3318
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST || ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3319
0
        {
3320
0
            uint16_t data_len;
3321
            /* Binding table ID - it's an additional field for SNCP only */
3322
0
            data_len = tvb_reported_length(tvb) - offset;
3323
0
            if (data_len == 1)
3324
0
            {
3325
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_index, tvb, offset, 1, ENC_NA);
3326
0
                offset += 1;
3327
0
            }
3328
0
        }
3329
0
        break;
3330
3331
0
    case ZBNCP_CMD_APSME_UNBIND:
3332
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3333
0
        {
3334
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3335
0
            offset += 8;
3336
3337
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
3338
0
            offset += 1;
3339
3340
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3341
0
            offset += 2;
3342
3343
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_addr_mode, tvb, offset, 1, ENC_NA);
3344
0
            offset += 1;
3345
3346
0
            dissect_zbncp_dst_addrs(zbncp_hl_body_tree, tvb, offset - 1, &offset);
3347
3348
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
3349
0
            offset += 1;
3350
0
        }
3351
3352
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST || ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3353
0
        {
3354
0
            uint16_t data_len;
3355
            /* Binding table ID - it's an additional field for SNCP only */
3356
0
            data_len = tvb_reported_length(tvb) - offset;
3357
0
            if (data_len == 1)
3358
0
            {
3359
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_index, tvb, offset, 1, ENC_NA);
3360
0
                offset += 1;
3361
0
            }
3362
0
        }
3363
0
        break;
3364
3365
0
    case ZBNCP_CMD_APSME_ADD_GROUP:
3366
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3367
0
        {
3368
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_group_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3369
0
            offset += 2;
3370
3371
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_endpoint, tvb, offset, 1, ENC_NA);
3372
0
            offset += 1;
3373
0
        }
3374
0
        break;
3375
3376
0
    case ZBNCP_CMD_APSME_RM_GROUP:
3377
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3378
0
        {
3379
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_group_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3380
0
            offset += 2;
3381
3382
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_endpoint, tvb, offset, 1, ENC_NA);
3383
0
            offset += 1;
3384
0
        }
3385
0
        break;
3386
3387
0
    case ZBNCP_CMD_APSDE_DATA_IND:
3388
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
3389
0
        {
3390
0
            uint16_t data_len;
3391
0
            static int *const aps_fc[] = {
3392
0
                &hf_zbncp_data_aps_fc_deliv_mode,
3393
0
                &hf_zbncp_data_aps_fc_secur,
3394
0
                &hf_zbncp_data_aps_fc_ack_retrans,
3395
0
                NULL};
3396
3397
0
            static int *const aps_key_attr[] = {
3398
0
                &hf_zbncp_data_aps_key_attr_key_src,
3399
0
                &hf_zbncp_data_aps_key_attr_key_used,
3400
0
                NULL};
3401
3402
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_param_len, tvb, offset, 1, ENC_NA);
3403
0
            offset += 1;
3404
3405
0
            data_len = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
3406
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dlen16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3407
0
            offset += 2;
3408
3409
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_aps_fc, ett_zbncp_data_apc_fc, aps_fc, ENC_NA);
3410
0
            offset += 1;
3411
3412
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3413
0
            offset += 2;
3414
3415
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3416
0
            offset += 2;
3417
3418
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_group_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3419
0
            offset += 2;
3420
3421
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
3422
0
            offset += 1;
3423
3424
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
3425
0
            offset += 1;
3426
3427
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3428
0
            offset += 2;
3429
3430
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_profile_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3431
0
            offset += 2;
3432
3433
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_cnt, tvb, offset, 1, ENC_NA);
3434
0
            offset += 1;
3435
3436
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_mac_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3437
0
            offset += 2;
3438
3439
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_mac_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3440
0
            offset += 2;
3441
3442
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_lqi, tvb, offset, 1, ENC_NA);
3443
0
            offset += 1;
3444
3445
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rssi, tvb, offset, 1, ENC_NA);
3446
0
            offset += 1;
3447
3448
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_aps_key_attr, ett_zbncp_data_aps_key_attr, aps_key_attr, ENC_NA);
3449
0
            offset += 1;
3450
3451
0
            if (data_len > (tvb_reported_length(tvb) - offset))
3452
0
            {
3453
0
                data_len = tvb_reported_length(tvb) - offset;
3454
0
            }
3455
3456
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_array, tvb, offset, data_len, ENC_NA);
3457
0
            offset += data_len;
3458
0
        }
3459
0
        break;
3460
3461
0
    case ZBNCP_CMD_APSME_RM_ALL_GROUPS:
3462
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3463
0
        {
3464
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_endpoint, tvb, offset, 1, ENC_NA);
3465
0
            offset += 1;
3466
0
        }
3467
0
        break;
3468
3469
0
    case ZBNCP_CMD_APS_GET_GROUP_TABLE:
3470
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3471
0
        {
3472
0
            uint8_t group_num;
3473
0
            group_num = tvb_get_int8(tvb, offset);
3474
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_group_num, tvb, offset++, 1, ENC_NA);
3475
3476
0
            if (group_num)
3477
0
            {
3478
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_group, tvb, offset, group_num * 2, ENC_LITTLE_ENDIAN);
3479
0
                offset += group_num * 2;
3480
0
            }
3481
0
        }
3482
0
        break;
3483
3484
0
    case ZBNCP_CMD_APSME_RM_BIND_ENTRY_BY_ID:
3485
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3486
0
        {
3487
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_index, tvb, offset, 1, ENC_NA);
3488
0
            offset += 1;
3489
0
        }
3490
0
        break;
3491
3492
0
    case ZBNCP_CMD_APSME_CLEAR_BIND_TABLE:
3493
        /* Empty: only common headers */
3494
0
        break;
3495
3496
0
    case ZBNCP_CMD_APSME_GET_BIND_ENTRY_BY_ID:
3497
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3498
0
        {
3499
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_index, tvb, offset, 1, ENC_NA);
3500
0
            offset += 1;
3501
0
        }
3502
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3503
0
        {
3504
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
3505
0
            offset += 1;
3506
3507
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3508
0
            offset += 2;
3509
3510
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_addr_mode, tvb, offset, 1, ENC_NA);
3511
0
            offset += 1;
3512
3513
0
            dissect_zbncp_dst_addrs(zbncp_hl_body_tree, tvb, offset - 1, &offset);
3514
3515
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
3516
0
            offset += 1;
3517
3518
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_index, tvb, offset, 1, ENC_NA);
3519
0
            offset += 1;
3520
3521
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_bind_type, tvb, offset, 1, ENC_NA);
3522
0
            offset += 1;
3523
0
        }
3524
0
        break;
3525
3526
0
    case ZBNCP_CMD_APSME_REMOTE_BIND_IND:
3527
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
3528
0
        offset += 1;
3529
3530
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3531
0
        offset += 2;
3532
3533
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_addr_mode, tvb, offset, 1, ENC_NA);
3534
0
        offset += 1;
3535
3536
0
        dissect_zbncp_dst_addrs(zbncp_hl_body_tree, tvb, offset - 1, &offset);
3537
3538
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
3539
0
        offset += 1;
3540
3541
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_index, tvb, offset, 1, ENC_NA);
3542
0
        offset += 1;
3543
3544
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_bind_type, tvb, offset, 1, ENC_NA);
3545
0
        offset += 1;
3546
0
        break;
3547
3548
0
    case ZBNCP_CMD_APSME_REMOTE_UNBIND_IND:
3549
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_src_endpoint, tvb, offset, 1, ENC_NA);
3550
0
        offset += 1;
3551
3552
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cluster_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3553
0
        offset += 2;
3554
3555
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_addr_mode, tvb, offset, 1, ENC_NA);
3556
0
        offset += 1;
3557
3558
0
        dissect_zbncp_dst_addrs(zbncp_hl_body_tree, tvb, offset - 1, &offset);
3559
3560
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dst_endpoint, tvb, offset, 1, ENC_NA);
3561
0
        offset += 1;
3562
3563
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_index, tvb, offset, 1, ENC_NA);
3564
0
        offset += 1;
3565
3566
0
        proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_bind_type, tvb, offset, 1, ENC_NA);
3567
0
        offset += 1;
3568
0
        break;
3569
3570
0
    case ZBNCP_CMD_APSME_SET_REMOTE_BIND_OFFSET:
3571
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3572
0
        {
3573
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_remote_bind_offset, tvb, offset, 1, ENC_NA);
3574
0
            offset += 1;
3575
0
        }
3576
0
        break;
3577
3578
0
    case ZBNCP_CMD_APSME_GET_REMOTE_BIND_OFFSET:
3579
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3580
0
        {
3581
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_remote_bind_offset, tvb, offset, 1, ENC_NA);
3582
0
            offset += 1;
3583
0
        }
3584
0
        break;
3585
3586
    /* NWK Management API*/
3587
0
    case ZBNCP_CMD_NWK_FORMATION:
3588
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3589
0
        {
3590
0
            unsigned i;
3591
0
            uint8_t ch_list_len = tvb_get_uint8(tvb, offset);
3592
3593
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ch_list_len, tvb, offset, 1, ENC_NA);
3594
0
            offset += 1;
3595
3596
0
            if (ch_list_len)
3597
0
            {
3598
0
                proto_tree *zbncp_hl_body_data_ch_list = proto_tree_add_subtree_format(
3599
0
                    zbncp_hl_body_tree, tvb, offset, ch_list_len * 5, ett_zbncp_data_ch_list, NULL, "Channel List");
3600
0
                for (i = 0; i < ch_list_len; i++)
3601
0
                {
3602
0
                    proto_tree *zbncp_hl_body_data_channel_tree = proto_tree_add_subtree_format(
3603
0
                        zbncp_hl_body_data_ch_list, tvb, offset, 5, ett_zbncp_data_channel, NULL, "Channel");
3604
3605
0
                    proto_tree_add_item(zbncp_hl_body_data_channel_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
3606
0
                    offset += 1;
3607
3608
0
                    proto_tree_add_item(zbncp_hl_body_data_channel_tree, hf_zbncp_data_ch_mask, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3609
0
                    offset += 4;
3610
0
                }
3611
0
            }
3612
3613
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_scan_dur, tvb, offset, 1, ENC_NA);
3614
0
            offset += 1;
3615
3616
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_distr_nwk_flag, tvb, offset, 1, ENC_NA);
3617
0
            offset += 1;
3618
3619
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3620
0
            offset += 2;
3621
3622
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ext_pan_id, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3623
0
            offset += 8;
3624
0
        }
3625
0
        break;
3626
3627
0
    case ZBNCP_CMD_NWK_DISCOVERY:
3628
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3629
0
        {
3630
0
            unsigned i;
3631
0
            uint8_t ch_list_len = tvb_get_uint8(tvb, offset);
3632
3633
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ch_list_len, tvb, offset, 1, ENC_NA);
3634
0
            offset += 1;
3635
3636
0
            if (ch_list_len)
3637
0
            {
3638
0
                proto_tree *zbncp_hl_body_data_ch_list = proto_tree_add_subtree_format(
3639
0
                    zbncp_hl_body_tree, tvb, offset, ch_list_len * 5, ett_zbncp_data_ch_list, NULL, "Channel List");
3640
0
                for (i = 0; i < ch_list_len; i++)
3641
0
                {
3642
0
                    proto_tree *zbncp_hl_body_data_channel_tree = proto_tree_add_subtree_format(
3643
0
                        zbncp_hl_body_data_ch_list, tvb, offset, 5, ett_zbncp_data_channel, NULL, "Channel");
3644
3645
0
                    proto_tree_add_item(zbncp_hl_body_data_channel_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
3646
0
                    offset += 1;
3647
3648
0
                    proto_tree_add_item(zbncp_hl_body_data_channel_tree, hf_zbncp_data_ch_mask, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3649
0
                    offset += 4;
3650
0
                }
3651
0
            }
3652
3653
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_scan_dur, tvb, offset, 1, ENC_NA);
3654
0
            offset += 1;
3655
0
        }
3656
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3657
0
        {
3658
0
            unsigned i;
3659
0
            uint8_t nwk_count = tvb_get_uint8(tvb, offset);
3660
0
            static int *flags[] = {
3661
0
                &hf_zbncp_data_flags_permit_join,
3662
0
                &hf_zbncp_data_flags_router_cap,
3663
0
                &hf_zbncp_data_flags_ed_cap,
3664
0
                &hf_zbncp_data_flags_stack_profile,
3665
0
                NULL};
3666
3667
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_count, tvb, offset, 1, ENC_NA);
3668
0
            offset += 1;
3669
3670
0
            for (i = 0; i < nwk_count; i++)
3671
0
            {
3672
0
                proto_tree *zbncp_hl_body_data_nwk_descr = proto_tree_add_subtree_format(
3673
0
                    zbncp_hl_body_tree, tvb, offset, 14, ett_zbncp_data_nwk_descr, NULL, "Network Descriptor");
3674
3675
0
                proto_tree_add_item(zbncp_hl_body_data_nwk_descr, hf_zbncp_data_ext_pan_id, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3676
0
                offset += 8;
3677
3678
0
                proto_tree_add_item(zbncp_hl_body_data_nwk_descr, hf_zbncp_data_pan_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3679
0
                offset += 2;
3680
3681
0
                proto_tree_add_item(zbncp_hl_body_data_nwk_descr, hf_zbncp_data_nwk_upd_id, tvb, offset, 1, ENC_NA);
3682
0
                offset += 1;
3683
3684
0
                proto_tree_add_item(zbncp_hl_body_data_nwk_descr, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
3685
0
                offset += 1;
3686
3687
0
                proto_tree_add_item(zbncp_hl_body_data_nwk_descr, hf_zbncp_data_channel, tvb, offset, 1, ENC_NA);
3688
0
                offset += 1;
3689
3690
0
                proto_tree_add_bitmask(zbncp_hl_body_data_nwk_descr, tvb, offset, hf_zbncp_data_flags8, ett_zbncp_data_flags, flags, ENC_NA);
3691
0
                offset += 1;
3692
3693
0
                proto_tree_add_item(zbncp_hl_body_data_nwk_descr, hf_zbncp_data_lqi, tvb, offset, 1, ENC_NA);
3694
0
                offset += 1;
3695
3696
0
                proto_tree_add_item(zbncp_hl_body_data_nwk_descr, hf_zbncp_data_rssi, tvb, offset, 1, ENC_NA);
3697
0
                offset += 1;
3698
0
            }
3699
0
        }
3700
0
        break;
3701
3702
0
    case ZBNCP_CMD_NWK_NLME_JOIN:
3703
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3704
0
        {
3705
0
            unsigned i;
3706
0
            uint8_t ch_list_len;
3707
0
            static int *const mac_capability[] = {
3708
0
                &hf_ieee802154_cinfo_alt_coord,
3709
0
                &hf_ieee802154_cinfo_device_type,
3710
0
                &hf_ieee802154_cinfo_power_src,
3711
0
                &hf_ieee802154_cinfo_idle_rx,
3712
0
                &hf_ieee802154_cinfo_sec_capable,
3713
0
                &hf_ieee802154_cinfo_alloc_addr,
3714
0
                NULL};
3715
3716
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ext_pan_id, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3717
0
            offset += 8;
3718
3719
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rejoin_nwk, tvb, offset, 1, ENC_NA);
3720
0
            offset += 1;
3721
3722
0
            ch_list_len = tvb_get_uint8(tvb, offset);
3723
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ch_list_len, tvb, offset, 1, ENC_NA);
3724
0
            offset += 1;
3725
3726
0
            if (ch_list_len)
3727
0
            {
3728
0
                proto_tree *zbncp_hl_body_data_ch_list = proto_tree_add_subtree_format(
3729
0
                    zbncp_hl_body_tree, tvb, offset, ch_list_len * 5, ett_zbncp_data_ch_list, NULL, "Channel List");
3730
0
                for (i = 0; i < ch_list_len; i++)
3731
0
                {
3732
0
                    proto_tree *zbncp_hl_body_data_channel_tree = proto_tree_add_subtree_format(
3733
0
                        zbncp_hl_body_data_ch_list, tvb, offset, 5, ett_zbncp_data_channel, NULL, "Channel");
3734
3735
0
                    proto_tree_add_item(zbncp_hl_body_data_channel_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
3736
0
                    offset += 1;
3737
3738
0
                    proto_tree_add_item(zbncp_hl_body_data_channel_tree, hf_zbncp_data_ch_mask, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3739
0
                    offset += 4;
3740
0
                }
3741
0
            }
3742
3743
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_scan_dur, tvb, offset, 1, ENC_NA);
3744
0
            offset += 1;
3745
3746
0
            proto_tree_add_bitmask(zbncp_hl_body_tree, tvb, offset, hf_zbncp_data_mac_cap, ett_zbncp_data_mac_cap, mac_capability, ENC_NA);
3747
0
            offset += 1;
3748
3749
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_secur_en, tvb, offset, 1, ENC_NA);
3750
0
            offset += 1;
3751
0
        }
3752
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3753
0
        {
3754
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3755
0
            offset += 2;
3756
3757
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ext_pan_id, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3758
0
            offset += 8;
3759
3760
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
3761
0
            offset += 1;
3762
3763
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_channel, tvb, offset, 1, ENC_NA);
3764
0
            offset += 1;
3765
3766
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_enh_beacon, tvb, offset, 1, ENC_NA);
3767
0
            offset += 1;
3768
3769
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_if, tvb, offset, 1, ENC_NA);
3770
0
            offset += 1;
3771
0
        }
3772
0
        break;
3773
3774
0
    case ZBNCP_CMD_NWK_PERMIT_JOINING:
3775
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3776
0
        {
3777
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_permit_dur, tvb, offset, 1, ENC_NA);
3778
0
            offset += 1;
3779
0
        }
3780
0
        break;
3781
3782
0
    case ZBNCP_CMD_NWK_GET_IEEE_BY_SHORT:
3783
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3784
0
        {
3785
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3786
0
            offset += 2;
3787
0
        }
3788
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3789
0
        {
3790
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3791
0
            offset += 8;
3792
0
        }
3793
0
        break;
3794
3795
0
    case ZBNCP_CMD_NWK_GET_SHORT_BY_IEEE:
3796
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3797
0
        {
3798
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3799
0
            offset += 8;
3800
0
        }
3801
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3802
0
        {
3803
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3804
0
            offset += 2;
3805
0
        }
3806
0
        break;
3807
3808
0
    case ZBNCP_CMD_NWK_GET_NEIGHBOR_BY_IEEE:
3809
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3810
0
        {
3811
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3812
0
            offset += 8;
3813
0
        }
3814
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3815
0
        {
3816
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3817
0
            offset += 8;
3818
3819
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3820
0
            offset += 2;
3821
3822
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_zb_role, tvb, offset, 1, ENC_NA);
3823
0
            offset += 1;
3824
3825
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rx_on_idle, tvb, offset, 1, ENC_NA);
3826
0
            offset += 1;
3827
3828
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ed_config, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3829
0
            offset += 2;
3830
3831
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_timeout_cnt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3832
0
            offset += 4;
3833
3834
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dev_timeout, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3835
0
            offset += 4;
3836
3837
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_relationship, tvb, offset, 1, ENC_NA);
3838
0
            offset += 1;
3839
3840
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_tx_fail_cnt, tvb, offset, 1, ENC_NA);
3841
0
            offset += 1;
3842
3843
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_lqi, tvb, offset, 1, ENC_NA);
3844
0
            offset += 1;
3845
3846
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_out_cost, tvb, offset, 1, ENC_NA);
3847
0
            offset += 1;
3848
3849
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_age, tvb, offset, 1, ENC_NA);
3850
0
            offset += 1;
3851
3852
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_keepalive_rec, tvb, offset, 1, ENC_NA);
3853
0
            offset += 1;
3854
3855
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_if_idx, tvb, offset, 1, ENC_NA);
3856
0
            offset += 1;
3857
0
        }
3858
0
        break;
3859
3860
0
    case ZBNCP_CMD_NWK_REJOINED_IND:
3861
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
3862
0
        {
3863
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3864
0
            offset += 2;
3865
3866
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ext_pan_id, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3867
0
            offset += 8;
3868
3869
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
3870
0
            offset += 1;
3871
3872
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_channel, tvb, offset, 1, ENC_NA);
3873
0
            offset += 1;
3874
3875
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_beacon_type, tvb, offset, 1, ENC_NA);
3876
0
            offset += 1;
3877
3878
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_if, tvb, offset, 1, ENC_NA);
3879
0
            offset += 1;
3880
0
        }
3881
0
        break;
3882
3883
0
    case ZBNCP_CMD_NWK_REJOIN_FAILED_IND:
3884
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
3885
0
        {
3886
0
            unsigned status_category = tvb_get_uint8(tvb, offset);
3887
0
            unsigned status;
3888
3889
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_cat, tvb, offset, 1, ENC_NA);
3890
0
            offset += 1;
3891
3892
            /* Add status */
3893
0
            status = tvb_get_uint8(tvb, offset);
3894
0
            switch (status_category)
3895
0
            {
3896
0
            case ZBNCP_HIGH_LVL_STAT_CAT_GENERIC:
3897
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_generic, tvb, offset, 1, ENC_NA);
3898
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zbncp_hl_status_generic, "Unknown Status"));
3899
0
                break;
3900
3901
0
            case ZBNCP_HIGH_LVL_STAT_CAT_MAC:
3902
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_mac, tvb, offset, 1, ENC_NA);
3903
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_mac_state, "Unknown Status"));
3904
0
                break;
3905
3906
0
            case ZBNCP_HIGH_LVL_STAT_CAT_NWK:
3907
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_nwk, tvb, offset, 1, ENC_NA);
3908
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_nwk_state, "Unknown Status"));
3909
0
                break;
3910
3911
0
            case ZBNCP_HIGH_LVL_STAT_CAT_APS:
3912
0
                dissect_zbee_aps_status_code(tvb, pinfo, zbncp_hl_body_tree, offset);
3913
0
                break;
3914
3915
0
            case ZBNCP_HIGH_LVL_STAT_CAT_CBKE:
3916
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_cbke, tvb, offset, 1, ENC_NA);
3917
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_cbke_state, "Unknown Status"));
3918
0
                break;
3919
3920
0
            default:
3921
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status, tvb, offset, 1, ENC_NA);
3922
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: 0x%x", status);
3923
0
            }
3924
0
            offset += 1;
3925
0
        }
3926
0
        break;
3927
3928
0
    case ZBNCP_CMD_NWK_LEAVE_IND:
3929
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
3930
0
        {
3931
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3932
0
            offset += 8;
3933
3934
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rejoin, tvb, offset, 1, ENC_NA);
3935
0
            offset += 1;
3936
0
        }
3937
0
        break;
3938
3939
0
    case ZBNCP_CMD_PIM_SET_FAST_POLL_INTERVAL:
3940
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3941
0
        {
3942
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_fast_poll_int, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3943
0
            offset += 2;
3944
0
        }
3945
0
        break;
3946
3947
0
    case ZBNCP_CMD_PIM_SET_LONG_POLL_INTERVAL:
3948
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3949
0
        {
3950
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_long_poll_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3951
0
            offset += 4;
3952
0
        }
3953
0
        break;
3954
3955
0
    case ZBNCP_CMD_PIM_START_FAST_POLL:
3956
        /* Empty: only common headers */
3957
0
        break;
3958
3959
0
    case ZBNCP_CMD_PIM_START_POLL:
3960
        /* Empty: only common headers */
3961
0
        break;
3962
3963
0
    case ZBNCP_CMD_PIM_SET_ADAPTIVE_POLL:
3964
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3965
0
        {
3966
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3967
0
            offset += 4;
3968
0
        }
3969
0
        break;
3970
3971
0
    case ZBNCP_CMD_PIM_STOP_FAST_POLL:
3972
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3973
0
        {
3974
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_stop_fast_poll_result, tvb, offset, 1, ENC_NA);
3975
0
            offset += 1;
3976
0
        }
3977
0
        break;
3978
3979
0
    case ZBNCP_CMD_PIM_STOP_POLL:
3980
        /* Empty: only common headers */
3981
0
        break;
3982
3983
0
    case ZBNCP_CMD_PIM_ENABLE_TURBO_POLL:
3984
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
3985
0
        {
3986
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3987
0
            offset += 4;
3988
0
        }
3989
0
        break;
3990
3991
0
    case ZBNCP_CMD_PIM_DISABLE_TURBO_POLL:
3992
        /* Empty: only common headers */
3993
0
        break;
3994
3995
0
    case ZBNCP_CMD_NWK_GET_FIRST_NBT_ENTRY:
3996
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
3997
0
        {
3998
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
3999
0
            offset += 8;
4000
4001
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4002
0
            offset += 2;
4003
4004
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_zb_role, tvb, offset, 1, ENC_NA);
4005
0
            offset += 1;
4006
4007
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rx_on_idle, tvb, offset, 1, ENC_NA);
4008
0
            offset += 1;
4009
4010
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ed_config, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4011
0
            offset += 2;
4012
4013
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_timeout_cnt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4014
0
            offset += 4;
4015
4016
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dev_timeout, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4017
0
            offset += 4;
4018
4019
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_relationship, tvb, offset, 1, ENC_NA);
4020
0
            offset += 1;
4021
4022
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_tx_fail_cnt, tvb, offset, 1, ENC_NA);
4023
0
            offset += 1;
4024
4025
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_lqi, tvb, offset, 1, ENC_NA);
4026
0
            offset += 1;
4027
4028
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_out_cost, tvb, offset, 1, ENC_NA);
4029
0
            offset += 1;
4030
4031
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_age, tvb, offset, 1, ENC_NA);
4032
0
            offset += 1;
4033
4034
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_keepalive_rec, tvb, offset, 1, ENC_NA);
4035
0
            offset += 1;
4036
4037
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_if_idx, tvb, offset, 1, ENC_NA);
4038
0
            offset += 1;
4039
0
        }
4040
0
        break;
4041
4042
0
    case ZBNCP_CMD_NWK_GET_NEXT_NBT_ENTRY:
4043
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4044
0
        {
4045
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4046
0
            offset += 8;
4047
4048
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4049
0
            offset += 2;
4050
4051
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_zb_role, tvb, offset, 1, ENC_NA);
4052
0
            offset += 1;
4053
4054
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rx_on_idle, tvb, offset, 1, ENC_NA);
4055
0
            offset += 1;
4056
4057
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ed_config, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4058
0
            offset += 2;
4059
4060
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_timeout_cnt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4061
0
            offset += 4;
4062
4063
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dev_timeout, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4064
0
            offset += 4;
4065
4066
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_relationship, tvb, offset, 1, ENC_NA);
4067
0
            offset += 1;
4068
4069
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_tx_fail_cnt, tvb, offset, 1, ENC_NA);
4070
0
            offset += 1;
4071
4072
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_lqi, tvb, offset, 1, ENC_NA);
4073
0
            offset += 1;
4074
4075
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_out_cost, tvb, offset, 1, ENC_NA);
4076
0
            offset += 1;
4077
4078
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_age, tvb, offset, 1, ENC_NA);
4079
0
            offset += 1;
4080
4081
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_keepalive_rec, tvb, offset, 1, ENC_NA);
4082
0
            offset += 1;
4083
4084
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_mac_if_idx, tvb, offset, 1, ENC_NA);
4085
0
            offset += 1;
4086
0
        }
4087
0
        break;
4088
4089
0
    case ZBNCP_CMD_NWK_PAN_ID_CONFLICT_RESOLVE:
4090
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4091
0
        {
4092
0
            unsigned i;
4093
0
            uint16_t pan_id_cnt = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
4094
4095
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_pan_id_cnt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4096
0
            offset += 2;
4097
4098
0
            for (i = 0; i < pan_id_cnt; i++)
4099
0
            {
4100
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_pan_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4101
0
                offset += 2;
4102
0
            }
4103
0
        }
4104
0
        break;
4105
4106
0
    case ZBNCP_CMD_NWK_PAN_ID_CONFLICT_IND:
4107
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
4108
0
        {
4109
0
            unsigned i;
4110
0
            uint16_t pan_id_cnt = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
4111
4112
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_pan_id_cnt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4113
0
            offset += 2;
4114
4115
0
            for (i = 0; i < pan_id_cnt; i++)
4116
0
            {
4117
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_pan_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4118
0
                offset += 2;
4119
0
            }
4120
0
        }
4121
0
        break;
4122
4123
0
    case ZBNCP_CMD_NWK_ADDRESS_UPDATE_IND:
4124
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
4125
0
        {
4126
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4127
0
            offset += 2;
4128
0
        }
4129
0
        break;
4130
4131
0
    case ZBNCP_CMD_NWK_START_WITHOUT_FORMATION:
4132
        /* Empty: only common headers */
4133
0
        break;
4134
4135
0
    case ZBNCP_CMD_NWK_NLME_ROUTER_START:
4136
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4137
0
        {
4138
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_beacon_order, tvb, offset, 1, ENC_NA);
4139
0
            offset += 1;
4140
4141
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_superframe_order, tvb, offset, 1, ENC_NA);
4142
0
            offset += 1;
4143
4144
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_battery_life_ext, tvb, offset, 1, ENC_NA);
4145
0
            offset += 1;
4146
0
        }
4147
0
        break;
4148
4149
0
    case ZBNCP_CMD_PIM_SINGLE_POLL:
4150
        /* Empty: only common headers  */
4151
0
        break;
4152
4153
0
    case ZBNCP_CMD_PARENT_LOST_IND:
4154
        /* Empty: only common headers */
4155
0
        break;
4156
4157
0
    case ZBNCP_CMD_PIM_START_TURBO_POLL_PACKETS:
4158
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4159
0
        {
4160
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_poll_pkt_cnt, tvb, offset, 1, ENC_NA);
4161
0
            offset += 1;
4162
0
        }
4163
0
        break;
4164
4165
0
    case ZBNCP_CMD_PIM_START_TURBO_POLL_CONTINUOUS:
4166
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4167
0
        {
4168
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_poll_timeout, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4169
0
            offset += 4;
4170
0
        }
4171
0
        break;
4172
4173
0
    case ZBNCP_CMD_PIM_TURBO_POLL_CONTINUOUS_LEAVE:
4174
        /* Empty: only common headers */
4175
0
        break;
4176
4177
0
    case ZBNCP_CMD_PIM_TURBO_POLL_PACKETS_LEAVE:
4178
        /* Empty: only common headers */
4179
0
        break;
4180
4181
0
    case ZBNCP_CMD_PIM_PERMIT_TURBO_POLL:
4182
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4183
0
        {
4184
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_poll_permit_flag, tvb, offset, 1, ENC_NA);
4185
0
            offset += 1;
4186
0
        }
4187
0
        break;
4188
4189
0
    case ZBNCP_CMD_PIM_SET_FAST_POLL_TIMEOUT:
4190
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4191
0
        {
4192
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_poll_timeout, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4193
0
            offset += 4;
4194
0
        }
4195
0
        break;
4196
4197
0
    case ZBNCP_CMD_PIM_GET_LONG_POLL_INTERVAL:
4198
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4199
0
        {
4200
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_long_poll_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4201
0
            offset += 4;
4202
0
        }
4203
0
        break;
4204
4205
0
    case ZBNCP_CMD_PIM_GET_IN_FAST_POLL_FLAG:
4206
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4207
0
        {
4208
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_fast_poll_flag, tvb, offset, 1, ENC_NA);
4209
0
            offset += 1;
4210
0
        }
4211
0
        break;
4212
4213
0
    case ZBNCP_CMD_SET_KEEPALIVE_MODE:
4214
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4215
0
        {
4216
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_keepalive_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4217
0
            offset += 1;
4218
0
        }
4219
0
        break;
4220
4221
0
    case ZBNCP_CMD_START_CONCENTRATOR_MODE:
4222
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4223
0
        {
4224
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_radius, tvb, offset, 1, ENC_NA);
4225
0
            offset += 1;
4226
4227
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_time_between_disc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4228
0
            offset += 4;
4229
0
        }
4230
0
        break;
4231
4232
0
    case ZBNCP_CMD_STOP_CONCENTRATOR_MODE:
4233
        /* Empty: only common headers */
4234
0
        break;
4235
4236
0
    case ZBNCP_CMD_NWK_ENABLE_PAN_ID_CONFLICT_RESOLUTION:
4237
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4238
0
        {
4239
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_enable_flag, tvb, offset, 1, ENC_NA);
4240
0
            offset += 1;
4241
0
        }
4242
0
        break;
4243
4244
0
    case ZBNCP_CMD_NWK_ENABLE_AUTO_PAN_ID_CONFLICT_RESOLUTION:
4245
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4246
0
        {
4247
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_enable_flag, tvb, offset, 1, ENC_NA);
4248
0
            offset += 1;
4249
0
        }
4250
0
        break;
4251
4252
0
    case ZBNCP_CMD_PIM_TURBO_POLL_CANCEL_PACKET:
4253
        /* Empty: only common headers */
4254
0
        break;
4255
4256
0
    case ZBNCP_CMD_SET_FORCE_ROUTE_RECORD:
4257
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4258
0
        {
4259
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_force_route_record_sending, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4260
0
            offset += 1;
4261
0
        }
4262
0
        break;
4263
4264
0
    case ZBNCP_CMD_GET_FORCE_ROUTE_RECORD:
4265
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4266
0
        {
4267
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_force_route_record_sending, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4268
0
            offset += 1;
4269
0
        }
4270
0
        break;
4271
4272
0
    case ZBNCP_CMD_NWK_NBR_ITERATOR_NEXT:
4273
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4274
0
        {
4275
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_start_idx_16b, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4276
0
            offset += 2;
4277
4278
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_upd_idx, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4279
0
            offset += 4;
4280
0
        }
4281
0
        break;
4282
4283
0
    case ZBNCP_CMD_ZB_DEBUG_SIGNAL_TCLK_READY_IND:
4284
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
4285
0
        {
4286
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4287
0
            offset += 8;
4288
0
        }
4289
0
        break;
4290
4291
0
    case ZBNCP_CMD_ZB_DEVICE_READY_FOR_INTERVIEW_IND:
4292
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
4293
0
        {
4294
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4295
0
            offset += 8;
4296
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_short_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4297
0
            offset += 2;
4298
0
        }
4299
0
        break;
4300
4301
0
    case ZBNCP_CMD_ZB_DEVICE_INTERVIEW_FINISHED_IND:
4302
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
4303
0
        {
4304
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4305
0
            offset += 8;
4306
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_short_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4307
0
            offset += 2;
4308
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status, tvb, offset, 1, ENC_NA);
4309
0
            offset += 1;
4310
0
        }
4311
0
        break;
4312
4313
0
    case ZBNCP_CMD_ZB_PREPARE_NETWORK_FOR_CHANNEL_PAN_ID_CHANGE:
4314
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4315
0
        {
4316
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_next_pan_id_change, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4317
0
            offset += 2;
4318
0
        }
4319
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4320
0
        {
4321
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_error_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4322
0
            offset += 2;
4323
0
        }
4324
0
        break;
4325
4326
0
    case ZBNCP_CMD_ZB_PREPARE_NETWORK_FOR_CHANNEL_CHANGE:
4327
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4328
0
        {
4329
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_next_channel_change, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4330
0
            offset += 4;
4331
0
        }
4332
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4333
0
        {
4334
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_error_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4335
0
            offset += 2;
4336
0
        }
4337
0
        break;
4338
4339
0
    case ZBNCP_CMD_ZB_START_CHANNEL_CHANGE:
4340
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4341
0
        {
4342
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_next_channel_change, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4343
0
            offset += 4;
4344
0
        }
4345
0
        break;
4346
4347
0
    case ZBNCP_CMD_ZB_START_PAN_ID_CHANGE:
4348
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4349
0
        {
4350
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_next_pan_id_change, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4351
0
            offset += 2;
4352
0
        }
4353
0
        break;
4354
4355
    /* Security API */
4356
0
    case ZBNCP_CMD_SECUR_SET_LOCAL_IC:
4357
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4358
0
        {
4359
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ic, tvb, offset, tvb_reported_length(tvb) - offset, ENC_NA);
4360
0
            offset = tvb_reported_length(tvb);
4361
0
        }
4362
0
        break;
4363
4364
0
    case ZBNCP_CMD_SECUR_ADD_IC:
4365
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4366
0
        {
4367
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4368
0
            offset += 8;
4369
4370
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ic, tvb, offset, tvb_reported_length(tvb) - offset, ENC_NA);
4371
0
            offset = tvb_reported_length(tvb);
4372
0
        }
4373
0
        break;
4374
4375
0
    case ZBNCP_CMD_SECUR_DEL_IC:
4376
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4377
0
        {
4378
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4379
0
            offset += 8;
4380
0
        }
4381
0
        break;
4382
4383
0
    case ZBNCP_CMD_SECUR_ADD_CERT:
4384
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4385
0
        {
4386
0
            uint8_t crypto_suite = tvb_get_uint8(tvb, offset);
4387
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cs, tvb, offset, 1, ENC_NA);
4388
0
            offset += 1;
4389
4390
0
            if (crypto_suite == 1)
4391
0
            {
4392
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ca_pub_key, tvb, offset, 22, ENC_NA);
4393
0
                offset += 22;
4394
4395
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cert, tvb, offset, 48, ENC_NA);
4396
0
                offset += 48;
4397
4398
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ca_priv_key, tvb, offset, 21, ENC_NA);
4399
0
                offset += 21;
4400
0
            }
4401
0
            else if (crypto_suite == 2)
4402
0
            {
4403
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ca_pub_key, tvb, offset, 37, ENC_NA);
4404
0
                offset += 37;
4405
4406
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cert, tvb, offset, 74, ENC_NA);
4407
0
                offset += 74;
4408
4409
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ca_priv_key, tvb, offset, 36, ENC_NA);
4410
0
                offset += 36;
4411
0
            }
4412
0
        }
4413
0
        break;
4414
4415
0
    case ZBNCP_CMD_SECUR_DEL_CERT:
4416
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4417
0
        {
4418
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cs, tvb, offset, 1, ENC_NA);
4419
0
            offset += 1;
4420
4421
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_issuer, tvb, offset, 8, ENC_NA);
4422
0
            offset += 8;
4423
4424
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4425
0
            offset += 8;
4426
0
        }
4427
0
        break;
4428
4429
0
    case ZBNCP_CMD_SECUR_START_KE:
4430
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4431
0
        {
4432
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cs, tvb, offset, 1, ENC_NA);
4433
0
            offset += 1;
4434
4435
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4436
0
            offset += 2;
4437
0
        }
4438
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4439
0
        {
4440
0
            unsigned status_category = tvb_get_uint8(tvb, offset);
4441
0
            unsigned status;
4442
4443
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_cat, tvb, offset, 1, ENC_NA);
4444
0
            offset += 1;
4445
4446
            /* Add status */
4447
0
            status = tvb_get_uint8(tvb, offset);
4448
0
            switch (status_category)
4449
0
            {
4450
0
            case ZBNCP_HIGH_LVL_STAT_CAT_GENERIC:
4451
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_generic, tvb, offset, 1, ENC_NA);
4452
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zbncp_hl_status_generic, "Unknown Status"));
4453
0
                break;
4454
4455
0
            case ZBNCP_HIGH_LVL_STAT_CAT_MAC:
4456
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_mac, tvb, offset, 1, ENC_NA);
4457
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_mac_state, "Unknown Status"));
4458
0
                break;
4459
4460
0
            case ZBNCP_HIGH_LVL_STAT_CAT_NWK:
4461
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_nwk, tvb, offset, 1, ENC_NA);
4462
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_nwk_state, "Unknown Status"));
4463
0
                break;
4464
4465
0
            case ZBNCP_HIGH_LVL_STAT_CAT_APS:
4466
0
                dissect_zbee_aps_status_code(tvb, pinfo, zbncp_hl_body_tree, offset);
4467
0
                break;
4468
4469
0
            case ZBNCP_HIGH_LVL_STAT_CAT_CBKE:
4470
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_cbke, tvb, offset, 1, ENC_NA);
4471
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_cbke_state, "Unknown Status"));
4472
0
                break;
4473
4474
0
            default:
4475
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status, tvb, offset, 1, ENC_NA);
4476
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: 0x%x", status);
4477
0
            }
4478
0
            offset += 1;
4479
0
        }
4480
0
        break;
4481
4482
0
    case ZBNCP_CMD_SECUR_START_PARTNER_LK:
4483
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4484
0
        {
4485
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4486
0
            offset += 2;
4487
0
        }
4488
0
        break;
4489
4490
0
    case ZBNCP_CMD_SECUR_CBKE_SRV_FINISHED_IND:
4491
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
4492
0
        {
4493
0
            unsigned status_category = tvb_get_uint8(tvb, offset);
4494
0
            unsigned status;
4495
4496
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_cat, tvb, offset, 1, ENC_NA);
4497
0
            offset += 1;
4498
4499
            /* Add status */
4500
0
            status = tvb_get_uint8(tvb, offset);
4501
0
            switch (status_category)
4502
0
            {
4503
0
            case ZBNCP_HIGH_LVL_STAT_CAT_GENERIC:
4504
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_generic, tvb, offset, 1, ENC_NA);
4505
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zbncp_hl_status_generic, "Unknown Status"));
4506
0
                break;
4507
4508
0
            case ZBNCP_HIGH_LVL_STAT_CAT_MAC:
4509
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_mac, tvb, offset, 1, ENC_NA);
4510
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_mac_state, "Unknown Status"));
4511
0
                break;
4512
4513
0
            case ZBNCP_HIGH_LVL_STAT_CAT_NWK:
4514
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_nwk, tvb, offset, 1, ENC_NA);
4515
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_nwk_state, "Unknown Status"));
4516
0
                break;
4517
4518
0
            case ZBNCP_HIGH_LVL_STAT_CAT_APS:
4519
0
                dissect_zbee_aps_status_code(tvb, pinfo, zbncp_hl_body_tree, offset);
4520
0
                break;
4521
4522
0
            case ZBNCP_HIGH_LVL_STAT_CAT_CBKE:
4523
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status_cbke, tvb, offset, 1, ENC_NA);
4524
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str_const(status, zb_cbke_state, "Unknown Status"));
4525
0
                break;
4526
4527
0
            default:
4528
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_hl_status, tvb, offset, 1, ENC_NA);
4529
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: 0x%x", status);
4530
0
            }
4531
0
            offset += 1;
4532
4533
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_nwk_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4534
0
            offset += 2;
4535
4536
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4537
0
            offset += 8;
4538
0
        }
4539
0
        break;
4540
4541
0
    case ZBNCP_CMD_SECUR_PARTNER_LK_FINISHED_IND:
4542
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
4543
0
        {
4544
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4545
0
            offset += 8;
4546
0
        }
4547
0
        break;
4548
4549
0
    case ZBNCP_CMD_SECUR_KE_WHITELIST_ADD:
4550
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4551
0
        {
4552
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4553
0
            offset += 8;
4554
0
        }
4555
0
        break;
4556
4557
0
    case ZBNCP_CMD_SECUR_KE_WHITELIST_DEL:
4558
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4559
0
        {
4560
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4561
0
            offset += 8;
4562
0
        }
4563
0
        break;
4564
4565
0
    case ZBNCP_CMD_SECUR_KE_WHITELIST_DEL_ALL:
4566
        /* Empty: only common headers */
4567
0
        break;
4568
4569
0
    case ZBNCP_CMD_SECUR_JOIN_USES_IC:
4570
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4571
0
        {
4572
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ic_en, tvb, offset, 1, ENC_NA);
4573
0
            offset += 1;
4574
0
        }
4575
0
        break;
4576
4577
0
    case ZBNCP_CMD_SECUR_GET_IC_BY_IEEE:
4578
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4579
0
        {
4580
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4581
0
            offset += 8;
4582
0
        }
4583
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4584
0
        {
4585
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ic, tvb, offset, tvb_reported_length(tvb) - offset, ENC_NA);
4586
0
            offset = tvb_reported_length(tvb);
4587
0
        }
4588
0
        break;
4589
4590
0
    case ZBNCP_CMD_SECUR_GET_CERT:
4591
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4592
0
        {
4593
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cs, tvb, offset, 1, ENC_NA);
4594
0
            offset += 1;
4595
4596
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4597
0
            offset += 8;
4598
0
        }
4599
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4600
0
        {
4601
0
            uint8_t crypto_suite = tvb_get_uint8(tvb, offset);
4602
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cs, tvb, offset, 1, ENC_NA);
4603
0
            offset += 1;
4604
4605
0
            if (crypto_suite == 1)
4606
0
            {
4607
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ca_pub_key, tvb, offset, 22, ENC_NA);
4608
0
                offset += 22;
4609
4610
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cert, tvb, offset, 48, ENC_NA);
4611
0
                offset += 48;
4612
0
            }
4613
0
            else if (crypto_suite == 2)
4614
0
            {
4615
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ca_pub_key, tvb, offset, 37, ENC_NA);
4616
0
                offset += 37;
4617
4618
0
                proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_cert, tvb, offset, 74, ENC_NA);
4619
0
                offset += 74;
4620
0
            }
4621
0
        }
4622
0
        break;
4623
4624
0
    case ZBNCP_CMD_SECUR_GET_LOCAL_IC:
4625
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4626
0
        {
4627
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ic, tvb, offset, tvb_reported_length(tvb) - offset, ENC_NA);
4628
0
            offset = tvb_reported_length(tvb);
4629
0
        }
4630
0
        break;
4631
4632
0
    case ZBNCP_CMD_SECUR_TCLK_IND:
4633
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
4634
0
        {
4635
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4636
0
            offset += 8;
4637
4638
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_key_type, tvb, offset, 1, ENC_NA);
4639
0
            offset += 1;
4640
0
        }
4641
0
        break;
4642
4643
0
    case ZBNCP_CMD_SECUR_TCLK_EXCHANGE_FAILED_IND:
4644
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
4645
0
        {
4646
0
            offset = dissect_zbncp_status(tvb, pinfo, zbncp_hl_body_tree, offset);
4647
0
        }
4648
0
        break;
4649
4650
0
    case ZBNCP_CMD_SECUR_GET_KEY_IDX:
4651
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4652
0
        {
4653
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4654
0
            offset += 8;
4655
0
        }
4656
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4657
0
        {
4658
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_index, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4659
0
            offset += 2;
4660
0
        }
4661
0
        break;
4662
4663
0
    case ZBNCP_CMD_SECUR_GET_KEY:
4664
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4665
0
        {
4666
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_index, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4667
0
            offset += 2;
4668
0
        }
4669
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4670
0
        {
4671
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_link_key, tvb, offset, 16, ENC_NA);
4672
0
            offset += 16;
4673
4674
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_aps_link_key_type, tvb, offset, 1, ENC_NA);
4675
0
            offset += 1;
4676
4677
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_key_src, tvb, offset, 1, ENC_NA);
4678
0
            offset += 1;
4679
4680
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_key_attr, tvb, offset, 1, ENC_NA);
4681
0
            offset += 1;
4682
4683
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_out_frame_cnt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4684
0
            offset += 4;
4685
4686
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_inc_frame_cnt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4687
0
            offset += 4;
4688
4689
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_partner_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4690
0
            offset += 8;
4691
0
        }
4692
0
        break;
4693
4694
0
    case ZBNCP_CMD_SECUR_ERASE_KEY:
4695
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4696
0
        {
4697
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_index, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4698
0
            offset += 2;
4699
0
        }
4700
0
        break;
4701
4702
0
    case ZBNCP_CMD_SECUR_CLEAR_KEY_TABLE:
4703
        /* Empty: only common headers */
4704
0
        break;
4705
4706
0
    case ZBNCP_CMD_SECUR_NWK_INITIATE_KEY_SWITCH_PROCEDURE:
4707
        /* Empty: only common headers */
4708
0
        break;
4709
4710
0
    case ZBNCP_CMD_SECUR_GET_IC_LIST:
4711
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4712
0
        {
4713
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_start_idx, tvb, offset, 1, ENC_NA);
4714
0
            offset += 1;
4715
0
        }
4716
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4717
0
        {
4718
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ic_table_size, tvb, offset, 1, ENC_NA);
4719
0
            offset += 1;
4720
4721
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_start_idx, tvb, offset, 1, ENC_NA);
4722
0
            offset += 1;
4723
4724
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ic_ent_cnt, tvb, offset, 1, ENC_NA);
4725
0
            offset += 1;
4726
4727
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ic, tvb, offset, tvb_captured_length(tvb) - offset, ENC_NA);
4728
0
            offset += tvb_captured_length(tvb) - offset;
4729
0
        }
4730
0
        break;
4731
4732
0
    case ZBNCP_CMD_SECUR_GET_IC_BY_IDX:
4733
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4734
0
        {
4735
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_entry_idx, tvb, offset, 1, ENC_NA);
4736
0
            offset += 1;
4737
0
        }
4738
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4739
0
        {
4740
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ic, tvb, offset, tvb_captured_length(tvb) - offset, ENC_NA);
4741
0
            offset += tvb_captured_length(tvb) - offset;
4742
0
        }
4743
0
        break;
4744
4745
0
    case ZBNCP_CMD_SECUR_REMOVE_ALL_IC:
4746
        /* Empty: only common headers */
4747
0
        break;
4748
4749
0
    case ZBNCP_CMD_SECUR_PARTNER_LK_ENABLE:
4750
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4751
0
        {
4752
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_enable, tvb, offset, 1, ENC_NA);
4753
0
            offset += 1;
4754
0
        }
4755
0
        break;
4756
4757
0
    case ZBNCP_CMD_SECUR_AUTH_DEVICE_AFTER_INTERVIEW:
4758
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4759
0
        {
4760
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4761
0
            offset += 8;
4762
0
        }
4763
0
        break;
4764
4765
0
    case ZBNCP_CMD_ZDO_SECUR_UPDATE_DEVICE_TCLK:
4766
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4767
0
        {
4768
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_ieee_addr, tvb, offset, 8, ENC_LITTLE_ENDIAN);
4769
0
            offset += 8;
4770
0
        }
4771
0
        break;
4772
4773
    /* Manufacturing Test API */
4774
0
    case ZBNCP_CMD_MANUF_MODE_START:
4775
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4776
0
        {
4777
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
4778
0
            offset += 1;
4779
4780
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_channel4, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4781
0
            offset += 4;
4782
0
        }
4783
0
        break;
4784
4785
0
    case ZBNCP_CMD_MANUF_MODE_END:
4786
        /* Empty: only common headers */
4787
0
        break;
4788
4789
0
    case ZBNCP_CMD_MANUF_SET_CHANNEL:
4790
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4791
0
        {
4792
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
4793
0
            offset += 1;
4794
4795
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_channel4, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4796
0
            offset += 4;
4797
0
        }
4798
0
        break;
4799
4800
0
    case ZBNCP_CMD_MANUF_GET_CHANNEL:
4801
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4802
0
        {
4803
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_page, tvb, offset, 1, ENC_NA);
4804
0
            offset += 1;
4805
4806
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_channel4, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4807
0
            offset += 4;
4808
0
        }
4809
0
        break;
4810
4811
0
    case ZBNCP_CMD_MANUF_SET_POWER:
4812
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4813
0
        {
4814
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_tx_power, tvb, offset, 1, ENC_NA);
4815
0
            offset += 1;
4816
0
        }
4817
0
        break;
4818
4819
0
    case ZBNCP_CMD_MANUF_GET_POWER:
4820
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4821
0
        {
4822
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_tx_power, tvb, offset, 1, ENC_NA);
4823
0
            offset += 1;
4824
0
        }
4825
0
        break;
4826
4827
0
    case ZBNCP_CMD_MANUF_START_TONE:
4828
        /* Empty: only common headers */
4829
0
        break;
4830
4831
0
    case ZBNCP_CMD_MANUF_STOP_TONE:
4832
        /* Empty: only common headers */
4833
0
        break;
4834
4835
0
    case ZBNCP_CMD_MANUF_START_STREAM_RANDOM:
4836
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4837
0
        {
4838
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_seed, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4839
0
            offset += 2;
4840
0
        }
4841
0
        break;
4842
4843
0
    case ZBNCP_CMD_MANUF_STOP_STREAM_RANDOM:
4844
        /* Empty: only common headers */
4845
0
        break;
4846
4847
0
    case ZBNCP_CMD_NCP_HL_MANUF_SEND_SINGLE_PACKET:
4848
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4849
0
        {
4850
0
            uint8_t data_len = tvb_get_uint8(tvb, offset);
4851
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dlen8, tvb, offset, 1, ENC_NA);
4852
0
            offset += 1;
4853
4854
0
            if (data_len > (tvb_reported_length(tvb) - offset))
4855
0
            {
4856
0
                data_len = tvb_reported_length(tvb) - offset;
4857
0
            }
4858
4859
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_array, tvb, offset, data_len, ENC_NA);
4860
0
            offset += data_len;
4861
0
        }
4862
0
        break;
4863
4864
0
    case ZBNCP_CMD_MANUF_START_TEST_RX:
4865
        /* Empty: only common headers */
4866
0
        break;
4867
4868
0
    case ZBNCP_CMD_MANUF_STOP_TEST_RX:
4869
        /* Empty: only common headers */
4870
0
        break;
4871
4872
0
    case ZBNCP_CMD_MANUF_RX_PACKET_IND:
4873
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_INDICATION)
4874
0
        {
4875
0
            uint16_t data_len = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
4876
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dlen16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4877
0
            offset += 2;
4878
4879
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_lqi, tvb, offset, 1, ENC_NA);
4880
0
            offset += 1;
4881
4882
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_rssi, tvb, offset, 1, ENC_NA);
4883
0
            offset += 1;
4884
4885
0
            if (data_len > (tvb_reported_length(tvb) - offset))
4886
0
            {
4887
0
                data_len = tvb_reported_length(tvb) - offset;
4888
0
            }
4889
4890
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_array, tvb, offset, data_len, ENC_NA);
4891
0
            offset += data_len;
4892
0
        }
4893
0
        break;
4894
4895
    /*  NCP FW upgrade API */
4896
0
    case ZBNCP_CMD_OTA_RUN_BOOTLOADER:
4897
        /* Empty: only common headers */
4898
0
        break;
4899
4900
0
    case ZBNCP_CMD_OTA_START_UPGRADE_IND:
4901
        /* Empty: only common headers */
4902
0
        break;
4903
4904
0
    case ZBNCP_CMD_OTA_SEND_PORTION_FW:
4905
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4906
0
        {
4907
0
            uint16_t data_len = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
4908
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dlen16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4909
0
            offset += 2;
4910
4911
0
            if (data_len > (tvb_reported_length(tvb) - offset))
4912
0
            {
4913
0
                data_len = tvb_reported_length(tvb) - offset;
4914
0
            }
4915
4916
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_array, tvb, offset, data_len, ENC_NA);
4917
0
            offset += data_len;
4918
0
        }
4919
0
        break;
4920
4921
0
    case ZBNCP_CMD_READ_NVRAM_RESERVED:
4922
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4923
0
        {
4924
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4925
0
            offset += 2;
4926
4927
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dlen8, tvb, offset, 1, ENC_NA);
4928
0
            offset += 1;
4929
0
        }
4930
0
        else if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4931
0
        {
4932
0
            uint8_t data_len;
4933
4934
0
            data_len = tvb_get_uint8(tvb, offset);
4935
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dlen8, tvb, offset, 1, ENC_NA);
4936
0
            offset += 1;
4937
4938
0
            if (data_len > (tvb_reported_length(tvb) - offset))
4939
0
            {
4940
0
                data_len = tvb_reported_length(tvb) - offset;
4941
0
            }
4942
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_array, tvb, offset, data_len, ENC_NA);
4943
0
            offset += data_len;
4944
0
        }
4945
0
        break;
4946
4947
0
    case ZBNCP_CMD_WRITE_NVRAM_RESERVED:
4948
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_REQUEST)
4949
0
        {
4950
0
            uint8_t data_len;
4951
4952
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_do_erase, tvb, offset, 1, ENC_NA);
4953
0
            offset += 1;
4954
4955
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4956
0
            offset += 2;
4957
4958
0
            data_len = tvb_get_uint8(tvb, offset);
4959
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_dlen8, tvb, offset, 1, ENC_NA);
4960
0
            offset += 1;
4961
4962
0
            if (data_len > (tvb_reported_length(tvb) - offset))
4963
0
            {
4964
0
                data_len = tvb_reported_length(tvb) - offset;
4965
0
            }
4966
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_array, tvb, offset, data_len, ENC_NA);
4967
0
            offset += data_len;
4968
0
        }
4969
0
        break;
4970
4971
0
    case ZBNCP_CMD_GET_CALIBRATION_INFO:
4972
0
        if (ptype == ZBNCP_HIGH_LVL_PACKET_TYPE_RESPONSE)
4973
0
        {
4974
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_calibration_status, tvb, offset, 1, ENC_NA);
4975
0
            offset += 1;
4976
0
            proto_tree_add_item(zbncp_hl_body_tree, hf_zbncp_data_calibration_value, tvb, offset, 1, ENC_NA);
4977
0
            offset += 1;
4978
0
        }
4979
0
        break;
4980
4981
0
    default:;
4982
0
    }
4983
4984
    /* Dump the tail. */
4985
0
    if (offset < tvb_reported_length(tvb))
4986
0
    {
4987
0
        tvbuff_t *leftover_tvb = tvb_new_subset_remaining(tvb, offset);
4988
0
        call_data_dissector(leftover_tvb, pinfo, tree);
4989
0
    }
4990
0
}
4991
4992
static void
4993
dissect_zbncp_fragmentation_body(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned offset)
4994
0
{
4995
0
    proto_tree *zbncp_body_tree = proto_tree_add_subtree_format(tree, tvb, offset, tvb_reported_length(tvb) - offset, ett_zbncp_ll_body, NULL, "ZBNCP Packet Body");
4996
4997
    /* CRC */
4998
0
    proto_tree_add_item(zbncp_body_tree, hf_zbncp_body_data_crc16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4999
0
    offset += 2;
5000
5001
    /* Dump the tail. */
5002
0
    if (offset < tvb_reported_length(tvb))
5003
0
    {
5004
0
        tvbuff_t *leftover_tvb = tvb_new_subset_remaining(tvb, offset);
5005
0
        call_data_dissector(leftover_tvb, pinfo, zbncp_body_tree);
5006
0
    }
5007
0
}
5008
5009
static void
5010
dissect_zbncp_body(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned offset, uint16_t *cmd_id)
5011
0
{
5012
0
    proto_tree *zbncp_body_tree = proto_tree_add_subtree_format(tree, tvb, offset, tvb_reported_length(tvb) - offset, ett_zbncp_ll_body, NULL, "ZBNCP Packet Body");
5013
5014
    /* CRC */
5015
0
    proto_tree_add_item(zbncp_body_tree, hf_zbncp_body_data_crc16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5016
0
    offset += 2;
5017
5018
0
    dissect_zbncp_high_level(tvb, pinfo, zbncp_body_tree, offset, cmd_id);
5019
0
}
5020
5021
static unsigned
5022
dissect_zbncp_ll_hdr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset, uint8_t *hdr_flags)
5023
0
{
5024
0
    proto_tree *ncp_ll_hdr_tree;
5025
0
    proto_item *proto_root;
5026
5027
0
    static int *const packet_flags[] = {
5028
0
        &hf_zbncp_hdr_flags_isack,
5029
0
        &hf_zbncp_hdr_flags_retrans,
5030
0
        &hf_zbncp_hdr_flags_packetseq,
5031
0
        &hf_zbncp_hdr_flags_ackseq,
5032
0
        &hf_zbncp_hdr_flags_first_frag,
5033
0
        &hf_zbncp_hdr_flags_last_frag,
5034
0
        NULL};
5035
5036
0
    if (tvb_get_uint8(tvb, 0) != ZBNCP_SIGN_FST_BYTE ||
5037
0
        tvb_get_uint8(tvb, 1) != ZBNCP_SIGN_SEC_BYTE)
5038
0
    {
5039
0
        return 0;
5040
0
    }
5041
5042
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "ZB NCP");
5043
5044
0
    proto_root = proto_tree_add_protocol_format(tree, zbncp_frame, tvb, 0, tvb_captured_length(tvb), "ZBNCP Low Level Header");
5045
0
    ncp_ll_hdr_tree = proto_item_add_subtree(proto_root, ett_zbncp_hdr);
5046
5047
    /* hdr */
5048
0
    proto_tree_add_item(ncp_ll_hdr_tree, hf_zbncp_hdr_sign, tvb, offset, 2, ENC_ASCII);
5049
0
    offset += 2;
5050
5051
    /* pkt length without sign */
5052
0
    proto_tree_add_item(ncp_ll_hdr_tree, hf_zbncp_packet_len, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5053
0
    offset += 2;
5054
5055
    /* hl packet type */
5056
0
    proto_tree_add_item(ncp_ll_hdr_tree, hf_zbncp_hdr_type, tvb, offset, 1, ENC_NA);
5057
0
    offset += 1;
5058
5059
    /* hdr flags */
5060
0
    *hdr_flags = tvb_get_uint8(tvb, offset);
5061
0
    proto_tree_add_bitmask(ncp_ll_hdr_tree, tvb, offset, hf_zbncp_hdr_flags, ett_zbncp_hdr_flags, packet_flags, ENC_NA);
5062
0
    offset += 1;
5063
5064
    /* check is ack */
5065
0
    if (*hdr_flags & ZBNCP_HDR_FLAGS_ISACK_MASK)
5066
0
    {
5067
0
        col_set_str(pinfo->cinfo, COL_INFO, "ACK");
5068
0
    }
5069
5070
    /* crc 8 */
5071
0
    proto_tree_add_item(ncp_ll_hdr_tree, hf_zbncp_hdr_crc8, tvb, offset++, 1, ENC_NA);
5072
5073
0
    return offset;
5074
0
}
5075
5076
static unsigned
5077
dissect_zbncp_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset)
5078
0
{
5079
0
    uint8_t flags;
5080
0
    uint16_t cmd_id;
5081
5082
0
    conversation_t *conversation;
5083
0
    char *zbncp_ctx_str;
5084
5085
0
    flags = 0;
5086
0
    offset = dissect_zbncp_ll_hdr(tvb, pinfo, tree, offset, &flags);
5087
5088
0
    if (!offset)
5089
0
    {
5090
0
        return 0;
5091
0
    }
5092
5093
0
    if (offset < tvb_reported_length(tvb))
5094
0
    {
5095
0
        if (ZBNCP_GET_PACKET_FLAGS_FIRST_FRAG_BIT(flags))
5096
0
        {
5097
            /* No fragmentation or first fragment */
5098
0
            dissect_zbncp_body(tvb, pinfo, tree, offset, &cmd_id);
5099
5100
            /* First fragment */
5101
0
            if (!ZBNCP_GET_PACKET_FLAGS_LAST_FRAG_BIT(flags))
5102
0
            {
5103
0
                const char *tmp = val_to_str_const(cmd_id, zbncp_hl_call_id, "Unknown Call ID");
5104
0
                zbncp_ctx_str = wmem_alloc(wmem_file_scope(), 64);
5105
5106
0
                if(zbncp_ctx_str != NULL)
5107
0
                {
5108
0
                    memcpy(zbncp_ctx_str, tmp, strlen(tmp) + 1);
5109
5110
0
                    conversation = conversation_new(pinfo->num,  &pinfo->src, &pinfo->dst,
5111
0
                        conversation_pt_to_conversation_type(pinfo->ptype),
5112
0
                        pinfo->srcport, pinfo->destport, 0);
5113
5114
0
                    conversation_add_proto_data(conversation, zbncp_frame, (void *)zbncp_ctx_str);
5115
0
                }
5116
5117
0
                col_append_str(pinfo->cinfo, COL_INFO, ", first fragment");
5118
0
            }
5119
0
        }
5120
0
        else /* It's fragmentation frame */
5121
0
        {
5122
            /* Fragmentation frame */
5123
0
            dissect_zbncp_fragmentation_body(tvb, pinfo, tree, offset);
5124
5125
0
            conversation = find_conversation(pinfo->num, &pinfo->src, &pinfo->dst,
5126
0
                conversation_pt_to_conversation_type(pinfo->ptype),
5127
0
                pinfo->srcport, pinfo->destport, 0);
5128
5129
0
            if (conversation != NULL)
5130
0
            {
5131
0
                zbncp_ctx_str = (char *) conversation_get_proto_data(conversation, zbncp_frame);
5132
5133
0
                if (zbncp_ctx_str != NULL)
5134
0
                {
5135
0
                    col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", zbncp_ctx_str);
5136
0
                    conversation_delete_proto_data(conversation, zbncp_frame);
5137
0
                }
5138
0
            }
5139
5140
0
            if (ZBNCP_GET_PACKET_FLAGS_LAST_FRAG_BIT(flags))
5141
0
            {
5142
0
                col_append_str(pinfo->cinfo, COL_INFO, ", last fragment");
5143
0
            }
5144
0
            else
5145
0
            {
5146
0
                col_append_str(pinfo->cinfo, COL_INFO, ", fragment");
5147
0
            }
5148
0
        }
5149
0
    }
5150
5151
0
    return tvb_captured_length(tvb);
5152
0
}
5153
5154
/**
5155
 * Dissector for ZBOSS NCP packet with an additional dump info.
5156
 *
5157
 * @param tvb pointer to buffer containing raw packet.
5158
 * @param pinfo pointer to packet information fields.
5159
 * @param tree pointer to data tree wireshark uses to display packet.
5160
 */
5161
static int
5162
dissect_zbncp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
5163
0
{
5164
0
    tvbuff_t *new_tvb;
5165
0
    new_tvb = dissect_zbncp_dump_info(tvb, pinfo, tree);
5166
5167
0
    dissect_zbncp_packet(new_tvb, pinfo, tree, 0);
5168
5169
0
    return tvb_captured_length(tvb);
5170
0
}
5171
5172
/**
5173
 * Proto ZBOSS Network Coprocessor product registration routine
5174
 */
5175
void proto_register_zbncp(void)
5176
14
{
5177
    /* NCP protocol headers */
5178
14
    static hf_register_info hf_zbncp_phy[] = {
5179
14
        {&hf_zbncp_hdr_sign,
5180
14
         {"Signature", "zbncp.hdr.sign", FT_UINT16, BASE_HEX, NULL,
5181
14
          0x0, NULL, HFILL}},
5182
5183
14
        {&hf_zbncp_packet_len,
5184
14
         {"Packet length", "zbncp.hdr.plen", FT_UINT16, BASE_DEC, NULL,
5185
14
          0x0, NULL, HFILL}},
5186
5187
14
        {&hf_zbncp_hdr_type,
5188
14
         {"Packet type", "zbncp.hdr.ptype", FT_UINT8, BASE_HEX, NULL,
5189
14
          0x0, NULL, HFILL}},
5190
5191
14
        {&hf_zbncp_hdr_flags,
5192
14
         {"Packet flags", "zbncp.hdr.flags", FT_UINT8, BASE_HEX, NULL,
5193
14
          0x0, NULL, HFILL}},
5194
5195
14
        {&hf_zbncp_hdr_flags_isack,
5196
14
         {"isACK", "zbncp.hdr.flags.isack", FT_BOOLEAN, 8, NULL,
5197
14
          ZBNCP_HDR_FLAGS_ISACK_MASK, NULL, HFILL}},
5198
5199
14
        {&hf_zbncp_hdr_flags_retrans,
5200
14
         {"Should retransmit", "zbncp.hdr.flags.retrans", FT_BOOLEAN, 8, NULL,
5201
14
          ZBNCP_HDR_FLAGS_RETRANS_MASK, NULL, HFILL}},
5202
5203
14
        {&hf_zbncp_hdr_flags_packetseq,
5204
14
         {"Packet#", "zbncp.hdr.flags.packet_seq", FT_UINT8, BASE_DEC, NULL,
5205
14
          ZBNCP_HDR_FLAGS_PKT_SEQ_MASK, NULL, HFILL}},
5206
5207
14
        {&hf_zbncp_hdr_flags_ackseq,
5208
14
         {"ACK#", "zbncp.hdr.flags.ack_seq", FT_UINT8, BASE_DEC, NULL,
5209
14
          ZBNCP_HDR_FLAGS_ACK_SEQ_MASK, NULL, HFILL}},
5210
5211
14
        {&hf_zbncp_hdr_flags_first_frag,
5212
14
         {"First fragment", "zbncp.hdr.flags.first_frag", FT_BOOLEAN, 8, NULL,
5213
14
          ZBNCP_HDR_FLAGS_ISFIRST_MASK, NULL, HFILL}},
5214
5215
14
        {&hf_zbncp_hdr_flags_last_frag,
5216
14
         {"Last fragment", "zbncp.hdr.flags.last_frag", FT_BOOLEAN, 8, NULL,
5217
14
          ZBNCP_HDR_FLAGS_ISLAST_MASK, NULL, HFILL}},
5218
5219
14
        {&hf_zbncp_hdr_crc8,
5220
14
         {"CRC8", "zbncp.hdr.crc8", FT_UINT8, BASE_HEX, NULL,
5221
14
          0x0, NULL, HFILL}},
5222
5223
14
        {&hf_zbncp_body_data_crc16,
5224
14
         {"CRC16", "zbncp.data.crc16", FT_UINT16, BASE_HEX, NULL,
5225
14
          0x0, NULL, HFILL}},
5226
5227
14
        {&hf_zbncp_data_hl_version,
5228
14
         {"Version", "zbncp.data.hl.vers", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5229
5230
14
        {&hf_zbncp_data_hl_packet_type,
5231
14
         {"Packet type", "zbncp.data.hl.ptype", FT_UINT8, BASE_HEX, VALS(zbncp_hl_type), 0x0, NULL, HFILL}},
5232
5233
14
        {&hf_zbncp_data_hl_call_id,
5234
14
         {"Call/evt id", "zbncp.data.hl.id", FT_UINT16, BASE_HEX, VALS(zbncp_hl_call_id), 0x0, NULL, HFILL}},
5235
5236
14
        {&hf_zbncp_data_hl_tsn,
5237
14
         {"TSN", "zbncp.data.hl.tsn", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5238
5239
14
        {&hf_zbncp_data_hl_status_cat,
5240
14
         {"Status category", "zbncp.data.hl.status_cat", FT_UINT8, BASE_HEX, VALS(zbncp_hl_status_cat), 0x0, NULL, HFILL}},
5241
5242
14
        {&hf_zbncp_data_hl_status,
5243
14
         {"Status", "zbncp.data.hl.status", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5244
5245
14
        {&hf_zbncp_data_hl_status_generic,
5246
14
         {"Status", "zbncp.data.hl.status", FT_UINT8, BASE_HEX, VALS(zbncp_hl_status_generic), 0x0, NULL, HFILL}},
5247
5248
14
        {&hf_zbncp_data_hl_status_mac,
5249
14
         {"Status", "zbncp.data.hl.status", FT_UINT8, BASE_HEX, VALS(zb_mac_state), 0x0, NULL, HFILL}},
5250
5251
14
        {&hf_zbncp_data_hl_status_nwk,
5252
14
         {"Status", "zbncp.data.hl.status", FT_UINT8, BASE_HEX, VALS(zb_nwk_state), 0x0, NULL, HFILL}},
5253
5254
14
        {&hf_zbncp_data_hl_status_cbke,
5255
14
         {"Status", "zbncp.data.hl.status", FT_UINT8, BASE_HEX, VALS(zb_cbke_state), 0x0, NULL, HFILL}},
5256
5257
14
        {&hf_zbncp_data_fw_vers,
5258
14
         {"FW Version", "zbncp.data.fw_vers", FT_UINT32, BASE_HEX, NULL, 0x0, "NCP module firmware version", HFILL}},
5259
5260
14
        {&hf_zbncp_data_stack_vers,
5261
14
         {"Stack Version", "zbncp.data.stack_vers", FT_UINT32, BASE_HEX, NULL, 0x0, "NCP module stack version", HFILL}},
5262
5263
14
        {&hf_zbncp_data_proto_vers,
5264
14
         {"Protocol Version", "zbncp.data.proto_vers", FT_UINT32, BASE_HEX, NULL, 0x0, "NCP module protocol version", HFILL}},
5265
5266
14
        {&hf_zbncp_data_reset_opt,
5267
14
         {"Options", "zbncp.data.rst_opt", FT_UINT8, BASE_HEX, VALS(zbncp_reset_opt), 0x0, "Force NCP module reboot", HFILL}},
5268
5269
14
        {&hf_zbncp_data_zb_role,
5270
14
         {"Zigbee role", "zbncp.data.zb_role", FT_UINT8, BASE_HEX, VALS(zbncp_zb_role), 0x0, "Zigbee role code", HFILL}},
5271
5272
14
        {&hf_zbncp_data_ch_list_len,
5273
14
         {"Channel list length", "zbncp.data.ch_list_len", FT_UINT8, BASE_HEX, NULL, 0x0, "Number of entries in the following Channel List array", HFILL}},
5274
5275
14
        {&hf_zbncp_data_page,
5276
14
         {"Channel page", "zbncp.data.page", FT_UINT8, BASE_DEC_HEX, VALS(zboss_page_names), 0x0,
5277
14
          "IEEE802.15.4 page number", HFILL}},
5278
5279
14
        {&hf_zbncp_data_ch_mask,
5280
14
         {"Channel mask", "zbncp.data.ch_mask", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5281
5282
14
        {&hf_zbncp_data_channel,
5283
14
         {"Channel", "zbncp.data.mask", FT_UINT8, BASE_DEC, NULL, 0x0,
5284
14
          "Channel number", HFILL}},
5285
5286
14
        {&hf_zbncp_data_channel4,
5287
14
         {"Channel", "zbncp.data.mask", FT_UINT32, BASE_DEC, NULL, 0x0,
5288
14
          "Channel number", HFILL}},
5289
5290
14
        {&hf_zbncp_data_pan_id,
5291
14
         {"PAN ID", "zbncp.data.pan_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5292
5293
14
        {&hf_zbncp_data_index,
5294
14
         {"Index", "zbncp.data.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5295
5296
14
        {&hf_zbncp_data_enable,
5297
14
         {"Enable", "zbncp.data.enable", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5298
5299
14
        {&hf_zbncp_data_bind_type,
5300
14
         {"Bind Type", "zbncp.data.bind_type", FT_UINT8, BASE_DEC, VALS(zbncp_bind_type_vals), 0x0, NULL, HFILL}},
5301
5302
14
        {&hf_zbncp_data_mac_int_num,
5303
14
         {"MAC Interface Num", "zbncp.data.mac_int_num", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5304
5305
14
        {&hf_zbncp_data_ext_pan_id,
5306
14
         {"Ext PAN ID", "zbncp.data.ext_pan_id", FT_EUI64, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5307
5308
14
        {&hf_zbncp_data_coordinator_version,
5309
14
         {"Coordinator version", "zbncp.data.coord_version", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5310
5311
14
        {&hf_zbncp_data_trust_center_addres,
5312
14
         {"IEEE trust center address", "zbncp.data.ieee_trust_center_addr", FT_EUI64, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5313
5314
14
        {&hf_zbncp_data_ieee_addr,
5315
14
         {"IEEE address", "zbncp.data.ieee_addr", FT_EUI64, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5316
5317
14
        {&hf_zbncp_data_remote_ieee_addr,
5318
14
         {"Remote IEEE address", "zbncp.data.rmt_ieee_addr", FT_EUI64, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5319
5320
14
        {&hf_zbncp_data_src_ieee_addr,
5321
14
         {"Source IEEE address", "zbncp.data.src_ieee_addr", FT_EUI64, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5322
5323
14
        {&hf_zbncp_data_dst_ieee_addr,
5324
14
         {"Destination IEEE address", "zbncp.data.dst_ieee_addr", FT_EUI64, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5325
5326
14
        {&hf_zbncp_data_target_ieee_addr,
5327
14
         {"Target IEEE address", "zbncp.data.target_ieee_addr", FT_EUI64, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5328
5329
14
        {&hf_zbncp_data_partner_ieee_addr,
5330
14
         {"Partner IEEE address", "zbncp.data.partner_ieee_addr", FT_EUI64, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5331
5332
14
        {&hf_zbncp_data_keepalive,
5333
14
         {"Keepalive Timeout", "zbncp.data.keepalive", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5334
5335
14
        {&hf_zbncp_force_route_record_sending,
5336
14
         {"Force route record sending mode", "zbncp.data.force_route_rec_mode", FT_UINT8, BASE_DEC, VALS(zbncp_force_route_record_sending_modes), 0x0, NULL, HFILL}},
5337
5338
14
        {&hf_zbncp_data_rx_on_idle,
5339
14
         {"Rx On When Idle", "zbncp.data.rx_on_idle", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5340
5341
14
        {&hf_zbncp_data_res_tx_power,
5342
14
         {"Resultant TX power", "zbncp.data.tx_power", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5343
5344
14
        {&hf_zbncp_data_req_tx_power,
5345
14
         {"Required TX power", "zbncp.data.tx_power", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5346
5347
14
        {&hf_zbncp_data_joined,
5348
14
         {"Joined", "zbncp.data.joined", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5349
5350
14
        {&hf_zbncp_data_joined_bit,
5351
14
         {"Device is joined", "zbncp.data.device_is_joined", FT_BOOLEAN, 8, NULL, 0x1, NULL, HFILL}},
5352
5353
14
        {&hf_zbncp_data_parent_bit,
5354
14
         {"Parent is lost", "zbncp.data.parent_is_lost", FT_BOOLEAN, 8, NULL, 0x2, NULL, HFILL}},
5355
5356
14
        {&hf_zbncp_data_authenticated,
5357
14
         {"Authenticated", "zbncp.data.auth", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5358
5359
14
        {&hf_zbncp_data_timeout,
5360
14
         {"Timeout", "zbncp.data.timeout", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5361
5362
14
        {&hf_zbncp_data_nwk_addr,
5363
14
         {"NWK address", "zbncp.data.nwk_addr", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5364
5365
14
        {&hf_zbncp_data_nwk_parent_addr,
5366
14
         {"NWK parent address", "zbncp.data.nwk_addr", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5367
5368
14
        {&hf_zbncp_data_dst_nwk_addr,
5369
14
         {"Destination NWK address", "zbncp.data.dst_nwk_addr", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5370
5371
14
        {&hf_zbncp_data_src_nwk_addr,
5372
14
         {"Source NWK address", "zbncp.data.src_nwk_addr", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5373
5374
14
        {&hf_zbncp_data_remote_nwk_addr,
5375
14
         {"Remote NWK address", "zbncp.data.rmt_nwk_addr", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5376
5377
14
        {&hf_zbncp_data_group_nwk_addr,
5378
14
         {"Group NWK address", "zbncp.data.group_nwk_addr", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5379
5380
14
        {&hf_zbncp_data_src_mac_addr,
5381
14
         {"Source MAC address", "zbncp.data.src_mac_addr", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5382
5383
14
        {&hf_zbncp_data_dst_mac_addr,
5384
14
         {"Destination MAC address", "zbncp.data.dst_mac_addr", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5385
5386
14
        {&hf_zbncp_data_nwk_key,
5387
14
         {"NWK Key", "zbncp.data.nwk_key", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
5388
5389
14
        {&hf_zbncp_data_key_num,
5390
14
         {"Key number", "zbncp.data.key_num", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5391
5392
14
        {&hf_zbncp_data_serial_num,
5393
14
         {"Serial number", "zbncp.data.serial_num", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
5394
5395
14
        {&hf_zbncp_data_size,
5396
14
         {"Size", "zbncp.data.size", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5397
5398
14
        {&hf_zbncp_data_parameter_id,
5399
14
         {"Parameter ID", "zbncp.data.param_id", FT_UINT8, BASE_DEC, VALS(zbncp_parameter_id_list), 0x0, NULL, HFILL}},
5400
5401
14
        {&hf_zbncp_data_value8_dec,
5402
14
         {"Value", "zbncp.data.value", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5403
5404
14
        {&hf_zbncp_data_value16_dec,
5405
14
         {"Value", "zbncp.data.value", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5406
5407
14
        {&hf_zbncp_data_aps_ack_to_non_sleepy,
5408
14
         {"Value (for non-sleepy dev)", "zbncp.data.non_sleepy_value", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5409
5410
14
        {&hf_zbncp_data_aps_ack_to_sleepy,
5411
14
         {"Value (for sleepy dev)", "zbncp.data.sleepy_value", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5412
5413
14
        {&hf_zbncp_data_min16,
5414
14
         {"Min", "zbncp.data.min_value", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5415
5416
14
        {&hf_zbncp_data_max16,
5417
14
         {"Max", "zbncp.data.max_value", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5418
5419
14
        {&hf_zbncp_data_default8_sign,
5420
14
         {"Default", "zbncp.data.default_val", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5421
5422
14
        {&hf_zbncp_data_current8_sign,
5423
14
         {"Current", "zbncp.data.current_val", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5424
5425
14
        {&hf_zbncp_data_is_concentrator,
5426
14
         {"Is concentrator", "zbncp.data.is_conc", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5427
5428
14
        {&hf_zbncp_data_concentrator_radius,
5429
14
         {"Concentrator radius", "zbncp.data.conc_rad", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5430
5431
14
        {&hf_zbncp_data_time16,
5432
14
         {"Time", "zbncp.data.conc_time", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5433
5434
14
        {&hf_zbncp_data_lock_status,
5435
14
         {"Locking status", "zbncp.data.lock_status", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5436
5437
14
        {&hf_zbncp_nwk_leave_allowed,
5438
14
         {"NWK Leave Allowed", "zbncp.data.nwk_leave_allow", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5439
5440
14
        {&hf_zbncp_data_nvram_dataset_quantity,
5441
14
         {"Dataset quantity", "zbncp.data.nvram_dataset_quantity", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5442
5443
14
        {&hf_zbncp_data_nvram_dataset_type,
5444
14
         {"NVRAM Database type", "zbncp.data.nvram_database_type", FT_UINT16, BASE_HEX, VALS(zb_nvram_database_types), 0x0, NULL, HFILL}},
5445
5446
14
        {&hf_zbncp_data_nvram_version,
5447
14
         {"NVRAM Version", "zbncp.data.nvram_version", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5448
5449
14
        {&hf_zbncp_data_dataset_version,
5450
14
         {"NVRAM Dataset Version", "zbncp.data.dataset_version", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5451
5452
14
        {&hf_zbncp_data_dataset_length,
5453
14
         {"NVRAM Dataset size", "zbncp.data.dataset_size", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5454
5455
14
        {&hf_zbncp_data_nvram_dataset_data,
5456
14
         {"NVRAM Dataset data", "zbncp.data.dataset_data", FT_UINT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5457
5458
14
        {&hf_zbncp_data_tc_policy_type,
5459
14
         {"Trust center policy type", "zbncp.data.tc_policy_type", FT_UINT16, BASE_HEX, VALS(zbncp_tc_policy_types), 0x0, NULL, HFILL}},
5460
5461
14
        {&hf_zbncp_data_tc_policy_value,
5462
14
         {"Trust center policy value", "zbncp.data.tc_policy_value", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5463
5464
14
        {&hf_zbncp_ed_capacity,
5465
14
         {"Number of children", "zbncp.data.num_children", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5466
5467
14
        {&hf_zbncp_max_joins,
5468
14
         {"Max successful join attempts", "zbncp.data.max_joins", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5469
5470
14
        {&hf_zbncp_zdo_leave_allowed,
5471
14
         {"ZDO Leave Allowed", "zbncp.data.zdo_leave_allow", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5472
5473
14
        {&hf_zbncp_zdo_leave_wo_rejoin_allowed,
5474
14
         {"ZDO Leave Without Rejoin Allowed", "zbncp.data.zdo_leave_wo_rejoin_allow", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5475
5476
14
        {&hf_zbncp_data_reset_source,
5477
14
         {"Reset source", "zbncp.data.rst_src", FT_UINT8, BASE_DEC, VALS(zbncp_rst_src_list), 0x0, NULL, HFILL}},
5478
5479
14
        {&hf_zbncp_data_vendor_data,
5480
14
         {"Vendor data", "zbncp.data.vendor_data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
5481
5482
14
        {&hf_zbncp_data_aps_key,
5483
14
         {"APS Key", "zbncp.data.aps_key", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
5484
5485
14
        {&hf_zbncp_data_endpoint,
5486
14
         {"Endpoint", "zbncp.data.endpoint", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5487
5488
14
        {&hf_zbncp_data_aps_group_num,
5489
14
         {"APS group number", "zbncp.data.aps_group_num", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5490
5491
14
        {&hf_zbncp_data_aps_group,
5492
14
         {"APS group", "zbncp.data.aps_group", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5493
5494
14
        {&hf_zbncp_data_src_endpoint,
5495
14
         {"Source Endpoint", "zbncp.data.src_endpoint", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5496
5497
14
        {&hf_zbncp_data_dst_endpoint,
5498
14
         {"Destination Endpoint", "zbncp.data.dst_endpoint", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5499
5500
14
        {&hf_zbncp_data_poll_pkt_cnt,
5501
14
         {"Packet count", "zbncp.data.poll_pkt_cnt", FT_UINT8, BASE_DEC, NULL, 0x0, "The number of packets to poll", HFILL}},
5502
5503
14
        {&hf_zbncp_data_poll_timeout,
5504
14
         {"Poll Timeout", "zbncp.data.poll_timeout", FT_UINT32, BASE_DEC, NULL, 0x0, "The duration of poll in ms", HFILL}},
5505
5506
14
        {&hf_zbncp_data_poll_permit_flag,
5507
14
         {"Permit flag", "zbncp.data.poll_permit_flag", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5508
5509
14
        {&hf_zbncp_data_profile_id,
5510
14
         {"Profile ID", "zbncp.data.profile_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5511
5512
14
        {&hf_zbncp_data_device_id,
5513
14
         {"Device ID", "zbncp.data.device_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5514
5515
14
        {&hf_zbncp_data_dev_version,
5516
14
         {"Device Version", "zbncp.data.dev_vers", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5517
5518
14
        {&hf_zbncp_data_in_cl_cnt,
5519
14
         {"Input Cluster Count", "zbncp.data.in_cl_cnt", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5520
5521
14
        {&hf_zbncp_data_out_cl_cnt,
5522
14
         {"Output Cluster Count", "zbncp.data.out_cl_cnt", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5523
5524
14
        {&hf_zbncp_data_cluster_id,
5525
14
         {"Cluster ID", "zbncp.data.cluster_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5526
5527
14
        {&hf_zbncp_data_mac_cap,
5528
14
         {"MAC capability", "zbncp.data.mac_cap", FT_UINT8, BASE_HEX, NULL,
5529
14
          0x0, NULL, HFILL}},
5530
5531
14
        {&hf_zbncp_data_manuf_id,
5532
14
         {"Manufacturer ID", "zbncp.data.manuf_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5533
5534
14
        {&hf_zbncp_data_cur_pwr_mode,
5535
14
         {"Current Power Mode", "zbncp.data.pwr_mode", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5536
5537
14
        {&hf_zbncp_data_cur_pwr_lvl,
5538
14
         {"Current Power Level", "zbncp.data.pwr_lvl", FT_UINT8, BASE_DEC, VALS(zbncp_power_level), 0x0, NULL, HFILL}},
5539
5540
14
        {&hf_zbncp_data_susp_period,
5541
14
         {"Suspension Period", "zbncp.data.susp_period", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5542
5543
14
        {&hf_zbncp_data_av_pwr_src,
5544
14
         {"Available Power Sources", "zbncp.data.av_pwr_src", FT_UINT8, BASE_HEX, NULL,
5545
14
          0x0, NULL, HFILL}},
5546
5547
14
        {&hf_zbncp_data_cur_pwr_src,
5548
14
         {"Current Power Source", "zbncp.data.cur_pwr_src", FT_UINT8, BASE_HEX, NULL,
5549
14
          0x0, NULL, HFILL}},
5550
5551
14
        {&hf_zbncp_data_pwr_src_const,
5552
14
         {"Constant (mains) power", "zbncp.data.pwr_src_const", FT_BOOLEAN, 8, NULL,
5553
14
          0x01, NULL, HFILL}},
5554
5555
14
        {&hf_zbncp_data_pwr_src_recharge,
5556
14
         {"Rechargeable battery", "zbncp.data.pwr_src_recharge", FT_BOOLEAN, 8, NULL,
5557
14
          0x02, NULL, HFILL}},
5558
5559
14
        {&hf_zbncp_data_pwr_src_disposable,
5560
14
         {"Disposable battery", "zbncp.data.pwr_src_disp", FT_BOOLEAN, 8, NULL,
5561
14
          0x04, NULL, HFILL}},
5562
5563
14
        {&hf_zbncp_data_req_type,
5564
14
         {"Request Type", "zbncp.data.nwk_req_type", FT_UINT8, BASE_DEC, VALS(zbncp_nwk_req_type), 0x0, NULL, HFILL}},
5565
5566
14
        {&hf_zbncp_data_start_idx,
5567
14
         {"Start Index", "zbncp.data.start_idx", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5568
5569
14
        {&hf_zbncp_data_start_idx_16b,
5570
14
         {"Start Index", "zbncp.data.start_idx", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5571
5572
14
        {&hf_zbncp_data_upd_idx,
5573
14
         {"Update Index", "zbncp.data.update_idx", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5574
5575
14
        {&hf_zbncp_data_entry_idx,
5576
14
         {"Entry Index", "zbncp.data.entry_idx", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5577
5578
14
        {&hf_zbncp_data_num_asoc_dec,
5579
14
         {"Num Assoc Dev", "zbncp.data.num_asoc_dev", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5580
5581
14
        {&hf_zbncp_data_pwr_desc,
5582
14
         {"Power Descriptor", "zbncp.data.pwr_desc", FT_UINT16, BASE_HEX, NULL,
5583
14
          0x0, NULL, HFILL}},
5584
5585
14
        {&hf_zbncp_data_pwr_desc_cur_power_mode,
5586
14
         {"Current Power Mode", "zbncp.data.pwr_desc.pwr_mode", FT_UINT16, BASE_DEC, NULL,
5587
14
          0x000F, NULL, HFILL}},
5588
5589
14
        {&hf_zbncp_data_pwr_desc_av_pwr_src,
5590
14
         {"Available Power Sources", "zbncp.data.pwr_desc.av_pwr_src", FT_UINT16, BASE_DEC, NULL,
5591
14
          0x00F0, NULL, HFILL}}, /* todo */
5592
5593
14
        {&hf_zbncp_data_pwr_desc_cur_pwr_src,
5594
14
         {"Current Power Sources", "zbncp.data.pwr_desc.cur_pwr_src", FT_UINT16, BASE_DEC, NULL,
5595
14
          0x0F00, NULL, HFILL}}, /* todo */
5596
5597
14
        {&hf_zbncp_data_pwr_desc_cur_pwr_lvl,
5598
14
         {"Current Power Level", "zbncp.data.cur_pwr_lvl", FT_UINT16, BASE_DEC, VALS(zbncp_power_level),
5599
14
          0xF000, NULL, HFILL}},
5600
5601
14
        {&hf_zbncp_data_max_buf_size,
5602
14
         {"Max buffer size", "zbncp.data.max_buf_size", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5603
5604
14
        {&hf_zbncp_data_max_inc_trans_size,
5605
14
         {"Max Incoming transfer size", "zbncp.data.max_inc_size", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5606
5607
14
        {&hf_zbncp_data_max_out_trans_size,
5608
14
         {"Max Outgoing transfer size", "zbncp.data.max_out_size", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5609
5610
14
        {&hf_zbncp_data_desc_cap,
5611
14
         {"Descriptor Capabilities", "zbncp.data.desc_cap", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5612
5613
14
        {&hf_zbncp_data_desc_cap_ext_act_ep_list_av,
5614
14
         {"Extended Active Endpoint List Available", "zbncp.data.desc_cap.active_ep_list", FT_BOOLEAN, 8, NULL,
5615
14
          0x1, NULL, HFILL}},
5616
5617
14
        {&hf_zbncp_data_desc_cap_ext_simple_desc_list_av,
5618
14
         {"Extended Simple Descriptor List Available", "zbncp.data.desc_cap.simple_desc_list", FT_BOOLEAN, 8, NULL,
5619
14
          0x2, NULL, HFILL}},
5620
5621
14
        {&hf_zbncp_data_flags8,
5622
14
         {"Flags", "zbncp.data.flags8", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5623
5624
14
        {&hf_zbncp_data_flags_permit_join,
5625
14
         {"Permit Joining", "zbncp.data.flags.perm_join", FT_BOOLEAN, 8, NULL,
5626
14
          0x1, NULL, HFILL}},
5627
5628
14
        {&hf_zbncp_data_flags_router_cap,
5629
14
         {"Router capacity", "zbncp.data.flags.router_cap", FT_BOOLEAN, 8, NULL,
5630
14
          0x2, NULL, HFILL}},
5631
5632
14
        {&hf_zbncp_data_flags_ed_cap,
5633
14
         {"ED capacity", "zbncp.data.flags.ed_cap", FT_BOOLEAN, 8, NULL,
5634
14
          0x4, NULL, HFILL}},
5635
5636
14
        {&hf_zbncp_data_flags_stack_profile,
5637
14
         {"Stack profile", "zbncp.data.flags.stack_profile", FT_UINT8, BASE_DEC, NULL,
5638
14
          0xF0, NULL, HFILL}},
5639
5640
14
        {&hf_zbncp_data_flags16,
5641
14
         {"Flags", "zbncp.data.flags16", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5642
5643
14
        {&hf_zbncp_data_flags_zb_role,
5644
14
         {"Zigbee role", "zbncp.data.flags.zb_role", FT_UINT16, BASE_HEX, VALS(zbncp_zb_role),
5645
14
          0x7, NULL, HFILL}},
5646
5647
14
        {&hf_zbncp_data_flags_comp_desc_av,
5648
14
         {"Complex desc available", "zbncp.data.flags.comp_desc_av", FT_BOOLEAN, 16, NULL,
5649
14
          0x8, NULL, HFILL}},
5650
5651
14
        {&hf_zbncp_data_flags_user_desc_av,
5652
14
         {"User desc available", "zbncp.data.flags.user_desc_av", FT_BOOLEAN, 16, NULL,
5653
14
          0x0010, NULL, HFILL}},
5654
5655
14
        {&hf_zbncp_data_flags_freq_868,
5656
14
         {"868MHz BPSK Band", "zbncp.data.flags.freq.868mhz", FT_BOOLEAN, 16, NULL,
5657
14
          0x0800, NULL, HFILL}},
5658
5659
14
        {&hf_zbncp_data_flags_freq_902,
5660
14
         {"902MHz BPSK Band", "zbncp.data.flags.freq.902mhz", FT_BOOLEAN, 16, NULL,
5661
14
          0x2000, NULL, HFILL}},
5662
5663
14
        {&hf_zbncp_data_flags_freq_2400,
5664
14
         {"2.4GHz OQPSK Band", "zbncp.data.flags.freq.2400mhz", FT_BOOLEAN, 16, NULL,
5665
14
          0x4000, NULL, HFILL}},
5666
5667
14
        {&hf_zbncp_data_flags_freq_eu_sub_ghz,
5668
14
         {"EU Sub-GHz FSK Band", "zbncp.data.flags.freq.eu_sub_ghz", FT_BOOLEAN, 16, NULL,
5669
14
          0x8000, NULL, HFILL}},
5670
5671
14
        {&hf_zbncp_data_srv_msk,
5672
14
         {"Server mask", "zbncp.data.srv_msk", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5673
5674
14
        {&hf_zbncp_data_srv_msk_prim_tc,
5675
14
         {"Primary Trust Center", "zbncp.data.srv_msk.prim_tc", FT_BOOLEAN, 16, NULL,
5676
14
          0x0001, NULL, HFILL}},
5677
5678
14
        {&hf_zbncp_data_srv_msk_backup_tc,
5679
14
         {"Backup Trust Center", "zbncp.data.srv_msk.backup_tc", FT_BOOLEAN, 16, NULL,
5680
14
          0x0002, NULL, HFILL}},
5681
5682
14
        {&hf_zbncp_data_srv_msk_prim_bind_tbl_cache,
5683
14
         {"Primary Binding Table Cache", "zbncp.data.srv_msk.prim_bind_tbl_cache", FT_BOOLEAN, 16, NULL,
5684
14
          0x0004, NULL, HFILL}},
5685
5686
14
        {&hf_zbncp_data_srv_msk_backup_bind_tbl_cache,
5687
14
         {"Backup Binding Table Cache", "zbncp.data.srv_msk.backup_bind_tbl_cache", FT_BOOLEAN, 16, NULL,
5688
14
          0x0008, NULL, HFILL}},
5689
5690
14
        {&hf_zbncp_data_remote_bind_offset,
5691
14
         {"Remote Bind Offset", "zbncp.data.remote_bind_access", FT_UINT8, BASE_HEX, NULL,
5692
14
          0x0,
5693
14
          "Remote bind offset, divides the bind table in two parts [0:remote_bind_offset) are for localbindings and "
5694
14
          "[remote_bind_offset:tbl_size) to remote bindings",
5695
14
          HFILL}},
5696
5697
14
        {&hf_zbncp_data_srv_msk_prim_disc_cache,
5698
14
         {"Primary Discovery Cache", "zbncp.data.srv_msk.prim_disc_cache", FT_BOOLEAN, 16, NULL,
5699
14
          0x0010, NULL, HFILL}},
5700
5701
14
        {&hf_zbncp_data_srv_msk_backup_disc_cache,
5702
14
         {"Backup Discovery Cache", "zbncp.data.srv_msk.backup_disc_cache", FT_BOOLEAN, 16, NULL,
5703
14
          0x0020, NULL, HFILL}},
5704
5705
14
        {&hf_zbncp_data_srv_msk_nwk_manager,
5706
14
         {"Network Manager", "zbncp.data.srv_msk.nwk_manager", FT_BOOLEAN, 16, NULL,
5707
14
          0x0040, NULL, HFILL}},
5708
5709
14
        {&hf_zbncp_data_srv_msk_stack_compl_rev,
5710
14
         {"Stack Compliance Revision", "zbncp.data.srv_msk.stack_compl_rev", FT_UINT16, BASE_DEC, NULL,
5711
14
          0xFE00, NULL, HFILL}},
5712
5713
14
        {&hf_zbncp_data_ep_cnt,
5714
14
         {"Endpoint Count", "zbncp.data.endpoint_cnt", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5715
5716
14
        {&hf_zbncp_data_dst_addr_mode,
5717
14
         {"Dst Address Mode", "zbncp.data.dst_addr_mode", FT_UINT8, BASE_HEX, VALS(zbncp_aps_addr_modes), 0x0, NULL, HFILL}},
5718
5719
14
        {&hf_zbncp_data_leave_flags,
5720
14
         {"Leave flags", "zbncp.data.leave_flags", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5721
5722
14
        {&hf_zbncp_data_leave_flags_remove_chil,
5723
14
         {"Remove children", "zbncp.data.leave_flags.remove_chil", FT_BOOLEAN, 8, NULL,
5724
14
          0x40, NULL, HFILL}},
5725
5726
14
        {&hf_zbncp_data_leave_flags_rejoin,
5727
14
         {"Rejoin", "zbncp.data.leave_flags.rejoin", FT_BOOLEAN, 8, NULL,
5728
14
          0x80, NULL, HFILL}},
5729
5730
14
        {&hf_zbncp_data_permit_dur,
5731
14
         {"Permit Duration", "zbncp.data.permit_dur", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5732
5733
14
        {&hf_zbncp_data_tc_sign,
5734
14
         {"TC Significance", "zbncp.data.tc_sign", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5735
5736
14
        {&hf_zbncp_data_secur_rejoin,
5737
14
         {"Secure Rejoin", "zbncp.data.secure_rejoin", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5738
5739
14
        {&hf_zbncp_data_zdo_rejoin_flags,
5740
14
         {"Flags", "zbncp.data.zdo_rejoin.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5741
5742
14
        {&hf_zbncp_data_zdo_rejoin_flags_tcsw_happened,
5743
14
         {"Trust Center Swap-out happened", "zbncp.data.zdo_rejoin.flags.tcsw_happened", FT_BOOLEAN, 8, NULL,
5744
14
          0x01, NULL, HFILL}},
5745
5746
14
        {&hf_zbncp_data_dlen8,
5747
14
         {"Data Length", "zbncp.data.dlen8", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5748
5749
14
        {&hf_zbncp_data_dlen16,
5750
14
         {"Data Length", "zbncp.data.dlen16", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5751
5752
14
        {&hf_zbncp_data_param_len,
5753
14
         {"Param Length", "zbncp.data.param_len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5754
5755
14
        {&hf_zbncp_data_radius,
5756
14
         {"Radius", "zbncp.data.radius", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5757
5758
14
        {&hf_zbncp_data_time_between_disc,
5759
14
         {"Time between discoveries", "zbncp.data.time_between_disc", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5760
5761
14
        {&hf_zbncp_data_enable_flag,
5762
14
         {"Enable flag", "zbncp.data.enable_flag", FT_BOOLEAN, BASE_NONE, NULL, 0x0, "0 - to disable, 1 - to enable", HFILL}},
5763
5764
14
        {&hf_zbncp_data_array,
5765
14
         {"Data", "zbncp.data.data_arr", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
5766
5767
14
        {&hf_zbncp_data_use_alias,
5768
14
         {"Use alias", "zbncp.data.use_alias", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5769
5770
14
        {&hf_zbncp_data_alias_src,
5771
14
         {"Alias source address", "zbncp.data.alias_src", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5772
5773
14
        {&hf_zbncp_data_alias_seq,
5774
14
         {"Alias sequence number", "zbncp.data.alias_seq", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5775
5776
14
        {&hf_zbncp_data_tx_opt,
5777
14
         {"TX Options", "zbncp.data.tx_opt", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5778
5779
14
        {&hf_zbncp_data_tx_opt_secur,
5780
14
         {"Security enabled transmission", "zbncp.data.secur", FT_BOOLEAN, 8, NULL,
5781
14
          0x01, NULL, HFILL}},
5782
5783
14
        {&hf_zbncp_data_tx_opt_obsolete,
5784
14
         {"Obsolete", "zbncp.data.obsolete", FT_BOOLEAN, 8, NULL,
5785
14
          0x02, NULL, HFILL}},
5786
5787
14
        {&hf_zbncp_data_tx_opt_ack,
5788
14
         {"ACK", "zbncp.data.ack", FT_BOOLEAN, 8, NULL,
5789
14
          0x04, NULL, HFILL}},
5790
5791
14
        {&hf_zbncp_data_tx_opt_frag,
5792
14
         {"Fragmentation permitted", "zbncp.data.frag", FT_BOOLEAN, 8, NULL,
5793
14
          0x08, NULL, HFILL}},
5794
5795
14
        {&hf_zbncp_data_tx_opt_inc_ext_nonce,
5796
14
         {"Include extended nonce", "zbncp.data.ext_nonce", FT_BOOLEAN, 8, NULL,
5797
14
          0x10, NULL, HFILL}},
5798
5799
14
        {&hf_zbncp_data_tx_opt_force_mesh_route,
5800
14
         {"Force mesh route discovery for this request", "zbncp.data.force_mesh_route", FT_BOOLEAN, 8, NULL,
5801
14
          0x20, NULL, HFILL}},
5802
5803
14
        {&hf_zbncp_data_tx_opt_send_route_record,
5804
14
         {"Send route record for this request", "zbncp.data.send_route_record", FT_BOOLEAN, 8, NULL,
5805
14
          0x40, NULL, HFILL}},
5806
5807
14
        {&hf_zbncp_data_lqi,
5808
14
         {"LQI", "zbncp.data.lqi", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5809
5810
14
        {&hf_zbncp_data_rssi,
5811
14
         {"RSSI", "zbncp.data.rssi", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5812
5813
14
        {&hf_zbncp_data_do_cleanup,
5814
14
         {"Do cleanup", "zbncp.data.do_clean", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5815
5816
14
        {&hf_zbncp_data_max_rx_bcast,
5817
14
         {"max_rx_bcast", "zbncp.data.max_rx_bcast", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5818
5819
14
        {&hf_zbncp_data_mac_tx_bcast,
5820
14
         {"max_tx_bcast", "zbncp.data.max_tx_bcast", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5821
5822
14
        {&hf_zbncp_data_mac_rx_ucast,
5823
14
         {"mac_rx_ucast", "zbncp.data.mac_rx_ucast", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5824
5825
14
        {&hf_zbncp_data_mac_tx_ucast_total_zcl,
5826
14
         {"mac_tx_ucast_total_zcl", "zbncp.data.mac_tx_ucast_total_zcl", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5827
5828
14
        {&hf_zbncp_data_mac_tx_ucast_failures_zcl,
5829
14
         {"mac_tx_ucast_failures_zcl", "zbncp.data.mac_tx_ucast_failures_zcl", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5830
5831
14
        {&hf_zbncp_data_mac_tx_ucast_retries_zcl,
5832
14
         {"mac_tx_ucast_retries_zcl", "zbncp.data.mac_tx_ucast_retries_zcl", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5833
5834
14
        {&hf_zbncp_data_mac_tx_ucast_total,
5835
14
         {"mac_tx_ucast_total", "zbncp.data.mac_tx_ucast_total", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5836
5837
14
        {&hf_zbncp_data_mac_tx_ucast_failures,
5838
14
         {"mac_tx_ucast_failures", "zbncp.data.mac_tx_ucast_failures", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5839
5840
14
        {&hf_zbncp_data_mac_tx_ucast_retries,
5841
14
         {"mac_tx_ucast_retries", "zbncp.data.mac_tx_ucast_retries", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5842
5843
14
        {&hf_zbncp_data_mac_validate_drop_cnt,
5844
14
         {"mac_validate_drop_cnt", "zbncp.data.mac_validate_drop_cnt", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5845
5846
14
        {&hf_zbncp_data_mac_phy_cca_fail_count,
5847
14
         {"phy_cca_fail_count", "zbncp.data.phy_cca_fail_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5848
5849
14
        {&hf_zbncp_data_phy_to_mac_que_lim_reached,
5850
14
         {"phy_to_mac_que_lim_reached", "zbncp.data.phy_to_mac_que_lim_reached", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5851
5852
14
        {&hf_zbncp_data_period_of_time,
5853
14
         {"period_of_time", "zbncp.data.period_of_time", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5854
5855
14
        {&hf_zbncp_data_last_msg_lqi,
5856
14
         {"last_msg_lqi", "zbncp.data.last_msg_lqi", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5857
5858
14
        {&hf_zbncp_data_last_msg_rssi,
5859
14
         {"last_msg_rssi", "zbncp.data.last_msg_rssi", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5860
5861
14
        {&hf_zbncp_data_number_of_resets,
5862
14
         {"number_of_resets", "zbncp.data.number_of_resets", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5863
5864
14
        {&hf_zbncp_data_aps_tx_bcast,
5865
14
         {"aps_tx_bcast", "zbncp.data.aps_tx_bcast", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5866
5867
14
        {&hf_zbncp_data_aps_tx_ucast_success,
5868
14
         {"aps_tx_ucast_success", "zbncp.data.aps_tx_ucast_success", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5869
5870
14
        {&hf_zbncp_data_aps_tx_ucast_retry,
5871
14
         {"aps_tx_ucast_retry", "zbncp.data.aps_tx_ucast_retry", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5872
5873
14
        {&hf_zbncp_data_aps_tx_ucast_fail,
5874
14
         {"aps_tx_ucast_fail", "zbncp.data.aps_tx_ucast_fail", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5875
5876
14
        {&hf_zbncp_data_route_disc_initiated,
5877
14
         {"route_disc_initiated", "zbncp.data.route_disc_initiated", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5878
5879
14
        {&hf_zbncp_data_nwk_neighbor_added,
5880
14
         {"nwk_neighbor_added", "zbncp.data.nwk_neighbor_added", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5881
5882
14
        {&hf_zbncp_data_nwk_neighbor_removed,
5883
14
         {"nwk_neighbor_removed", "zbncp.data.nwk_neighbor_removed", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5884
5885
14
        {&hf_zbncp_data_nwk_neighbor_stale,
5886
14
         {"nwk_neighbor_stale", "zbncp.data.nwk_neighbor_stale", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5887
5888
14
        {&hf_zbncp_upd_status_code,
5889
14
         {"Device update status code", "zbncp.data.dev_upd_status_code", FT_UINT8, BASE_DEC, VALS(zbncp_dev_update_status_code), 0x0, NULL, HFILL}},
5890
5891
14
        {&hf_zbncp_data_join_indication,
5892
14
         {"join_indication", "zbncp.data.join_indication", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5893
5894
14
        {&hf_zbncp_data_childs_removed,
5895
14
         {"childs_removed", "zbncp.data.childs_removed", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5896
5897
14
        {&hf_zbncp_data_nwk_fc_failure,
5898
14
         {"nwk_fc_failure", "zbncp.data.nwk_fc_failure", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5899
5900
14
        {&hf_zbncp_data_aps_unauthorized_key,
5901
14
         {"aps_unauthorized_key", "zbncp.data.aps_unauthorized_key", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5902
5903
14
        {&hf_zbncp_data_nwk_decrypt_failure,
5904
14
         {"nwk_decrypt_failure", "zbncp.data.nwk_decrypt_failure", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5905
5906
14
        {&hf_zbncp_data_aps_decrypt_failure,
5907
14
         {"aps_decrypt_failure", "zbncp.data.aps_decrypt_failure", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5908
5909
14
        {&hf_zbncp_data_packet_buffer_allocate_failures,
5910
14
         {"packet_buffer_allocate_failures", "zbncp.data.packet_buffer_allocate_failures", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5911
5912
14
        {&hf_zbncp_data_average_mac_retry_per_aps_message_sent,
5913
14
         {"average_mac_retry_per_aps_message_sent", "zbncp.data.avg_mac_retry", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5914
5915
14
        {&hf_zbncp_data_aps_fc_failure,
5916
14
         {"aps_fc_failure", "zbncp.data.aps_fc_failure", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5917
5918
14
        {&hf_zbncp_data_nwk_retry_overflow,
5919
14
         {"nwk_retry_overflow", "zbncp.data.nwk_retry_overflow", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5920
5921
14
        {&hf_zbncp_data_nwk_bcast_table_full,
5922
14
         {"nwk_bcast_table_full", "zbncp.data.nwk_bcast_table_full", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5923
5924
14
        {&hf_zbncp_data_status,
5925
14
         {"status", "zbncp.data.status", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5926
5927
14
        {&hf_zbncp_zdo_auth_type,
5928
14
         {"Authorization type", "zbncp.data.zdo_auth_type", FT_UINT8, BASE_DEC, VALS(zbncp_zdo_auth_types), 0x0, NULL, HFILL}},
5929
5930
14
        {&hf_zbncp_zdo_leg_auth_status_code,
5931
14
         {"Status code", "zbncp.data.zdo_status_code", FT_UINT8, BASE_DEC, VALS(zbncp_zdo_leg_auth_status_codes), 0x0, NULL, HFILL}},
5932
5933
14
        {&hf_zbncp_zdo_tclk_auth_status_code,
5934
14
         {"Status code", "zbncp.data.zdo_status_code", FT_UINT8, BASE_DEC, VALS(zbncp_zdo_tclk_auth_status_codes), 0x0, NULL, HFILL}},
5935
5936
14
        {&hf_zbncp_zdo_server_mask,
5937
14
         {"Server mask", "zbncp.data.zdo_serv_mask", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5938
5939
14
        {&hf_zbncp_zdo_start_entry_idx,
5940
14
         {"Start entry index", "zbncp.data.zdo_start_idx", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5941
5942
14
        {&hf_zbncp_zdo_scan_duration,
5943
14
         {"Scan duration", "zbncp.data.zdo_scan_duration", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5944
5945
14
        {&hf_zbncp_zdo_scan_cnt,
5946
14
         {"Scan count", "zbncp.data.zdo_scan_cnt", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5947
5948
14
        {&hf_zbncp_zdo_scan_mgr_addr,
5949
14
         {"Manager NWK address", "zbncp.data.zdo_mgr_addr", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5950
5951
14
        {&hf_zbncp_data_aps_cnt,
5952
14
         {"APS counter", "zbncp.data.aps_cnt", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5953
5954
14
        {&hf_zbncp_data_aps_fc,
5955
14
         {"APS FC", "zbncp.data.aps_fc", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5956
5957
14
        {&hf_zbncp_data_aps_fc_deliv_mode,
5958
14
         {"Delivery mode", "zbncp.data.aps_fc.deliv_mode", FT_UINT8, BASE_DEC, VALS(zbncp_deliv_mode),
5959
14
          0x0C, NULL, HFILL}},
5960
5961
14
        {&hf_zbncp_data_aps_fc_secur,
5962
14
         {"Security", "zbncp.data.aps_fc.secur", FT_BOOLEAN, 8, NULL,
5963
14
          0x20, NULL, HFILL}},
5964
5965
14
        {&hf_zbncp_data_aps_fc_ack_retrans,
5966
14
         {"ACK & retransmit", "zbncp.data.aps_fc.ack_retrans", FT_BOOLEAN, 8, NULL,
5967
14
          0x40, NULL, HFILL}},
5968
5969
14
        {&hf_zbncp_data_aps_key_attr,
5970
14
         {"APS key source & attr", "zbncp.data.aps_key_attr", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
5971
5972
14
        {&hf_zbncp_data_aps_key_attr_key_src,
5973
14
         {"Key source", "zbncp.data.aps_key_attr.key_src", FT_UINT8, BASE_HEX, VALS(zbncp_aps_key_src),
5974
14
          0x1, NULL, HFILL}},
5975
5976
14
        {&hf_zbncp_data_aps_key_attr_key_used,
5977
14
         {"Key used", "zbncp.data.aps_key_attr.key_used", FT_UINT8, BASE_HEX, VALS(zbncp_aps_key_used),
5978
14
          0x6, NULL, HFILL}},
5979
5980
14
        {&hf_zbncp_data_pkt_len,
5981
14
         {"Packet length", "zbncp.data.pkt_len", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5982
5983
14
        {&hf_zbncp_data_pkt,
5984
14
         {"Packet", "zbncp.data.pkt", FT_UINT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5985
5986
14
        {&hf_zbncp_data_scan_dur,
5987
14
         {"Scan Duration", "zbncp.data.scan_dur", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5988
5989
14
        {&hf_zbncp_data_distr_nwk_flag,
5990
14
         {"Distributed Network Flag", "zbncp.data.distr_nwk_flag", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
5991
5992
14
        {&hf_zbncp_data_nwk_count,
5993
14
         {"Network Count", "zbncp.data.nwk_cnt", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5994
5995
14
        {&hf_zbncp_data_nwk_upd_id,
5996
14
         {"NWK Update ID", "zbncp.data.nwk_upd_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
5997
5998
14
        {&hf_zbncp_data_rejoin,
5999
14
         {"Rejoin", "zbncp.data.rejoin", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
6000
6001
14
        {&hf_zbncp_data_rejoin_nwk,
6002
14
         {"Rejoin Network", "zbncp.data.rejoin_nwk", FT_UINT8, BASE_DEC, VALS(zbncp_rejoin_nwk), 0x0, NULL, HFILL}},
6003
6004
14
        {&hf_zbncp_data_secur_en,
6005
14
         {"Security Enable", "zbncp.data.secur_en", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
6006
6007
14
        {&hf_zbncp_data_enh_beacon,
6008
14
         {"Enhanced Beacon", "zbncp.data.enh_beacon", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
6009
6010
14
        {&hf_zbncp_data_beacon_type,
6011
14
         {"Beacon Type", "zbncp.data.beacon_type", FT_UINT8, BASE_DEC, VALS(zbncp_beacon_type), 0x0, NULL, HFILL}},
6012
6013
14
        {&hf_zbncp_data_beacon_order,
6014
14
         {"Beacon Order", "zbncp.data.becon_order", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6015
6016
14
        {&hf_zbncp_data_superframe_order,
6017
14
         {"Superframe Order", "zbncp.data.superframe_order", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6018
6019
14
        {&hf_zbncp_data_battery_life_ext,
6020
14
         {"Battery Life Extension", "zbncp.data.battery_life_ext", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6021
6022
14
        {&hf_zbncp_data_mac_if,
6023
14
         {"MAC interface #", "zbncp.data.mac_if", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6024
6025
14
        {&hf_zbncp_data_ed_config,
6026
14
         {"ED config", "zbncp.data.ed_cfg", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6027
6028
14
        {&hf_zbncp_data_timeout_cnt,
6029
14
         {"Timeout Counter", "zbncp.data.timeout_cnt", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6030
6031
14
        {&hf_zbncp_data_keepalive_mode,
6032
14
         {"Keepalive mode", "zbncp.data.keepalive", FT_UINT8, BASE_DEC, VALS(zbncp_keepalive_mode), 0x0, NULL, HFILL}},
6033
6034
14
        {&hf_zbncp_data_dev_timeout,
6035
14
         {"Device Timeout", "zbncp.data.dev_timeout", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6036
6037
14
        {&hf_zbncp_data_relationship,
6038
14
         {"Relationship", "zbncp.data.relationship", FT_UINT8, BASE_HEX, VALS(zbncp_relationship), 0x0, NULL, HFILL}},
6039
6040
14
        {&hf_zbncp_data_tx_fail_cnt,
6041
14
         {"Transmit Failure Cnt", "zbncp.data.tx_fail_cnt", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6042
6043
14
        {&hf_zbncp_data_out_cost,
6044
14
         {"Outgoing Cost", "zbncp.data.out_cost", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6045
6046
14
        {&hf_zbncp_data_age,
6047
14
         {"Age", "zbncp.data.age", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6048
6049
14
        {&hf_zbncp_data_trace_mask,
6050
14
         {"Trace mask", "zbncp.data.trace_mask", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6051
6052
14
        {&hf_zbncp_data_trace_wireless_traf,
6053
14
         {"Wireless traffic", "zbncp.data.trace_wireless_traf", FT_UINT32, BASE_DEC, NULL, 0x1, NULL, HFILL}},
6054
6055
14
        {&hf_zbncp_data_trace_reserved,
6056
14
         {"Reserved", "zbncp.data.trace_reserved", FT_UINT32, BASE_DEC, NULL, 0x2, NULL, HFILL}},
6057
6058
14
        {&hf_zbncp_data_trace_ncp_ll_proto,
6059
14
         {"NCP LL protocol", "zbncp.data.trace_ncp_ll_proto", FT_UINT32, BASE_DEC, NULL, 0x4, NULL, HFILL}},
6060
6061
14
        {&hf_zbncp_data_trace_host_int_line,
6062
14
         {"HOST INT line", "zbncp.data.trace_host_int_line", FT_UINT32, BASE_DEC, NULL, 0x8, NULL, HFILL}},
6063
6064
14
        {&hf_zbncp_data_trace_sleep_awake,
6065
14
         {"Sleep/awake", "zbncp.data.trace_sleep_awake", FT_UINT32, BASE_DEC, NULL, 0x10, NULL, HFILL}},
6066
6067
14
        {&hf_zbncp_data_trace_input_output,
6068
14
         {"Input/Output trace", "zbncp.data.trace_input_output", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6069
6070
14
        {&hf_zbncp_data_trace_timestamp,
6071
14
         {"Trace timestamp in beacon intervals", "zbncp.data.trace_timestamp", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6072
6073
14
        {&hf_zbncp_data_trace,
6074
14
         {"Raw trace data", "zbncp.data.trace", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}},
6075
6076
14
        {&hf_zbncp_data_key_neg_method,
6077
14
         {"Key Negotiation Methods Mask", "zbncp.data.key_neg_method", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6078
6079
14
        {&hf_zbncp_data_psk_secrets,
6080
14
         {"PSK Secrets Mask", "zbncp.data.psk_secrets", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6081
6082
14
        {&hf_zbncp_data_r22_join_usage,
6083
14
         {"Use r22 join procedure", "zbncp.data.r22_join_usage", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6084
6085
14
        {&hf_zbncp_data_nwk_conf_preset,
6086
14
         {"Network preset configuration", "zbncp.data.nwk_conf_preset", FT_UINT8, BASE_HEX, VALS(zbncp_nwk_conf_behavior), 0x0, NULL, HFILL}},
6087
6088
14
        {&hf_zbncp_data_short_address,
6089
14
         {"Short Network address", "zbncp.data.short_address", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6090
6091
14
        {&hf_zbncp_data_raw_data,
6092
14
         {"Raw data", "zbncp.data.raw_data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}},
6093
6094
14
        {&hf_zbncp_data_conf_params,
6095
14
         {"Configuration parameters", "zbncp.data.conf_params", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6096
6097
        /*  Configuration Parameter Fields */
6098
14
        {&hf_zbncp_data_conf_params_reserved,
6099
14
         {"Reserved", "zbncp.data.reserved", FT_BOOLEAN, 8, NULL, CONF_PARAMS_RESERVED,
6100
14
          "Whether this device can act as a PAN coordinator or not.", HFILL}},
6101
6102
14
        {&hf_zbncp_data_conf_params_disable_pan_id_change,
6103
14
         {"Disable PAN ID Change", "zbncp.data.conf_params.disable_pan_id_change", FT_BOOLEAN, 8, NULL, CONF_PARAMS_DIS_PANID_CHANGE, "", HFILL}},
6104
6105
14
        {&hf_zbncp_data_conf_params_disable_channel_change,
6106
14
         {"Disable Channel Change", "zbncp.data.conf_params.disable_channel_change", FT_BOOLEAN, 8, NULL, CONF_PARAMS_DIS_CHAN_CHANGE, "", HFILL}},
6107
6108
14
        {&hf_zbncp_data_conf_params_leave_request_allowed,
6109
14
         {"Leave Requests Allowed", "zbncp.data.conf_params.leave_request_allowed", FT_BOOLEAN, 8, NULL, CONF_PARAMS_LEAVE_REQ_ALLOW, "", HFILL}},
6110
6111
14
        {&hf_zbncp_data_conf_params_require_tclk,
6112
14
         {"Require Link Key for Transport Key transmission", "zbncp.data.conf_params.require_tclk", FT_BOOLEAN, 8, NULL, CONF_PARAMS_REQ_TCLK, "", HFILL}},
6113
6114
14
        {&hf_zbncp_data_conf_params_restricted_enabled,
6115
14
         {"Restricted Mode Enabled", "zbncp.data.conf_params.restricted_enabled", FT_BOOLEAN, 8, NULL, CONF_PARAMS_RESTRICT_MODE_EN, "", HFILL}},
6116
6117
14
        {&hf_zbncp_data_channel_page_count,
6118
14
         {"Channel Page Count", "zbncp.data.channel_page_count", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6119
6120
14
        {&hf_zbncp_data_config_mask,
6121
14
         {"Configuration mask", "zbncp.data.config_mask", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6122
6123
14
        {&hf_zbncp_data_dest_short_address,
6124
14
         {"Destination Short Network address", "zbncp.data.short_address", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6125
6126
14
        {&hf_zbncp_data_current_parents_short_address,
6127
14
         {"Current Parents Short Address", "zbncp.data.current_parents_short_address", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6128
6129
14
        {&hf_zbncp_data_current_parents_lqi,
6130
14
         {"Current Parents' LQI", "zbncp.data.current_parents_lqi", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6131
6132
14
        {&hf_zbncp_data_potential_parent_count,
6133
14
         {"Potential Parent Count", "zbncp.data.potential_parent_count", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6134
6135
14
        {&hf_zbncp_data_classification_mask,
6136
14
         {"Classification Mask", "zbncp.data.classification_mask", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6137
6138
14
        {&hf_zbncp_data_total_beacons_surveyed,
6139
14
         {"Total Beacons Surveyed", "zbncp.data.total_beacons_surveyed", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6140
6141
14
        {&hf_zbncp_data_current_pan_id_beacons,
6142
14
         {"Number of Beacons with Current PAN ID", "zbncp.data.current_pan_id_beacons", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6143
6144
14
        {&hf_zbncp_data_current_nwk_potential_parents,
6145
14
         {"Number of potential parents from current Zigbee Network", "zbncp.data.current_nwk_potential_parents", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6146
6147
14
        {&hf_zbncp_data_other_zigbee_beacons,
6148
14
         {"Number of Other Zigbee Beacons", "zbncp.data.other_zigbee_beacons", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6149
6150
14
        {&hf_zbncp_data_pan_id_conflict_tlv,
6151
14
         {"PAN ID Conflict TLV", "zbncp.data.pan_id_conflict_tlv", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6152
6153
14
        {&hf_zbncp_data_eui64_count,
6154
14
         {"Amount of EUI64s'", "zbncp.data.eui64_count", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6155
6156
14
        {&hf_zbncp_data_eui64,
6157
14
         {"EUI64", "zbncp.data.eui64", FT_EUI64, BASE_NONE, NULL, 0x0, NULL, HFILL}},
6158
6159
14
        {&hf_zbncp_data_initial_join_auth,
6160
14
         {"Initial Join Auth", "zbncp.data.initial_join_auth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6161
6162
14
        {&hf_zbncp_data_key_update_method,
6163
14
         {"Key Update Method", "zbncp.data.key_update_method", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6164
6165
14
        {&hf_zbncp_data_next_pan_id_change,
6166
14
         {"Next PAN Id Change", "zbncp.data.next_pan_id_change", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6167
6168
14
        {&hf_zbncp_data_next_channel_change,
6169
14
         {"Next Channel Change", "zbncp.data.next_channel_change", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6170
6171
14
        {&hf_zbncp_data_error_count,
6172
14
         {"Error Count", "zbncp.data.error_count", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6173
6174
14
        {&hf_zbncp_data_keepalive_rec,
6175
14
         {"Keepalive Received", "zbncp.data.keepalive_rec", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
6176
6177
14
        {&hf_zbncp_data_mac_if_idx,
6178
14
         {"MAC Interface Index", "zbncp.data.mac_if_idx", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6179
6180
14
        {&hf_zbncp_data_fast_poll_int,
6181
14
         {"Fast Poll Interval", "zbncp.data.fast_poll", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6182
6183
14
        {&hf_zbncp_data_long_poll_int,
6184
14
         {"Long Poll Interval", "zbncp.data.long_poll", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6185
6186
14
        {&hf_zbncp_data_fast_poll_flag,
6187
14
         {"Fast Poll Flag", "zbncp.data.fast_poll_flag", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL}},
6188
6189
14
        {&hf_zbncp_data_stop_fast_poll_result,
6190
14
         {"Stop Fast Poll Result", "zbncp.data.stop_fast_poll_result", FT_UINT8, BASE_HEX, VALS(zbncp_stop_fast_poll_result), 0x0, NULL, HFILL}},
6191
6192
14
        {&hf_zbncp_data_time,
6193
14
         {"Time", "zbncp.data.time", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6194
6195
14
        {&hf_zbncp_data_pan_id_cnt,
6196
14
         {"Pan ID count", "zbncp.data.pan_id_cnt", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6197
6198
14
        {&hf_zbncp_data_ic,
6199
14
         {"Install Code", "zbncp.data.ic", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}},
6200
6201
14
        {&hf_zbncp_data_ic_table_size,
6202
14
         {"IC Table Size", "zbncp.data.table_size", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6203
6204
14
        {&hf_zbncp_data_ic_ent_cnt,
6205
14
         {"Entry Count", "zbncp.data.entry_count", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6206
6207
14
        {&hf_zbncp_data_cs,
6208
14
         {"Suite", "zbncp.data.cs", FT_UINT8, BASE_DEC, VALS(zbncp_cs), 0, NULL, HFILL}},
6209
6210
14
        {&hf_zbncp_data_ca_pub_key,
6211
14
         {"CA Public Key", "zbncp.data.ca_pub_key", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
6212
6213
14
        {&hf_zbncp_data_ca_priv_key,
6214
14
         {"Device Private Key", "zbncp.data.ca_priv_key", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
6215
6216
14
        {&hf_zbncp_data_cert,
6217
14
         {"Certificate", "zbncp.data.cert", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
6218
6219
14
        {&hf_zbncp_data_issuer,
6220
14
         {"Issuer", "zbncp.data.issuer", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
6221
6222
14
        {&hf_zbncp_data_ic_en,
6223
14
         {"Enable IC", "zbncp.data.ic_en", FT_BOOLEAN, BASE_NONE, NULL, 0, NULL, HFILL}},
6224
6225
14
        {&hf_zbncp_data_key_type,
6226
14
         {"Key type", "zbncp.data.key_type", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}},
6227
6228
14
        {&hf_zbncp_data_tx_power,
6229
14
         {"TX Power", "zbncp.data.tx_power", FT_INT8, BASE_DEC, NULL, 0, NULL, HFILL}},
6230
6231
14
        {&hf_zbncp_data_tx_time,
6232
14
         {"TX Time", "zbncp.data.tx_time", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL}},
6233
6234
14
        {&hf_zbncp_data_seed,
6235
14
         {"Seed", "zbncp.data.seed", FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL}},
6236
6237
14
        {&hf_zbncp_data_link_key,
6238
14
         {"Link Key", "zbncp.data.link_key", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
6239
6240
14
        {&hf_zbncp_data_aps_link_key_type,
6241
14
         {"APS Link Key Type", "zbncp.data.link_key_type", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL}},
6242
6243
14
        {&hf_zbncp_data_key_src,
6244
14
         {"Key source", "zbncp.data.key_src", FT_UINT8, BASE_DEC, VALS(zbncp_key_src), 0, NULL, HFILL}},
6245
6246
14
        {&hf_zbncp_data_key_attr,
6247
14
         {"Key attributes", "zbncp.data.key_attr", FT_UINT8, BASE_DEC, VALS(zbncp_key_attr), 0, NULL, HFILL}},
6248
6249
14
        {&hf_zbncp_data_out_frame_cnt,
6250
14
         {"Outgoing frame counter", "zbncp.data.out_cnt", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL}},
6251
6252
14
        {&hf_zbncp_data_inc_frame_cnt,
6253
14
         {"Incoming frame counter", "zbncp.data.inc_cnt", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL}},
6254
6255
14
        {&hf_zbncp_data_dump_type,
6256
14
         {"Dump Type", "zbncp.data.dump_type", FT_UINT8, BASE_DEC, VALS(zbncp_dump_type), 0, NULL, HFILL}},
6257
6258
14
        {&hf_zbncp_data_dump_text,
6259
14
         {"Dump", "zbncp.data.dump_text", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL}},
6260
6261
14
        {&hf_zbncp_data_dump_bin,
6262
14
         {"Dump", "zbncp.data.dump_bin", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
6263
6264
14
        {&hf_zbncp_data_offset,
6265
14
         {"Offset", "zbncp.data.offset", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL}},
6266
6267
14
        {&hf_zbncp_data_do_erase,
6268
14
         {"Do erase", "zbncp.data.do_erase", FT_BOOLEAN, BASE_NONE, NULL, 0, NULL, HFILL}},
6269
6270
14
        {&hf_zbncp_data_calibration_status,
6271
14
         {"Calibration status", "zbncp.data.calibration_status", FT_UINT8, BASE_HEX, VALS(zbncp_calibration_status), 0, NULL, HFILL}},
6272
6273
14
        {&hf_zbncp_data_calibration_value,
6274
14
         {"Calibration value", "zbncp.data.calibration_value", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL}},
6275
6276
14
        {&hf_zbncp_data_zgp_key_type,
6277
14
         {"Key type", "zbncp.data.zgp_key_type", FT_UINT8, BASE_HEX, VALS(zbncp_zgp_key_types), 0, NULL, HFILL}},
6278
6279
14
        {&hf_zbncp_data_zgp_link_key,
6280
14
         {"Link key", "zbncp.data.zgp_link_key", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL}},
6281
6282
14
        {&hf_zbncp_data_prod_conf_hdr_crc,
6283
14
         {"Production config crc", "zbncp.data.prod_conf.hdr.crc", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL}},
6284
6285
14
        {&hf_zbncp_data_prod_conf_hdr_len,
6286
14
         {"Length (with application section)", "zbncp.data.prod_conf.hdr.len", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL}},
6287
6288
14
        {&hf_zbncp_data_prod_conf_hdr_version,
6289
14
         {"Version", "zbncp.data.prod_conf.hdr.version", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL}},
6290
6291
14
        {&hf_zbncp_data_prod_conf_body,
6292
14
         {"Production config body", "zbncp.data.prod_conf.body", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL}},
6293
6294
        /* ZBOSS NCP dump */
6295
14
        {&hf_zbncp_dump_preamble,
6296
14
         {"ZBNCP Dump preamble", "zbncp.dump.preamble", FT_STRING, BASE_NONE, NULL, 0x0,
6297
14
          NULL, HFILL}},
6298
6299
14
        {&hf_zbncp_dump_version,
6300
14
         {"ZBNCP Dump version", "zbncp.dump.version", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
6301
6302
14
        {&hf_zbncp_dump_type,
6303
14
         {"Frame type", "zbncp.dump.ftype", FT_UINT8, BASE_HEX, NULL, 0x0,
6304
14
          NULL, HFILL}},
6305
6306
14
        {&hf_zbncp_dump_options,
6307
14
         {"Options", "zbncp.dump.options", FT_UINT8, BASE_HEX, NULL, 0x0,
6308
14
          NULL, HFILL}},
6309
6310
14
        {&hf_zbncp_dump_options_dir,
6311
14
         {"Direction", "zbncp.dump.options.direction", FT_BOOLEAN, 8, NULL, ZBNCP_DUMP_DIR_MASK,
6312
14
          NULL, HFILL}},
6313
6314
14
        {&hf_zbncp_dump_options_int_state,
6315
14
         {"HOST INT", "zbncp.dump.options.int_state", FT_BOOLEAN, 8, NULL, ZBNCP_DUMP_HOST_INT_DUMP_MASK,
6316
14
          NULL, HFILL}},
6317
6318
14
        {&hf_zbncp_dump_options_tx_conflict,
6319
14
         {"Potential TX/TX conflict", "zbncp.dump.options.tx_conflict", FT_BOOLEAN, 8, NULL, ZBNCP_DUMP_POTENTIAL_TX_RX_ERROR_MASK,
6320
14
          NULL, HFILL}},
6321
6322
        /*  Capability Information Fields */
6323
6324
14
        {&hf_ieee802154_cinfo_alt_coord,
6325
14
         {"Alternate PAN Coordinator", "zbncp.wpan.cinfo.alt_coord", FT_BOOLEAN, 8, NULL, IEEE802154_CMD_CINFO_ALT_PAN_COORD,
6326
14
          "Whether this device can act as a PAN coordinator or not.", HFILL}},
6327
6328
14
        {&hf_ieee802154_cinfo_device_type,
6329
14
         {"Device Type", "zbncp.wpan.cinfo.device_type", FT_BOOLEAN, 8, TFS(&tfs_cinfo_device_type), IEEE802154_CMD_CINFO_DEVICE_TYPE,
6330
14
          "Whether this device is RFD (reduced-function device) or FFD (full-function device).", HFILL}},
6331
6332
14
        {&hf_ieee802154_cinfo_power_src,
6333
14
         {"Power Source", "zbncp.wpan.cinfo.power_src", FT_BOOLEAN, 8, TFS(&tfs_cinfo_power_src), IEEE802154_CMD_CINFO_POWER_SRC,
6334
14
          "Whether this device is operating on AC/mains or battery power.", HFILL}},
6335
6336
14
        {&hf_ieee802154_cinfo_idle_rx,
6337
14
         {"Receive On When Idle", "zbncp.wpan.cinfo.idle_rx", FT_BOOLEAN, 8, NULL, IEEE802154_CMD_CINFO_IDLE_RX,
6338
14
          "Whether this device can receive packets while idle or not.", HFILL}},
6339
6340
14
        {&hf_ieee802154_cinfo_sec_capable,
6341
14
         {"Security Capability", "zbncp.wpan.cinfo.sec_capable", FT_BOOLEAN, 8, NULL, IEEE802154_CMD_CINFO_SEC_CAPABLE,
6342
14
          "Whether this device is capable of receiving encrypted packets.", HFILL}},
6343
6344
14
        {&hf_ieee802154_cinfo_alloc_addr,
6345
14
         {"Allocate Address", "zbncp.wpan.cinfo.alloc_addr", FT_BOOLEAN, 8, NULL, IEEE802154_CMD_CINFO_ALLOC_ADDR,
6346
14
          "Whether this device wishes to use a 16-bit short address instead of its IEEE 802.15.4 64-bit long address.", HFILL}}};
6347
6348
    /* Protocol subtrees */
6349
14
    static int *ett[] =
6350
14
        {
6351
14
            &ett_zbncp_hdr,
6352
14
            &ett_zbncp_hdr_flags,
6353
14
            &ett_zbncp_ll_body,
6354
14
            &ett_zbncp_hl_hdr,
6355
14
            &ett_zbncp_hl_body,
6356
14
            &ett_zbncp_data_in_cl_list,
6357
14
            &ett_zbncp_data_out_cl_list,
6358
14
            &ett_zbncp_data_mac_cap,
6359
14
            &ett_zbncp_data_pwr_src,
6360
14
            &ett_zbncp_data_cur_pwr_src,
6361
14
            &ett_zbncp_data_asoc_nwk_list,
6362
14
            &ett_zbncp_data_pwr_desc,
6363
14
            &ett_zbncp_data_desc_cap,
6364
14
            &ett_zbncp_data_flags,
6365
14
            &ett_zbncp_data_server_mask,
6366
14
            &ett_zbncp_data_ep_list,
6367
14
            &ett_zbncp_data_leave_flags,
6368
14
            &ett_zbncp_data_tx_opt,
6369
14
            &ett_zbncp_data_zdo_rejoin_flags,
6370
14
            &ett_zbncp_data_apc_fc,
6371
14
            &ett_zbncp_data_prod_conf_hdr,
6372
14
            &ett_zbncp_data_aps_key_attr,
6373
14
            &ett_zbncp_data_ch_list,
6374
14
            &ett_zbncp_data_channel,
6375
14
            &ett_zbncp_data_nwk_descr,
6376
14
            &ett_zbncp_data_cmd_opt,
6377
14
            &ett_zbncp_data_joind_bitmask,
6378
14
            &ett_zbncp_data_trace_bitmask,
6379
14
            &ett_zbncp_data_conf_params,
6380
14
            &ett_zbncp_dump,
6381
14
            &ett_zbncp_dump_opt
6382
14
        };
6383
6384
14
    zbncp_frame = proto_register_protocol("ZBOSS Network Coprocessor product", "ZB NCP",
6385
14
                                          ZBNCP_PROTOABBREV);
6386
6387
14
    proto_register_field_array(zbncp_frame, hf_zbncp_phy, array_length(hf_zbncp_phy));
6388
14
    proto_register_subtree_array(ett, array_length(ett));
6389
6390
14
    zbncp_handle = register_dissector("zbncp", dissect_zbncp, proto_zbncp);
6391
14
} /* proto_register_zbncp */
6392
6393
void proto_reg_handoff_zbncp(void)
6394
14
{
6395
14
    dissector_add_uint("wtap_encap", WTAP_ENCAP_ZBNCP, zbncp_handle);
6396
14
}