summaryrefslogtreecommitdiff
path: root/packet-ndmp.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2004-03-11 09:54:00 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2004-03-11 09:54:00 +0000
commit3e922525d5dc38a1f302f4a7d12c5ff1a4fb11e3 (patch)
tree4411ebeacc2f733c0bda291a93d8ac456b9969f8 /packet-ndmp.c
parent48cd9f9358a5de7cd64642ff0befda751d115d15 (diff)
downloadwireshark-3e922525d5dc38a1f302f4a7d12c5ff1a4fb11e3.tar.gz
make NDMP start distinguishing between different versions.
Between v2 and v3 some structures changed their definition. I arbirtrarily made the preference set V2 as the default. I have no idea what the most common ndmp version is maybe someone that knows which is the most popular iversion in the wild will change it to default to that. svn path=/trunk/; revision=10362
Diffstat (limited to 'packet-ndmp.c')
-rw-r--r--packet-ndmp.c57
1 files changed, 49 insertions, 8 deletions
diff --git a/packet-ndmp.c b/packet-ndmp.c
index 0cc3cc1499..70399b0b6c 100644
--- a/packet-ndmp.c
+++ b/packet-ndmp.c
@@ -2,7 +2,7 @@
* Routines for NDMP dissection
* 2001 Ronnie Sahlberg (see AUTHORS for email)
*
- * $Id: packet-ndmp.c,v 1.26 2004/01/30 10:51:07 sahlberg Exp $
+ * $Id: packet-ndmp.c,v 1.27 2004/03/11 09:54:00 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -227,6 +227,24 @@ static gint ett_ndmp_file_stats = -1;
static gint ett_ndmp_file_invalids = -1;
static gint ett_ndmp_state_invalids = -1;
+
+/* XXX someone should start adding the new stuff from v3, v4 and v5*/
+#define NDMP_PROTOCOL_V2 1
+#define NDMP_PROTOCOL_V3 2
+#define NDMP_PROTOCOL_V4 3
+#define NDMP_PROTOCOL_V5 4
+
+static enum_val_t ndmp_protocol_versions[] = {
+ { "Version 2", NDMP_PROTOCOL_V2 },
+ { "Version 3", NDMP_PROTOCOL_V3 },
+ { "Version 4", NDMP_PROTOCOL_V4 },
+ { "Version 5", NDMP_PROTOCOL_V5 },
+ { NULL, 0 }
+};
+
+static gint ndmp_protocol_version = NDMP_PROTOCOL_V2;
+
+
struct ndmp_header {
guint32 seq;
guint32 time;
@@ -1623,6 +1641,12 @@ dissect_mover_get_state_reply(tvbuff_t *tvb, int offset, packet_info *pinfo,
proto_tree_add_item(tree, hf_ndmp_window_length, tvb, offset, 8, FALSE);
offset += 8;
+ /* this is where v2 ends */
+ if(ndmp_protocol_version==NDMP_PROTOCOL_V2){
+ return offset;
+ }
+
+
/* ndmp addr */
offset=dissect_ndmp_addr(tvb, offset, pinfo, tree);
@@ -2248,17 +2272,22 @@ dissect_nlist(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
offset = dissect_rpc_string(tvb, tree,
hf_ndmp_bu_destination_dir, offset, NULL);
- /*new name*/
- offset = dissect_rpc_string(tvb, tree,
+ if(ndmp_protocol_version==NDMP_PROTOCOL_V2){
+ /* just 2 reserved bytes (4 with padding) */
+ offset += 4;
+ } else {
+ /*new name*/
+ offset = dissect_rpc_string(tvb, tree,
hf_ndmp_bu_new_name, offset, NULL);
- /*other name*/
- offset = dissect_rpc_string(tvb, tree,
+ /*other name*/
+ offset = dissect_rpc_string(tvb, tree,
hf_ndmp_bu_other_name, offset, NULL);
- /* node */
- proto_tree_add_item(tree, hf_ndmp_file_node, tvb, offset, 8, FALSE);
- offset += 8;
+ /* node */
+ proto_tree_add_item(tree, hf_ndmp_file_node, tvb, offset, 8, FALSE);
+ offset += 8;
+ }
/* fh_info */
proto_tree_add_item(tree, hf_ndmp_file_fh_info, tvb, offset, 8, FALSE);
@@ -2272,6 +2301,11 @@ static int
dissect_data_start_recover_request(tvbuff_t *tvb, int offset,
packet_info *pinfo, proto_tree *tree, guint32 seq _U_)
{
+ if(ndmp_protocol_version==NDMP_PROTOCOL_V2){
+ /* ndmp addr */
+ offset=dissect_ndmp_addr(tvb, offset, pinfo, tree);
+ }
+
/* default env */
offset = dissect_rpc_array(tvb, pinfo, tree, offset,
dissect_default_env, hf_ndmp_butype_default_env);
@@ -3432,6 +3466,13 @@ proto_register_ndmp(void)
/* desegmentation */
ndmp_module = prefs_register_protocol(proto_ndmp, NULL);
+ prefs_register_enum_preference(ndmp_module,
+ "protocol_version",
+ "Protocol version",
+ "Version of the NDMP protocol",
+ &ndmp_protocol_version,
+ ndmp_protocol_versions,
+ FALSE);
prefs_register_bool_preference(ndmp_module, "desegment",
"Desegment all NDMP messages spanning multiple TCP segments",
"Whether the dissector should desegment NDMP messages",