2 * Dissector routines for the ZigBee Device Profile (ZDP)
3 * By Owen Kirby <osk@exegin.com>
4 * Copyright 2009 Exegin Technologies Limited
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 #ifndef PACKET_ZBEE_ZDP_H
28 #define PACKET_ZBEE_ZDP_H
30 /* The Profile ID for the ZigBee Device Profile. */
31 #define ZBEE_ZDP_PROFILE 0x0000
33 /* ZDP Cluster Identifiers. */
34 #define ZBEE_ZDP_REQ_NWK_ADDR 0x0000
35 #define ZBEE_ZDP_REQ_IEEE_ADDR 0x0001
36 #define ZBEE_ZDP_REQ_NODE_DESC 0x0002
37 #define ZBEE_ZDP_REQ_POWER_DESC 0x0003
38 #define ZBEE_ZDP_REQ_SIMPLE_DESC 0x0004
39 #define ZBEE_ZDP_REQ_ACTIVE_EP 0x0005
40 #define ZBEE_ZDP_REQ_MATCH_DESC 0x0006
41 #define ZBEE_ZDP_REQ_COMPLEX_DESC 0x0010
42 #define ZBEE_ZDP_REQ_USER_DESC 0x0011
43 #define ZBEE_ZDP_REQ_DISCOVERY_CACHE 0x0012
44 #define ZBEE_ZDP_REQ_DEVICE_ANNCE 0x0013
45 #define ZBEE_ZDP_REQ_SET_USER_DESC 0x0014
46 #define ZBEE_ZDP_REQ_SYSTEM_SERVER_DISC 0x0015 /* ZigBee 2006 & later. */
47 #define ZBEE_ZDP_REQ_STORE_DISCOVERY 0x0016 /* ZigBee 2006 & later. */
48 #define ZBEE_ZDP_REQ_STORE_NODE_DESC 0x0017 /* ZigBee 2006 & later. */
49 #define ZBEE_ZDP_REQ_STORE_POWER_DESC 0x0018 /* ZigBee 2006 & later. */
50 #define ZBEE_ZDP_REQ_STORE_ACTIVE_EP 0x0019 /* ZigBee 2006 & later. */
51 #define ZBEE_ZDP_REQ_STORE_SIMPLE_DESC 0x001a /* ZigBee 2006 & later. */
52 #define ZBEE_ZDP_REQ_REMOVE_NODE_CACHE 0x001b /* ZigBee 2006 & later. */
53 #define ZBEE_ZDP_REQ_FIND_NODE_CACHE 0x001c /* ZigBee 2006 & later. */
54 #define ZBEE_ZDP_REQ_EXT_SIMPLE_DESC 0x001d /* ZigBee 2007 & later. */
55 #define ZBEE_ZDP_REQ_EXT_ACTIVE_EP 0x001e /* ZigBee 2007 & later. */
56 #define ZBEE_ZDP_REQ_END_DEVICE_BIND 0x0020
57 #define ZBEE_ZDP_REQ_BIND 0x0021
58 #define ZBEE_ZDP_REQ_UNBIND 0x0022
59 #define ZBEE_ZDP_REQ_BIND_REGISTER 0x0023 /* ZigBee 2006 & later. */
60 #define ZBEE_ZDP_REQ_REPLACE_DEVICE 0x0024 /* ZigBee 2006 & later. */
61 #define ZBEE_ZDP_REQ_STORE_BAK_BIND_ENTRY 0x0025 /* ZigBee 2006 & later. */
62 #define ZBEE_ZDP_REQ_REMOVE_BAK_BIND_ENTRY 0x0026 /* ZigBee 2006 & later. */
63 #define ZBEE_ZDP_REQ_BACKUP_BIND_TABLE 0x0027 /* ZigBee 2006 & later. */
64 #define ZBEE_ZDP_REQ_RECOVER_BIND_TABLE 0x0028 /* ZigBee 2006 & later. */
65 #define ZBEE_ZDP_REQ_BACKUP_SOURCE_BIND 0x0029 /* ZigBee 2006 & later. */
66 #define ZBEE_ZDP_REQ_RECOVER_SOURCE_BIND 0x002a /* ZigBee 2006 & later. */
67 #define ZBEE_ZDP_REQ_MGMT_NWK_DISC 0x0030
68 #define ZBEE_ZDP_REQ_MGMT_LQI 0x0031
69 #define ZBEE_ZDP_REQ_MGMT_RTG 0x0032
70 #define ZBEE_ZDP_REQ_MGMT_BIND 0x0033
71 #define ZBEE_ZDP_REQ_MGMT_LEAVE 0x0034
72 #define ZBEE_ZDP_REQ_MGMT_DIRECT_JOIN 0x0035
73 #define ZBEE_ZDP_REQ_MGMT_PERMIT_JOIN 0x0036 /* ZigBee 2006 & later. */
74 #define ZBEE_ZDP_REQ_MGMT_CACHE 0x0037 /* ZigBee 2006 & later. */
75 #define ZBEE_ZDP_REQ_MGMT_NWKUPDATE 0x0038 /* ZigBee 2007 & later. */
77 #define ZBEE_ZDP_RSP_NWK_ADDR 0x8000
78 #define ZBEE_ZDP_RSP_IEEE_ADDR 0x8001
79 #define ZBEE_ZDP_RSP_NODE_DESC 0x8002
80 #define ZBEE_ZDP_RSP_POWER_DESC 0x8003
81 #define ZBEE_ZDP_RSP_SIMPLE_DESC 0x8004
82 #define ZBEE_ZDP_RSP_ACTIVE_EP 0x8005
83 #define ZBEE_ZDP_RSP_MATCH_DESC 0x8006
84 #define ZBEE_ZDP_RSP_COMPLEX_DESC 0x8010
85 #define ZBEE_ZDP_RSP_USER_DESC 0x8011
86 #define ZBEE_ZDP_RSP_DISCOVERY_CACHE 0x8012
87 #define ZBEE_ZDP_RSP_CONF_USER_DESC 0x8014 /* ZigBee 2006 & later. */
88 #define ZBEE_ZDP_RSP_SYSTEM_SERVER_DISC 0x8015 /* ZigBee 2006 & later. */
89 #define ZBEE_ZDP_RSP_STORE_DISCOVERY 0x8016 /* ZigBee 2006 & later. */
90 #define ZBEE_ZDP_RSP_STORE_NODE_DESC 0x8017 /* ZigBee 2006 & later. */
91 #define ZBEE_ZDP_RSP_STORE_POWER_DESC 0x8018 /* ZigBee 2006 & later. */
92 #define ZBEE_ZDP_RSP_STORE_ACTIVE_EP 0x8019 /* ZigBee 2006 & later. */
93 #define ZBEE_ZDP_RSP_STORE_SIMPLE_DESC 0x801a /* ZigBee 2006 & later. */
94 #define ZBEE_ZDP_RSP_REMOVE_NODE_CACHE 0x801b /* ZigBee 2006 & later. */
95 #define ZBEE_ZDP_RSP_FIND_NODE_CACHE 0x801c /* ZigBee 2006 & later. */
96 #define ZBEE_ZDP_RSP_EXT_SIMPLE_DESC 0x801d /* ZigBee 2007 & later. */
97 #define ZBEE_ZDP_RSP_EXT_ACTIVE_EP 0x801e /* ZigBee 2007 & later. */
98 #define ZBEE_ZDP_RSP_END_DEVICE_BIND 0x8020
99 #define ZBEE_ZDP_RSP_BIND 0x8021
100 #define ZBEE_ZDP_RSP_UNBIND 0x8022
101 #define ZBEE_ZDP_RSP_BIND_REGISTER 0x8023 /* ZigBee 2006 & later. */
102 #define ZBEE_ZDP_RSP_REPLACE_DEVICE 0x8024 /* ZigBee 2006 & later. */
103 #define ZBEE_ZDP_RSP_STORE_BAK_BIND_ENTRY 0x8025 /* ZigBee 2006 & later. */
104 #define ZBEE_ZDP_RSP_REMOVE_BAK_BIND_ENTRY 0x8026 /* ZigBee 2006 & later. */
105 #define ZBEE_ZDP_RSP_BACKUP_BIND_TABLE 0x8027 /* ZigBee 2006 & later. */
106 #define ZBEE_ZDP_RSP_RECOVER_BIND_TABLE 0x8028 /* ZigBee 2006 & later. */
107 #define ZBEE_ZDP_RSP_BACKUP_SOURCE_BIND 0x8029 /* ZigBee 2006 & later. */
108 #define ZBEE_ZDP_RSP_RECOVER_SOURCE_BIND 0x802a /* ZigBee 2006 & later. */
109 #define ZBEE_ZDP_RSP_MGMT_NWK_DISC 0x8030
110 #define ZBEE_ZDP_RSP_MGMT_LQI 0x8031
111 #define ZBEE_ZDP_RSP_MGMT_RTG 0x8032
112 #define ZBEE_ZDP_RSP_MGMT_BIND 0x8033
113 #define ZBEE_ZDP_RSP_MGMT_LEAVE 0x8034
114 #define ZBEE_ZDP_RSP_MGMT_DIRECT_JOIN 0x8035
115 #define ZBEE_ZDP_RSP_MGMT_PERMIT_JOIN 0x8036 /* ZigBee 2006 & later. */
116 #define ZBEE_ZDP_RSP_MGMT_CACHE 0x8037 /* ZigBee 2006 & later. */
117 #define ZBEE_ZDP_RSP_MGMT_NWKUPDATE 0x8038 /* ZigBee 2007 & later. */
119 #define ZBEE_ZDP_MSG_RESPONSE_BIT 0x8000
120 #define ZBEE_ZDP_MSG_MASK (ZBEE_ZDP_MSG_RESPONSE_BIT-1)
121 #define ZBEE_ZDP_MSG_RESPONSE_BIT_2003 0x0080
122 #define ZBEE_ZDP_MSG_MASK_2003 (ZBEE_ZDP_MSG_RESPONSE_BIT_2003-1)
124 #define ZBEE_ZDP_STATUS_SUCCESS 0x00
125 #define ZBEE_ZDP_STATUS_INV_REQUESTTYPE 0x80
126 #define ZBEE_ZDP_STATUS_DEVICE_NOT_FOUND 0x81
127 #define ZBEE_ZDP_STATUS_INVALID_EP 0x82
128 #define ZBEE_ZDP_STATUS_NOT_ACTIVE 0x83
129 #define ZBEE_ZDP_STATUS_NOT_SUPPORTED 0x84
130 #define ZBEE_ZDP_STATUS_TIMEOUT 0x85
131 #define ZBEE_ZDP_STATUS_NO_MATCH 0x86
132 #define ZBEE_ZDP_STATUS_NO_ENTRY 0x88
133 #define ZBEE_ZDP_STATUS_NO_DESCRIPTOR 0x89
134 #define ZBEE_ZDP_STATUS_INSUFFICIENT_SPACE 0x8a
135 #define ZBEE_ZDP_STATUS_NOT_PERMITTED 0x8b
136 #define ZBEE_ZDP_STATUS_TABLE_FULL 0x8c
138 #define ZBEE_ZDP_REQ_TYPE_SINGLE 0x00
139 #define ZBEE_ZDP_REQ_TYPE_EXTENDED 0x01
141 #define ZBEE_ZDP_NODE_TYPE 0x0007
142 #define ZBEE_ZDP_NODE_TYPE_COORD 0x0000
143 #define ZBEE_ZDP_NODE_TYPE_FFD 0x0001
144 #define ZBEE_ZDP_NODE_TYPE_RFD 0x0002
145 #define ZBEE_ZDP_NODE_COMPLEX 0x0008
146 #define ZBEE_ZDP_NODE_USER 0x0010
147 #define ZBEE_ZDP_NODE_APS 0x0700
148 #define ZBEE_ZDP_NODE_FREQ 0xf800
149 #define ZBEE_ZDP_NODE_FREQ_868MHZ 0x0800
150 #define ZBEE_ZDP_NODE_FREQ_900MHZ 0x2000
151 #define ZBEE_ZDP_NODE_FREQ_2400MHZ 0x4000
153 #define ZBEE_ZDP_NODE_SERVER_PRIMARY_TRUST 0x0001
154 #define ZBEE_ZDP_NODE_SERVER_BACKUP_TRUST 0x0002
155 #define ZBEE_ZDP_NODE_SERVER_PRIMARY_BIND 0x0004
156 #define ZBEE_ZDP_NODE_SERVER_BACKUP_BIND 0x0008
157 #define ZBEE_ZDP_NODE_SERVER_PRIMARY_DISC 0x0010
158 #define ZBEE_ZDP_NODE_SERVER_BACKUP_DISC 0x0020
160 #define ZBEE_ZDP_POWER_MODE 0x000f
161 #define ZBEE_ZDP_POWER_MODE_RX_ON 0x0000
162 #define ZBEE_ZDP_POWER_MODE_RX_PERIODIC 0x0001
163 #define ZBEE_ZDP_POWER_MODE_RX_STIMULATE 0x0002
164 #define ZBEE_ZDP_POWER_AVAIL 0x00f0
165 #define ZBEE_ZDP_POWER_AVAIL_AC 0x0010
166 #define ZBEE_ZDP_POWER_AVAIL_RECHARGEABLE 0x0020
167 #define ZBEE_ZDP_POWER_AVAIL_DISPOSEABLE 0x0040
168 #define ZBEE_ZDP_POWER_SOURCE 0x0f00
169 #define ZBEE_ZDP_POWER_SOURCE_AC 0x0100
170 #define ZBEE_ZDP_POWER_SOURCE_RECHARGEABLE 0x0200
171 #define ZBEE_ZDP_POWER_SOURCE_DISPOSEABLE 0x0400
172 #define ZBEE_ZDP_POWER_LEVEL 0xf000
173 #define ZBEE_ZDP_POWER_LEVEL_FULL 0xc000
174 #define ZBEE_ZDP_POWER_LEVEL_OK 0x8000
175 #define ZBEE_ZDP_POWER_LEVEL_LOW 0x4000
176 #define ZBEE_ZDP_POWER_LEVEL_CRITICAL 0x0000
178 #define ZBEE_ZDP_ADDR_MODE_GROUP 0x01
179 #define ZBEE_ZDP_ADDR_MODE_UNICAST 0x03
181 #define ZBEE_ZDP_MGMT_LEAVE_CHILDREN 0x80
182 #define ZBEE_ZDP_MGMT_LEAVE_REJOIN 0x40
184 #define ZBEE_ZDP_NWKUPDATE_SCAN_MAX 0x05
185 #define ZBEE_ZDP_NWKUPDATE_CHANNEL_HOP 0xfe
186 #define ZBEE_ZDP_NWKUPDATE_PARAMETERS 0xff
188 /**************************************
190 **************************************
192 /* General indicies. */
193 extern int hf_zbee_zdp_ext_addr;
194 extern int hf_zbee_zdp_device;
195 extern int hf_zbee_zdp_req_type;
196 extern int hf_zbee_zdp_index;
197 extern int hf_zbee_zdp_status;
198 extern int hf_zbee_zdp_ep_count;
199 extern int hf_zbee_zdp_endpoint;
200 extern int hf_zbee_zdp_profile;
201 extern int hf_zbee_zdp_cluster;
202 extern int hf_zbee_zdp_addr_mode;
203 extern int hf_zbee_zdp_in_count;
204 extern int hf_zbee_zdp_out_count;
205 extern int hf_zbee_zdp_in_cluster;
206 extern int hf_zbee_zdp_out_cluster;
207 extern int hf_zbee_zdp_table_size;
208 extern int hf_zbee_zdp_table_count;
209 extern int hf_zbee_zdp_assoc_device_count;
210 extern int hf_zbee_zdp_assoc_device;
212 /* Discovery indicies. */
213 extern int hf_zbee_zdp_cache;
214 extern int hf_zbee_zdp_disc_node_size;
215 extern int hf_zbee_zdp_disc_power_size;
216 extern int hf_zbee_zdp_disc_ep_count;
217 extern int hf_zbee_zdp_disc_simple_count;
218 extern int hf_zbee_zdp_disc_simple_size;
220 /* Descriptor indicies. */
221 extern int hf_zbee_zdp_complex_length;
222 extern int hf_zbee_zdp_user;
223 extern int hf_zbee_zdp_user_length;
224 extern int hf_zbee_zdp_simple_length;
226 /* Binding indicies. */
227 extern int hf_zbee_zdp_target;
228 extern int hf_zbee_zdp_target64;
229 extern int hf_zbee_zdp_target_ep;
230 extern int hf_zbee_zdp_replacement;
231 extern int hf_zbee_zdp_replacement_ep;
232 extern int hf_zbee_zdp_bind_src;
233 extern int hf_zbee_zdp_bind_src64;
234 extern int hf_zbee_zdp_bind_src_ep;
235 extern int hf_zbee_zdp_bind_dst;
236 extern int hf_zbee_zdp_bind_dst64;
237 extern int hf_zbee_zdp_bind_dst_ep;
239 /* Network Management indicies. */
240 extern int hf_zbee_zdp_duration;
241 extern int hf_zbee_zdp_leave_children;
242 extern int hf_zbee_zdp_leave_rejoin;
243 extern int hf_zbee_zdp_significance;
244 extern int hf_zbee_zdp_scan_count;
245 extern int hf_zbee_zdp_update_id;
246 extern int hf_zbee_zdp_manager;
247 extern int hf_zbee_zdp_tx_total;
248 extern int hf_zbee_zdp_tx_fail;
249 extern int hf_zbee_zdp_channel_count;
251 /* Subtree indicies. */
252 extern gint ett_zbee_zdp_endpoint;
253 extern gint ett_zbee_zdp_match_in;
254 extern gint ett_zbee_zdp_match_out;
255 extern gint ett_zbee_zdp_node;
256 extern gint ett_zbee_zdp_node_in;
257 extern gint ett_zbee_zdp_node_out;
258 extern gint ett_zbee_zdp_power;
259 extern gint ett_zbee_zdp_simple;
260 extern gint ett_zbee_zdp_complex;
261 extern gint ett_zbee_zdp_cinfo;
262 extern gint ett_zbee_zdp_server;
263 extern gint ett_zbee_zdp_simple_sizes;
264 extern gint ett_zbee_zdp_bind;
265 extern gint ett_zbee_zdp_bind_end_in;
266 extern gint ett_zbee_zdp_bind_end_out;
267 extern gint ett_zbee_zdp_bind_source;
268 extern gint ett_zbee_zdp_channels;
269 extern gint ett_zbee_zdp_assoc_device;
270 extern gint ett_zbee_zdp_nwk;
271 extern gint ett_zbee_zdp_lqi;
272 extern gint ett_zbee_zdp_rtg;
273 extern gint ett_zbee_zdp_cache;
275 /**************************************
277 **************************************
279 extern const gchar *zdp_status_name (guint8 status);
280 extern void zdp_dump_excess (tvbuff_t *tvb, guint offset, packet_info *pinfo, proto_tree *tree);
281 extern guint zbee_parse_uint (proto_tree *tree, int hfindex, tvbuff_t *tvb, guint *offset, guint length, proto_item **ti);
282 extern guint64 zbee_parse_eui64 (proto_tree *tree, int hfindex, tvbuff_t *tvb, guint *offset, guint length, proto_item **ti);
283 extern void zbee_append_info (proto_item *item, packet_info *pinfo, const gchar *format, ...) G_GNUC_PRINTF(3, 4);
285 extern void zdp_parse_node_desc (proto_tree *tree, gint ettindex, tvbuff_t *tvb, guint *offset, packet_info *pinfo);
286 extern void zdp_parse_power_desc (proto_tree *tree, gint ettindex, tvbuff_t *tvb, guint *offset);
287 extern void zdp_parse_simple_desc (proto_tree *tree, gint ettindex, tvbuff_t *tvb, guint *offset, packet_info *pinfo);
288 extern void zdp_parse_complex_desc (proto_tree *tree, gint ettindex, tvbuff_t *tvb, guint *offset, guint length);
290 extern guint8 zdp_parse_status (proto_tree *tree, tvbuff_t *tvb, guint *offset);
291 extern guint32 zdp_parse_chanmask (proto_tree *tree, tvbuff_t *tvb, guint *offset);
292 extern guint8 zdp_parse_cinfo (proto_tree *tree, gint ettindex, tvbuff_t *tvb, guint *offset);
293 extern guint16 zdp_parse_server_flags (proto_tree *tree, gint ettindex, tvbuff_t *tvb, guint *offset);
295 #endif /* PACKET_ZBEE_ZDP_H */