diff options
author | Chris Brandson <chris.brandson@gmail.com> | 2016-06-17 15:12:12 -0700 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2016-06-23 07:56:03 +0000 |
commit | 1cdd09190d7557a22b9959a3d1c955763e92320f (patch) | |
tree | c63e5059ef18bd41d92c2981b2ff9a6e58f18281 /epan | |
parent | fdcfd3a6f367a94d00592ad4fd174c08b95a90c2 (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>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-zbee-zdp-management.c | 104 | ||||
-rw-r--r-- | epan/dissectors/packet-zbee-zdp.c | 94 | ||||
-rw-r--r-- | epan/dissectors/packet-zbee-zdp.h | 25 |
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[]; |