aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-adwin-config.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2013-11-11 19:28:42 +0000
committerMichael Mann <mmann78@netscape.net>2013-11-11 19:28:42 +0000
commitf738c184467a45fe25875eaf53461bf084d0b643 (patch)
tree327e5a1994a4c7b3bdf13e0e0af1a9a75e0b61b1 /epan/dissectors/packet-adwin-config.c
parent8f888557afd8a20990cf5aa9503cbe265ec7939f (diff)
Create separate heuristic dissectors for TCP and UDP dissection. Some of the checking for "protocol" in the old heuristic dissector can be handled automatically by being registered with TCP/UDP specifically.
Also replaced ADWIN_ADD_[LE|BE] macros so check*.pl scripts aren't shirked. Didn't think the macros saved that much. svn path=/trunk/; revision=53252
Diffstat (limited to 'epan/dissectors/packet-adwin-config.c')
-rw-r--r--epan/dissectors/packet-adwin-config.c292
1 files changed, 140 insertions, 152 deletions
diff --git a/epan/dissectors/packet-adwin-config.c b/epan/dissectors/packet-adwin-config.c
index c6c55bef35..de786052e9 100644
--- a/epan/dissectors/packet-adwin-config.c
+++ b/epan/dissectors/packet-adwin-config.c
@@ -90,17 +90,6 @@ static const string_string processor_type_mapping[] = {
{ 0, NULL },
};
-
-/* add little endian number (incorrect byte-order) value to a tree */
-#define ADWIN_ADD_LE(tree, field, offset, length) \
- proto_tree_add_item(tree, hf_adwin_config_##field, tvb, offset, \
- length, ENC_LITTLE_ENDIAN);
-
-/* add big endian number (correct byte-order) value to a tree */
-#define ADWIN_ADD_BE(tree, field, offset, length) \
- proto_tree_add_item(tree, hf_adwin_config_##field, tvb, offset, \
- length, ENC_BIG_ENDIAN);
-
/* Initialize the protocol and registered fields */
static int proto_adwin_config = -1;
@@ -168,32 +157,32 @@ dissect_UDPStatus(tvbuff_t *tvb, proto_tree *adwin_tree)
debug_tree = proto_item_add_subtree(dt, ett_adwin_config_debug);
proto_item_set_text(dt, "ADwin Debug information");
- ADWIN_ADD_BE(adwin_tree, pattern, 0, 4);
- ADWIN_ADD_BE(adwin_tree, version, 4, 4);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_pattern, tvb, 0, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_version, tvb, 4, 4, ENC_BIG_ENDIAN);
- st = ADWIN_ADD_BE(adwin_tree, status, 8, 4);
+ st = proto_tree_add_item(adwin_tree, hf_adwin_config_status, tvb, 8, 4, ENC_BIG_ENDIAN);
status_tree = proto_item_add_subtree(st, ett_adwin_config_status);
- ADWIN_ADD_BE(status_tree, status_bootloader, 8, 4);
- ADWIN_ADD_BE(status_tree, status_reprogrammable, 8, 4);
- ADWIN_ADD_BE(status_tree, status_configurable, 8, 4);
- ADWIN_ADD_BE(status_tree, status_bootloader_boots, 8, 4);
- ADWIN_ADD_BE(status_tree, status_bootloader_reprogrammable,8, 4);
- ADWIN_ADD_BE(status_tree, status_bootloader_receive, 8, 4);
- ADWIN_ADD_BE(status_tree, status_bootloader_reprogramming_done, 8, 4);
- ADWIN_ADD_BE(status_tree, status_eeprom_support, 8, 4);
-
- ADWIN_ADD_BE(adwin_tree, server_version_beta,12, 2);
- ADWIN_ADD_BE(adwin_tree, server_version, 14, 2);
- ADWIN_ADD_BE(adwin_tree, xilinx_version, 16, 4);
- ADWIN_ADD_BE(adwin_tree, mac, 20, 6);
- ADWIN_ADD_LE(debug_tree, unused, 26, 2);
- ADWIN_ADD_BE(adwin_tree, port16, 28, 2);
- ADWIN_ADD_LE(adwin_tree, dhcp, 30, 1);
- ADWIN_ADD_LE(adwin_tree, netmask_count, 31, 1);
- ADWIN_ADD_BE(adwin_tree, gateway, 32, 4);
- ADWIN_ADD_LE(debug_tree, unused, 36, 11);
- ADWIN_ADD_LE(adwin_tree, reply_broadcast, 47, 1);
- ADWIN_ADD_LE(adwin_tree, scan_id, 48, 4);
+ proto_tree_add_item(status_tree, hf_adwin_config_status_bootloader, tvb, 8, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(status_tree, hf_adwin_config_status_reprogrammable, tvb, 8, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(status_tree, hf_adwin_config_status_configurable, tvb, 8, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(status_tree, hf_adwin_config_status_bootloader_boots, tvb, 8, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(status_tree, hf_adwin_config_status_bootloader_reprogrammable, tvb, 8, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(status_tree, hf_adwin_config_status_bootloader_receive, tvb, 8, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(status_tree, hf_adwin_config_status_bootloader_reprogramming_done, tvb, 8, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(status_tree, hf_adwin_config_status_eeprom_support, tvb, 8, 4, ENC_BIG_ENDIAN);
+
+ proto_tree_add_item(adwin_tree, hf_adwin_config_server_version_beta, tvb, 12, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_server_version, tvb, 14, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_xilinx_version, tvb, 16, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_mac, tvb, 20, 6, ENC_BIG_ENDIAN);
+ proto_tree_add_item(debug_tree, hf_adwin_config_unused, tvb, 26, 2, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_port16, tvb, 28, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_dhcp, tvb, 30, 1, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_netmask_count, tvb, 31, 1, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_gateway, tvb, 32, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(debug_tree, hf_adwin_config_unused, tvb, 36, 11, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_reply_broadcast, tvb, 47, 1, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_scan_id, tvb, 48, 4, ENC_LITTLE_ENDIAN);
}
static void
@@ -204,32 +193,32 @@ dissect_UDPExtStatus(tvbuff_t *tvb, proto_tree *adwin_tree)
if (! adwin_tree)
return;
- ADWIN_ADD_BE(adwin_tree, mac, 0, 6);
- ADWIN_ADD_LE(adwin_tree, unused, 6, 2);
- ADWIN_ADD_BE(adwin_tree, pattern, 8, 4);
- ADWIN_ADD_BE(adwin_tree, version, 12, 4);
- ADWIN_ADD_LE(adwin_tree, description, 16, 16);
- ADWIN_ADD_BE(adwin_tree, timerresets, 32, 4);
- ADWIN_ADD_BE(adwin_tree, socketshutdowns, 36, 4);
- ADWIN_ADD_BE(adwin_tree, disk_free, 40, 4);
- ADWIN_ADD_BE(adwin_tree, disk_size, 44, 4);
- ADWIN_ADD_LE(adwin_tree, date, 48, 8);
- ADWIN_ADD_LE(adwin_tree, revision, 56, 8);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_mac, tvb, 0, 6, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, 6, 2, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_pattern, tvb, 8, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_version, tvb, 12, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_description, tvb, 16, 16, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_timerresets, tvb, 32, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_socketshutdowns, tvb, 36, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_disk_free, tvb, 40, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_disk_size, tvb, 44, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_date, tvb, 48, 8, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_revision, tvb, 56, 8, ENC_LITTLE_ENDIAN);
/* add the processor type raw values to the tree, to allow filtering */
- ADWIN_ADD_LE(adwin_tree, processor_type, 64, 2);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_processor_type, tvb, 64, 2, ENC_LITTLE_ENDIAN);
/* add the processor type as a pretty printed string */
processor_type = tvb_get_string(wmem_packet_scope(), tvb, 64, 2);
processor_type = str_to_str(processor_type, processor_type_mapping, "Unknown (%s)");
proto_tree_add_text(adwin_tree, tvb, 64, 2, "Processor Type: %s", processor_type);
/* add system type as raw value and pretty printed string */
- ADWIN_ADD_LE(adwin_tree, system_type, 66, 2);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_system_type, tvb, 66, 2, ENC_LITTLE_ENDIAN);
system_type = tvb_get_string(wmem_packet_scope(), tvb, 66, 2);
system_type = str_to_str(system_type, system_type_mapping, "Unknown (%s)");
proto_tree_add_text(adwin_tree, tvb, 66, 2, "System Type: %s", system_type);
- ADWIN_ADD_LE(adwin_tree, unused, 68,364);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, 68, 364, ENC_LITTLE_ENDIAN);
}
static void
@@ -240,34 +229,34 @@ dissect_UDPMessage(tvbuff_t *tvb, proto_tree *adwin_tree)
if (! adwin_tree)
return;
- ADWIN_ADD_LE(adwin_tree, command, 0, 4);
- ADWIN_ADD_LE(adwin_tree, version, 4, 4);
- ADWIN_ADD_LE(adwin_tree, mac, 8, 6);
- ADWIN_ADD_LE(adwin_tree, unused, 14, 2);
- ADWIN_ADD_LE(adwin_tree, server_ip, 16, 4);
- ADWIN_ADD_LE(adwin_tree, unused, 20, 4);
- ADWIN_ADD_LE(adwin_tree, netmask, 24, 4);
- ADWIN_ADD_LE(adwin_tree, unused, 28, 4);
- ADWIN_ADD_LE(adwin_tree, gateway, 32, 4);
- ADWIN_ADD_LE(adwin_tree, unused, 36, 4);
- ADWIN_ADD_LE(adwin_tree, dhcp, 40, 4);
- ADWIN_ADD_LE(adwin_tree, port32, 44, 4);
- ADWIN_ADD_LE(adwin_tree, password, 48, 10);
- ADWIN_ADD_LE(adwin_tree, bootloader, 58, 1);
- ADWIN_ADD_LE(adwin_tree, unused, 59, 5);
- ADWIN_ADD_LE(adwin_tree, description, 64, 16);
- ADWIN_ADD_LE(adwin_tree, date, 80, 8);
- ADWIN_ADD_LE(adwin_tree, revision, 88, 8);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_command, tvb, 0, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_version, tvb, 4, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_mac, tvb, 8, 6, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, 14, 2, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_server_ip, tvb, 16, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, 20, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_netmask, tvb, 24, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, 28, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_gateway, tvb, 32, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, 36, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_dhcp, tvb, 40, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_port32, tvb, 44, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_password, tvb, 48, 10, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_bootloader, tvb, 58, 1, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, 59, 5, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_description, tvb, 64, 16, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_date, tvb, 80, 8, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_revision, tvb, 88, 8, ENC_LITTLE_ENDIAN);
/* add the processor type raw values to the tree, to allow filtering */
- ADWIN_ADD_LE(adwin_tree, processor_type, 96, 2);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_processor_type, tvb, 96, 2, ENC_LITTLE_ENDIAN);
/* add the processor type as a pretty printed string */
processor_type = tvb_get_string(wmem_packet_scope(), tvb, 96, 2);
processor_type = str_to_str(processor_type, processor_type_mapping, "Unknown");
proto_tree_add_text(adwin_tree, tvb, 96, 2, "Processor Type: %s", processor_type);
/* add system type as raw value and pretty printed string */
- ADWIN_ADD_LE(adwin_tree, system_type, 98, 2);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_system_type, tvb, 98, 2, ENC_LITTLE_ENDIAN);
system_type = tvb_get_string(wmem_packet_scope(), tvb, 98, 2);
system_type = str_to_str(system_type, system_type_mapping, "Unknown");
proto_tree_add_text(adwin_tree, tvb, 98, 2, "System Type: %s", system_type);
@@ -280,11 +269,11 @@ dissect_UDPInitAck(tvbuff_t *tvb, proto_tree *adwin_tree)
if (! adwin_tree)
return;
- ADWIN_ADD_BE(adwin_tree, pattern, 0, 4);
- ADWIN_ADD_LE(adwin_tree, reboot, 4, 4);
- ADWIN_ADD_BE(adwin_tree, mac, 8, 6);
- ADWIN_ADD_LE(adwin_tree, unused, 14, 2);
- ADWIN_ADD_LE(adwin_tree, unused, 16, 80);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_pattern, tvb, 0, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_reboot, tvb, 4, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_mac, tvb, 8, 6, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, 14, 2, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, 16, 80, ENC_LITTLE_ENDIAN);
}
static void
@@ -294,14 +283,14 @@ dissect_UDPIXP425FlashUpdate(tvbuff_t *tvb, proto_tree *adwin_tree)
if (! adwin_tree)
return;
- ADWIN_ADD_BE(adwin_tree, pattern, 0, 4);
- ADWIN_ADD_BE(adwin_tree, version, 4, 4);
- ADWIN_ADD_BE(adwin_tree, scan_id, 8, 4);
- ADWIN_ADD_BE(adwin_tree, status, 12, 4);
- ADWIN_ADD_BE(adwin_tree, timeout, 16, 4);
- ADWIN_ADD_BE(adwin_tree, filename, 20, 24);
- ADWIN_ADD_BE(adwin_tree, mac, 44, 6);
- ADWIN_ADD_BE(adwin_tree, unused, 50, 42);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_pattern, tvb, 0, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_version, tvb, 4, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_scan_id, tvb, 8, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_status, tvb, 12, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_timeout, tvb, 16, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_filename, tvb, 20, 24, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_mac, tvb, 44, 6, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, 50, 42, ENC_BIG_ENDIAN);
}
static void
@@ -311,12 +300,12 @@ dissect_UDPOut(tvbuff_t *tvb, proto_tree *adwin_tree)
if (! adwin_tree)
return;
- ADWIN_ADD_LE(adwin_tree, status, 0, 4);
- ADWIN_ADD_BE(adwin_tree, mac, 4, 6);
- ADWIN_ADD_LE(adwin_tree, netmask, 10, 4);
- ADWIN_ADD_BE(adwin_tree, gateway, 14, 4);
- ADWIN_ADD_LE(adwin_tree, dhcp, 18, 2);
- ADWIN_ADD_BE(adwin_tree, port16, 20, 2);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_status, tvb, 0, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_mac, tvb, 4, 6, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_netmask, tvb, 10, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_gateway, tvb, 14, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_dhcp, tvb, 18, 2, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_port16, tvb, 20, 2, ENC_BIG_ENDIAN);
}
static guint
@@ -329,17 +318,23 @@ get_adwin_TCPUpdate_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
}
static int
-dissect_TCPFlashUpdate(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *adwin_tree, void* data _U_)
+dissect_TCPFlashUpdate(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
{
+ proto_tree *adwin_tree;
+ proto_item *ti;
gint length, offset;
guint8 *filename;
nstime_t tmp_time;
+
tmp_time.nsecs = 0;
- if (! adwin_tree)
- return 0;
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "ADwin Config");
+ col_set_str(pinfo->cinfo, COL_INFO, "TCPFlashUpdate");
- ADWIN_ADD_BE(adwin_tree, stream_length, 0, 4);
+ ti = proto_tree_add_item(tree, proto_adwin_config, tvb, 0, -1, ENC_NA);
+ adwin_tree = proto_item_add_subtree(ti, ett_adwin_config);
+
+ proto_tree_add_item(adwin_tree, hf_adwin_config_stream_length, tvb, 0, 4, ENC_BIG_ENDIAN);
offset = 4;
length = tvb_strnlen(tvb, offset, -1) + 1;
filename = tvb_get_string(wmem_packet_scope(), tvb, offset, length);
@@ -353,12 +348,12 @@ dissect_TCPFlashUpdate(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *adwin
"Disable EEPROM Support");
return offset+length;
}
- ADWIN_ADD_BE(adwin_tree, filename, 4, length);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_filename, tvb, 4, length, ENC_BIG_ENDIAN);
offset += length;
length = tvb_strnlen(tvb, 4 + length, -1) + 1;
- ADWIN_ADD_BE(adwin_tree, path, offset, length);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_path, tvb, offset, length, ENC_BIG_ENDIAN);
offset += length;
- ADWIN_ADD_BE(adwin_tree, filesize, offset, 4);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_filesize, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
tmp_time.secs = tvb_get_ntohl(tvb, offset);
proto_tree_add_text(adwin_tree, tvb, offset, 4,
@@ -368,10 +363,10 @@ dissect_TCPFlashUpdate(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *adwin
proto_tree_add_text(adwin_tree, tvb, offset, 4,
"Update time: %s", abs_time_to_str(&tmp_time, ABSOLUTE_TIME_LOCAL, TRUE));
offset += 4;
- ADWIN_ADD_BE(adwin_tree, unused, offset, 128);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_unused, tvb, offset, 128, ENC_BIG_ENDIAN);
offset += 128;
length = tvb_length(tvb) - offset;
- ADWIN_ADD_BE(adwin_tree, data, offset, length);
+ proto_tree_add_item(adwin_tree, hf_adwin_config_data, tvb, offset, length, ENC_BIG_ENDIAN);
return tvb_length(tvb);
}
@@ -431,9 +426,8 @@ static const value_string length_mapping[] = {
{ 0, NULL },
};
-/* Depending on the packet type, the appropriate dissector is called. */
static int
-dissect_adwin_config(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+dissect_adwin_config_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
proto_item *ti;
proto_tree *adwin_config_tree;
@@ -441,8 +435,7 @@ dissect_adwin_config(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *
length = tvb_reported_length(tvb);
- if (pinfo->ipproto == IP_PROTO_UDP &&
- ! (length == UDPStatusLENGTH
+ if (!(length == UDPStatusLENGTH
|| length == UDPExtStatusLENGTH
|| length == UDPMessageLENGTH
|| length == UDPMessageLENGTH_wrong
@@ -451,69 +444,64 @@ dissect_adwin_config(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *
|| length == UDPOutLENGTH))
return 0;
- if(pinfo->ipproto == IP_PROTO_TCP &&
- !(pinfo->srcport == ADWIN_CONFIGURATION_PORT
- || pinfo->destport == ADWIN_CONFIGURATION_PORT))
- return 0;
-
- if ((pinfo->ipproto != IP_PROTO_UDP) && (pinfo->ipproto != IP_PROTO_TCP))
- return 0;
-
if (! (is_adwin_mac_or_broadcast(pinfo->dl_src) || is_adwin_mac_or_broadcast(pinfo->dl_dst)))
return 0;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "ADwin Config");
col_clear(pinfo->cinfo, COL_INFO);
- if (tree) {
- ti = proto_tree_add_item(tree, proto_adwin_config, tvb, 0, -1, ENC_NA);
- adwin_config_tree = proto_item_add_subtree(ti, ett_adwin_config);
- } else {
- adwin_config_tree = NULL;
- }
+ ti = proto_tree_add_item(tree, proto_adwin_config, tvb, 0, -1, ENC_NA);
+ adwin_config_tree = proto_item_add_subtree(ti, ett_adwin_config);
- switch (pinfo->ipproto) {
- case IP_PROTO_TCP:
- tcp_dissect_pdus(tvb, pinfo, tree, 1, 4, get_adwin_TCPUpdate_len, dissect_TCPFlashUpdate, NULL);
- col_set_str(pinfo->cinfo, COL_INFO, "TCPFlashUpdate");
+ switch (length) {
+ case UDPStatusLENGTH:
+ dissect_UDPStatus(tvb, adwin_config_tree);
break;
- case IP_PROTO_UDP:
- switch (length) {
- case UDPStatusLENGTH:
- dissect_UDPStatus(tvb, adwin_config_tree);
- break;
- case UDPExtStatusLENGTH:
- dissect_UDPExtStatus(tvb, adwin_config_tree);
- break;
- case UDPMessageLENGTH:
- dissect_UDPMessage(tvb, adwin_config_tree);
- break;
- case UDPMessageLENGTH_wrong: /* incorrect packet length */
- /* formerly used by adconfig */
- dissect_UDPMessage(tvb, adwin_config_tree);
- break;
- case UDPInitAckLENGTH:
- dissect_UDPInitAck(tvb, adwin_config_tree);
- break;
- case UDPIXP425FlashUpdateLENGTH:
- dissect_UDPIXP425FlashUpdate(tvb, adwin_config_tree);
- break;
- case UDPOutLENGTH:
- dissect_UDPOut(tvb, adwin_config_tree);
- break;
- default:
- /* Heuristics above should mean we never get here */
- DISSECTOR_ASSERT_NOT_REACHED();
- }
-
+ case UDPExtStatusLENGTH:
+ dissect_UDPExtStatus(tvb, adwin_config_tree);
+ break;
+ case UDPMessageLENGTH:
+ dissect_UDPMessage(tvb, adwin_config_tree);
+ break;
+ case UDPMessageLENGTH_wrong: /* incorrect packet length */
+ /* formerly used by adconfig */
+ dissect_UDPMessage(tvb, adwin_config_tree);
+ break;
+ case UDPInitAckLENGTH:
+ dissect_UDPInitAck(tvb, adwin_config_tree);
+ break;
+ case UDPIXP425FlashUpdateLENGTH:
+ dissect_UDPIXP425FlashUpdate(tvb, adwin_config_tree);
+ break;
+ case UDPOutLENGTH:
+ dissect_UDPOut(tvb, adwin_config_tree);
+ break;
+ default:
+ /* Heuristics above should mean we never get here */
col_add_str(pinfo->cinfo, COL_INFO,
- val_to_str(length, length_mapping,
- "Unknown ADwin Configuration packet, length: %d"));
+ val_to_str(length, length_mapping,
+ "Unknown ADwin Configuration packet, length: %d"));
}
return (tvb_reported_length(tvb));
}
+static int
+dissect_adwin_config_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ if(!(pinfo->srcport == ADWIN_CONFIGURATION_PORT
+ || pinfo->destport == ADWIN_CONFIGURATION_PORT))
+ return 0;
+
+ /* XXX - Is this possible for TCP? */
+ if (! (is_adwin_mac_or_broadcast(pinfo->dl_src) || is_adwin_mac_or_broadcast(pinfo->dl_dst)))
+ return 0;
+
+ tcp_dissect_pdus(tvb, pinfo, tree, 1, 4, get_adwin_TCPUpdate_len, dissect_TCPFlashUpdate, NULL);
+
+ return (tvb_reported_length(tvb));
+}
+
void
proto_register_adwin_config(void)
{
@@ -767,6 +755,6 @@ proto_register_adwin_config(void)
void
proto_reg_handoff_adwin_config(void)
{
- heur_dissector_add("udp", dissect_adwin_config, proto_adwin_config);
- heur_dissector_add("tcp", dissect_adwin_config, proto_adwin_config);
+ heur_dissector_add("udp", dissect_adwin_config_udp, proto_adwin_config);
+ heur_dissector_add("tcp", dissect_adwin_config_tcp, proto_adwin_config);
}