aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Brandson <chris.brandson@gmail.com>2016-06-17 15:12:12 -0700
committerAnders Broman <a.broman58@gmail.com>2016-06-23 07:56:03 +0000
commit1cdd09190d7557a22b9959a3d1c955763e92320f (patch)
treec63e5059ef18bd41d92c2981b2ff9a6e58f18281
parentfdcfd3a6f367a94d00592ad4fd174c08b95a90c2 (diff)
ZigBee updated ZDO support to comply with R22
Update ZDO support for R22 (and IEEE 802.15.4-2015) - Add support for the new IEEE Joining List request / response - Changed Network Update to support channel pages - Added Network Update Enhanced request - Added decoding of EU Sub-GHz Frequency Band Change-Id: I3a513a486f6d3784897fc8b783411c678e3f905e Reviewed-on: https://code.wireshark.org/review/16040 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net> Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r--epan/dissectors/packet-zbee-zdp-management.c104
-rw-r--r--epan/dissectors/packet-zbee-zdp.c94
-rw-r--r--epan/dissectors/packet-zbee-zdp.h25
3 files changed, 207 insertions, 16 deletions
diff --git a/epan/dissectors/packet-zbee-zdp-management.c b/epan/dissectors/packet-zbee-zdp-management.c
index 00aff27dbc..00b68bed82 100644
--- a/epan/dissectors/packet-zbee-zdp-management.c
+++ b/epan/dissectors/packet-zbee-zdp-management.c
@@ -397,29 +397,79 @@ void
dissect_zbee_zdp_req_mgmt_nwkupdate(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
guint offset = 0;
- /*guint32 channels;*/
guint8 duration;
- /*guint8 count;*/
- /*guint8 update_id;*/
- /*guint16 manager;*/
- /*channels =*/ zdp_parse_chanmask(tree, tvb, &offset, hf_zbee_zdp_channel_mask);
+ zdp_parse_chanmask(tree, tvb, &offset, hf_zbee_zdp_channel_page, hf_zbee_zdp_channel_mask);
duration = zbee_parse_uint(tree, hf_zbee_zdp_duration, tvb, &offset, 1, NULL);
if (duration == ZBEE_ZDP_NWKUPDATE_PARAMETERS) {
- /*update_id =*/ zbee_parse_uint(tree, hf_zbee_zdp_update_id, tvb, &offset, 1, NULL);
- /*manager =*/ zbee_parse_uint(tree, hf_zbee_zdp_manager, tvb, &offset, 2, NULL);
+ zbee_parse_uint(tree, hf_zbee_zdp_update_id, tvb, &offset, 1, NULL);
+ zbee_parse_uint(tree, hf_zbee_zdp_manager, tvb, &offset, 2, NULL);
}
else if (duration == ZBEE_ZDP_NWKUPDATE_CHANNEL_HOP) {
- /*update_id =*/ zbee_parse_uint(tree, hf_zbee_zdp_update_id, tvb, &offset, 1, NULL);
+ zbee_parse_uint(tree, hf_zbee_zdp_update_id, tvb, &offset, 1, NULL);
}
else if (duration <= ZBEE_ZDP_NWKUPDATE_SCAN_MAX) {
- /*count =*/ zbee_parse_uint(tree, hf_zbee_zdp_scan_count, tvb, &offset, 1, NULL);
+ zbee_parse_uint(tree, hf_zbee_zdp_scan_count, tvb, &offset, 1, NULL);
}
/* Dump any leftover bytes. */
zdp_dump_excess(tvb, offset, pinfo, tree);
} /* dissect_zbee_zdp_req_mgmt_nwkupdate */
+/**
+ *ZigBee Device Profile dissector for the enhanced nwk update request.
+ *
+ *@param tvb pointer to buffer containing raw packet.
+ *@param pinfo pointer to packet information fields
+ *@param tree pointer to data tree Wireshark uses to display packet.
+*/
+void
+dissect_zbee_zdp_req_mgmt_nwkupdate_enh(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+ guint offset = 0;
+ guint8 duration;
+ guint8 count;
+ int i;
+
+ count = zbee_parse_uint(tree, hf_zbee_zdp_channel_page_count, tvb, &offset, 1, NULL);
+ for (i=0; i<count; i++) {
+ zdp_parse_chanmask(tree, tvb, &offset, hf_zbee_zdp_channel_page, hf_zbee_zdp_channel_mask);
+ }
+
+ duration = zbee_parse_uint(tree, hf_zbee_zdp_duration, tvb, &offset, 1, NULL);
+ if (duration == ZBEE_ZDP_NWKUPDATE_PARAMETERS) {
+ zbee_parse_uint(tree, hf_zbee_zdp_update_id, tvb, &offset, 1, NULL);
+ zbee_parse_uint(tree, hf_zbee_zdp_manager, tvb, &offset, 2, NULL);
+ }
+ else if (duration == ZBEE_ZDP_NWKUPDATE_CHANNEL_HOP) {
+ zbee_parse_uint(tree, hf_zbee_zdp_update_id, tvb, &offset, 1, NULL);
+ }
+ else if (duration <= ZBEE_ZDP_NWKUPDATE_SCAN_MAX) {
+ zbee_parse_uint(tree, hf_zbee_zdp_scan_count, tvb, &offset, 1, NULL);
+ }
+
+ /* Dump any leftover bytes. */
+ zdp_dump_excess(tvb, offset, pinfo, tree);
+} /* dissect_zbee_zdp_req_mgmt_nwkupdate_enh */
+
+/**
+ *ZigBee Device Profile dissector for the IEEE Joining List Request.
+ *
+ *@param tvb pointer to buffer containing raw packet.
+ *@param pinfo pointer to packet information fields
+ *@param tree pointer to data tree Wireshark uses to display packet.
+*/
+void
+dissect_zbee_zdp_req_mgmt_ieee_join_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+ guint offset = 0;
+
+ zbee_parse_uint(tree, hf_zbee_zdp_ieee_join_start_index, tvb, &offset, 1, NULL);
+
+ /* Dump any leftover bytes. */
+ zdp_dump_excess(tvb, offset, pinfo, tree);
+} /* dissect_zbee_zdp_req_mgmt_ieee_join_list */
+
/**************************************
* MANAGEMENT RESPONSES
**************************************
@@ -703,7 +753,7 @@ dissect_zbee_zdp_rsp_mgmt_nwkupdate(tvbuff_t *tvb, packet_info *pinfo, proto_tre
guint8 channel_count;
/*status =*/ zdp_parse_status(tree, tvb, &offset);
- channels = zdp_parse_chanmask(tree, tvb, &offset, hf_zbee_zdp_channel_mask);
+ channels = zdp_parse_chanmask(tree, tvb, &offset, hf_zbee_zdp_channel_page, hf_zbee_zdp_channel_mask);
/*tx_total =*/ zbee_parse_uint(tree, hf_zbee_zdp_tx_total, tvb, &offset, 2, NULL);
/*tx_fail =*/ zbee_parse_uint(tree, hf_zbee_zdp_tx_fail, tvb, &offset, 2, NULL);
channel_count = zbee_parse_uint(tree, hf_zbee_zdp_channel_count, tvb, &offset, 1, NULL);
@@ -732,6 +782,40 @@ dissect_zbee_zdp_rsp_mgmt_nwkupdate(tvbuff_t *tvb, packet_info *pinfo, proto_tre
zdp_dump_excess(tvb, offset, pinfo, tree);
} /* dissect_zbee_zdp_rsp_mgmt_nwkupdate */
+/**
+ *ZigBee Device Profile dissector for the IEEE Joining List Response.
+ *
+ *@param tvb pointer to buffer containing raw packet.
+ *@param pinfo pointer to packet information fields
+ *@param tree pointer to data tree Wireshark uses to display packet.
+*/
+void
+dissect_zbee_zdp_rsp_mgmt_ieee_join_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+ guint8 status;
+ guint8 list_total;
+ guint8 list_count;
+ guint offset = 0;
+ int i;
+
+ status = zbee_parse_uint(tree, hf_zbee_zdp_ieee_join_status, tvb, &offset, 1, NULL);
+ if (status == 0x00) {
+ zbee_parse_uint(tree, hf_zbee_zdp_ieee_join_update_id, tvb, &offset, 1, NULL);
+ zbee_parse_uint(tree, hf_zbee_zdp_ieee_join_policy, tvb, &offset, 1, NULL);
+ list_total = zbee_parse_uint(tree, hf_zbee_zdp_ieee_join_list_total, tvb, &offset, 1, NULL);
+ if (list_total > 0) {
+ zbee_parse_uint(tree, hf_zbee_zdp_ieee_join_list_start, tvb, &offset, 1, NULL);
+ list_count = zbee_parse_uint(tree, hf_zbee_zdp_ieee_join_list_count, tvb, &offset, 1, NULL);
+
+ for(i=0; i<list_count; i++) {
+ zbee_parse_eui64(tree, hf_zbee_zdp_ieee_join_list_ieee, tvb, &offset, 8, NULL);
+ }
+ }
+ }
+ /* Dump any leftover bytes. */
+ zdp_dump_excess(tvb, offset, pinfo, tree);
+} /* dissect_zbee_zdp_rsp_mgmt_ieee_join_list */
+
/*
* Editor modelines - http://www.wireshark.org/tools/modelines.html
*
diff --git a/epan/dissectors/packet-zbee-zdp.c b/epan/dissectors/packet-zbee-zdp.c
index a9f6c9b0d9..e36be76c0e 100644
--- a/epan/dissectors/packet-zbee-zdp.c
+++ b/epan/dissectors/packet-zbee-zdp.c
@@ -100,6 +100,7 @@ static int hf_zbee_zdp_node_user = -1;
static int hf_zbee_zdp_node_freq_868 = -1;
static int hf_zbee_zdp_node_freq_900 = -1;
static int hf_zbee_zdp_node_freq_2400 = -1;
+static int hf_zbee_zdp_node_freq_eu_sub_ghz = -1;
static int hf_zbee_zdp_node_manufacturer = -1;
static int hf_zbee_zdp_node_max_buffer = -1;
static int hf_zbee_zdp_node_max_incoming_transfer = -1;
@@ -163,6 +164,8 @@ static int hf_zbee_zdp_complex = -1;
int hf_zbee_zdp_tx_fail = -1;
int hf_zbee_zdp_channel_count = -1;
int hf_zbee_zdp_channel_mask = -1;
+ int hf_zbee_zdp_channel_page = -1;
+ int hf_zbee_zdp_channel_page_count = -1;
int hf_zbee_zdp_channel_energy = -1;
int hf_zbee_zdp_pan_eui64 = -1;
int hf_zbee_zdp_pan_uint = -1;
@@ -183,6 +186,14 @@ static int hf_zbee_zdp_complex = -1;
int hf_zbee_zdp_permit_joining_03 = -1;
int hf_zbee_zdp_lqi = -1;
static int hf_zbee_zdp_scan_channel = -1;
+ int hf_zbee_zdp_ieee_join_start_index = -1;
+ int hf_zbee_zdp_ieee_join_status = -1;
+ int hf_zbee_zdp_ieee_join_update_id = -1;
+ int hf_zbee_zdp_ieee_join_policy = -1;
+ int hf_zbee_zdp_ieee_join_list_total = -1;
+ int hf_zbee_zdp_ieee_join_list_start = -1;
+ int hf_zbee_zdp_ieee_join_list_count = -1;
+ int hf_zbee_zdp_ieee_join_list_ieee = -1;
/* Routing Table */
int hf_zbee_zdp_rtg = -1;
@@ -273,6 +284,8 @@ const value_string zbee_zdp_cluster_names[] = {
{ ZBEE_ZDP_REQ_MGMT_PERMIT_JOIN, "Permit Join Request" },
{ ZBEE_ZDP_REQ_MGMT_CACHE, "Cache Request" },
{ ZBEE_ZDP_REQ_MGMT_NWKUPDATE, "Network Update Request" },
+ { ZBEE_ZDP_REQ_MGMT_NWKUPDATE_ENH, "Network Update Enhanced Request" },
+ { ZBEE_ZDP_REQ_MGMT_IEEE_JOIN_LIST, "IEEE Joining List Request" },
{ ZBEE_ZDP_RSP_NWK_ADDR, "Network Address Response" },
{ ZBEE_ZDP_RSP_IEEE_ADDR, "Extended Address Response" },
@@ -315,6 +328,7 @@ const value_string zbee_zdp_cluster_names[] = {
{ ZBEE_ZDP_RSP_MGMT_PERMIT_JOIN, "Permit Join Response" },
{ ZBEE_ZDP_RSP_MGMT_CACHE, "Cache Response" },
{ ZBEE_ZDP_RSP_MGMT_NWKUPDATE, "Network Update Notify" },
+ { ZBEE_ZDP_RSP_MGMT_IEEE_JOIN_LIST, "IEEE Joining List Response" },
{ 0, NULL }
};
@@ -346,6 +360,13 @@ const value_string zbee_zdp_rtg_status_vals[] = {
{ 0, NULL }
};
+const value_string zbee_zdp_ieee_join_policy_vals[] = {
+ { 0x00, "All Join" },
+ { 0x01, "IEEE Join" },
+ { 0x02, "No Join" },
+ { 0, NULL }
+};
+
/* The reason this has it's own value_string and doesn't use
tfs_true_false, is that some hf_ fields use bitmasks larger
than 0x01, and it's intentional that those other values be
@@ -575,15 +596,20 @@ zdp_parse_status(proto_tree *tree, tvbuff_t *tvb, guint *offset)
*@param offset offset into the tvb to find the status value.
*/
guint32
-zdp_parse_chanmask(proto_tree *tree, tvbuff_t *tvb, guint *offset, int hf_channel)
+zdp_parse_chanmask(proto_tree *tree, tvbuff_t *tvb, guint *offset, int hf_page, int hf_channel)
{
int i;
guint32 mask;
+ guint8 page;
proto_item *ti;
/* Get and display the channel mask. */
mask = tvb_get_letohl(tvb, *offset);
+ page = (guint8)((mask & ZBEE_ZDP_NWKUPDATE_PAGE) >> 27);
+ mask &= ZBEE_ZDP_NWKUPDATE_CHANNEL;
+
+ proto_tree_add_uint(tree, hf_page, tvb, *offset, 4, page);
ti = proto_tree_add_uint_format(tree, hf_channel, tvb, *offset, 4, mask, "Channels: ");
/* Check if there are any channels to display. */
@@ -712,6 +738,7 @@ zdp_parse_node_desc(proto_tree *tree, gint ettindex, tvbuff_t *tvb, guint *offse
&hf_zbee_zdp_node_freq_868,
&hf_zbee_zdp_node_freq_900,
&hf_zbee_zdp_node_freq_2400,
+ &hf_zbee_zdp_node_freq_eu_sub_ghz,
NULL
};
@@ -1132,6 +1159,12 @@ dissect_zbee_zdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data
case ZBEE_ZDP_REQ_MGMT_NWKUPDATE:
dissect_zbee_zdp_req_mgmt_nwkupdate(zdp_tvb, pinfo, zdp_tree);
break;
+ case ZBEE_ZDP_REQ_MGMT_NWKUPDATE_ENH:
+ dissect_zbee_zdp_req_mgmt_nwkupdate_enh(zdp_tvb, pinfo, zdp_tree);
+ break;
+ case ZBEE_ZDP_REQ_MGMT_IEEE_JOIN_LIST:
+ dissect_zbee_zdp_req_mgmt_ieee_join_list(zdp_tvb, pinfo, zdp_tree);
+ break;
case ZBEE_ZDP_RSP_NWK_ADDR:
dissect_zbee_zdp_rsp_nwk_addr(zdp_tvb, pinfo, zdp_tree);
break;
@@ -1255,6 +1288,9 @@ dissect_zbee_zdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data
case ZBEE_ZDP_RSP_MGMT_NWKUPDATE:
dissect_zbee_zdp_rsp_mgmt_nwkupdate(zdp_tvb, pinfo, zdp_tree);
break;
+ case ZBEE_ZDP_RSP_MGMT_IEEE_JOIN_LIST:
+ dissect_zbee_zdp_rsp_mgmt_ieee_join_list(zdp_tvb, pinfo, zdp_tree);
+ break;
default:
/* Invalid Cluster Identifier. */
call_data_dissector(zdp_tvb, pinfo, tree);
@@ -1446,15 +1482,19 @@ void proto_register_zbee_zdp(void)
NULL, HFILL }},
{ &hf_zbee_zdp_node_freq_868,
- { "868MHz Band", "zbee_zdp.node.freq.868mhz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_868MHZ,
+ { "868MHz BPSK Band", "zbee_zdp.node.freq.868mhz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_868MHZ,
NULL, HFILL }},
{ &hf_zbee_zdp_node_freq_900,
- { "900MHz Band", "zbee_zdp.node.freq.900mhz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_900MHZ,
+ { "902MHz BPSK Band", "zbee_zdp.node.freq.900mhz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_900MHZ,
NULL, HFILL }},
{ &hf_zbee_zdp_node_freq_2400,
- { "2.4GHz Band", "zbee_zdp.node.freq.2400mhz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_2400MHZ,
+ { "2.4GHz OQPSK Band", "zbee_zdp.node.freq.2400mhz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_2400MHZ,
+ NULL, HFILL }},
+
+ { &hf_zbee_zdp_node_freq_eu_sub_ghz,
+ { "EU Sub-GHz FSK Band", "zbee_zdp.node.freq.eu_sub_ghz", FT_BOOLEAN, 16, NULL, ZBEE_ZDP_NODE_FREQ_EU_SUB_GHZ,
NULL, HFILL }},
{ &hf_zbee_zdp_node_manufacturer,
@@ -1637,6 +1677,14 @@ void proto_register_zbee_zdp(void)
{ "Channel List Count", "zbee_zdp.channel_count", FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }},
+ { &hf_zbee_zdp_channel_page_count,
+ { "Channel Page Count", "zbee_zdp.channel_page_count", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_zbee_zdp_channel_page,
+ { "Channel Page", "zbee_zdp.channel_page", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
{ &hf_zbee_zdp_channel_mask,
{ "Channels", "zbee_zdp.channel_mask", FT_UINT32, BASE_HEX, NULL, 0x0,
NULL, HFILL }},
@@ -1724,18 +1772,54 @@ void proto_register_zbee_zdp(void)
{ &hf_zbee_zdp_rtg,
{ "Routing Table", "zbee_zdp.routing", FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
+
{ &hf_zbee_zdp_rtg_entry,
{ "Routing Table Entry", "zbee_zdp.routing.entry", FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
+
{ &hf_zbee_zdp_rtg_destination,
{ "Destination", "zbee_zdp.routing.destination", FT_UINT16, BASE_HEX, NULL, 0x0,
NULL, HFILL }},
+
{ &hf_zbee_zdp_rtg_status,
{ "Status", "zbee_zdp.routing.status", FT_UINT8, BASE_DEC, VALS(zbee_zdp_rtg_status_vals), 0x0,
NULL, HFILL }},
+
{ &hf_zbee_zdp_rtg_next_hop,
{ "Next Hop", "zbee_zdp.routing.next_hop", FT_UINT16, BASE_HEX, NULL, 0x0,
- NULL, HFILL }}
+ NULL, HFILL }},
+
+ { &hf_zbee_zdp_ieee_join_start_index,
+ { "Start Index", "zbee_zdp.ieee_joining_list.start_index", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_zbee_zdp_ieee_join_status,
+ { "Status", "zbee_zdp.ieee_joining_list.status", FT_UINT8, BASE_HEX, VALS(zbee_zdp_status_names), 0x0,
+ NULL, HFILL }},
+
+ { &hf_zbee_zdp_ieee_join_update_id,
+ { "Update Id", "zbee_zdp.ieee_joining_list.update_id", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_zbee_zdp_ieee_join_policy,
+ { "Policy", "zbee_zdp.ieee_joining_list.policy", FT_UINT8, BASE_DEC, VALS(zbee_zdp_ieee_join_policy_vals), 0x0,
+ NULL, HFILL }},
+
+ { &hf_zbee_zdp_ieee_join_list_total,
+ { "List Total Count", "zbee_zdp.ieee_joining_list.total", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_zbee_zdp_ieee_join_list_start,
+ { "List Start", "zbee_zdp.ieee_joining_list.start", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_zbee_zdp_ieee_join_list_count,
+ { "List Count", "zbee_zdp.ieee_joining_list.count", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_zbee_zdp_ieee_join_list_ieee,
+ { "IEEE", "zbee_zdp.ieee_joining_list.ieee", FT_EUI64, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
};
diff --git a/epan/dissectors/packet-zbee-zdp.h b/epan/dissectors/packet-zbee-zdp.h
index a7726ce16c..b580990909 100644
--- a/epan/dissectors/packet-zbee-zdp.h
+++ b/epan/dissectors/packet-zbee-zdp.h
@@ -72,6 +72,8 @@
#define ZBEE_ZDP_REQ_MGMT_PERMIT_JOIN 0x0036 /* ZigBee 2006 & later. */
#define ZBEE_ZDP_REQ_MGMT_CACHE 0x0037 /* ZigBee 2006 & later. */
#define ZBEE_ZDP_REQ_MGMT_NWKUPDATE 0x0038 /* ZigBee 2007 & later. */
+#define ZBEE_ZDP_REQ_MGMT_NWKUPDATE_ENH 0x0039 /* R22 */
+#define ZBEE_ZDP_REQ_MGMT_IEEE_JOIN_LIST 0x003a /* R22 */
#define ZBEE_ZDP_RSP_NWK_ADDR 0x8000
#define ZBEE_ZDP_RSP_IEEE_ADDR 0x8001
@@ -114,6 +116,8 @@
#define ZBEE_ZDP_RSP_MGMT_PERMIT_JOIN 0x8036 /* ZigBee 2006 & later. */
#define ZBEE_ZDP_RSP_MGMT_CACHE 0x8037 /* ZigBee 2006 & later. */
#define ZBEE_ZDP_RSP_MGMT_NWKUPDATE 0x8038 /* ZigBee 2007 & later. */
+/* ZBEE_ZDP_REQ_MGMT_NWKUPDATE_ENH returns ZBEE_ZDP_RSP_MGMT_NWKUPDATE so cluster 0x8039 is unused */
+#define ZBEE_ZDP_RSP_MGMT_IEEE_JOIN_LIST 0x803a /* R22 */
#define ZBEE_ZDP_MSG_RESPONSE_BIT 0x8000
#define ZBEE_ZDP_MSG_MASK (ZBEE_ZDP_MSG_RESPONSE_BIT-1)
@@ -151,6 +155,7 @@
#define ZBEE_ZDP_NODE_FREQ_868MHZ 0x0800
#define ZBEE_ZDP_NODE_FREQ_900MHZ 0x2000
#define ZBEE_ZDP_NODE_FREQ_2400MHZ 0x4000
+#define ZBEE_ZDP_NODE_FREQ_EU_SUB_GHZ 0x8000
#define ZBEE_ZDP_NODE_SERVER_PRIMARY_TRUST 0x0001
#define ZBEE_ZDP_NODE_SERVER_BACKUP_TRUST 0x0002
@@ -189,9 +194,14 @@
#define ZBEE_ZDP_NWKUPDATE_CHANNEL_HOP 0xfe
#define ZBEE_ZDP_NWKUPDATE_PARAMETERS 0xff
+#define ZBEE_ZDP_NWKUPDATE_PAGE 0xF8000000
+#define ZBEE_ZDP_NWKUPDATE_CHANNEL 0x07FFFFFF
+
#define ZBEE_ZDP_DCF_EAELA 0x01
#define ZBEE_ZDP_DCF_ESDLA 0x02
+
+
/**************************************
* Field Indicies
**************************************
@@ -253,6 +263,8 @@ extern int hf_zbee_zdp_tx_total;
extern int hf_zbee_zdp_tx_fail;
extern int hf_zbee_zdp_channel_count;
extern int hf_zbee_zdp_channel_mask;
+extern int hf_zbee_zdp_channel_page;
+extern int hf_zbee_zdp_channel_page_count;
extern int hf_zbee_zdp_channel_energy;
extern int hf_zbee_zdp_pan_eui64;
extern int hf_zbee_zdp_pan_uint;
@@ -272,6 +284,14 @@ extern int hf_zbee_zdp_table_entry_relationship_18;
extern int hf_zbee_zdp_depth;
extern int hf_zbee_zdp_permit_joining_03;
extern int hf_zbee_zdp_lqi;
+extern int hf_zbee_zdp_ieee_join_start_index;
+extern int hf_zbee_zdp_ieee_join_status;
+extern int hf_zbee_zdp_ieee_join_update_id;
+extern int hf_zbee_zdp_ieee_join_policy;
+extern int hf_zbee_zdp_ieee_join_list_total;
+extern int hf_zbee_zdp_ieee_join_list_start;
+extern int hf_zbee_zdp_ieee_join_list_count;
+extern int hf_zbee_zdp_ieee_join_list_ieee;
/* Routing Table */
extern int hf_zbee_zdp_rtg;
@@ -321,7 +341,7 @@ extern void zdp_parse_complex_desc (proto_tree *tree, gint ettindex, tvb
extern void zdp_parse_bind_table_entry (proto_tree *tree, tvbuff_t *tvb, guint *offset, guint8 version);
extern guint8 zdp_parse_status (proto_tree *tree, tvbuff_t *tvb, guint *offset);
-extern guint32 zdp_parse_chanmask (proto_tree *tree, tvbuff_t *tvb, guint *offset, int hf_channel);
+extern guint32 zdp_parse_chanmask (proto_tree *tree, tvbuff_t *tvb, guint *offset, int hf_page, int hf_channel);
extern guint8 zdp_parse_cinfo (proto_tree *tree, gint ettindex, tvbuff_t *tvb, guint *offset);
extern guint16 zdp_parse_server_flags (proto_tree *tree, gint ettindex, tvbuff_t *tvb, guint *offset);
@@ -371,6 +391,8 @@ extern void dissect_zbee_zdp_req_mgmt_direct_join (tvbuff_t *tvb, packet_i
extern void dissect_zbee_zdp_req_mgmt_permit_join (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
extern void dissect_zbee_zdp_req_mgmt_cache (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
extern void dissect_zbee_zdp_req_mgmt_nwkupdate (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+extern void dissect_zbee_zdp_req_mgmt_nwkupdate_enh (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+extern void dissect_zbee_zdp_req_mgmt_ieee_join_list (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
extern void dissect_zbee_zdp_rsp_nwk_addr (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
extern void dissect_zbee_zdp_rsp_ext_addr (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
@@ -415,6 +437,7 @@ extern void dissect_zbee_zdp_rsp_mgmt_direct_join (tvbuff_t *tvb, packet_i
extern void dissect_zbee_zdp_rsp_mgmt_permit_join (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
extern void dissect_zbee_zdp_rsp_mgmt_cache (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
extern void dissect_zbee_zdp_rsp_mgmt_nwkupdate (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+extern void dissect_zbee_zdp_rsp_mgmt_ieee_join_list (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
extern const value_string zbee_zdp_cluster_names[];
extern const value_string zbee_zdp_rtg_status_vals[];