/src/wireshark/epan/dissectors/packet-zbee-zdp.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* packet-zbee-zdp.c |
2 | | * Dissector routines for the ZigBee Device Profile (ZDP) |
3 | | * By Owen Kirby <osk@exegin.com> |
4 | | * Copyright 2009 Exegin Technologies Limited |
5 | | * |
6 | | * Wireshark - Network traffic analyzer |
7 | | * By Gerald Combs <gerald@wireshark.org> |
8 | | * Copyright 1998 Gerald Combs |
9 | | * |
10 | | * SPDX-License-Identifier: GPL-2.0-or-later |
11 | | */ |
12 | | |
13 | | /* Include Files */ |
14 | | #include "config.h" |
15 | | |
16 | | #include <epan/packet.h> |
17 | | #include <epan/expert.h> |
18 | | #include <wsutil/bits_ctz.h> |
19 | | #include <wsutil/str_util.h> |
20 | | |
21 | | #include "packet-zbee.h" |
22 | | #include "packet-zbee-aps.h" |
23 | | #include "packet-zbee-nwk.h" |
24 | | #include "packet-zbee-zdp.h" |
25 | | #include "packet-zbee-zdp.h" |
26 | | |
27 | | void proto_reg_handoff_zbee_zdp(void); |
28 | | void proto_register_zbee_zdp(void); |
29 | | |
30 | | /*************************/ |
31 | | /* Function Declarations */ |
32 | | /*************************/ |
33 | | /* Local Helper routines. */ |
34 | | static uint16_t zdp_convert_2003cluster (uint8_t cluster); |
35 | | |
36 | | |
37 | | /************************************** |
38 | | * Field indices |
39 | | ************************************** |
40 | | */ |
41 | | /* Global field indices. */ |
42 | | static int proto_zbee_zdp; |
43 | | static int hf_zbee_zdp_seqno; |
44 | | #if 0 |
45 | | static int hf_zbee_zdp_length; /* Deprecates since ZigBee 2006. */ |
46 | | #endif |
47 | | |
48 | | /* General indices. */ |
49 | | int hf_zbee_zdp_ext_addr; |
50 | | int hf_zbee_zdp_nwk_addr; |
51 | | int hf_zbee_zdp_req_type; |
52 | | int hf_zbee_zdp_index; |
53 | | static int hf_zbee_zdp_status; |
54 | | int hf_zbee_zdp_ep_count; |
55 | | int hf_zbee_zdp_endpoint; |
56 | | int hf_zbee_zdp_profile; |
57 | | int hf_zbee_zdp_cluster; |
58 | | int hf_zbee_zdp_addr_mode; |
59 | | int hf_zbee_zdp_table_size; |
60 | | int hf_zbee_zdp_table_count; |
61 | | int hf_zbee_zdp_in_count; |
62 | | int hf_zbee_zdp_out_count; |
63 | | int hf_zbee_zdp_in_cluster; |
64 | | int hf_zbee_zdp_out_cluster; |
65 | | int hf_zbee_zdp_assoc_device_count; |
66 | | int hf_zbee_zdp_assoc_device; |
67 | | int hf_zbee_zdp_cache_address; |
68 | | |
69 | | /* Capability information indices. */ |
70 | | static int hf_zbee_zdp_cinfo; |
71 | | static int hf_zbee_zdp_cinfo_alloc; |
72 | | static int hf_zbee_zdp_cinfo_security; |
73 | | static int hf_zbee_zdp_cinfo_idle_rx; |
74 | | static int hf_zbee_zdp_cinfo_power; |
75 | | static int hf_zbee_zdp_cinfo_ffd; |
76 | | static int hf_zbee_zdp_cinfo_alt_coord; |
77 | | |
78 | | /* Server mode flag indices. */ |
79 | | static int hf_zbee_zdp_server; |
80 | | static int hf_zbee_zdp_server_pri_trust; |
81 | | static int hf_zbee_zdp_server_bak_trust; |
82 | | static int hf_zbee_zdp_server_pri_bind; |
83 | | static int hf_zbee_zdp_server_bak_bind; |
84 | | static int hf_zbee_zdp_server_pri_disc; |
85 | | static int hf_zbee_zdp_server_bak_disc; |
86 | | static int hf_zbee_zdp_server_network_manager; |
87 | | static int hf_zbee_zdp_server_stk_compl_rev; |
88 | | |
89 | | /* Node descriptor indices. */ |
90 | | static int hf_zbee_zdp_node_type; |
91 | | static int hf_zbee_zdp_node_complex; |
92 | | static int hf_zbee_zdp_node_user; |
93 | | static int hf_zbee_zdp_node_frag_support; |
94 | | static int hf_zbee_zdp_node_freq_868; |
95 | | static int hf_zbee_zdp_node_freq_900; |
96 | | static int hf_zbee_zdp_node_freq_2400; |
97 | | static int hf_zbee_zdp_node_freq_eu_sub_ghz; |
98 | | static int hf_zbee_zdp_node_manufacturer; |
99 | | static int hf_zbee_zdp_node_max_buffer; |
100 | | static int hf_zbee_zdp_node_max_incoming_transfer; |
101 | | static int hf_zbee_zdp_node_max_outgoing_transfer; |
102 | | static int hf_zbee_zdp_dcf; |
103 | | static int hf_zbee_zdp_dcf_eaela; |
104 | | static int hf_zbee_zdp_dcf_esdla; |
105 | | |
106 | | /* Power descriptor indices. */ |
107 | | static int hf_zbee_zdp_power; |
108 | | static int hf_zbee_zdp_power_mode; |
109 | | static int hf_zbee_zdp_power_avail_ac; |
110 | | static int hf_zbee_zdp_power_avail_recharge; |
111 | | static int hf_zbee_zdp_power_avail_dispose; |
112 | | static int hf_zbee_zdp_power_source_ac; |
113 | | static int hf_zbee_zdp_power_source_recharge; |
114 | | static int hf_zbee_zdp_power_source_dispose; |
115 | | static int hf_zbee_zdp_power_level; |
116 | | |
117 | | /* Simple descriptor indices. */ |
118 | | static int hf_zbee_zdp_simple_app_device; |
119 | | static int hf_zbee_zdp_simple_zll_app_device; |
120 | | static int hf_zbee_zdp_simple_ha_app_device; |
121 | | static int hf_zbee_zdp_simple_app_version; |
122 | | int hf_zbee_zdp_simple_length; |
123 | | |
124 | | /* Complex descriptor indices. */ |
125 | | int hf_zbee_zdp_complex_length; |
126 | | static int hf_zbee_zdp_complex; |
127 | | |
128 | | /* User descriptor indices. */ |
129 | | int hf_zbee_zdp_user; |
130 | | int hf_zbee_zdp_user_length; |
131 | | |
132 | | /* Discovery indices. */ |
133 | | int hf_zbee_zdp_cache; |
134 | | int hf_zbee_zdp_disc_node_size; |
135 | | int hf_zbee_zdp_disc_power_size; |
136 | | int hf_zbee_zdp_disc_ep_count; |
137 | | int hf_zbee_zdp_disc_simple_count; |
138 | | int hf_zbee_zdp_disc_simple_size; |
139 | | |
140 | | /* Binding indices. */ |
141 | | int hf_zbee_zdp_target; |
142 | | int hf_zbee_zdp_replacement; |
143 | | int hf_zbee_zdp_replacement_ep; |
144 | | int hf_zbee_zdp_bind_src; |
145 | | int hf_zbee_zdp_bind_src64; |
146 | | int hf_zbee_zdp_bind_src_ep; |
147 | | int hf_zbee_zdp_bind_dst; |
148 | | int hf_zbee_zdp_bind_dst64; |
149 | | int hf_zbee_zdp_bind_dst_ep; |
150 | | |
151 | | /* Network Management indices. */ |
152 | | int hf_zbee_zdp_duration; |
153 | | int hf_zbee_zdp_leave_children; |
154 | | int hf_zbee_zdp_leave_rejoin; |
155 | | int hf_zbee_zdp_significance; |
156 | | int hf_zbee_zdp_scan_count; |
157 | | int hf_zbee_zdp_update_id; |
158 | | int hf_zbee_zdp_manager; |
159 | | int hf_zbee_zdp_tx_total; |
160 | | int hf_zbee_zdp_tx_fail; |
161 | | int hf_zbee_zdp_tx_retries; |
162 | | int hf_zbee_zdp_period_time_results; |
163 | | int hf_zbee_zdp_channel_count; |
164 | | int hf_zbee_zdp_channel_mask; |
165 | | int hf_zbee_zdp_channel_page; |
166 | | int hf_zbee_zdp_channel_page_count; |
167 | | int hf_zbee_zdp_channel_energy; |
168 | | int hf_zbee_zdp_pan_eui64; |
169 | | int hf_zbee_zdp_pan_uint; |
170 | | int hf_zbee_zdp_channel; |
171 | | int hf_zbee_zdp_nwk_desc_profile; |
172 | | int hf_zbee_zdp_profile_version; |
173 | | int hf_zbee_zdp_beacon; |
174 | | int hf_zbee_zdp_superframe; |
175 | | int hf_zbee_zdp_permit_joining; |
176 | | int hf_zbee_zdp_extended_pan; |
177 | | int hf_zbee_zdp_addr; |
178 | | int hf_zbee_zdp_table_entry_type; |
179 | | int hf_zbee_zdp_table_entry_idle_rx_0c; |
180 | | int hf_zbee_zdp_table_entry_relationship_70; |
181 | | int hf_zbee_zdp_table_entry_idle_rx_04; |
182 | | int hf_zbee_zdp_table_entry_relationship_18; |
183 | | int hf_zbee_zdp_depth; |
184 | | int hf_zbee_zdp_permit_joining_03; |
185 | | int hf_zbee_zdp_lqi; |
186 | | static int hf_zbee_zdp_scan_channel; |
187 | | int hf_zbee_zdp_ieee_join_start_index; |
188 | | int hf_zbee_zdp_ieee_join_update_id; |
189 | | int hf_zbee_zdp_ieee_join_policy; |
190 | | int hf_zbee_zdp_ieee_join_list_total; |
191 | | int hf_zbee_zdp_ieee_join_list_start; |
192 | | int hf_zbee_zdp_ieee_join_list_count; |
193 | | int hf_zbee_zdp_ieee_join_list_ieee; |
194 | | int hf_zbee_zdp_number_of_children; |
195 | | int hf_zbee_zdp_beacon_survey_scan_mask; |
196 | | int hf_zbee_zdp_beacon_survey_scan_mask_cnt; |
197 | | int hf_zbee_zdp_beacon_survey_conf_mask; |
198 | | int hf_zbee_zdp_beacon_survey_total; |
199 | | int hf_zbee_zdp_beacon_survey_cur_zbn; |
200 | | int hf_zbee_zdp_beacon_survey_cur_zbn_potent_parents; |
201 | | int hf_zbee_zdp_beacon_survey_other_zbn; |
202 | | int hf_zbee_zdp_beacon_survey_current_parent; |
203 | | int hf_zbee_zdp_beacon_survey_cnt_parents; |
204 | | int hf_zbee_zdp_beacon_survey_parent; |
205 | | int hf_zbee_zdp_tlv_count; |
206 | | int hf_zbee_zdp_tlv_id; |
207 | | /* Routing Table */ |
208 | | int hf_zbee_zdp_rtg; |
209 | | int hf_zbee_zdp_rtg_entry; |
210 | | int hf_zbee_zdp_rtg_destination; |
211 | | int hf_zbee_zdp_rtg_next_hop; |
212 | | int hf_zbee_zdp_rtg_status; |
213 | | |
214 | | |
215 | | /* Subtree indices. */ |
216 | | static int ett_zbee_zdp; |
217 | | int ett_zbee_zdp_endpoint; |
218 | | int ett_zbee_zdp_match_in; |
219 | | int ett_zbee_zdp_match_out; |
220 | | int ett_zbee_zdp_node; |
221 | | static int ett_zbee_zdp_node_in; |
222 | | static int ett_zbee_zdp_node_out; |
223 | | int ett_zbee_zdp_power; |
224 | | int ett_zbee_zdp_simple; |
225 | | int ett_zbee_zdp_cinfo; |
226 | | int ett_zbee_zdp_server; |
227 | | int ett_zbee_zdp_simple_sizes; |
228 | | int ett_zbee_zdp_bind; |
229 | | int ett_zbee_zdp_bind_entry; |
230 | | int ett_zbee_zdp_bind_end_in; |
231 | | int ett_zbee_zdp_bind_end_out; |
232 | | static int ett_zbee_zdp_bind_table; |
233 | | int ett_zbee_zdp_bind_source; |
234 | | int ett_zbee_zdp_assoc_device; |
235 | | int ett_zbee_zdp_nwk; |
236 | | int ett_zbee_zdp_perm_join_fc; |
237 | | int ett_zbee_zdp_lqi; |
238 | | int ett_zbee_zdp_rtg; |
239 | | int ett_zbee_zdp_cache; |
240 | | int ett_zbee_zdp_nwk_desc; |
241 | | int ett_zbee_zdp_table_entry; |
242 | | static int ett_zbee_zdp_descriptor_capability_field; |
243 | | |
244 | | /* Expert Info */ |
245 | | static expert_field ei_deprecated_command; |
246 | | |
247 | | /************************************** |
248 | | * Value Strings |
249 | | ************************************** |
250 | | */ |
251 | | static const value_string zbee_zdp_req_types[] = { |
252 | | { ZBEE_ZDP_REQ_TYPE_SINGLE, "Single Device Response" }, |
253 | | { ZBEE_ZDP_REQ_TYPE_EXTENDED, "Extended Response" }, |
254 | | { 0, NULL } |
255 | | }; |
256 | | |
257 | | const value_string zbee_zdp_cluster_names[] = { |
258 | | { ZBEE_ZDP_REQ_NWK_ADDR, "Network Address Request" }, |
259 | | { ZBEE_ZDP_REQ_IEEE_ADDR, "Extended Address Request" }, |
260 | | { ZBEE_ZDP_REQ_NODE_DESC, "Node Descriptor Request" }, |
261 | | { ZBEE_ZDP_REQ_POWER_DESC, "Power Descriptor Request" }, |
262 | | { ZBEE_ZDP_REQ_SIMPLE_DESC, "Simple Descriptor Request" }, |
263 | | { ZBEE_ZDP_REQ_ACTIVE_EP, "Active Endpoint Request" }, |
264 | | { ZBEE_ZDP_REQ_MATCH_DESC, "Match Descriptor Request" }, |
265 | | { ZBEE_ZDP_REQ_COMPLEX_DESC, "Complex Descriptor Request" }, |
266 | | { ZBEE_ZDP_REQ_USER_DESC, "User Descriptor Request" }, |
267 | | { ZBEE_ZDP_REQ_DISCOVERY_CACHE, "Discovery Cache Request" }, |
268 | | { ZBEE_ZDP_REQ_DEVICE_ANNCE, "Device Announcement" }, |
269 | | { ZBEE_ZDP_REQ_PARENT_ANNCE, "Parent Announce" }, |
270 | | { ZBEE_ZDP_REQ_SET_USER_DESC, "Set User Descriptor Request" }, |
271 | | { ZBEE_ZDP_REQ_SYSTEM_SERVER_DISC, "Server Discovery Request" }, |
272 | | { ZBEE_ZDP_REQ_STORE_DISCOVERY, "Store Discovery Request" }, |
273 | | { ZBEE_ZDP_REQ_STORE_NODE_DESC, "Store Node Descriptor Request" }, |
274 | | { ZBEE_ZDP_REQ_STORE_POWER_DESC, "Store Power Descriptor Request" }, |
275 | | { ZBEE_ZDP_REQ_STORE_ACTIVE_EP, "Store Active Endpoints Request" }, |
276 | | { ZBEE_ZDP_REQ_STORE_SIMPLE_DESC, "Store Simple Descriptor Request" }, |
277 | | { ZBEE_ZDP_REQ_REMOVE_NODE_CACHE, "Remove Node Cache Request" }, |
278 | | { ZBEE_ZDP_REQ_FIND_NODE_CACHE, "Find Node Cache Request" }, |
279 | | { ZBEE_ZDP_REQ_EXT_SIMPLE_DESC, "Extended Simple Descriptor Request" }, |
280 | | { ZBEE_ZDP_REQ_EXT_ACTIVE_EP, "Extended Active Endpoint Request" }, |
281 | | { ZBEE_ZDP_REQ_END_DEVICE_BIND, "End Device Bind Request" }, |
282 | | { ZBEE_ZDP_REQ_BIND, "Bind Request" }, |
283 | | { ZBEE_ZDP_REQ_UNBIND, "Unbind Request" }, |
284 | | { ZBEE_ZDP_REQ_BIND_REGISTER, "Bind Register Request" }, |
285 | | { ZBEE_ZDP_REQ_REPLACE_DEVICE, "Replace Device Request" }, |
286 | | { ZBEE_ZDP_REQ_STORE_BAK_BIND_ENTRY, "Store Backup Binding Request" }, |
287 | | { ZBEE_ZDP_REQ_REMOVE_BAK_BIND_ENTRY, "Remove Backup Binding Request" }, |
288 | | { ZBEE_ZDP_REQ_BACKUP_BIND_TABLE, "Backup Binding Table Request" }, |
289 | | { ZBEE_ZDP_REQ_RECOVER_BIND_TABLE, "Recover Binding Table Request" }, |
290 | | { ZBEE_ZDP_REQ_BACKUP_SOURCE_BIND, "Backup Source Binding Request" }, |
291 | | { ZBEE_ZDP_REQ_RECOVER_SOURCE_BIND, "Recover Source Binding Request" }, |
292 | | { ZBEE_ZDP_REQ_CLEAR_ALL_BINDINGS, "Clear All Bindings Request" }, |
293 | | |
294 | | { ZBEE_ZDP_REQ_MGMT_NWK_DISC, "Network Discovery Request" }, |
295 | | { ZBEE_ZDP_REQ_MGMT_LQI, "Link Quality Request" }, |
296 | | { ZBEE_ZDP_REQ_MGMT_RTG, "Routing Table Request" }, |
297 | | { ZBEE_ZDP_REQ_MGMT_BIND, "Binding Table Request" }, |
298 | | { ZBEE_ZDP_REQ_MGMT_LEAVE, "Leave Request" }, |
299 | | { ZBEE_ZDP_REQ_MGMT_DIRECT_JOIN, "Direct Join Request" }, |
300 | | { ZBEE_ZDP_REQ_MGMT_PERMIT_JOIN, "Permit Join Request" }, |
301 | | { ZBEE_ZDP_REQ_MGMT_CACHE, "Cache Request" }, |
302 | | { ZBEE_ZDP_REQ_MGMT_NWKUPDATE, "Network Update Request" }, |
303 | | { ZBEE_ZDP_REQ_MGMT_NWKUPDATE_ENH, "Network Update Enhanced Request" }, |
304 | | { ZBEE_ZDP_REQ_MGMT_IEEE_JOIN_LIST, "IEEE Joining List Request" }, |
305 | | { ZBEE_ZDP_REQ_MGMT_NWK_BEACON_SURVEY, "Beacon Survey Request"}, |
306 | | { ZBEE_ZDP_REQ_SECURITY_START_KEY_NEGOTIATION,"Security Start Key Negotiation Request" }, |
307 | | { ZBEE_ZDP_REQ_SECURITY_GET_AUTH_TOKEN, "Security Get Authentication Token Request"}, |
308 | | { ZBEE_ZDP_REQ_SECURITY_GET_AUTH_LEVEL, "Security Get Authentication Level Request"}, |
309 | | { ZBEE_ZDP_REQ_SECURITY_SET_CONFIGURATION, "Security Set Configuration Request"}, |
310 | | { ZBEE_ZDP_REQ_SECURITY_GET_CONFIGURATION, "Security Get Configuration Request"}, |
311 | | { ZBEE_ZDP_REQ_SECURITY_START_KEY_UPDATE, "Security Start Key Update Request"}, |
312 | | { ZBEE_ZDP_REQ_SECURITY_DECOMMISSION, "Security Decommission Request"}, |
313 | | { ZBEE_ZDP_REQ_SECURITY_CHALLENGE, "Security Challenge Request"}, |
314 | | |
315 | | { ZBEE_ZDP_RSP_NWK_ADDR, "Network Address Response" }, |
316 | | { ZBEE_ZDP_RSP_IEEE_ADDR, "Extended Address Response" }, |
317 | | { ZBEE_ZDP_RSP_NODE_DESC, "Node Descriptor Response" }, |
318 | | { ZBEE_ZDP_RSP_POWER_DESC, "Power Descriptor Response" }, |
319 | | { ZBEE_ZDP_RSP_SIMPLE_DESC, "Simple Descriptor Response" }, |
320 | | { ZBEE_ZDP_RSP_ACTIVE_EP, "Active Endpoint Response" }, |
321 | | { ZBEE_ZDP_RSP_MATCH_DESC, "Match Descriptor Response" }, |
322 | | { ZBEE_ZDP_RSP_COMPLEX_DESC, "Complex Descriptor Response" }, |
323 | | { ZBEE_ZDP_RSP_USER_DESC, "User Descriptor Response" }, |
324 | | { ZBEE_ZDP_RSP_DISCOVERY_CACHE, "Discovery Cache Response" }, |
325 | | { ZBEE_ZDP_RSP_CONF_USER_DESC, "Set User Descriptor Confirm" }, |
326 | | { ZBEE_ZDP_RSP_SYSTEM_SERVER_DISC, "Server Discovery Response" }, |
327 | | { ZBEE_ZDP_RSP_STORE_DISCOVERY, "Store Discovery Response" }, |
328 | | { ZBEE_ZDP_RSP_STORE_NODE_DESC, "Store Node Descriptor Response" }, |
329 | | { ZBEE_ZDP_RSP_STORE_POWER_DESC, "Store Power Descriptor Response" }, |
330 | | { ZBEE_ZDP_RSP_STORE_ACTIVE_EP, "Store Active Endpoints Response" }, |
331 | | { ZBEE_ZDP_RSP_STORE_SIMPLE_DESC, "Store Simple Descriptor Response" }, |
332 | | { ZBEE_ZDP_RSP_REMOVE_NODE_CACHE, "Remove Node Cache Response" }, |
333 | | { ZBEE_ZDP_RSP_FIND_NODE_CACHE, "Find Node Cache Response" }, |
334 | | { ZBEE_ZDP_RSP_EXT_SIMPLE_DESC, "Extended Simple Descriptor Response" }, |
335 | | { ZBEE_ZDP_RSP_EXT_ACTIVE_EP, "Extended Active Endpoint Response" }, |
336 | | { ZBEE_ZDP_RSP_PARENT_ANNCE, "Parent Announce Response" }, |
337 | | { ZBEE_ZDP_RSP_END_DEVICE_BIND, "End Device Bind Response" }, |
338 | | { ZBEE_ZDP_RSP_BIND, "Bind Response" }, |
339 | | { ZBEE_ZDP_RSP_UNBIND, "Unbind Response" }, |
340 | | { ZBEE_ZDP_RSP_BIND_REGISTER, "Bind Register Response" }, |
341 | | { ZBEE_ZDP_RSP_REPLACE_DEVICE, "Replace Device Response" }, |
342 | | { ZBEE_ZDP_RSP_STORE_BAK_BIND_ENTRY, "Store Backup Binding Response" }, |
343 | | { ZBEE_ZDP_RSP_REMOVE_BAK_BIND_ENTRY, "Remove Backup Binding Response" }, |
344 | | { ZBEE_ZDP_RSP_BACKUP_BIND_TABLE, "Backup Binding Table Response" }, |
345 | | { ZBEE_ZDP_RSP_RECOVER_BIND_TABLE, "Recover Binding Table Response" }, |
346 | | { ZBEE_ZDP_RSP_BACKUP_SOURCE_BIND, "Backup Source Binding Response" }, |
347 | | { ZBEE_ZDP_RSP_RECOVER_SOURCE_BIND, "Recover Source Binding Response" }, |
348 | | { ZBEE_ZDP_RSP_CLEAR_ALL_BINDINGS, "Clear All Bindings Response" }, |
349 | | { ZBEE_ZDP_RSP_MGMT_NWK_DISC, "Network Discovery Response" }, |
350 | | { ZBEE_ZDP_RSP_MGMT_LQI, "Link Quality Response" }, |
351 | | { ZBEE_ZDP_RSP_MGMT_RTG, "Routing Table Response" }, |
352 | | { ZBEE_ZDP_RSP_MGMT_BIND, "Binding Table Response" }, |
353 | | { ZBEE_ZDP_RSP_MGMT_LEAVE, "Leave Response" }, |
354 | | { ZBEE_ZDP_RSP_MGMT_DIRECT_JOIN, "Direct Join Response" }, |
355 | | { ZBEE_ZDP_RSP_MGMT_PERMIT_JOIN, "Permit Join Response" }, |
356 | | { ZBEE_ZDP_RSP_MGMT_CACHE, "Cache Response" }, |
357 | | { ZBEE_ZDP_NOT_MGMT_NWKUPDATE, "Network Update Notify" }, |
358 | | { ZBEE_ZDP_NOT_MGMT_NWKUPDATE_ENH, "Network Enhanced Update Notify" }, |
359 | | { ZBEE_ZDP_RSP_MGMT_IEEE_JOIN_LIST, "IEEE Joining List Response" }, |
360 | | { ZBEE_ZDP_NOT_MGMT_UNSOLICITED_NWKUPDATE, "Unsolicited Enhanced Network Update Notify" }, |
361 | | { ZBEE_ZDP_RSP_MGMT_NWK_BEACON_SURVEY, "Beacon Survey Response"}, |
362 | | { ZBEE_ZDP_RSP_SECURITY_START_KEY_NEGOTIATION,"Security Start Key Negotiation Response" }, |
363 | | { ZBEE_ZDP_RSP_SECURITY_GET_AUTH_TOKEN, "Security Get Authentication Token Response"}, |
364 | | { ZBEE_ZDP_RSP_SECURITY_GET_AUTH_LEVEL, "Security Get Authentication Level Response"}, |
365 | | { ZBEE_ZDP_RSP_SECURITY_SET_CONFIGURATION, "Security Set Configuration Response"}, |
366 | | { ZBEE_ZDP_RSP_SECURITY_GET_CONFIGURATION, "Security Get Configuration Response"}, |
367 | | { ZBEE_ZDP_RSP_SECURITY_START_KEY_UPDATE, "Security Start Key Update Response"}, |
368 | | { ZBEE_ZDP_RSP_SECURITY_DECOMMISSION, "Security Decommission Response"}, |
369 | | { ZBEE_ZDP_RSP_SECURITY_CHALLENGE, "Security Challenge Response"}, |
370 | | { 0, NULL } |
371 | | }; |
372 | | |
373 | | static const value_string zbee_zdp_status_names[] = { |
374 | | { ZBEE_ZDP_STATUS_SUCCESS, "Success" }, |
375 | | { ZBEE_ZDP_STATUS_INV_REQUESTTYPE, "Invalid Request Type" }, |
376 | | { ZBEE_ZDP_STATUS_DEVICE_NOT_FOUND, "Device Not Found" }, |
377 | | { ZBEE_ZDP_STATUS_INVALID_EP, "Invalid Endpoint" }, |
378 | | { ZBEE_ZDP_STATUS_NOT_ACTIVE, "Not Active" }, |
379 | | { ZBEE_ZDP_STATUS_NOT_SUPPORTED, "Not Supported" }, |
380 | | { ZBEE_ZDP_STATUS_TIMEOUT, "Timeout" }, |
381 | | { ZBEE_ZDP_STATUS_NO_MATCH, "No Match" }, |
382 | | { ZBEE_ZDP_STATUS_NO_ENTRY, "No Entry" }, |
383 | | { ZBEE_ZDP_STATUS_NO_DESCRIPTOR, "No Descriptor" }, |
384 | | { ZBEE_ZDP_STATUS_INSUFFICIENT_SPACE, "Insufficient Space" }, |
385 | | { ZBEE_ZDP_STATUS_NOT_PERMITTED, "Not Permitted" }, |
386 | | { ZBEE_ZDP_STATUS_TABLE_FULL, "Table Full" }, |
387 | | { ZBEE_ZDP_STATUS_NOT_AUTHORIZED, "Not Authorized" }, |
388 | | { ZBEE_ZDP_STATUS_DEVICE_BINDING_TABLE_FULL, "Device Binding Table Full" }, |
389 | | { ZBEE_ZDP_STATUS_INVALID_INDEX, "Invalid Index" }, |
390 | | { ZBEE_ZDP_STATUS_RESPONSE_TOO_LARGE, "Response Too Large" }, |
391 | | { ZBEE_ZDP_STATUS_MISSING_TLV, "Missing TLV" }, |
392 | | { 0, NULL } |
393 | | }; |
394 | | |
395 | | static const value_string zbee_zll_device_names[] = { |
396 | | { ZBEE_ZLL_DEVICE_ON_OFF_LIGHT, "On/Off light" }, |
397 | | { ZBEE_ZLL_DEVICE_ON_OFF_PLUG_IN_UNIT, "On/Off plug-in unit" }, |
398 | | { ZBEE_ZLL_DEVICE_DIMMABLE_LIGHT, "Dimmable light" }, |
399 | | { ZBEE_ZLL_DEVICE_DIMMABLE_PLUG_IN_UNIT, "Dimmable plug-in unit" }, |
400 | | { ZBEE_ZLL_DEVICE_COLOR_LIGHT, "Color light" }, |
401 | | { ZBEE_ZLL_DEVICE_EXTENDED_COLOR_LIGHT, "Extended color light" }, |
402 | | { ZBEE_ZLL_DEVICE_COLOR_TEMPERATURE_LIGHT, "Color temperature light" }, |
403 | | { ZBEE_ZLL_DEVICE_COLOR_CONTROLLER, "Color controller" }, |
404 | | { ZBEE_ZLL_DEVICE_COLOR_SCENE_CONTROLLER, "Color scene controller" }, |
405 | | { ZBEE_ZLL_DEVICE_NON_COLOR_CONTROLLER, "Non-color controller" }, |
406 | | { ZBEE_ZLL_DEVICE_NON_COLOR_SCENE_CONTROLLER, "Non-color scene controller" }, |
407 | | { ZBEE_ZLL_DEVICE_CONTROL_BRIDGE, "Control Bridge" }, |
408 | | { ZBEE_ZLL_DEVICE_ON_OFF_SENSOR, "On/Off sensor" }, |
409 | | { 0, NULL } |
410 | | }; |
411 | | |
412 | | static const value_string zbee_ha_device_names[] = { |
413 | | { ZBEE_HA_DEVICE_ON_OFF_LIGHT, "On/Off light" }, |
414 | | { ZBEE_HA_DEVICE_DIMMABLE_LIGHT, "Dimmable light" }, |
415 | | { ZBEE_HA_DEVICE_COLOR_DIMMABLE_LIGHT, "Color dimmable light" }, |
416 | | { ZBEE_HA_DEVICE_ON_OFF_LIGHT_SWITCH, "On/Off light switch" }, |
417 | | { ZBEE_HA_DEVICE_DIMMER_SWITCH, "Dimmer switch" }, |
418 | | { ZBEE_HA_DEVICE_COLOR_DIMMER_SWITCH, "Color dimmer switch" }, |
419 | | { ZBEE_HA_DEVICE_LIGHT_SENSOR, "Light sensor" }, |
420 | | { ZBEE_HA_DEVICE_OCCUPANCY_SENSOR, "Occupancy sensor" }, |
421 | | { ZBEE_HA_DEVICE_ON_OFF_BALLAST, "On/Off ballast" }, |
422 | | { ZBEE_HA_DEVICE_DIMMABLE_BALLAST, "Dimmable ballast" }, |
423 | | { ZBEE_HA_DEVICE_ON_OFF_PLUG_IN_UNIT, "On/Off plug-in unit" }, |
424 | | { ZBEE_HA_DEVICE_DIMMABLE_PLUG_IN_UNIT, "Dimmable plug-in unit" }, |
425 | | { ZBEE_HA_DEVICE_COLOR_TEMPERATURE_LIGHT, "Color temperature light" }, |
426 | | { ZBEE_HA_DEVICE_EXTENDED_COLOR_LIGHT, "Extended color light" }, |
427 | | { ZBEE_HA_DEVICE_LIGHT_LEVEL_SENSOR, "Light level sensor" }, |
428 | | { ZBEE_HA_DEVICE_COLOR_CONTROLLER, "Color controller" }, |
429 | | { ZBEE_HA_DEVICE_COLOR_SCENE_CONTROLLER, "Color scene controller" }, |
430 | | { ZBEE_HA_DEVICE_NON_COLOR_CONTROLLER, "Non-color controller" }, |
431 | | { ZBEE_HA_DEVICE_NON_COLOR_SCENE_CONTROLLER, "Non-color scene controller" }, |
432 | | { ZBEE_HA_DEVICE_CONTROL_BRIDGE, "Control Bridge" }, |
433 | | { ZBEE_HA_DEVICE_ON_OFF_SENSOR, "On/Off sensor" }, |
434 | | { 0, NULL } |
435 | | }; |
436 | | |
437 | | const value_string zbee_zdp_rtg_status_vals[] = { |
438 | | { 0x00, "Active" }, |
439 | | { 0x01, "Discovery Underway" }, |
440 | | { 0x02, "Discovery Failed" }, |
441 | | { 0x03, "Inactive" }, |
442 | | { 0, NULL } |
443 | | }; |
444 | | |
445 | | static const value_string zbee_zdp_ieee_join_policy_vals[] = { |
446 | | { 0x00, "All Join" }, |
447 | | { 0x01, "IEEE Join" }, |
448 | | { 0x02, "No Join" }, |
449 | | { 0, NULL } |
450 | | }; |
451 | | |
452 | | /* The reason this has it's own value_string and doesn't use |
453 | | tfs_get_string(), is that some hf_ fields use bitmasks larger |
454 | | than 0x01, and it's intentional that those other values be |
455 | | "Unknown" (which is what value_string will give us) |
456 | | */ |
457 | | static const value_string zbee_zdp_true_false_plus_vals[] = { |
458 | | { 0x00, "False" }, |
459 | | { 0x01, "True" }, |
460 | | { 0, NULL } |
461 | | }; |
462 | | |
463 | | static const value_string zbee_zdp_table_entry_type_vals[] = { |
464 | | { 0x00, "Coordinator" }, |
465 | | { 0x01, "Router" }, |
466 | | { 0x02, "End Device" }, |
467 | | { 0, NULL } |
468 | | }; |
469 | | |
470 | | static const value_string zbee_zdp_relationship_vals[] = { |
471 | | { 0x00, "Parent" }, |
472 | | { 0x01, "Child" }, |
473 | | { 0x02, "Sibling" }, |
474 | | { 0x03, "None" }, |
475 | | { 0x04, "Previous Child" }, |
476 | | { 0, NULL } |
477 | | }; |
478 | | |
479 | | static const range_string zbee_zcl_zdp_address_modes[] = { |
480 | | { 0x0, 0x0, "Reserved" }, |
481 | | { ZBEE_ZDP_ADDR_MODE_GROUP, ZBEE_ZDP_ADDR_MODE_GROUP, "Group" }, |
482 | | { 0x02, 0x02, "Reserved" }, |
483 | | { ZBEE_ZDP_ADDR_MODE_UNICAST, ZBEE_ZDP_ADDR_MODE_UNICAST, "Unicast" }, |
484 | | { 0x03, 0xFF, "Reserved" }, |
485 | | { 0, 0, NULL } |
486 | | }; |
487 | | |
488 | | /* |
489 | | if (tree) { |
490 | | if (type == 0x00) proto_item_append_text(ti, ", Type: Coordinator"); |
491 | | else if (type == 0x01) proto_item_append_text(ti, ", Type: Router"); |
492 | | else if (type == 0x02) proto_item_append_text(ti, ", Type: End Device"); |
493 | | else proto_item_append_text(ti, ", Type: Unknown"); |
494 | | |
495 | | if (idle_rx == 0x00) proto_item_append_text(ti, ", Idle Rx: False"); |
496 | | else if (idle_rx==0x01) proto_item_append_text(ti, ", Idle Rx: True"); |
497 | | else proto_item_append_text(ti, ", Idle Rx: Unknown"); |
498 | | |
499 | | if (rel == 0x00) proto_item_append_text(ti, ", Relationship: Parent"); |
500 | | else if (rel == 0x01) proto_item_append_text(ti, ", Relationship: Child"); |
501 | | else if (rel == 0x02) proto_item_append_text(ti, ", Relationship: Sibling"); |
502 | | else if (rel == 0x03) proto_item_append_text(ti, ", Relationship: None"); |
503 | | else if (rel == 0x04) proto_item_append_text(ti, ", Relationship: Previous Child"); |
504 | | else proto_item_append_text(ti, ", Relationship: Unknown"); |
505 | | } |
506 | | */ |
507 | | |
508 | | /** |
509 | | *Returns a status name for a given status value. |
510 | | * |
511 | | */ |
512 | | const char * |
513 | | zdp_status_name(uint8_t status) |
514 | 770 | { |
515 | 770 | return val_to_str_const(status, zbee_zdp_status_names, "Reserved"); |
516 | 770 | } /* zdp_status_name */ |
517 | | |
518 | | /** |
519 | | *Converts a ZigBee 2003 & earlier cluster ID to a 2006 |
520 | | * |
521 | | */ |
522 | | static uint16_t |
523 | | zdp_convert_2003cluster(uint8_t cluster) |
524 | 4.03k | { |
525 | 4.03k | uint16_t cluster16 = (uint16_t)cluster; |
526 | | |
527 | 4.03k | if (cluster16 & ZBEE_ZDP_MSG_RESPONSE_BIT_2003) { |
528 | | /* Clear the 2003 request bit. */ |
529 | 2.20k | cluster16 &= ~(ZBEE_ZDP_MSG_RESPONSE_BIT_2003); |
530 | | /* Set the 2006 request bit. */ |
531 | 2.20k | cluster16 |= (ZBEE_ZDP_MSG_RESPONSE_BIT); |
532 | 2.20k | } |
533 | 4.03k | return cluster16; |
534 | 4.03k | } /* zdp_convert_2003cluster */ |
535 | | |
536 | | /** |
537 | | *Helper functions dumps any excess data into the data dissector. |
538 | | * |
539 | | *@param tvb pointer to buffer containing raw packet. |
540 | | *@param offset offset after parsing last item. |
541 | | *@param pinfo packet information structure. |
542 | | *@param tree pointer to data tree Wireshark uses to display packet. |
543 | | */ |
544 | | void |
545 | | zdp_dump_excess(tvbuff_t *tvb, unsigned offset, packet_info *pinfo, proto_tree *tree) |
546 | 2.02k | { |
547 | 2.02k | proto_tree *root = proto_tree_get_root(tree); |
548 | 2.02k | unsigned length = tvb_captured_length_remaining(tvb, offset); |
549 | 2.02k | tvbuff_t *excess; |
550 | | |
551 | 2.02k | if (length > 0) { |
552 | 1.65k | excess = tvb_new_subset_remaining(tvb, offset); |
553 | 1.65k | call_data_dissector(excess, pinfo, root); |
554 | 1.65k | } |
555 | 2.02k | } /* zdp_dump_excess */ |
556 | | |
557 | | /** |
558 | | *ZigBee helper function. Appends the info to the info column |
559 | | * |
560 | | *@param item item to display info on. |
561 | | *@param pinfo packet info struct. |
562 | | *@param format format string. |
563 | | */ |
564 | | void |
565 | | zbee_append_info(proto_item *item, packet_info *pinfo, const char *format, ...) |
566 | 2.07k | { |
567 | 2.07k | static char buffer[512]; |
568 | 2.07k | va_list ap; |
569 | | |
570 | 2.07k | va_start(ap, format); |
571 | 2.07k | vsnprintf(buffer, 512, format, ap); |
572 | 2.07k | va_end(ap); |
573 | | |
574 | 2.07k | proto_item_append_text(item, "%s", buffer); |
575 | | |
576 | 2.07k | col_append_str(pinfo->cinfo, COL_INFO, buffer); |
577 | 2.07k | } /* zbee_add_info */ |
578 | | |
579 | | /** |
580 | | *ZigBee helper function. extracts an EUI64 address and displays |
581 | | * |
582 | | *@param tree pointer to data tree Wireshark uses to display packet. |
583 | | *@param hfindex index to field information. |
584 | | *@param tvb pointer to buffer containing raw packet. |
585 | | *@param offset pointer to value of offset. |
586 | | *@param length length of the value to extract. |
587 | | *@param ti optional pointer to get the created proto item. |
588 | | *@return the value read out of the tvbuff and added to the tree. |
589 | | */ |
590 | | uint64_t |
591 | | zbee_parse_eui64(proto_tree *tree, int hfindex, tvbuff_t *tvb, unsigned *offset, unsigned length, proto_item **ti) |
592 | 2.05k | { |
593 | 2.05k | proto_item *item = NULL; |
594 | 2.05k | uint64_t value; |
595 | | |
596 | | /* Get the value. */ |
597 | 2.05k | value = tvb_get_letoh64(tvb, *offset); |
598 | | |
599 | | /* Display it. */ |
600 | 2.05k | item = proto_tree_add_eui64(tree, hfindex, tvb, *offset, length, value); |
601 | | |
602 | | /* Increment the offset. */ |
603 | 2.05k | *offset += (int)sizeof(uint64_t); |
604 | | |
605 | | /* return the item if requested. */ |
606 | 2.05k | if (ti) *ti = item; |
607 | | |
608 | | /* return the value. */ |
609 | 2.05k | return value; |
610 | 2.05k | } /* zbee_parse_eui64 */ |
611 | | |
612 | | /** |
613 | | *Parses and displays the status value. |
614 | | * |
615 | | *@param tree pointer to data tree Wireshark uses to display packet. |
616 | | *@param tvb pointer to buffer containing raw packet. |
617 | | *@param offset offset into the tvb to find the status value. |
618 | | */ |
619 | | uint8_t |
620 | | zdp_parse_status(proto_tree *tree, tvbuff_t *tvb, unsigned *offset) |
621 | 2.18k | { |
622 | 2.18k | uint8_t status; |
623 | | |
624 | | /* Get and display the flags. */ |
625 | 2.18k | status = tvb_get_uint8(tvb, *offset); |
626 | 2.18k | proto_tree_add_uint(tree, hf_zbee_zdp_status, tvb, *offset, (int)sizeof(uint8_t), status); |
627 | | |
628 | 2.18k | *offset += (int)sizeof(uint8_t); |
629 | | |
630 | 2.18k | return status; |
631 | 2.18k | } /* zdp_parse_status */ |
632 | | |
633 | | |
634 | | /** |
635 | | *Parses and displays the a channel mask. |
636 | | * |
637 | | *@param tree pointer to data tree Wireshark uses to display packet. |
638 | | *@param tvb pointer to buffer containing raw packet. |
639 | | *@param offset offset into the tvb to find the status value. |
640 | | */ |
641 | | uint32_t |
642 | | zdp_parse_chanmask(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, int hf_page, int hf_channel) |
643 | 3.07k | { |
644 | 3.07k | int i; |
645 | 3.07k | uint32_t mask; |
646 | 3.07k | uint8_t page; |
647 | 3.07k | proto_item *ti; |
648 | | |
649 | | /* Get and display the channel mask. */ |
650 | 3.07k | mask = tvb_get_letohl(tvb, *offset); |
651 | | |
652 | 3.07k | page = (uint8_t)((mask & ZBEE_ZDP_NWKUPDATE_PAGE) >> 27); |
653 | 3.07k | mask &= ZBEE_ZDP_NWKUPDATE_CHANNEL; |
654 | | |
655 | 3.07k | proto_tree_add_uint(tree, hf_page, tvb, *offset, 4, page); |
656 | 3.07k | ti = proto_tree_add_uint_format(tree, hf_channel, tvb, *offset, 4, mask, "Channels: "); |
657 | | |
658 | | /* Check if there are any channels to display. */ |
659 | 3.07k | if (mask==0) { |
660 | 338 | proto_item_append_text(ti, "None"); |
661 | 338 | } |
662 | | /* Display the first channel #. */ |
663 | 21.1k | for (i=0; i<32; i++) { |
664 | 20.6k | if ((1<<i) & mask) { |
665 | 2.58k | proto_item_append_text(ti, "%d", i++); |
666 | 2.58k | break; |
667 | 2.58k | } |
668 | 20.6k | } /* for */ |
669 | | /* Display the rest of the channels. */ |
670 | 61.3k | for (;i<32; i++) { |
671 | 58.3k | if (!((1<<i) & mask)) { |
672 | | /* This channel isn't selected. */ |
673 | 46.9k | continue; |
674 | 46.9k | } |
675 | | /* If the previous channel wasn't selected, then display the |
676 | | * channel number. |
677 | | */ |
678 | 11.3k | if ( ! ((1<<(i-1)) & mask) ) { |
679 | 10.1k | proto_item_append_text(ti, ", %d", i); |
680 | 10.1k | } |
681 | | /* |
682 | | * If the next channel is selected too, skip past it and display |
683 | | * a range of values instead. |
684 | | */ |
685 | 11.3k | if ((2<<i) & mask) { |
686 | 19.4k | while ((2<<i) & mask) i++; |
687 | 5.00k | proto_item_append_text(ti, "-%d", i); |
688 | 5.00k | } |
689 | 11.3k | } /* for */ |
690 | | |
691 | 3.07k | *offset += (int)sizeof(uint32_t); |
692 | | |
693 | 3.07k | return mask; |
694 | 3.07k | } /* zdp_parse_chanmask */ |
695 | | |
696 | | /** |
697 | | *Parses and displays MAC capability info flags. |
698 | | * |
699 | | *@param tree pointer to data tree Wireshark uses to display packet. |
700 | | *@param ettindex subtree index to create the node descriptor in, or -1 |
701 | | *@param tvb pointer to buffer containing raw packet. |
702 | | *@param offset offset into the tvb to find the node descriptor. |
703 | | */ |
704 | | uint8_t |
705 | | zdp_parse_cinfo(proto_tree *tree, int ettindex, tvbuff_t *tvb, unsigned *offset) |
706 | 122 | { |
707 | 122 | uint8_t flags; |
708 | 122 | static int * const cinfo[] = { |
709 | 122 | &hf_zbee_zdp_cinfo_alt_coord, |
710 | 122 | &hf_zbee_zdp_cinfo_ffd, |
711 | 122 | &hf_zbee_zdp_cinfo_power, |
712 | 122 | &hf_zbee_zdp_cinfo_idle_rx, |
713 | 122 | &hf_zbee_zdp_cinfo_security, |
714 | 122 | &hf_zbee_zdp_cinfo_alloc, |
715 | 122 | NULL |
716 | 122 | }; |
717 | | |
718 | | /* Get and display the flags. */ |
719 | 122 | proto_tree_add_bitmask_with_flags(tree, tvb, *offset, hf_zbee_zdp_cinfo, ettindex, cinfo, ENC_NA, BMT_NO_APPEND); |
720 | 122 | flags = tvb_get_uint8(tvb, *offset); |
721 | 122 | *offset += 1; |
722 | | |
723 | 122 | return flags; |
724 | 122 | } /* zdp_parse_cinfo */ |
725 | | |
726 | | /** |
727 | | *Parses and displays server mode flags. |
728 | | * |
729 | | *@param tree pointer to data tree Wireshark uses to display packet. |
730 | | *@param ettindex subtree index to create the node descriptor in, or -1 |
731 | | *@param tvb pointer to buffer containing raw packet. |
732 | | *@param offset offset into the tvb to find the node descriptor. |
733 | | */ |
734 | | uint16_t |
735 | | zdp_parse_server_flags(proto_tree *tree, int ettindex, tvbuff_t *tvb, unsigned *offset) |
736 | 33 | { |
737 | 33 | uint16_t flags; |
738 | 33 | static int * const server_flags[] = { |
739 | 33 | &hf_zbee_zdp_server_pri_trust, |
740 | 33 | &hf_zbee_zdp_server_bak_trust, |
741 | 33 | &hf_zbee_zdp_server_pri_bind, |
742 | 33 | &hf_zbee_zdp_server_bak_bind, |
743 | 33 | &hf_zbee_zdp_server_pri_disc, |
744 | 33 | &hf_zbee_zdp_server_bak_disc, |
745 | 33 | &hf_zbee_zdp_server_network_manager, |
746 | 33 | &hf_zbee_zdp_server_stk_compl_rev, |
747 | 33 | NULL |
748 | 33 | }; |
749 | | |
750 | | /* Get and display the flags. */ |
751 | 33 | flags = tvb_get_letohs(tvb, *offset); |
752 | 33 | proto_tree_add_bitmask_with_flags(tree, tvb, *offset, hf_zbee_zdp_server, ettindex, server_flags, ENC_LITTLE_ENDIAN, BMT_NO_APPEND); |
753 | 33 | *offset += 2; |
754 | | |
755 | 33 | return flags; |
756 | 33 | } /* zdp_parse_server_flags */ |
757 | | |
758 | | /** |
759 | | *Parses and displays a node descriptor to the specified |
760 | | * |
761 | | *@param tree pointer to data tree Wireshark uses to display packet. |
762 | | *@param ettindex subtree index to create the node descriptor in, or -1 |
763 | | *@param tvb pointer to buffer containing raw packet. |
764 | | *@param offset offset into the tvb to find the node descriptor. |
765 | | */ |
766 | | void |
767 | | zdp_parse_node_desc(proto_tree *tree, packet_info *pinfo, bool show_ver_flags, int ettindex, tvbuff_t *tvb, unsigned *offset, uint8_t version) |
768 | 93 | { |
769 | 93 | proto_item *ti; |
770 | 93 | proto_item *field_root = NULL; |
771 | 93 | proto_tree *field_tree = NULL; |
772 | | |
773 | 93 | uint16_t flags; |
774 | | /*uint8_t capability;*/ |
775 | | /*uint16_t mfr_code;*/ |
776 | | /*uint8_t max_buff;*/ |
777 | | /*uint16_t max_transfer;*/ |
778 | 93 | static int * const nodes[] = { |
779 | 93 | &hf_zbee_zdp_node_complex, |
780 | 93 | &hf_zbee_zdp_node_user, |
781 | 93 | &hf_zbee_zdp_node_frag_support, |
782 | 93 | &hf_zbee_zdp_node_freq_868, |
783 | 93 | &hf_zbee_zdp_node_freq_900, |
784 | 93 | &hf_zbee_zdp_node_freq_2400, |
785 | 93 | &hf_zbee_zdp_node_freq_eu_sub_ghz, |
786 | 93 | NULL |
787 | 93 | }; |
788 | | |
789 | 93 | if ((tree) && (ettindex != -1)) { |
790 | 93 | field_tree = proto_tree_add_subtree(tree, tvb, *offset, -1, ettindex, &field_root, "Node Descriptor"); |
791 | 93 | } |
792 | 0 | else |
793 | 0 | field_tree = tree; |
794 | | |
795 | | /* Get and display the flags. */ |
796 | 93 | flags = tvb_get_letohs(tvb, *offset); |
797 | 93 | if (tree) { |
798 | 92 | uint16_t type = flags & ZBEE_ZDP_NODE_TYPE; |
799 | 92 | ti = proto_tree_add_uint(field_tree, hf_zbee_zdp_node_type, tvb, *offset, 2, type); |
800 | | /* XXX - should probably be converted to proto_tree_add_bitmask */ |
801 | 92 | proto_tree_add_bitmask_list(field_tree, tvb, *offset, 2, nodes, ENC_LITTLE_ENDIAN); |
802 | | |
803 | | /* Enumerate the type field. */ |
804 | 92 | if (type == ZBEE_ZDP_NODE_TYPE_COORD) proto_item_append_text(ti, " (Coordinator)"); |
805 | 68 | else if (type == ZBEE_ZDP_NODE_TYPE_FFD) proto_item_append_text(ti, " (Router)"); |
806 | 51 | else if (type == ZBEE_ZDP_NODE_TYPE_RFD) proto_item_append_text(ti, " (End Device)"); |
807 | 34 | else proto_item_append_text(ti, " (Reserved)"); |
808 | 92 | } |
809 | 93 | *offset += 2; |
810 | | |
811 | | /* Get and display the capability flags. */ |
812 | | /*capability =*/ zdp_parse_cinfo(field_tree, ett_zbee_zdp_cinfo, tvb, offset); |
813 | 93 | proto_tree_add_item(field_tree, hf_zbee_zdp_node_manufacturer, tvb, *offset, 2, ENC_LITTLE_ENDIAN); |
814 | 93 | *offset += 2; |
815 | 93 | proto_tree_add_item(field_tree, hf_zbee_zdp_node_max_buffer, tvb, *offset, 1, ENC_LITTLE_ENDIAN); |
816 | 93 | *offset += 1; |
817 | 93 | proto_tree_add_item(field_tree, hf_zbee_zdp_node_max_incoming_transfer, tvb, *offset, 2, ENC_LITTLE_ENDIAN); |
818 | 93 | *offset += 2; |
819 | | |
820 | | /* Get and display the server flags. */ |
821 | 93 | if (version >= ZBEE_VERSION_2007) { |
822 | 2 | uint16_t ver_flags; |
823 | 2 | static int * const descriptors[] = { |
824 | 2 | &hf_zbee_zdp_dcf_eaela, |
825 | 2 | &hf_zbee_zdp_dcf_esdla, |
826 | 2 | NULL |
827 | 2 | }; |
828 | | |
829 | 2 | ver_flags = zdp_parse_server_flags(field_tree, ett_zbee_zdp_server, tvb, offset) & ZBEE_ZDP_NODE_SERVER_STACK_COMPL_REV; |
830 | 2 | if (show_ver_flags && ver_flags) { |
831 | 0 | zbee_append_info(tree, pinfo, ", Rev: %d", |
832 | 0 | (ver_flags >> ws_ctz(ZBEE_ZDP_NODE_SERVER_STACK_COMPL_REV))); |
833 | 0 | } |
834 | 2 | proto_tree_add_item(field_tree, hf_zbee_zdp_node_max_outgoing_transfer, tvb, *offset, 2, ENC_LITTLE_ENDIAN); |
835 | 2 | *offset += 2; |
836 | 2 | proto_tree_add_bitmask_with_flags(field_tree, tvb, *offset, hf_zbee_zdp_dcf, ett_zbee_zdp_descriptor_capability_field, descriptors, ENC_NA, BMT_NO_APPEND); |
837 | 2 | *offset += 1; |
838 | 2 | } |
839 | | |
840 | | /* Correct the length of the subtree. */ |
841 | 93 | if (tree && (ettindex != -1)) { |
842 | 88 | proto_item_set_len(field_root, *offset); |
843 | 88 | } |
844 | | |
845 | 93 | } /* zdp_parse_node_desc */ |
846 | | |
847 | | |
848 | | static const value_string zbee_zdp_power_mode_vals[] = { |
849 | | { ZBEE_ZDP_POWER_MODE_RX_ON, "Receiver Always On" }, |
850 | | { ZBEE_ZDP_POWER_MODE_RX_PERIODIC, "Receiver Periodically On" }, |
851 | | { ZBEE_ZDP_POWER_MODE_RX_STIMULATE, "Receiver On When Stimulated" }, |
852 | | |
853 | | { 0, NULL } |
854 | | }; |
855 | | |
856 | | static const value_string zbee_zdp_power_level_vals[] = { |
857 | | { ZBEE_ZDP_POWER_LEVEL_FULL, "Full" }, |
858 | | { ZBEE_ZDP_POWER_LEVEL_OK, "OK" }, |
859 | | { ZBEE_ZDP_POWER_LEVEL_LOW, "Low" }, |
860 | | { ZBEE_ZDP_POWER_LEVEL_CRITICAL, "Critical" }, |
861 | | |
862 | | { 0, NULL } |
863 | | }; |
864 | | /** |
865 | | *Parses and displays a node descriptor to the specified |
866 | | * |
867 | | *@param tree pointer to data tree Wireshark uses to display packet. |
868 | | *@param ettindex subtree index to create the node descriptor in, or -1 |
869 | | *@param tvb pointer to buffer containing raw packet. |
870 | | *@param offset offset into the tvb to find the node descriptor. |
871 | | */ |
872 | | void |
873 | | zdp_parse_power_desc(proto_tree *tree, int ettindex, tvbuff_t *tvb, unsigned *offset) |
874 | 17 | { |
875 | 17 | static int * const power_desc[] = { |
876 | 17 | &hf_zbee_zdp_power_mode, |
877 | 17 | &hf_zbee_zdp_power_avail_ac, |
878 | 17 | &hf_zbee_zdp_power_avail_recharge, |
879 | 17 | &hf_zbee_zdp_power_avail_dispose, |
880 | 17 | &hf_zbee_zdp_power_source_ac, |
881 | 17 | &hf_zbee_zdp_power_source_recharge, |
882 | 17 | &hf_zbee_zdp_power_source_dispose, |
883 | 17 | &hf_zbee_zdp_power_level, |
884 | 17 | NULL |
885 | 17 | }; |
886 | | |
887 | 17 | proto_tree_add_bitmask_with_flags(tree, tvb, *offset, hf_zbee_zdp_power, ettindex, power_desc, ENC_LITTLE_ENDIAN, BMT_NO_APPEND); |
888 | 17 | *offset += 2; |
889 | 17 | } /* zdp_parse_power_desc */ |
890 | | |
891 | | /** |
892 | | *Parses and displays a simple descriptor to the specified |
893 | | * |
894 | | *@param tree pointer to data tree Wireshark uses to display packet. |
895 | | *@param ettindex subtree index to create the node descriptor in, or -1 |
896 | | *@param tvb pointer to buffer containing raw packet. |
897 | | *@param offset offset into the tvb to find the node descriptor. |
898 | | */ |
899 | | void |
900 | | zdp_parse_simple_desc(proto_tree *tree, int ettindex, tvbuff_t *tvb, unsigned *offset, uint8_t version) |
901 | 118 | { |
902 | 118 | proto_item *field_root = NULL; |
903 | 118 | proto_tree *field_tree = NULL, *cluster_tree = NULL; |
904 | 118 | unsigned i, sizeof_cluster; |
905 | | |
906 | 118 | int hf_app_device; |
907 | 118 | uint32_t profile; |
908 | 118 | uint32_t in_count, out_count; |
909 | | |
910 | 118 | if ((tree) && (ettindex != -1)) { |
911 | 118 | field_tree = proto_tree_add_subtree(tree, tvb, *offset, -1, ettindex, &field_root, "Simple Descriptor"); |
912 | 118 | } |
913 | 0 | else field_tree = tree; |
914 | | |
915 | 118 | proto_tree_add_item(field_tree, hf_zbee_zdp_endpoint, tvb, *offset, 1, ENC_LITTLE_ENDIAN); |
916 | 118 | *offset += 1; |
917 | | |
918 | 118 | proto_tree_add_item_ret_uint(field_tree, hf_zbee_zdp_profile, tvb, *offset, 2, ENC_LITTLE_ENDIAN, &profile); |
919 | 118 | *offset += 2; |
920 | | |
921 | 118 | switch (profile) |
922 | 118 | { |
923 | 0 | case ZBEE_PROFILE_ZLL: hf_app_device = hf_zbee_zdp_simple_zll_app_device; break; |
924 | 0 | case ZBEE_PROFILE_HA: hf_app_device = hf_zbee_zdp_simple_ha_app_device; break; |
925 | 115 | default: hf_app_device = hf_zbee_zdp_simple_app_device; break; |
926 | 118 | } |
927 | 115 | proto_tree_add_item(field_tree, hf_app_device, tvb, *offset, 2, ENC_LITTLE_ENDIAN); |
928 | 115 | *offset += 2; |
929 | | |
930 | 115 | proto_tree_add_item(field_tree, hf_zbee_zdp_simple_app_version, tvb, *offset, 1, ENC_LITTLE_ENDIAN); |
931 | 115 | *offset += 1; |
932 | | |
933 | 115 | sizeof_cluster = (version >= ZBEE_VERSION_2007)?(int)sizeof(uint16_t):(int)sizeof(uint8_t); |
934 | | |
935 | 115 | proto_tree_add_item_ret_uint(field_tree, hf_zbee_zdp_in_count, tvb, *offset, 1, ENC_LITTLE_ENDIAN, &in_count); |
936 | 115 | *offset += 1; |
937 | | |
938 | 115 | if ((tree) && (in_count)) { |
939 | 81 | cluster_tree = proto_tree_add_subtree(field_tree, tvb, *offset, in_count*sizeof_cluster, |
940 | 81 | ett_zbee_zdp_node_in, NULL, "Input Cluster List"); |
941 | 81 | } |
942 | 3.35k | for (i=0; i<in_count && tvb_bytes_exist(tvb, *offset, sizeof_cluster); i++) { |
943 | 3.23k | proto_tree_add_item(cluster_tree, hf_zbee_zdp_in_cluster, tvb, *offset, sizeof_cluster, ENC_LITTLE_ENDIAN); |
944 | 3.23k | *offset += sizeof_cluster; |
945 | 3.23k | } |
946 | | |
947 | 115 | proto_tree_add_item_ret_uint(field_tree, hf_zbee_zdp_out_count, tvb, *offset, 1, ENC_LITTLE_ENDIAN, &out_count); |
948 | 115 | *offset += 1; |
949 | 115 | if ((tree) && (out_count)) { |
950 | 47 | cluster_tree = proto_tree_add_subtree(field_tree, tvb, *offset, out_count*sizeof_cluster, |
951 | 47 | ett_zbee_zdp_node_out, NULL, "Output Cluster List"); |
952 | 47 | } |
953 | 1.24k | for (i=0; (i<out_count) && tvb_bytes_exist(tvb, *offset, sizeof_cluster); i++) { |
954 | 1.12k | proto_tree_add_item(cluster_tree, hf_zbee_zdp_out_cluster, tvb, *offset, sizeof_cluster, ENC_LITTLE_ENDIAN); |
955 | 1.12k | *offset += sizeof_cluster; |
956 | 1.12k | } |
957 | | |
958 | 115 | if (tree && (ettindex != -1)) { |
959 | 71 | proto_item_set_len(field_root, *offset); |
960 | 71 | } |
961 | 115 | } /* zdp_parse_simple_desc */ |
962 | | |
963 | | /** |
964 | | *Parses and displays a simple descriptor to the specified |
965 | | * |
966 | | *@param tree pointer to data tree Wireshark uses to display packet. |
967 | | *@param ettindex subtree index to create the node descriptor in, or -1 |
968 | | *@param tvb pointer to buffer containing raw packet. |
969 | | *@param offset offset into the tvb to find the node descriptor. |
970 | | *@param length length of the complex descriptor. |
971 | | */ |
972 | | void |
973 | | zdp_parse_complex_desc(packet_info *pinfo, proto_tree *tree, int ettindex, tvbuff_t *tvb, unsigned *offset, unsigned length) |
974 | 97 | { |
975 | 97 | enum { |
976 | 97 | tag_charset = 1, |
977 | 97 | tag_mfr_name = 2, |
978 | 97 | tag_model_name = 3, |
979 | 97 | tag_serial_no = 4, |
980 | 97 | tag_url = 5, |
981 | 97 | tag_icon = 6, |
982 | 97 | tag_icon_url = 7 |
983 | 97 | }; |
984 | | |
985 | 97 | static const char *tag_name[] = { |
986 | 97 | "Reserved Tag", |
987 | 97 | "languageChar", |
988 | 97 | "manufacturerName", |
989 | 97 | "modelName", |
990 | 97 | "serialNumber", |
991 | 97 | "deviceURL", |
992 | 97 | "icon", |
993 | 97 | "outliner" |
994 | 97 | }; |
995 | | |
996 | 97 | proto_tree *field_tree; |
997 | | |
998 | 97 | char *complex; |
999 | 97 | uint8_t tag; |
1000 | | |
1001 | 97 | if ((tree) && (ettindex != -1)) { |
1002 | 0 | field_tree = proto_tree_add_subtree(tree, tvb, *offset, length, ettindex, NULL, "Complex Descriptor"); |
1003 | 0 | } |
1004 | 97 | else |
1005 | 97 | field_tree = tree; |
1006 | | |
1007 | 97 | tag = tvb_get_uint8(tvb, *offset); |
1008 | 97 | if (tag == tag_charset) { |
1009 | 9 | char *lang_str[2]; |
1010 | 9 | uint8_t ch; |
1011 | 9 | uint8_t charset = tvb_get_uint8(tvb, *offset + 3); |
1012 | 9 | const char *charset_str; |
1013 | | |
1014 | 9 | if (charset == 0x00) charset_str = "ASCII"; |
1015 | 4 | else charset_str = "Unknown Character Set"; |
1016 | | |
1017 | 9 | ch = tvb_get_uint8(tvb, *offset + 1); |
1018 | 9 | lang_str[0] = format_char(pinfo->pool, ch); |
1019 | 9 | ch = tvb_get_uint8(tvb, *offset + 2); |
1020 | 9 | lang_str[1] = format_char(pinfo->pool, ch); |
1021 | | |
1022 | 9 | complex = wmem_strdup_printf(pinfo->pool, "<%s>%s%s, %s</%s>", tag_name[tag_charset], lang_str[0], lang_str[1], charset_str, tag_name[tag_charset]); |
1023 | 9 | } |
1024 | 88 | else if (tag == tag_icon) { |
1025 | | /* TODO: */ |
1026 | 2 | complex = wmem_strdup_printf(pinfo->pool, "<%s>FixMe</%s>", tag_name[tag_icon], tag_name[tag_icon]); |
1027 | 2 | } |
1028 | 86 | else { |
1029 | 86 | char *str; |
1030 | | |
1031 | 86 | str = (char *) tvb_get_string_enc(pinfo->pool, tvb, *offset+1, length-1, ENC_ASCII); |
1032 | | /* Handles all string type XML tags. */ |
1033 | 86 | if (tag <= tag_icon_url) { |
1034 | 7 | complex = wmem_strdup_printf(pinfo->pool, "<%s>%s</%s>", tag_name[tag], str, tag_name[tag]); |
1035 | 7 | } |
1036 | 79 | else { |
1037 | 79 | complex = wmem_strdup_printf(pinfo->pool, "<%s>%s</%s>", tag_name[0], str, tag_name[0]); |
1038 | 79 | } |
1039 | 86 | } |
1040 | 97 | proto_tree_add_string(field_tree, hf_zbee_zdp_complex, tvb, *offset, length, complex); |
1041 | 97 | *offset += (length); |
1042 | 97 | } /* zdp_parse_complex_desc */ |
1043 | | |
1044 | | /** |
1045 | | *ZigBee Device Profile dissector for wireshark. |
1046 | | * |
1047 | | *@param tvb pointer to buffer containing raw packet. |
1048 | | *@param pinfo pointer to packet information fields |
1049 | | *@param tree pointer to data tree Wireshark uses to display packet. |
1050 | | */ |
1051 | | static int |
1052 | | dissect_zbee_zdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data) |
1053 | 4.45k | { |
1054 | 4.45k | proto_tree *zdp_tree; |
1055 | 4.45k | proto_item *proto_root; |
1056 | 4.45k | tvbuff_t *zdp_tvb; |
1057 | | |
1058 | 4.45k | uint8_t seqno; |
1059 | 4.45k | uint16_t cluster; |
1060 | 4.45k | unsigned offset = 0; |
1061 | 4.45k | zbee_nwk_packet *nwk; |
1062 | | |
1063 | | /* Reject the packet if data is NULL */ |
1064 | 4.45k | if (data == NULL) |
1065 | 0 | return 0; |
1066 | 4.45k | nwk = (zbee_nwk_packet *)data; |
1067 | | |
1068 | | /* Create the protocol tree. */ |
1069 | 4.45k | proto_root = proto_tree_add_protocol_format(tree, proto_zbee_zdp, tvb, offset, tvb_captured_length(tvb), "ZigBee Device Profile"); |
1070 | 4.45k | zdp_tree = proto_item_add_subtree(proto_root, ett_zbee_zdp); |
1071 | | |
1072 | | #if 0 |
1073 | | /* Overwrite the protocol column */ |
1074 | | col_set_str(pinfo->cinfo, COL_PROTOCOL, "ZigBee ZDP"); |
1075 | | #endif |
1076 | | /* Get and display the sequence number. */ |
1077 | 4.45k | seqno = tvb_get_uint8(tvb, offset); |
1078 | 4.45k | proto_tree_add_uint(zdp_tree, hf_zbee_zdp_seqno, tvb, offset, (int)sizeof(uint8_t), seqno); |
1079 | | |
1080 | 4.45k | offset += (int)sizeof(uint8_t); |
1081 | | |
1082 | 4.45k | if (nwk->version <= ZBEE_VERSION_2004) { |
1083 | | /* ZigBee 2004 and earlier had different cluster identifiers, need to convert |
1084 | | * them into the ZigBee 2006 & later values. */ |
1085 | 4.03k | cluster = zdp_convert_2003cluster((uint8_t)nwk->cluster_id); |
1086 | 4.03k | } |
1087 | 419 | else { |
1088 | 419 | cluster = nwk->cluster_id; |
1089 | 419 | } |
1090 | | |
1091 | | /* Update info. */ |
1092 | 4.45k | proto_item_append_text(zdp_tree, ", %s", val_to_str_const(cluster, zbee_zdp_cluster_names, "Unknown Cluster")); |
1093 | 4.45k | col_set_str(pinfo->cinfo, COL_INFO, val_to_str_const(cluster, zbee_zdp_cluster_names, "Unknown Cluster")); |
1094 | | |
1095 | | /* Create a new tvb for the zdp message. */ |
1096 | 4.45k | zdp_tvb = tvb_new_subset_remaining(tvb, offset); |
1097 | | |
1098 | 4.45k | switch (cluster) { |
1099 | 43 | case ZBEE_ZDP_REQ_NWK_ADDR: |
1100 | 43 | dissect_zbee_zdp_req_nwk_addr(zdp_tvb, pinfo, zdp_tree); |
1101 | 43 | break; |
1102 | 31 | case ZBEE_ZDP_REQ_IEEE_ADDR: |
1103 | 31 | dissect_zbee_zdp_req_ext_addr(zdp_tvb, pinfo, zdp_tree); |
1104 | 31 | break; |
1105 | 28 | case ZBEE_ZDP_REQ_NODE_DESC: |
1106 | 28 | dissect_zbee_zdp_req_node_desc(zdp_tvb, pinfo, zdp_tree); |
1107 | 28 | break; |
1108 | 20 | case ZBEE_ZDP_REQ_POWER_DESC: |
1109 | 20 | dissect_zbee_zdp_req_power_desc(zdp_tvb, pinfo, zdp_tree); |
1110 | 20 | break; |
1111 | 25 | case ZBEE_ZDP_REQ_SIMPLE_DESC: |
1112 | 25 | dissect_zbee_zdp_req_simple_desc(zdp_tvb, pinfo, zdp_tree); |
1113 | 25 | break; |
1114 | 25 | case ZBEE_ZDP_REQ_ACTIVE_EP: |
1115 | 25 | dissect_zbee_zdp_req_active_ep(zdp_tvb, pinfo, zdp_tree); |
1116 | 25 | break; |
1117 | 98 | case ZBEE_ZDP_REQ_MATCH_DESC: |
1118 | 98 | dissect_zbee_zdp_req_match_desc(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1119 | 98 | break; |
1120 | 13 | case ZBEE_ZDP_REQ_COMPLEX_DESC: |
1121 | 13 | dissect_zbee_zdp_req_complex_desc(zdp_tvb, pinfo, zdp_tree); |
1122 | 13 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1123 | 13 | break; |
1124 | 12 | case ZBEE_ZDP_REQ_USER_DESC: |
1125 | 12 | dissect_zbee_zdp_req_user_desc(zdp_tvb, pinfo, zdp_tree); |
1126 | 12 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1127 | 12 | break; |
1128 | 19 | case ZBEE_ZDP_REQ_DISCOVERY_CACHE: |
1129 | 19 | dissect_zbee_zdp_req_discovery_cache(zdp_tvb, pinfo, zdp_tree); |
1130 | 19 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1131 | 19 | break; |
1132 | 11 | case ZBEE_ZDP_REQ_DEVICE_ANNCE: |
1133 | 11 | dissect_zbee_zdp_device_annce(zdp_tvb, pinfo, zdp_tree); |
1134 | 11 | break; |
1135 | 18 | case ZBEE_ZDP_REQ_SET_USER_DESC: |
1136 | 18 | dissect_zbee_zdp_req_set_user_desc(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1137 | 18 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1138 | 18 | break; |
1139 | 26 | case ZBEE_ZDP_REQ_SYSTEM_SERVER_DISC: |
1140 | 26 | dissect_zbee_zdp_req_system_server_disc(zdp_tvb, pinfo, zdp_tree); |
1141 | 26 | break; |
1142 | 75 | case ZBEE_ZDP_REQ_STORE_DISCOVERY: |
1143 | 75 | dissect_zbee_zdp_req_store_discovery(zdp_tvb, pinfo, zdp_tree); |
1144 | 75 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1145 | 75 | break; |
1146 | 133 | case ZBEE_ZDP_REQ_STORE_NODE_DESC: |
1147 | 133 | dissect_zbee_zdp_req_store_node_desc(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1148 | 133 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1149 | 133 | break; |
1150 | 28 | case ZBEE_ZDP_REQ_STORE_POWER_DESC: |
1151 | 28 | dissect_zbee_zdp_req_store_power_desc(zdp_tvb, pinfo, zdp_tree); |
1152 | 28 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1153 | 28 | break; |
1154 | 96 | case ZBEE_ZDP_REQ_STORE_ACTIVE_EP: |
1155 | 96 | dissect_zbee_zdp_req_store_active_ep(zdp_tvb, pinfo, zdp_tree); |
1156 | 96 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1157 | 96 | break; |
1158 | 172 | case ZBEE_ZDP_REQ_STORE_SIMPLE_DESC: |
1159 | 172 | dissect_zbee_zdp_req_store_simple_desc(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1160 | 172 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1161 | 172 | break; |
1162 | 10 | case ZBEE_ZDP_REQ_REMOVE_NODE_CACHE: |
1163 | 10 | dissect_zbee_zdp_req_remove_node_cache(zdp_tvb, pinfo, zdp_tree); |
1164 | 10 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1165 | 10 | break; |
1166 | 0 | case ZBEE_ZDP_REQ_FIND_NODE_CACHE: |
1167 | 0 | dissect_zbee_zdp_req_find_node_cache(zdp_tvb, pinfo, zdp_tree); |
1168 | 0 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1169 | 0 | break; |
1170 | 1 | case ZBEE_ZDP_REQ_EXT_SIMPLE_DESC: |
1171 | 1 | dissect_zbee_zdp_req_ext_simple_desc(zdp_tvb, pinfo, zdp_tree); |
1172 | 1 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1173 | 1 | break; |
1174 | 0 | case ZBEE_ZDP_REQ_EXT_ACTIVE_EP: |
1175 | 0 | dissect_zbee_zdp_req_ext_active_ep(zdp_tvb, pinfo, zdp_tree); |
1176 | 0 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1177 | 0 | break; |
1178 | 30 | case ZBEE_ZDP_REQ_PARENT_ANNCE: |
1179 | 30 | dissect_zbee_zdp_parent_annce(zdp_tvb, pinfo, zdp_tree); |
1180 | 30 | break; |
1181 | 79 | case ZBEE_ZDP_REQ_END_DEVICE_BIND: |
1182 | 79 | dissect_zbee_zdp_req_end_device_bind(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1183 | 79 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1184 | 79 | break; |
1185 | 34 | case ZBEE_ZDP_REQ_BIND: |
1186 | 34 | dissect_zbee_zdp_req_bind(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1187 | 34 | break; |
1188 | 1 | case ZBEE_ZDP_REQ_UNBIND: |
1189 | 1 | dissect_zbee_zdp_req_unbind(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1190 | 1 | break; |
1191 | 4 | case ZBEE_ZDP_REQ_BIND_REGISTER: |
1192 | 4 | dissect_zbee_zdp_req_bind_register(zdp_tvb, pinfo, zdp_tree); |
1193 | 4 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1194 | 4 | break; |
1195 | 42 | case ZBEE_ZDP_REQ_REPLACE_DEVICE: |
1196 | 42 | dissect_zbee_zdp_req_replace_device(zdp_tvb, pinfo, zdp_tree); |
1197 | 42 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1198 | 42 | break; |
1199 | 42 | case ZBEE_ZDP_REQ_STORE_BAK_BIND_ENTRY: |
1200 | 42 | dissect_zbee_zdp_req_store_bak_bind_entry(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1201 | 42 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1202 | 42 | break; |
1203 | 25 | case ZBEE_ZDP_REQ_REMOVE_BAK_BIND_ENTRY: |
1204 | 25 | dissect_zbee_zdp_req_remove_bak_bind_entry(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1205 | 25 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1206 | 25 | break; |
1207 | 67 | case ZBEE_ZDP_REQ_BACKUP_BIND_TABLE: |
1208 | 67 | dissect_zbee_zdp_req_backup_bind_table(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1209 | 67 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1210 | 67 | break; |
1211 | 18 | case ZBEE_ZDP_REQ_RECOVER_BIND_TABLE: |
1212 | 18 | dissect_zbee_zdp_req_recover_bind_table(zdp_tvb, pinfo, zdp_tree); |
1213 | 18 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1214 | 18 | break; |
1215 | 15 | case ZBEE_ZDP_REQ_BACKUP_SOURCE_BIND: |
1216 | 15 | dissect_zbee_zdp_req_backup_source_bind(zdp_tvb, pinfo, zdp_tree); |
1217 | 15 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1218 | 15 | break; |
1219 | 37 | case ZBEE_ZDP_REQ_RECOVER_SOURCE_BIND: |
1220 | 37 | dissect_zbee_zdp_req_recover_source_bind(zdp_tvb, pinfo, zdp_tree); |
1221 | 37 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1222 | 37 | break; |
1223 | 101 | case ZBEE_ZDP_REQ_CLEAR_ALL_BINDINGS: |
1224 | 101 | dissect_zbee_zdp_req_clear_all_bindings(zdp_tvb, pinfo, zdp_tree); |
1225 | 101 | break; |
1226 | 81 | case ZBEE_ZDP_REQ_MGMT_NWK_DISC: |
1227 | 81 | dissect_zbee_zdp_req_mgmt_nwk_disc(zdp_tvb, pinfo, zdp_tree, hf_zbee_zdp_scan_channel); |
1228 | 81 | break; |
1229 | 15 | case ZBEE_ZDP_REQ_MGMT_LQI: |
1230 | 15 | dissect_zbee_zdp_req_mgmt_lqi(zdp_tvb, pinfo, zdp_tree); |
1231 | 15 | break; |
1232 | 36 | case ZBEE_ZDP_REQ_MGMT_RTG: |
1233 | 36 | dissect_zbee_zdp_req_mgmt_rtg(zdp_tvb, pinfo, zdp_tree); |
1234 | 36 | break; |
1235 | 20 | case ZBEE_ZDP_REQ_MGMT_BIND: |
1236 | 20 | dissect_zbee_zdp_req_mgmt_bind(zdp_tvb, pinfo, zdp_tree); |
1237 | 20 | break; |
1238 | 47 | case ZBEE_ZDP_REQ_MGMT_LEAVE: |
1239 | 47 | dissect_zbee_zdp_req_mgmt_leave(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1240 | 47 | break; |
1241 | 25 | case ZBEE_ZDP_REQ_MGMT_DIRECT_JOIN: |
1242 | 25 | dissect_zbee_zdp_req_mgmt_direct_join(zdp_tvb, pinfo, zdp_tree); |
1243 | 25 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1244 | 25 | break; |
1245 | 41 | case ZBEE_ZDP_REQ_MGMT_PERMIT_JOIN: |
1246 | 41 | dissect_zbee_zdp_req_mgmt_permit_join(zdp_tvb, pinfo, zdp_tree); |
1247 | 41 | break; |
1248 | 2 | case ZBEE_ZDP_REQ_MGMT_CACHE: |
1249 | 2 | dissect_zbee_zdp_req_mgmt_cache(zdp_tvb, pinfo, zdp_tree); |
1250 | 2 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1251 | 2 | break; |
1252 | 73 | case ZBEE_ZDP_REQ_MGMT_NWKUPDATE: |
1253 | 73 | dissect_zbee_zdp_req_mgmt_nwkupdate(zdp_tvb, pinfo, zdp_tree); |
1254 | 73 | break; |
1255 | 132 | case ZBEE_ZDP_REQ_MGMT_NWKUPDATE_ENH: |
1256 | 132 | dissect_zbee_zdp_req_mgmt_nwkupdate_enh(zdp_tvb, pinfo, zdp_tree); |
1257 | 132 | break; |
1258 | 20 | case ZBEE_ZDP_REQ_MGMT_IEEE_JOIN_LIST: |
1259 | 20 | dissect_zbee_zdp_req_mgmt_ieee_join_list(zdp_tvb, pinfo, zdp_tree); |
1260 | 20 | break; |
1261 | 86 | case ZBEE_ZDP_REQ_MGMT_NWK_BEACON_SURVEY: |
1262 | 86 | dissect_zbee_zdp_req_mgmt_nwk_beacon_survey(zdp_tvb, pinfo, zdp_tree); |
1263 | 86 | break; |
1264 | 31 | case ZBEE_ZDP_REQ_SECURITY_START_KEY_NEGOTIATION: |
1265 | 31 | dissect_zbee_zdp_req_security_start_key_negotiation(zdp_tvb, pinfo, zdp_tree); |
1266 | 31 | break; |
1267 | 47 | case ZBEE_ZDP_REQ_SECURITY_GET_AUTH_TOKEN: |
1268 | 47 | dissect_zbee_zdp_req_security_get_auth_token(zdp_tvb, pinfo, zdp_tree); |
1269 | 47 | break; |
1270 | 11 | case ZBEE_ZDP_REQ_SECURITY_GET_AUTH_LEVEL: |
1271 | 11 | dissect_zbee_zdp_req_security_get_auth_level(zdp_tvb, pinfo, zdp_tree); |
1272 | 11 | break; |
1273 | 0 | case ZBEE_ZDP_REQ_SECURITY_SET_CONFIGURATION: |
1274 | 0 | dissect_zbee_zdp_req_security_set_configuration(zdp_tvb, pinfo, zdp_tree); |
1275 | 0 | break; |
1276 | 9 | case ZBEE_ZDP_REQ_SECURITY_GET_CONFIGURATION: |
1277 | 9 | dissect_zbee_zdp_req_security_get_configuration(zdp_tvb, pinfo, zdp_tree); |
1278 | 9 | break; |
1279 | 12 | case ZBEE_ZDP_REQ_SECURITY_START_KEY_UPDATE: |
1280 | 12 | dissect_zbee_zdp_req_security_start_key_update(zdp_tvb, pinfo, zdp_tree); |
1281 | 12 | break; |
1282 | 41 | case ZBEE_ZDP_REQ_SECURITY_DECOMMISSION: |
1283 | 41 | dissect_zbee_zdp_req_security_decommission(zdp_tvb, pinfo, zdp_tree); |
1284 | 41 | break; |
1285 | 38 | case ZBEE_ZDP_REQ_SECURITY_CHALLENGE: |
1286 | 38 | dissect_zbee_zdp_req_security_challenge(zdp_tvb, pinfo, zdp_tree); |
1287 | 38 | break; |
1288 | 94 | case ZBEE_ZDP_RSP_NWK_ADDR: |
1289 | 94 | dissect_zbee_zdp_rsp_nwk_addr(zdp_tvb, pinfo, zdp_tree); |
1290 | 94 | break; |
1291 | 106 | case ZBEE_ZDP_RSP_IEEE_ADDR: |
1292 | 106 | dissect_zbee_zdp_rsp_ext_addr(zdp_tvb, pinfo, zdp_tree); |
1293 | 106 | break; |
1294 | 52 | case ZBEE_ZDP_RSP_NODE_DESC: |
1295 | 52 | dissect_zbee_zdp_rsp_node_desc(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1296 | 52 | break; |
1297 | 21 | case ZBEE_ZDP_RSP_POWER_DESC: |
1298 | 21 | dissect_zbee_zdp_rsp_power_desc(zdp_tvb, pinfo, zdp_tree); |
1299 | 21 | break; |
1300 | 8 | case ZBEE_ZDP_RSP_SIMPLE_DESC: |
1301 | 8 | dissect_zbee_zdp_rsp_simple_desc(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1302 | 8 | break; |
1303 | 7 | case ZBEE_ZDP_RSP_ACTIVE_EP: |
1304 | 7 | dissect_zbee_zdp_rsp_active_ep(zdp_tvb, pinfo, zdp_tree); |
1305 | 7 | break; |
1306 | 37 | case ZBEE_ZDP_RSP_MATCH_DESC: |
1307 | 37 | dissect_zbee_zdp_rsp_match_desc(zdp_tvb, pinfo, zdp_tree); |
1308 | 37 | break; |
1309 | 199 | case ZBEE_ZDP_RSP_COMPLEX_DESC: |
1310 | 199 | dissect_zbee_zdp_rsp_complex_desc(zdp_tvb, pinfo, zdp_tree); |
1311 | 199 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1312 | 199 | break; |
1313 | 34 | case ZBEE_ZDP_RSP_USER_DESC: |
1314 | 34 | dissect_zbee_zdp_rsp_user_desc(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1315 | 34 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1316 | 34 | break; |
1317 | 22 | case ZBEE_ZDP_RSP_DISCOVERY_CACHE: |
1318 | 22 | dissect_zbee_zdp_rsp_discovery_cache(zdp_tvb, pinfo, zdp_tree); |
1319 | 22 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1320 | 22 | break; |
1321 | 20 | case ZBEE_ZDP_RSP_CONF_USER_DESC: |
1322 | 20 | dissect_zbee_zdp_rsp_user_desc_conf(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1323 | 20 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1324 | 20 | break; |
1325 | 5 | case ZBEE_ZDP_RSP_SYSTEM_SERVER_DISC: |
1326 | 5 | dissect_zbee_zdp_rsp_system_server_disc(zdp_tvb, pinfo, zdp_tree); |
1327 | 5 | break; |
1328 | 0 | case ZBEE_ZDP_RSP_STORE_DISCOVERY: |
1329 | 0 | dissect_zbee_zdp_rsp_discovery_store(zdp_tvb, pinfo, zdp_tree); |
1330 | 0 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1331 | 0 | break; |
1332 | 27 | case ZBEE_ZDP_RSP_STORE_NODE_DESC: |
1333 | 27 | dissect_zbee_zdp_rsp_store_node_desc(zdp_tvb, pinfo, zdp_tree); |
1334 | 27 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1335 | 27 | break; |
1336 | 7 | case ZBEE_ZDP_RSP_STORE_POWER_DESC: |
1337 | 7 | dissect_zbee_zdp_rsp_store_power_desc(zdp_tvb, pinfo, zdp_tree); |
1338 | 7 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1339 | 7 | break; |
1340 | 0 | case ZBEE_ZDP_RSP_STORE_ACTIVE_EP: |
1341 | 0 | dissect_zbee_zdp_rsp_store_active_ep(zdp_tvb, pinfo, zdp_tree); |
1342 | 0 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1343 | 0 | break; |
1344 | 1 | case ZBEE_ZDP_RSP_STORE_SIMPLE_DESC: |
1345 | 1 | dissect_zbee_zdp_rsp_store_simple_desc(zdp_tvb, pinfo, zdp_tree); |
1346 | 1 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1347 | 1 | break; |
1348 | 24 | case ZBEE_ZDP_RSP_REMOVE_NODE_CACHE: |
1349 | 24 | dissect_zbee_zdp_rsp_remove_node_cache(zdp_tvb, pinfo, zdp_tree); |
1350 | 24 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1351 | 24 | break; |
1352 | 0 | case ZBEE_ZDP_RSP_FIND_NODE_CACHE: |
1353 | 0 | dissect_zbee_zdp_rsp_find_node_cache(zdp_tvb, pinfo, zdp_tree); |
1354 | 0 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1355 | 0 | break; |
1356 | 55 | case ZBEE_ZDP_RSP_EXT_SIMPLE_DESC: |
1357 | 55 | dissect_zbee_zdp_rsp_ext_simple_desc(zdp_tvb, pinfo, zdp_tree); |
1358 | 55 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1359 | 55 | break; |
1360 | 195 | case ZBEE_ZDP_RSP_EXT_ACTIVE_EP: |
1361 | 195 | dissect_zbee_zdp_rsp_ext_active_ep(zdp_tvb, pinfo, zdp_tree); |
1362 | 195 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1363 | 195 | break; |
1364 | 35 | case ZBEE_ZDP_RSP_PARENT_ANNCE: |
1365 | 35 | dissect_zbee_zdp_rsp_parent_annce(zdp_tvb, pinfo, zdp_tree); |
1366 | 35 | break; |
1367 | 22 | case ZBEE_ZDP_RSP_END_DEVICE_BIND: |
1368 | 22 | dissect_zbee_zdp_rsp_end_device_bind(zdp_tvb, pinfo, zdp_tree); |
1369 | 22 | break; |
1370 | 0 | case ZBEE_ZDP_RSP_BIND: |
1371 | 0 | dissect_zbee_zdp_rsp_bind(zdp_tvb, pinfo, zdp_tree); |
1372 | 0 | break; |
1373 | 6 | case ZBEE_ZDP_RSP_UNBIND: |
1374 | 6 | dissect_zbee_zdp_rsp_unbind(zdp_tvb, pinfo, zdp_tree); |
1375 | 6 | break; |
1376 | 87 | case ZBEE_ZDP_RSP_BIND_REGISTER: |
1377 | 87 | dissect_zbee_zdp_rsp_bind_register(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1378 | 87 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1379 | 87 | break; |
1380 | 0 | case ZBEE_ZDP_RSP_REPLACE_DEVICE: |
1381 | 0 | dissect_zbee_zdp_rsp_replace_device(zdp_tvb, pinfo, zdp_tree); |
1382 | 0 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1383 | 0 | break; |
1384 | 0 | case ZBEE_ZDP_RSP_STORE_BAK_BIND_ENTRY: |
1385 | 0 | dissect_zbee_zdp_rsp_store_bak_bind_entry(zdp_tvb, pinfo, zdp_tree); |
1386 | 0 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1387 | 0 | break; |
1388 | 0 | case ZBEE_ZDP_RSP_REMOVE_BAK_BIND_ENTRY: |
1389 | 0 | dissect_zbee_zdp_rsp_remove_bak_bind_entry(zdp_tvb, pinfo, zdp_tree); |
1390 | 0 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1391 | 0 | break; |
1392 | 1 | case ZBEE_ZDP_RSP_BACKUP_BIND_TABLE: |
1393 | 1 | dissect_zbee_zdp_rsp_backup_bind_table(zdp_tvb, pinfo, zdp_tree); |
1394 | 1 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1395 | 1 | break; |
1396 | 56 | case ZBEE_ZDP_RSP_RECOVER_BIND_TABLE: |
1397 | 56 | dissect_zbee_zdp_rsp_recover_bind_table(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1398 | 56 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1399 | 56 | break; |
1400 | 18 | case ZBEE_ZDP_RSP_BACKUP_SOURCE_BIND: |
1401 | 18 | dissect_zbee_zdp_rsp_backup_source_bind(zdp_tvb, pinfo, zdp_tree); |
1402 | 18 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1403 | 18 | break; |
1404 | 70 | case ZBEE_ZDP_RSP_RECOVER_SOURCE_BIND: |
1405 | 70 | dissect_zbee_zdp_rsp_recover_source_bind(zdp_tvb, pinfo, zdp_tree); |
1406 | 70 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1407 | 70 | break; |
1408 | 10 | case ZBEE_ZDP_RSP_CLEAR_ALL_BINDINGS: |
1409 | 10 | dissect_zbee_zdp_rsp_clear_all_bindings(zdp_tvb, pinfo, zdp_tree); |
1410 | 10 | break; |
1411 | 130 | case ZBEE_ZDP_RSP_MGMT_NWK_DISC: |
1412 | 130 | dissect_zbee_zdp_rsp_mgmt_nwk_disc(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1413 | 130 | break; |
1414 | 68 | case ZBEE_ZDP_RSP_MGMT_LQI: |
1415 | 68 | dissect_zbee_zdp_rsp_mgmt_lqi(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1416 | 68 | break; |
1417 | 9 | case ZBEE_ZDP_RSP_MGMT_RTG: |
1418 | 9 | dissect_zbee_zdp_rsp_mgmt_rtg(zdp_tvb, pinfo, zdp_tree); |
1419 | 9 | break; |
1420 | 93 | case ZBEE_ZDP_RSP_MGMT_BIND: |
1421 | 93 | dissect_zbee_zdp_rsp_mgmt_bind(zdp_tvb, pinfo, zdp_tree, nwk->version); |
1422 | 93 | break; |
1423 | 23 | case ZBEE_ZDP_RSP_MGMT_LEAVE: |
1424 | 23 | dissect_zbee_zdp_rsp_mgmt_leave(zdp_tvb, pinfo, zdp_tree); |
1425 | 23 | break; |
1426 | 9 | case ZBEE_ZDP_RSP_MGMT_DIRECT_JOIN: |
1427 | 9 | dissect_zbee_zdp_rsp_mgmt_direct_join(zdp_tvb, pinfo, zdp_tree); |
1428 | 9 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1429 | 9 | break; |
1430 | 21 | case ZBEE_ZDP_RSP_MGMT_PERMIT_JOIN: |
1431 | 21 | dissect_zbee_zdp_rsp_mgmt_permit_join(zdp_tvb, pinfo, zdp_tree); |
1432 | 21 | break; |
1433 | 85 | case ZBEE_ZDP_RSP_MGMT_CACHE: |
1434 | 85 | dissect_zbee_zdp_rsp_mgmt_cache(zdp_tvb, pinfo, zdp_tree); |
1435 | 85 | expert_add_info(pinfo, zdp_tree, &ei_deprecated_command); |
1436 | 85 | break; |
1437 | 165 | case ZBEE_ZDP_NOT_MGMT_NWKUPDATE: |
1438 | 171 | case ZBEE_ZDP_NOT_MGMT_NWKUPDATE_ENH: |
1439 | 171 | dissect_zbee_zdp_not_mgmt_nwkupdate(zdp_tvb, pinfo, zdp_tree); |
1440 | 171 | break; |
1441 | 28 | case ZBEE_ZDP_RSP_MGMT_IEEE_JOIN_LIST: |
1442 | 28 | dissect_zbee_zdp_rsp_mgmt_ieee_join_list(zdp_tvb, pinfo, zdp_tree); |
1443 | 28 | break; |
1444 | 0 | case ZBEE_ZDP_NOT_MGMT_UNSOLICITED_NWKUPDATE: |
1445 | 0 | dissect_zbee_zdp_not_mgmt_unsolicited_nwkupdate(zdp_tvb, pinfo, zdp_tree); |
1446 | 0 | break; |
1447 | 160 | case ZBEE_ZDP_RSP_MGMT_NWK_BEACON_SURVEY: |
1448 | 160 | dissect_zbee_zdp_rsp_mgmt_nwk_beacon_survey(zdp_tvb, pinfo, zdp_tree); |
1449 | 160 | break; |
1450 | 10 | case ZBEE_ZDP_RSP_SECURITY_START_KEY_NEGOTIATION: |
1451 | 10 | dissect_zbee_zdp_rsp_security_start_key_negotiation(zdp_tvb, pinfo, zdp_tree); |
1452 | 10 | break; |
1453 | 0 | case ZBEE_ZDP_RSP_SECURITY_GET_AUTH_TOKEN: |
1454 | 0 | dissect_zbee_zdp_rsp_security_get_auth_token(zdp_tvb, pinfo, zdp_tree); |
1455 | 0 | break; |
1456 | 57 | case ZBEE_ZDP_RSP_SECURITY_GET_AUTH_LEVEL: |
1457 | 57 | dissect_zbee_zdp_rsp_security_get_auth_level(zdp_tvb, pinfo, zdp_tree); |
1458 | 57 | break; |
1459 | 58 | case ZBEE_ZDP_RSP_SECURITY_SET_CONFIGURATION: |
1460 | 58 | dissect_zbee_zdp_rsp_security_set_configuration(zdp_tvb, pinfo, zdp_tree); |
1461 | 58 | break; |
1462 | 1 | case ZBEE_ZDP_RSP_SECURITY_GET_CONFIGURATION: |
1463 | 1 | dissect_zbee_zdp_rsp_security_get_configuration(zdp_tvb, pinfo, zdp_tree); |
1464 | 1 | break; |
1465 | 34 | case ZBEE_ZDP_RSP_SECURITY_START_KEY_UPDATE: |
1466 | 34 | dissect_zbee_zdp_rsp_security_start_key_update(zdp_tvb, pinfo, zdp_tree); |
1467 | 34 | break; |
1468 | 7 | case ZBEE_ZDP_RSP_SECURITY_DECOMMISSION: |
1469 | 7 | dissect_zbee_zdp_rsp_security_decommission(zdp_tvb, pinfo, zdp_tree); |
1470 | 7 | break; |
1471 | 3 | case ZBEE_ZDP_RSP_SECURITY_CHALLENGE: |
1472 | 3 | dissect_zbee_zdp_rsp_security_challenge(zdp_tvb, pinfo, zdp_tree); |
1473 | 3 | break; |
1474 | 125 | default: |
1475 | | /* Invalid Cluster Identifier. */ |
1476 | 125 | call_data_dissector(zdp_tvb, pinfo, tree); |
1477 | 125 | break; |
1478 | 4.45k | } /* switch */ |
1479 | | |
1480 | 2.18k | return tvb_captured_length(tvb); |
1481 | 4.45k | } /* dissect_zbee_zdp */ |
1482 | | |
1483 | | /** |
1484 | | *ZigBee Device Profile protocol registration routine. |
1485 | | * |
1486 | | */ |
1487 | | void proto_register_zbee_zdp(void) |
1488 | 14 | { |
1489 | 14 | static hf_register_info hf[] = { |
1490 | 14 | { &hf_zbee_zdp_seqno, |
1491 | 14 | { "Sequence Number", "zbee_zdp.seqno", FT_UINT8, BASE_DEC, NULL, 0x0, |
1492 | 14 | NULL, HFILL }}, |
1493 | | |
1494 | | #if 0 |
1495 | | { &hf_zbee_zdp_length, |
1496 | | { "Length", "zbee_zdp.length", FT_UINT8, BASE_DEC, NULL, 0x0, |
1497 | | NULL, HFILL }}, |
1498 | | #endif |
1499 | | |
1500 | 14 | { &hf_zbee_zdp_ext_addr, |
1501 | 14 | { "Extended Address", "zbee_zdp.ext_addr", FT_EUI64, BASE_NONE, NULL, 0x0, |
1502 | 14 | NULL, HFILL }}, |
1503 | | |
1504 | 14 | { &hf_zbee_zdp_nwk_addr, |
1505 | 14 | { "Nwk Addr of Interest", "zbee_zdp.nwk_addr", FT_UINT16, BASE_HEX, NULL, 0x0, |
1506 | 14 | NULL, HFILL }}, |
1507 | | |
1508 | 14 | { &hf_zbee_zdp_req_type, |
1509 | 14 | { "Request Type", "zbee_zdp.req_type", FT_UINT8, BASE_DEC, VALS(zbee_zdp_req_types), 0x0, |
1510 | 14 | NULL, HFILL }}, |
1511 | | |
1512 | 14 | { &hf_zbee_zdp_index, |
1513 | 14 | { "Index", "zbee_zdp.index", FT_UINT8, BASE_DEC, NULL, 0x0, |
1514 | 14 | NULL, HFILL }}, |
1515 | | |
1516 | 14 | { &hf_zbee_zdp_status, |
1517 | 14 | { "Status", "zbee_zdp.status", FT_UINT8, BASE_HEX, VALS(zbee_zdp_status_names), 0x0, |
1518 | 14 | NULL, HFILL }}, |
1519 | | |
1520 | 14 | { &hf_zbee_zdp_endpoint, |
1521 | 14 | { "Endpoint", "zbee_zdp.endpoint", FT_UINT8, BASE_DEC, NULL, 0x0, |
1522 | 14 | NULL, HFILL }}, |
1523 | | |
1524 | 14 | { &hf_zbee_zdp_ep_count, |
1525 | 14 | { "Endpoint Count", "zbee_zdp.ep_count", FT_UINT8, BASE_DEC, NULL, 0x0, |
1526 | 14 | NULL, HFILL }}, |
1527 | | |
1528 | 14 | { &hf_zbee_zdp_profile, |
1529 | 14 | { "Profile", "zbee_zdp.profile", FT_UINT16, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_aps_apid_names), 0x0, |
1530 | 14 | NULL, HFILL }}, |
1531 | | |
1532 | 14 | { &hf_zbee_zdp_addr_mode, |
1533 | 14 | { "Address Mode", "zbee_zdp.addr_mode", FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(zbee_zcl_zdp_address_modes), 0x0, |
1534 | 14 | NULL, HFILL }}, |
1535 | | |
1536 | 14 | { &hf_zbee_zdp_cluster, |
1537 | 14 | { "Cluster", "zbee_zdp.cluster", FT_UINT16, BASE_HEX, NULL, 0x0, |
1538 | 14 | NULL, HFILL }}, |
1539 | | |
1540 | 14 | { &hf_zbee_zdp_table_size, |
1541 | 14 | { "Table Size", "zbee_zdp.table_size", FT_UINT16, BASE_DEC, NULL, 0x0, |
1542 | 14 | "Number of entries in the table.", HFILL }}, |
1543 | | |
1544 | 14 | { &hf_zbee_zdp_table_count, |
1545 | 14 | { "Table Count", "zbee_zdp.table_count", FT_UINT16, BASE_DEC, NULL, 0x0, |
1546 | 14 | "Number of table entries included in this message.", HFILL }}, |
1547 | | |
1548 | 14 | { &hf_zbee_zdp_cache_address, |
1549 | 14 | { "Cache Address", "zbee_zdp.cache_address", FT_EUI64, BASE_NONE, NULL, 0x0, |
1550 | 14 | NULL, HFILL }}, |
1551 | | |
1552 | 14 | { &hf_zbee_zdp_in_count, |
1553 | 14 | { "Input Cluster Count", "zbee_zdp.in_count", FT_UINT8, BASE_DEC, NULL, 0x0, |
1554 | 14 | NULL, HFILL }}, |
1555 | | |
1556 | 14 | { &hf_zbee_zdp_out_count, |
1557 | 14 | { "Output Cluster Count", "zbee_zdp.out_count", FT_UINT8, BASE_DEC, NULL, 0x0, |
1558 | 14 | NULL, HFILL }}, |
1559 | | |
1560 | 14 | { &hf_zbee_zdp_in_cluster, |
1561 | 14 | { "Input Cluster", "zbee_zdp.in_cluster", FT_UINT16, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_aps_cid_names), 0x0, |
1562 | 14 | NULL, HFILL }}, |
1563 | | |
1564 | 14 | { &hf_zbee_zdp_out_cluster, |
1565 | 14 | { "Output Cluster", "zbee_zdp.out_cluster", FT_UINT16, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_aps_cid_names), 0x0, |
1566 | 14 | NULL, HFILL }}, |
1567 | | |
1568 | 14 | { &hf_zbee_zdp_assoc_device_count, |
1569 | 14 | { "Associated Device Count", "zbee_zdp.assoc_device_count", FT_UINT8, BASE_DEC, NULL, 0x0, |
1570 | 14 | NULL, HFILL }}, |
1571 | | |
1572 | 14 | { &hf_zbee_zdp_assoc_device, |
1573 | 14 | { "Associated Device", "zbee_zdp.assoc_device", FT_UINT16, BASE_HEX, NULL, 0x0, |
1574 | 14 | NULL, HFILL }}, |
1575 | | |
1576 | 14 | { &hf_zbee_zdp_cinfo, |
1577 | 14 | { "Capability Information", "zbee_zdp.cinfo", FT_UINT8, BASE_HEX, NULL, 0x0, |
1578 | 14 | NULL, HFILL }}, |
1579 | | |
1580 | 14 | { &hf_zbee_zdp_cinfo_alt_coord, |
1581 | 14 | { "Alternate Coordinator", "zbee_zdp.cinfo.alt_coord", FT_BOOLEAN, 8, NULL, ZBEE_CINFO_ALT_COORD, |
1582 | 14 | "Indicates that the device is able to operate as a PAN coordinator.", HFILL }}, |
1583 | | |
1584 | 14 | { &hf_zbee_zdp_cinfo_ffd, |
1585 | 14 | { "Full-Function Device", "zbee_zdp.cinfo.ffd", FT_BOOLEAN, 8, NULL, ZBEE_CINFO_FFD, |
1586 | 14 | NULL, HFILL }}, |
1587 | | |
1588 | 14 | { &hf_zbee_zdp_cinfo_power, |
1589 | 14 | { "AC Power", "zbee_zdp.cinfo.power", FT_BOOLEAN, 8, NULL, ZBEE_CINFO_POWER, |
1590 | 14 | "Indicates this device is using AC/Mains power.", HFILL }}, |
1591 | | |
1592 | 14 | { &hf_zbee_zdp_cinfo_idle_rx, |
1593 | 14 | { "Rx On When Idle", "zbee_zdp.cinfo.idle_rx", FT_BOOLEAN, 8, NULL, ZBEE_CINFO_IDLE_RX, |
1594 | 14 | "Indicates the receiver is active when the device is idle.", HFILL }}, |
1595 | | |
1596 | 14 | { &hf_zbee_zdp_cinfo_security, |
1597 | 14 | { "Security Capability", "zbee_zdp.cinfo.security", FT_BOOLEAN, 8, NULL, ZBEE_CINFO_SECURITY, |
1598 | 14 | "Indicates this device is capable of performing encryption/decryption.", HFILL }}, |
1599 | | |
1600 | 14 | { &hf_zbee_zdp_cinfo_alloc, |
1601 | 14 | { "Allocate Short Address", "zbee_zdp.cinfo.alloc", FT_BOOLEAN, 8, NULL, ZBEE_CINFO_ALLOC, |
1602 | 14 | "Flag requesting the parent to allocate a short address for this device.", HFILL }}, |
1603 | | |
1604 | 14 | { &hf_zbee_zdp_dcf, |
1605 | 14 | { "Descriptor Capability Field", "zbee_zdp.dcf", FT_UINT8, BASE_HEX, NULL, 0, |
1606 | 14 | NULL, HFILL }}, |
1607 | | |
1608 | 14 | { &hf_zbee_zdp_dcf_eaela, |
1609 | 14 | { "Extended Active Endpoint List Available", "zbee_zdp.dcf.eaela", FT_BOOLEAN, 8, NULL, ZBEE_ZDP_DCF_EAELA, |
1610 | 14 | NULL, HFILL }}, |
1611 | | |
1612 | 14 | { &hf_zbee_zdp_dcf_esdla, |
1613 | 14 | { "Extended Simple Descriptor List Available", "zbee_zdp.dcf.esdla", FT_BOOLEAN, 8, NULL, ZBEE_ZDP_DCF_ESDLA, |
1614 | 14 | NULL, HFILL }}, |
1615 | | |
1616 | 14 | { &hf_zbee_zdp_server, |
1617 | 14 | { "Server Flags", "zbee_zdp.server", FT_UINT16, BASE_HEX, NULL, 0x0, |
1618 | 14 | NULL, HFILL }}, |
1619 | | |
1620 | 14 | { &hf_zbee_zdp_server_pri_trust, |
1621 | 14 | { "Primary Trust Center", "zbee_zdp.server.pri_trust", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_SERVER_PRIMARY_TRUST, |
1622 | 14 | NULL, HFILL }}, |
1623 | | |
1624 | 14 | { &hf_zbee_zdp_server_bak_trust, |
1625 | 14 | { "Backup Trust Center", "zbee_zdp.server.bak_trust", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_SERVER_BACKUP_TRUST, |
1626 | 14 | NULL, HFILL }}, |
1627 | | |
1628 | 14 | { &hf_zbee_zdp_server_pri_bind, |
1629 | 14 | { "Primary Binding Table Cache","zbee_zdp.server.pri_bind", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_SERVER_PRIMARY_BIND, |
1630 | 14 | NULL, HFILL }}, |
1631 | | |
1632 | 14 | { &hf_zbee_zdp_server_bak_bind, |
1633 | 14 | { "Backup Binding Table Cache", "zbee_zdp.server.bak_bind", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_SERVER_BACKUP_BIND, |
1634 | 14 | NULL, HFILL }}, |
1635 | | |
1636 | 14 | { &hf_zbee_zdp_server_pri_disc, |
1637 | 14 | { "Primary Discovery Cache", "zbee_zdp.server.pri_disc", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_SERVER_PRIMARY_DISC, |
1638 | 14 | NULL, HFILL }}, |
1639 | | |
1640 | 14 | { &hf_zbee_zdp_server_bak_disc, |
1641 | 14 | { "Backup Discovery Cache", "zbee_zdp.server.bak_disc", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_SERVER_BACKUP_DISC, |
1642 | 14 | NULL, HFILL }}, |
1643 | | |
1644 | 14 | { &hf_zbee_zdp_server_network_manager, |
1645 | 14 | { "Network Manager", "zbee_zdp.server.nwk_mgr", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_SERVER_NETWORK_MANAGER, |
1646 | 14 | NULL, HFILL }}, |
1647 | | |
1648 | 14 | { &hf_zbee_zdp_server_stk_compl_rev, |
1649 | 14 | { "Stack Compliance Revision", "zbee_zdp.server.stack_compliance_revision", FT_UINT16, BASE_DEC, NULL, ZBEE_ZDP_NODE_SERVER_STACK_COMPL_REV, |
1650 | 14 | NULL, HFILL }}, |
1651 | | |
1652 | 14 | { &hf_zbee_zdp_node_type, |
1653 | 14 | { "Type", "zbee_zdp.node.type", FT_UINT16, BASE_DEC, NULL, ZBEE_ZDP_NODE_TYPE, |
1654 | 14 | NULL, HFILL }}, |
1655 | | |
1656 | 14 | { &hf_zbee_zdp_node_complex, |
1657 | 14 | { "Complex Descriptor", "zbee_zdp.node.complex", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_COMPLEX, |
1658 | 14 | NULL, HFILL }}, |
1659 | | |
1660 | 14 | { &hf_zbee_zdp_node_user, |
1661 | 14 | { "User Descriptor", "zbee_zdp.node.user", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_USER, |
1662 | 14 | NULL, HFILL }}, |
1663 | | |
1664 | 14 | { &hf_zbee_zdp_node_frag_support, |
1665 | 14 | { "Fragmentation Supported", "zbee_zdp.node.frag_support", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FRAG_SUPPORT, |
1666 | 14 | NULL, HFILL }}, |
1667 | | |
1668 | 14 | { &hf_zbee_zdp_node_freq_868, |
1669 | 14 | { "868MHz BPSK Band", "zbee_zdp.node.freq.868mhz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_868MHZ, |
1670 | 14 | NULL, HFILL }}, |
1671 | | |
1672 | 14 | { &hf_zbee_zdp_node_freq_900, |
1673 | 14 | { "900MHz BPSK Band", "zbee_zdp.node.freq.900mhz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_900MHZ, |
1674 | 14 | NULL, HFILL }}, |
1675 | | |
1676 | 14 | { &hf_zbee_zdp_node_freq_2400, |
1677 | 14 | { "2.4GHz OQPSK Band", "zbee_zdp.node.freq.2400mhz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_2400MHZ, |
1678 | 14 | NULL, HFILL }}, |
1679 | | |
1680 | 14 | { &hf_zbee_zdp_node_freq_eu_sub_ghz, |
1681 | 14 | { "EU Sub-GHz FSK Band", "zbee_zdp.node.freq.eu_sub_ghz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_EU_SUB_GHZ, |
1682 | 14 | NULL, HFILL }}, |
1683 | | |
1684 | 14 | { &hf_zbee_zdp_node_manufacturer, |
1685 | 14 | { "Manufacturer Code", "zbee_zdp.node.manufacturer", FT_UINT16, BASE_HEX, NULL, 0x0, |
1686 | 14 | NULL, HFILL }}, |
1687 | | |
1688 | 14 | { &hf_zbee_zdp_node_max_buffer, |
1689 | 14 | { "Max Buffer Size", "zbee_zdp.node.max_buffer", FT_UINT8, BASE_DEC, NULL, 0x0, |
1690 | 14 | NULL, HFILL }}, |
1691 | | |
1692 | 14 | { &hf_zbee_zdp_node_max_incoming_transfer, |
1693 | 14 | { "Max Incoming Transfer Size", "zbee_zdp.node.max_incoming_transfer", FT_UINT16, BASE_DEC, NULL, 0x0, |
1694 | 14 | NULL, HFILL }}, |
1695 | | |
1696 | 14 | { &hf_zbee_zdp_node_max_outgoing_transfer, |
1697 | 14 | { "Max Outgoing Transfer Size", "zbee_zdp.node.max_outgoing_transfer", FT_UINT16, BASE_DEC, NULL, 0x0, |
1698 | 14 | NULL, HFILL }}, |
1699 | | |
1700 | 14 | { &hf_zbee_zdp_power, |
1701 | 14 | { "Power Descriptor", "zbee_zdp.power", FT_UINT16, BASE_HEX, NULL, 0x0, |
1702 | 14 | NULL, HFILL }}, |
1703 | | |
1704 | 14 | { &hf_zbee_zdp_power_mode, |
1705 | 14 | { "Mode", "zbee_zdp.power.mode", FT_UINT16, BASE_DEC, VALS(zbee_zdp_power_mode_vals), ZBEE_ZDP_POWER_MODE, |
1706 | 14 | NULL, HFILL }}, |
1707 | | |
1708 | 14 | { &hf_zbee_zdp_power_avail_ac, |
1709 | 14 | { "Available AC Power", "zbee_zdp.power.avail.ac", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_POWER_AVAIL_AC, |
1710 | 14 | NULL, HFILL }}, |
1711 | | |
1712 | 14 | { &hf_zbee_zdp_power_avail_recharge, |
1713 | 14 | { "Available Rechargeable Battery", "zbee_zdp.power.avail.rech", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_POWER_AVAIL_RECHARGEABLE, |
1714 | 14 | NULL, HFILL }}, |
1715 | | |
1716 | 14 | { &hf_zbee_zdp_power_avail_dispose, |
1717 | 14 | { "Available Disposable Battery", "zbee_zdp.power.avail.disp", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_POWER_AVAIL_DISPOSABLE, |
1718 | 14 | NULL, HFILL }}, |
1719 | | |
1720 | 14 | { &hf_zbee_zdp_power_source_ac, |
1721 | 14 | { "Using AC Power", "zbee_zdp.power.source.ac", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_POWER_SOURCE_AC, |
1722 | 14 | NULL, HFILL }}, |
1723 | | |
1724 | 14 | { &hf_zbee_zdp_power_source_recharge, |
1725 | 14 | { "Using Rechargeable Battery", "zbee_zdp.power.source.recharge", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_POWER_SOURCE_RECHARGEABLE, |
1726 | 14 | NULL, HFILL }}, |
1727 | | |
1728 | 14 | { &hf_zbee_zdp_power_source_dispose, |
1729 | 14 | { "Using Disposable Battery", "zbee_zdp.power.source.dispose", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_POWER_SOURCE_DISPOSABLE, |
1730 | 14 | NULL, HFILL }}, |
1731 | | |
1732 | 14 | { &hf_zbee_zdp_power_level, |
1733 | 14 | { "Level", "zbee_zdp.power.level", FT_UINT16, BASE_DEC, VALS(zbee_zdp_power_level_vals), ZBEE_ZDP_POWER_LEVEL, |
1734 | 14 | NULL, HFILL }}, |
1735 | | |
1736 | 14 | { &hf_zbee_zdp_simple_app_device, |
1737 | 14 | { "Application Device", "zbee_zdp.app.device", FT_UINT16, BASE_HEX, NULL, 0x0, |
1738 | 14 | NULL, HFILL }}, |
1739 | | |
1740 | 14 | { &hf_zbee_zdp_simple_zll_app_device, |
1741 | 14 | { "Application Device", "zbee_zdp.app.device", FT_UINT16, BASE_HEX, VALS(zbee_zll_device_names), 0x0, |
1742 | 14 | NULL, HFILL }}, |
1743 | | |
1744 | 14 | { &hf_zbee_zdp_simple_ha_app_device, |
1745 | 14 | { "Application Device", "zbee_zdp.app.device", FT_UINT16, BASE_HEX, VALS(zbee_ha_device_names), 0x0, |
1746 | 14 | NULL, HFILL }}, |
1747 | | |
1748 | 14 | { &hf_zbee_zdp_simple_app_version, |
1749 | 14 | { "Application Version", "zbee_zdp.app.version", FT_UINT16, BASE_HEX, NULL, 0x0, |
1750 | 14 | NULL, HFILL }}, |
1751 | | |
1752 | 14 | { &hf_zbee_zdp_complex_length, |
1753 | 14 | { "Complex Descriptor Length", "zbee_zdp.complex_length", FT_UINT8, BASE_DEC, NULL, 0x0, |
1754 | 14 | NULL, HFILL }}, |
1755 | | |
1756 | 14 | { &hf_zbee_zdp_complex, |
1757 | 14 | { "Complex Descriptor", "zbee_zdp.complex", FT_STRING, BASE_NONE, NULL, 0x0, |
1758 | 14 | NULL, HFILL }}, |
1759 | | |
1760 | 14 | { &hf_zbee_zdp_user, |
1761 | 14 | { "User Descriptor", "zbee_zdp.user", FT_STRING, BASE_NONE, NULL, 0x0, |
1762 | 14 | NULL, HFILL }}, |
1763 | | |
1764 | 14 | { &hf_zbee_zdp_user_length, |
1765 | 14 | { "User Descriptor Length", "zbee_zdp.user_length", FT_UINT8, BASE_DEC, NULL, 0x0, |
1766 | 14 | NULL, HFILL }}, |
1767 | | |
1768 | 14 | { &hf_zbee_zdp_simple_length, |
1769 | 14 | { "Simple Descriptor Length", "zbee_zdp.simple_length", FT_UINT8, BASE_DEC, NULL, 0x0, |
1770 | 14 | NULL, HFILL }}, |
1771 | | |
1772 | 14 | { &hf_zbee_zdp_disc_node_size, |
1773 | 14 | { "Node Descriptor Size", "zbee_zdp.node_size", FT_UINT8, BASE_DEC, NULL, 0x0, |
1774 | 14 | NULL, HFILL }}, |
1775 | | |
1776 | 14 | { &hf_zbee_zdp_disc_power_size, |
1777 | 14 | { "Power Descriptor Size", "zbee_zdp.power_size", FT_UINT8, BASE_DEC, NULL, 0x0, |
1778 | 14 | NULL, HFILL }}, |
1779 | | |
1780 | 14 | { &hf_zbee_zdp_cache, |
1781 | 14 | { "Cache", "zbee_zdp.cache", FT_UINT16, BASE_HEX, NULL, 0x0, |
1782 | 14 | "Address of the device containing the discovery cache.", HFILL }}, |
1783 | | |
1784 | 14 | { &hf_zbee_zdp_disc_ep_count, |
1785 | 14 | { "Active Endpoint Count", "zbee_zdp.ep_count", FT_UINT8, BASE_DEC, NULL, 0x0, |
1786 | 14 | NULL, HFILL }}, |
1787 | | |
1788 | 14 | { &hf_zbee_zdp_disc_simple_count, |
1789 | 14 | { "Simple Descriptor Count", "zbee_zdp.simple_count", FT_UINT8, BASE_DEC, NULL, 0x0, |
1790 | 14 | NULL, HFILL }}, |
1791 | | |
1792 | 14 | { &hf_zbee_zdp_disc_simple_size, |
1793 | 14 | { "Simple Descriptor Size", "zbee_zdp.simple_size", FT_UINT8, BASE_DEC, NULL, 0x0, |
1794 | 14 | NULL, HFILL }}, |
1795 | | |
1796 | 14 | { &hf_zbee_zdp_target, |
1797 | 14 | { "Target", "zbee_zdp.target", FT_UINT16, BASE_HEX, NULL, 0x0, |
1798 | 14 | NULL, HFILL }}, |
1799 | | |
1800 | 14 | { &hf_zbee_zdp_replacement, |
1801 | 14 | { "Replacement", "zbee_zdp.replacement", FT_EUI64, BASE_NONE, NULL, 0x0, |
1802 | 14 | NULL, HFILL }}, |
1803 | | |
1804 | 14 | { &hf_zbee_zdp_replacement_ep, |
1805 | 14 | { "Replacement Endpoint", "zbee_zdp.replacement_ep", FT_UINT8, BASE_DEC, NULL, 0x0, |
1806 | 14 | NULL, HFILL }}, |
1807 | | |
1808 | 14 | { &hf_zbee_zdp_bind_src, |
1809 | 14 | { "Source", "zbee_zdp.bind.src", FT_UINT16, BASE_HEX, NULL, 0x0, |
1810 | 14 | NULL, HFILL }}, |
1811 | | |
1812 | 14 | { &hf_zbee_zdp_bind_src64, |
1813 | 14 | { "Source", "zbee_zdp.bind.src64", FT_EUI64, BASE_NONE, NULL, 0x0, |
1814 | 14 | NULL, HFILL }}, |
1815 | | |
1816 | 14 | { &hf_zbee_zdp_bind_src_ep, |
1817 | 14 | { "Source Endpoint", "zbee_zdp.bind.src_ep", FT_UINT8, BASE_DEC, NULL, 0x0, |
1818 | 14 | NULL, HFILL }}, |
1819 | | |
1820 | 14 | { &hf_zbee_zdp_bind_dst, |
1821 | 14 | { "Destination", "zbee_zdp.bind.dst", FT_UINT16, BASE_HEX, NULL, 0x0, |
1822 | 14 | NULL, HFILL }}, |
1823 | | |
1824 | 14 | { &hf_zbee_zdp_bind_dst64, |
1825 | 14 | { "Destination", "zbee_zdp.bind.dst64", FT_EUI64, BASE_NONE, NULL, 0x0, |
1826 | 14 | NULL, HFILL }}, |
1827 | | |
1828 | 14 | { &hf_zbee_zdp_bind_dst_ep, |
1829 | 14 | { "Destination Endpoint", "zbee_zdp.bind.dst_ep", FT_UINT8, BASE_DEC, NULL, 0x0, |
1830 | 14 | NULL, HFILL }}, |
1831 | | |
1832 | 14 | { &hf_zbee_zdp_duration, |
1833 | 14 | { "Duration", "zbee_zdp.duration", FT_UINT8, BASE_DEC, NULL, 0x0, |
1834 | 14 | NULL, HFILL }}, |
1835 | | |
1836 | 14 | { &hf_zbee_zdp_leave_children, |
1837 | 14 | { "Remove Children", "zbee_zdp.leave.children", FT_BOOLEAN, 8, NULL, ZBEE_ZDP_MGMT_LEAVE_CHILDREN, |
1838 | 14 | NULL, HFILL }}, |
1839 | | |
1840 | 14 | { &hf_zbee_zdp_leave_rejoin, |
1841 | 14 | { "Rejoin", "zbee_zdp.leave.rejoin", FT_BOOLEAN, 8, NULL, ZBEE_ZDP_MGMT_LEAVE_REJOIN, |
1842 | 14 | NULL, HFILL }}, |
1843 | | |
1844 | 14 | { &hf_zbee_zdp_significance, |
1845 | 14 | { "Significance", "zbee_zdp.significance", FT_UINT8, BASE_DEC, NULL, 0x0, |
1846 | 14 | NULL, HFILL }}, |
1847 | | |
1848 | 14 | { &hf_zbee_zdp_scan_count, |
1849 | 14 | { "Scan Count", "zbee_zdp.scan_count", FT_UINT8, BASE_DEC, NULL, 0x0, |
1850 | 14 | NULL, HFILL }}, |
1851 | | |
1852 | 14 | { &hf_zbee_zdp_update_id, |
1853 | 14 | { "Update ID", "zbee_zdp.update_id", FT_UINT8, BASE_DEC, NULL, 0x0, |
1854 | 14 | NULL, HFILL }}, |
1855 | | |
1856 | 14 | { &hf_zbee_zdp_manager, |
1857 | 14 | { "Network Manager", "zbee_zdp.manager", FT_UINT16, BASE_HEX, NULL, 0x0, |
1858 | 14 | NULL, HFILL }}, |
1859 | | |
1860 | 14 | { &hf_zbee_zdp_tx_total, |
1861 | 14 | { "Total Transmissions", "zbee_zdp.tx_total", FT_UINT16, BASE_DEC, NULL, 0x0, |
1862 | 14 | NULL, HFILL }}, |
1863 | | |
1864 | 14 | { &hf_zbee_zdp_tx_fail, |
1865 | 14 | { "Failed Transmissions", "zbee_zdp.tx_fail", FT_UINT16, BASE_DEC, NULL, 0x0, |
1866 | 14 | NULL, HFILL }}, |
1867 | | |
1868 | 14 | { &hf_zbee_zdp_tx_retries, |
1869 | 14 | { "Retried Transmissions", "zbee_zdp.tx_retries", FT_UINT16, BASE_DEC, NULL, 0x0, |
1870 | 14 | NULL, HFILL }}, |
1871 | | |
1872 | 14 | { &hf_zbee_zdp_period_time_results, |
1873 | 14 | { "Period of Time For Results", "zbee_zdp.period_time_results", FT_UINT8, BASE_DEC, NULL, 0x0, |
1874 | 14 | NULL, HFILL }}, |
1875 | | |
1876 | 14 | { &hf_zbee_zdp_channel_count, |
1877 | 14 | { "Channel List Count", "zbee_zdp.channel_count", FT_UINT8, BASE_DEC, NULL, 0x0, |
1878 | 14 | NULL, HFILL }}, |
1879 | | |
1880 | 14 | { &hf_zbee_zdp_channel_page_count, |
1881 | 14 | { "Channel Page Count", "zbee_zdp.channel_page_count", FT_UINT8, BASE_DEC, NULL, 0x0, |
1882 | 14 | NULL, HFILL }}, |
1883 | | |
1884 | 14 | { &hf_zbee_zdp_channel_page, |
1885 | 14 | { "Channel Page", "zbee_zdp.channel_page", FT_UINT8, BASE_DEC, NULL, 0x0, |
1886 | 14 | NULL, HFILL }}, |
1887 | | |
1888 | 14 | { &hf_zbee_zdp_channel_mask, |
1889 | 14 | { "Channels", "zbee_zdp.channel_mask", FT_UINT32, BASE_HEX, NULL, 0x0, |
1890 | 14 | NULL, HFILL }}, |
1891 | | |
1892 | 14 | { &hf_zbee_zdp_channel_energy, |
1893 | 14 | { "Channel Energy", "zbee_zdp.channel_energy", FT_UINT8, BASE_DEC, NULL, 0x0, |
1894 | 14 | NULL, HFILL }}, |
1895 | | |
1896 | 14 | { &hf_zbee_zdp_pan_eui64, |
1897 | 14 | { "Pan", "zbee_zdp.pan.eui64", FT_EUI64, BASE_NONE, NULL, 0x0, |
1898 | 14 | NULL, HFILL }}, |
1899 | | |
1900 | 14 | { &hf_zbee_zdp_pan_uint, |
1901 | 14 | { "Pan", "zbee_zdp.pan.uint", FT_UINT16, BASE_HEX, NULL, 0x0, |
1902 | 14 | NULL, HFILL }}, |
1903 | | |
1904 | 14 | { &hf_zbee_zdp_channel, |
1905 | 14 | { "Channel", "zbee_zdp.channel", FT_UINT8, BASE_DEC, NULL, 0x0, |
1906 | 14 | NULL, HFILL }}, |
1907 | | |
1908 | 14 | { &hf_zbee_zdp_nwk_desc_profile, |
1909 | 14 | { "Profile", "zbee_zdp.profile", FT_UINT16, BASE_HEX, NULL, 0x0F, |
1910 | 14 | NULL, HFILL }}, |
1911 | | |
1912 | 14 | { &hf_zbee_zdp_profile_version, |
1913 | 14 | { "Version", "zbee_zdp.profile_version", FT_UINT8, BASE_DEC, NULL, 0xF0, |
1914 | 14 | NULL, HFILL }}, |
1915 | | |
1916 | 14 | { &hf_zbee_zdp_beacon, |
1917 | 14 | { "Beacon Order", "zbee_zdp.beacon", FT_UINT8, BASE_DEC, NULL, 0x0F, |
1918 | 14 | NULL, HFILL }}, |
1919 | | |
1920 | 14 | { &hf_zbee_zdp_superframe, |
1921 | 14 | { "Superframe Order", "zbee_zdp.superframe", FT_UINT8, BASE_DEC, NULL, 0xF0, |
1922 | 14 | NULL, HFILL }}, |
1923 | | |
1924 | 14 | { &hf_zbee_zdp_permit_joining, |
1925 | 14 | { "Permit Joining", "zbee_zdp.permit_joining", FT_UINT8, BASE_DEC, VALS(zbee_zdp_true_false_plus_vals), 0x01, |
1926 | 14 | NULL, HFILL }}, |
1927 | | |
1928 | 14 | { &hf_zbee_zdp_permit_joining_03, |
1929 | 14 | { "Permit Joining", "zbee_zdp.permit_joining", FT_UINT8, BASE_DEC, VALS(zbee_zdp_true_false_plus_vals), 0x03, |
1930 | 14 | NULL, HFILL }}, |
1931 | | |
1932 | 14 | { &hf_zbee_zdp_extended_pan, |
1933 | 14 | { "Extended Pan", "zbee_zdp.extended_pan", FT_EUI64, BASE_NONE, NULL, 0x0, |
1934 | 14 | NULL, HFILL }}, |
1935 | | |
1936 | 14 | { &hf_zbee_zdp_addr, |
1937 | 14 | { "Addr", "zbee_zdp.addr", FT_UINT16, BASE_HEX, NULL, 0x0, |
1938 | 14 | NULL, HFILL }}, |
1939 | | |
1940 | 14 | { &hf_zbee_zdp_depth, |
1941 | 14 | { "Depth", "zbee_zdp.depth", FT_UINT8, BASE_DEC, NULL, 0x0, |
1942 | 14 | NULL, HFILL }}, |
1943 | | |
1944 | 14 | { &hf_zbee_zdp_lqi, |
1945 | 14 | { "LQI", "zbee_zdp.lqi", FT_UINT8, BASE_DEC, NULL, 0x0, |
1946 | 14 | NULL, HFILL }}, |
1947 | | |
1948 | 14 | { &hf_zbee_zdp_scan_channel, |
1949 | 14 | { "Scan Channels", "zbee_zdp.scan_channel", FT_UINT32, BASE_HEX, NULL, 0x0, |
1950 | 14 | NULL, HFILL }}, |
1951 | | |
1952 | 14 | { &hf_zbee_zdp_table_entry_type, |
1953 | 14 | { "Type", "zbee_zdp.table_entry_type", FT_UINT8, BASE_DEC, VALS(zbee_zdp_table_entry_type_vals), 0x03, |
1954 | 14 | NULL, HFILL }}, |
1955 | | |
1956 | 14 | { &hf_zbee_zdp_table_entry_idle_rx_0c, |
1957 | 14 | { "Idle Rx", "zbee_zdp.idle_rx", FT_UINT8, BASE_DEC, VALS(zbee_zdp_true_false_plus_vals), 0x0c, |
1958 | 14 | NULL, HFILL }}, |
1959 | | |
1960 | 14 | { &hf_zbee_zdp_table_entry_idle_rx_04, |
1961 | 14 | { "Idle Rx", "zbee_zdp.idle_rx", FT_UINT8, BASE_DEC, VALS(zbee_zdp_true_false_plus_vals), 0x04, |
1962 | 14 | NULL, HFILL }}, |
1963 | | |
1964 | 14 | { &hf_zbee_zdp_table_entry_relationship_18, |
1965 | 14 | { "Relationship", "zbee_zdp.relationship", FT_UINT8, BASE_DEC, VALS(zbee_zdp_relationship_vals), 0x18, |
1966 | 14 | NULL, HFILL }}, |
1967 | | |
1968 | 14 | { &hf_zbee_zdp_table_entry_relationship_70, |
1969 | 14 | { "Relationship", "zbee_zdp.relationship", FT_UINT8, BASE_DEC, VALS(zbee_zdp_relationship_vals), 0x70, |
1970 | 14 | NULL, HFILL }}, |
1971 | | |
1972 | 14 | { &hf_zbee_zdp_rtg, |
1973 | 14 | { "Routing Table", "zbee_zdp.routing", FT_NONE, BASE_NONE, NULL, 0x0, |
1974 | 14 | NULL, HFILL }}, |
1975 | | |
1976 | 14 | { &hf_zbee_zdp_rtg_entry, |
1977 | 14 | { "Routing Table Entry", "zbee_zdp.routing.entry", FT_NONE, BASE_NONE, NULL, 0x0, |
1978 | 14 | NULL, HFILL }}, |
1979 | | |
1980 | 14 | { &hf_zbee_zdp_rtg_destination, |
1981 | 14 | { "Destination", "zbee_zdp.routing.destination", FT_UINT16, BASE_HEX, NULL, 0x0, |
1982 | 14 | NULL, HFILL }}, |
1983 | | |
1984 | 14 | { &hf_zbee_zdp_rtg_status, |
1985 | 14 | { "Status", "zbee_zdp.routing.status", FT_UINT8, BASE_DEC, VALS(zbee_zdp_rtg_status_vals), 0x0, |
1986 | 14 | NULL, HFILL }}, |
1987 | | |
1988 | 14 | { &hf_zbee_zdp_rtg_next_hop, |
1989 | 14 | { "Next Hop", "zbee_zdp.routing.next_hop", FT_UINT16, BASE_HEX, NULL, 0x0, |
1990 | 14 | NULL, HFILL }}, |
1991 | | |
1992 | 14 | { &hf_zbee_zdp_ieee_join_start_index, |
1993 | 14 | { "Start Index", "zbee_zdp.ieee_joining_list.start_index", FT_UINT8, BASE_DEC, NULL, 0x0, |
1994 | 14 | NULL, HFILL }}, |
1995 | | |
1996 | 14 | { &hf_zbee_zdp_ieee_join_update_id, |
1997 | 14 | { "Update Id", "zbee_zdp.ieee_joining_list.update_id", FT_UINT8, BASE_DEC, NULL, 0x0, |
1998 | 14 | NULL, HFILL }}, |
1999 | | |
2000 | 14 | { &hf_zbee_zdp_ieee_join_policy, |
2001 | 14 | { "Policy", "zbee_zdp.ieee_joining_list.policy", FT_UINT8, BASE_DEC, VALS(zbee_zdp_ieee_join_policy_vals), 0x0, |
2002 | 14 | NULL, HFILL }}, |
2003 | | |
2004 | 14 | { &hf_zbee_zdp_ieee_join_list_total, |
2005 | 14 | { "List Total Count", "zbee_zdp.ieee_joining_list.total", FT_UINT8, BASE_DEC, NULL, 0x0, |
2006 | 14 | NULL, HFILL }}, |
2007 | | |
2008 | 14 | { &hf_zbee_zdp_ieee_join_list_start, |
2009 | 14 | { "List Start", "zbee_zdp.ieee_joining_list.start", FT_UINT8, BASE_DEC, NULL, 0x0, |
2010 | 14 | NULL, HFILL }}, |
2011 | | |
2012 | 14 | { &hf_zbee_zdp_ieee_join_list_count, |
2013 | 14 | { "List Count", "zbee_zdp.ieee_joining_list.count", FT_UINT8, BASE_DEC, NULL, 0x0, |
2014 | 14 | NULL, HFILL }}, |
2015 | | |
2016 | 14 | { &hf_zbee_zdp_ieee_join_list_ieee, |
2017 | 14 | { "IEEE", "zbee_zdp.ieee_joining_list.ieee", FT_EUI64, BASE_NONE, NULL, 0x0, |
2018 | 14 | NULL, HFILL }}, |
2019 | | |
2020 | 14 | { &hf_zbee_zdp_number_of_children, |
2021 | 14 | { "NumberOfChildren", "zbee_zdp.n_children", FT_UINT8, BASE_DEC, NULL, 0x0, |
2022 | 14 | NULL, HFILL }}, |
2023 | | |
2024 | 14 | { &hf_zbee_zdp_beacon_survey_scan_mask, |
2025 | 14 | { "ScanChannelItem", "zbee_zdp.scan_ch_list", FT_UINT32, BASE_HEX, NULL, 0x0, |
2026 | 14 | NULL, HFILL }}, |
2027 | | |
2028 | 14 | { &hf_zbee_zdp_beacon_survey_scan_mask_cnt, |
2029 | 14 | { "ScanChannelCount", "zbee_zdp.scan_ch_cnt", FT_UINT8, BASE_DEC, NULL, 0x0, |
2030 | 14 | NULL, HFILL }}, |
2031 | | |
2032 | 14 | { &hf_zbee_zdp_beacon_survey_conf_mask, |
2033 | 14 | { "Configuration Bitmask", "zbee_zdp.conf_mask", FT_UINT8, BASE_HEX, NULL, 0x0, |
2034 | 14 | NULL, HFILL }}, |
2035 | | |
2036 | 14 | { &hf_zbee_zdp_beacon_survey_total, |
2037 | 14 | { "Total beacons surveyed", "zbee_zdp.total_beacons", FT_UINT8, BASE_DEC, NULL, 0x0, |
2038 | 14 | NULL, HFILL }}, |
2039 | | |
2040 | 14 | { &hf_zbee_zdp_beacon_survey_cur_zbn, |
2041 | 14 | { "On-network beacons", "zbee_zdp.on_nwk_beacons", FT_UINT8, BASE_DEC, NULL, 0x0, |
2042 | 14 | NULL, HFILL }}, |
2043 | | |
2044 | 14 | { &hf_zbee_zdp_beacon_survey_cur_zbn_potent_parents, |
2045 | 14 | { "Potential Parent Beacons", "zbee_zdp.num_of_parents", FT_UINT8, BASE_DEC, NULL, 0x0, |
2046 | 14 | NULL, HFILL }}, |
2047 | | |
2048 | 14 | { &hf_zbee_zdp_beacon_survey_other_zbn, |
2049 | 14 | { "Other Network Beacons", "zbee_zdp.other_nwk_beacons", FT_UINT8, BASE_DEC, NULL, 0x0, |
2050 | 14 | NULL, HFILL }}, |
2051 | | |
2052 | 14 | { &hf_zbee_zdp_beacon_survey_current_parent, |
2053 | 14 | { "Current Parent", "zbee_zdp.cur_parent", FT_UINT16, BASE_HEX, NULL, 0x0, |
2054 | 14 | NULL, HFILL }}, |
2055 | | |
2056 | 14 | { &hf_zbee_zdp_beacon_survey_parent, |
2057 | 14 | { "Potential Parent", "zbee_zdp.p_parent", FT_UINT16, BASE_HEX, NULL, 0x0, |
2058 | 14 | NULL, HFILL }}, |
2059 | | |
2060 | 14 | { &hf_zbee_zdp_beacon_survey_cnt_parents, |
2061 | 14 | { "Count of potential parents", "zbee_zdp.cnt_parents", FT_UINT8, BASE_DEC, NULL, 0x0, |
2062 | 14 | NULL, HFILL }}, |
2063 | | |
2064 | 14 | { &hf_zbee_zdp_tlv_count, |
2065 | 14 | { "TLV Count", "zbee_zdp.tlv_count", FT_UINT8, BASE_DEC, NULL, 0x0, |
2066 | 14 | NULL, HFILL }}, |
2067 | | |
2068 | 14 | { &hf_zbee_zdp_tlv_id, |
2069 | 14 | { "TLV_ID", "zbee_zdp.tlv_id", FT_UINT8, BASE_DEC, NULL, 0x0, |
2070 | 14 | NULL, HFILL }}, |
2071 | 14 | }; |
2072 | | |
2073 | | /* APS subtrees */ |
2074 | 14 | static int *ett[] = { |
2075 | 14 | &ett_zbee_zdp, |
2076 | 14 | &ett_zbee_zdp_endpoint, |
2077 | 14 | &ett_zbee_zdp_match_in, |
2078 | 14 | &ett_zbee_zdp_match_out, |
2079 | 14 | &ett_zbee_zdp_node, |
2080 | 14 | &ett_zbee_zdp_node_in, |
2081 | 14 | &ett_zbee_zdp_node_out, |
2082 | 14 | &ett_zbee_zdp_power, |
2083 | 14 | &ett_zbee_zdp_simple, |
2084 | 14 | &ett_zbee_zdp_cinfo, |
2085 | 14 | &ett_zbee_zdp_server, |
2086 | 14 | &ett_zbee_zdp_simple_sizes, |
2087 | 14 | &ett_zbee_zdp_bind, |
2088 | 14 | &ett_zbee_zdp_bind_entry, |
2089 | 14 | &ett_zbee_zdp_bind_end_in, |
2090 | 14 | &ett_zbee_zdp_bind_end_out, |
2091 | 14 | &ett_zbee_zdp_bind_table, |
2092 | 14 | &ett_zbee_zdp_bind_source, |
2093 | 14 | &ett_zbee_zdp_assoc_device, |
2094 | 14 | &ett_zbee_zdp_nwk, |
2095 | 14 | &ett_zbee_zdp_lqi, |
2096 | 14 | &ett_zbee_zdp_rtg, |
2097 | 14 | &ett_zbee_zdp_cache, |
2098 | 14 | &ett_zbee_zdp_nwk_desc, |
2099 | 14 | &ett_zbee_zdp_table_entry, |
2100 | 14 | &ett_zbee_zdp_descriptor_capability_field, |
2101 | 14 | &ett_zbee_zdp_perm_join_fc, |
2102 | 14 | }; |
2103 | | |
2104 | 14 | expert_module_t *expert_zbee_zdp; |
2105 | | |
2106 | 14 | static ei_register_info ei[] = { |
2107 | 14 | { |
2108 | 14 | &ei_deprecated_command, |
2109 | 14 | { "zbee_zdp.zdo_command_deprecated", PI_DEPRECATED, PI_WARN, |
2110 | 14 | "Deprecated ZDO Command", EXPFILL } |
2111 | 14 | } |
2112 | 14 | }; |
2113 | | |
2114 | | /* Register ZigBee ZDP protocol with Wireshark. */ |
2115 | 14 | proto_zbee_zdp = proto_register_protocol("ZigBee Device Profile", "ZigBee ZDP", "zbee_zdp"); |
2116 | 14 | proto_register_field_array(proto_zbee_zdp, hf, array_length(hf)); |
2117 | 14 | proto_register_subtree_array(ett, array_length(ett)); |
2118 | 14 | expert_zbee_zdp = expert_register_protocol(proto_zbee_zdp); |
2119 | 14 | expert_register_field_array(expert_zbee_zdp, ei, array_length(ei)); |
2120 | | |
2121 | | /* Register the ZDP dissector. */ |
2122 | 14 | register_dissector("zbee_zdp", dissect_zbee_zdp, proto_zbee_zdp); |
2123 | 14 | } /* proto_register_zbee_zdp */ |
2124 | | |
2125 | | /** |
2126 | | *Registers the Zigbee Device Profile dissector with Wireshark. |
2127 | | * |
2128 | | */ |
2129 | | void proto_reg_handoff_zbee_zdp(void) |
2130 | 14 | { |
2131 | 14 | dissector_handle_t zdp_handle; |
2132 | | |
2133 | | /* Register our dissector with the ZigBee application dissectors. */ |
2134 | 14 | zdp_handle = find_dissector("zbee_zdp"); |
2135 | 14 | dissector_add_uint("zbee.profile", ZBEE_ZDP_PROFILE, zdp_handle); |
2136 | 14 | } /* proto_reg_handoff_zbee_zdp */ |
2137 | | |
2138 | | /* |
2139 | | * Editor modelines - https://www.wireshark.org/tools/modelines.html |
2140 | | * |
2141 | | * Local variables: |
2142 | | * c-basic-offset: 4 |
2143 | | * tab-width: 8 |
2144 | | * indent-tabs-mode: nil |
2145 | | * End: |
2146 | | * |
2147 | | * vi: set shiftwidth=4 tabstop=8 expandtab: |
2148 | | * :indentSize=4:tabSize=8:noTabs=true: |
2149 | | */ |