From Ronnie Sahlberg: initial NDMPv3 support, and an update to his

e-mail address.

svn path=/trunk/; revision=4444
This commit is contained in:
Guy Harris 2001-12-23 21:36:58 +00:00
parent 914061d436
commit 6f0d79c0d7
23 changed files with 565 additions and 39 deletions

View File

@ -531,7 +531,7 @@ Kent Engstr
CDP VTP Management Domain item support
}
Ronnie Sahlberg <rsahlber[AT]bigpond.net.au> {
Ronnie Sahlberg <sahlberg[AT]optushome.com.au> {
NLM dissector enhancements
Mount dissector enhancements
Support for status monitor protocol and status monitor callback
@ -565,6 +565,7 @@ Ronnie Sahlberg <rsahlber[AT]bigpond.net.au> {
Diameter, L2TP, NFS, and NLM dissectors to use it and to the
ONC RPC dissector to allow ONC RPC subdissectors to use it
SMB tvbuffication
NDMPv3 support
}
Borosa Tomislav <tomislav.borosa[AT]SIEMENS.HR> {

View File

@ -1,7 +1,7 @@
# Makefile.am
# Automake file for Ethereal
#
# $Id: Makefile.am,v 1.399 2001/12/19 21:14:49 guy Exp $
# $Id: Makefile.am,v 1.400 2001/12/23 21:36:57 guy Exp $
#
# Ethereal - Network traffic analyzer
# By Gerald Combs <gerald@ethereal.com>
@ -194,6 +194,7 @@ DISSECTOR_SRC = \
packet-nbns.c \
packet-ncp.c \
packet-ncp2222.c \
packet-ndmp.c \
packet-netbios.c \
packet-nfs.c \
packet-nisplus.c \

View File

@ -1,7 +1,7 @@
## Makefile for building ethereal.exe with Microsoft C and nmake
## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
#
# $Id: Makefile.nmake,v 1.157 2001/12/19 21:14:49 guy Exp $
# $Id: Makefile.nmake,v 1.158 2001/12/23 21:36:57 guy Exp $
include config.nmake
include <win32.mak>
@ -145,6 +145,7 @@ DISSECTOR_SRC = \
packet-nbns.c \
packet-ncp.c \
packet-ncp2222.c \
packet-ndmp.c \
packet-netbios.c \
packet-nfs.c \
packet-nisplus.c \

1
NEWS
View File

@ -1,5 +1,6 @@
Overview of changes in Ethereal 0.9.0:
* Initial NDMPv3 support. (Ronnie)
* packet-l2tp.c - Vendor-specific attribute fixes. (Motonori)
* Fix timestamp processing in packet-ucp.c, other UCP fixes. (Steffen
Weinreich)

View File

@ -1,7 +1,7 @@
/* packet-dvmrp.c 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
/* packet-dvmrp.c 2001 Ronnie Sahlberg <See AUTHORS for email>
* Routines for IGMP/DVMRP packet disassembly
*
* $Id: packet-dvmrp.c,v 1.4 2001/12/10 00:25:27 guy Exp $
* $Id: packet-dvmrp.c,v 1.5 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-dvmrp.h 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
/* packet-dvmrp.h 2001 Ronnie Sahlberg <See AUTHORS for email>
* Declarations of routines for IGMP/DVMRP packet disassembly
*
* $Id: packet-dvmrp.h,v 1.1 2001/06/12 06:21:55 guy Exp $
* $Id: packet-dvmrp.h,v 1.2 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-igmp.c 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
/* packet-igmp.c 2001 Ronnie Sahlberg <See AUTHORS for email>
* Routines for IGMP packet disassembly
*
* $Id: packet-igmp.c,v 1.14 2001/12/10 00:25:28 guy Exp $
* $Id: packet-igmp.c,v 1.15 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-klm.c 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
/* packet-klm.c 2001 Ronnie Sahlberg <See AUTHORS for email>
* Routines for klm dissection
*
* $Id: packet-klm.c,v 1.5 2001/11/27 22:37:20 guy Exp $
* $Id: packet-klm.c,v 1.6 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,6 +1,6 @@
/* packet-klm.h 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
/* packet-klm.h 2001 Ronnie Sahlberg <See AUTHORS for email>
*
* $Id: packet-klm.h,v 1.2 2001/06/12 06:31:14 guy Exp $
* $Id: packet-klm.h,v 1.3 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-mrdisc.c 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
/* packet-mrdisc.c 2001 Ronnie Sahlberg <See AUTHORS for email>
* Routines for IGMP/MRDISC packet disassembly
*
* $Id: packet-mrdisc.c,v 1.3 2001/12/10 00:25:30 guy Exp $
* $Id: packet-mrdisc.c,v 1.4 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-mrdisc.h 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
/* packet-mrdisc.h 2001 Ronnie Sahlberg <See AUTHORS for email>
* Declarations of routines for IGMP/MRDISC packet disassembly
*
* $Id: packet-mrdisc.h,v 1.1 2001/06/27 20:19:19 guy Exp $
* $Id: packet-mrdisc.h,v 1.2 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-msnip.c 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
/* packet-msnip.c 2001 Ronnie Sahlberg <See AUTHORS for email>
* Routines for IGMP/MSNIP packet disassembly
*
* $Id: packet-msnip.c,v 1.2 2001/12/10 00:25:30 guy Exp $
* $Id: packet-msnip.c,v 1.3 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-msnip.h 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
/* packet-msnip.h 2001 Ronnie Sahlberg <See AUTHORS for email>
* Declarations of routines for IGMP/MSNIP packet disassembly
*
* $Id: packet-msnip.h,v 1.1 2001/06/29 18:55:50 guy Exp $
* $Id: packet-msnip.h,v 1.2 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

522
packet-ndmp.c Normal file
View File

@ -0,0 +1,522 @@
/* packet-ndmp.c
* Routines for NDMP
* Ronnie Sahlberg (see AUTHORS for email)
*
* $Id: packet-ndmp.c,v 1.1 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* see www.ndmp.org for protocol specifications.
this file implements version 3 of ndmp
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#include <stdio.h>
#include <string.h>
#include <glib.h>
#include "packet.h"
#include "prefs.h"
#define TCP_PORT_NDMP 10000
static int proto_ndmp = -1;
static int hf_ndmp_version = -1;
static int hf_ndmp_size = -1;
static int hf_ndmp_header = -1;
static int hf_ndmp_sequence = -1;
static int hf_ndmp_reply_sequence = -1;
static int hf_ndmp_timestamp = -1;
static int hf_ndmp_msgtype = -1;
static int hf_ndmp_msg = -1;
static int hf_ndmp_error = -1;
static gint ett_ndmp = -1;
static gint ett_ndmp_header = -1;
/* desegmentation of NDMP packets */
static gboolean ndmp_desegment = FALSE;
#define NDMP_MESSAGE_REQUEST 0x00
#define NDMP_MESSAGE_REPLY 0x01
static const value_string msg_type_vals[] = {
{NDMP_MESSAGE_REQUEST, "Request"},
{NDMP_MESSAGE_REPLY, "Reply"},
{0, NULL}
};
#define NDMP_NO_ERR 0x00
#define NDMP_NOT_SUPPORTED_ERR 0x01
#define NDMP_DEVICE_BUSY_ERR 0x02
#define NDMP_DEVICE_OPENED_ERR 0x03
#define NDMP_NOT_AUTHORIZED_ERR 0x04
#define NDMP_PERMISSION_ERR 0x05
#define NDMP_DEV_NOT_OPEN_ERR 0x06
#define NDMP_IO_ERR 0x07
#define NDMP_TIMEOUT_ERR 0x08
#define NDMP_ILLEGAL_ARGS_ERR 0x09
#define NDMP_NO_TAPE_LOADED_ERR 0x0a
#define NDMP_WRITE_PROTECT_ERR 0x0b
#define NDMP_EOF_ERR 0x0c
#define NDMP_EOM_ERR 0x0d
#define NDMP_FILE_NOT_FOUND_ERR 0x0e
#define NDMP_BAD_FILE_ERR 0x0f
#define NDMP_NO_DEVICE_ERR 0x10
#define NDMP_NO_BUS_ERR 0x11
#define NDMP_XDR_DECODE_ERR 0x12
#define NDMP_ILLEGAL_STATE_ERR 0x13
#define NDMP_UNDEFINED_ERR 0x14
#define NDMP_XDR_ENCODE_ERR 0x15
#define NDMP_NO_MEM_ERR 0x16
#define NDMP_CONNECT_ERR 0x17
static const value_string error_vals[] = {
{NDMP_NO_ERR, "NO_ERR"},
{NDMP_NOT_SUPPORTED_ERR, "NOT_SUPPORTED_ERR"},
{NDMP_DEVICE_BUSY_ERR, "DEVICE_BUSY_ERR"},
{NDMP_DEVICE_OPENED_ERR, "DEVICE_OPENED_ERR"},
{NDMP_NOT_AUTHORIZED_ERR, "NOT_AUTHORIZED_ERR"},
{NDMP_PERMISSION_ERR, "PERMISSION_ERR"},
{NDMP_DEV_NOT_OPEN_ERR, "DEV_NOT_OPEN_ERR"},
{NDMP_IO_ERR, "IO_ERR"},
{NDMP_TIMEOUT_ERR, "TIMEOUT_ERR"},
{NDMP_ILLEGAL_ARGS_ERR, "ILLEGAL_ARGS_ERR"},
{NDMP_NO_TAPE_LOADED_ERR, "NO_TAPE_LOADED_ERR"},
{NDMP_WRITE_PROTECT_ERR, "WRITE_PROTECT_ERR"},
{NDMP_EOF_ERR, "EOF_ERR"},
{NDMP_EOM_ERR, "EOM_ERR"},
{NDMP_FILE_NOT_FOUND_ERR, "FILE_NOT_FOUND_ERR"},
{NDMP_BAD_FILE_ERR, "BAD_FILE_ERR"},
{NDMP_NO_DEVICE_ERR, "NO_DEVICE_ERR"},
{NDMP_NO_BUS_ERR, "NO_BUS_ERR"},
{NDMP_XDR_DECODE_ERR, "XDR_DECODE_ERR"},
{NDMP_ILLEGAL_STATE_ERR, "ILLEGAL_STATE_ERR"},
{NDMP_UNDEFINED_ERR, "UNDEFINED_ERR"},
{NDMP_XDR_ENCODE_ERR, "XDR_ENCODE_ERR"},
{NDMP_NO_MEM_ERR, "NO_MEM_ERR"},
{NDMP_CONNECT_ERR, "CONNECT_ERR"},
{0, NULL}
};
#define NDMP_CONFIG_GET_HOST_INFO 0x100
#define NDMP_CONFIG_GET_CONNECTION_TYPE 0x102
#define NDMP_CONFIG_GET_AUTH_ATTR 0x103
#define NDMP_CONFIG_GET_BUTYPE_INFO 0x104
#define NDMP_CONFIG_GET_FS_INFO 0x105
#define NDMP_CONFIG_GET_TAPE_INFO 0x106
#define NDMP_CONFIG_GET_SCSI_INFO 0x107
#define NDMP_CONFIG_GET_SERVER_INFO 0x108
#define NDMP_SCSI_OPEN 0x200
#define NDMP_SCSI_CLOSE 0x201
#define NDMP_SCSI_GET_STATE 0x202
#define NDMP_SCSI_SET_TARGET 0x203
#define NDMP_SCSI_RESET_DEVICE 0x204
#define NDMP_SCSI_RESET_BUS 0x205
#define NDMP_SCSI_EXECUTE_CDB 0x206
#define NDMP_TAPE_OPEN 0x300
#define NDMP_TAPE_CLOSE 0x301
#define NDMP_TAPE_GET_STATE 0x302
#define NDMP_TAPE_MTIO 0x303
#define NDMP_TAPE_WRITE 0x304
#define NDMP_TAPE_READ 0x305
#define NDMP_TAPE_EXECUTE_CDB 0x307
#define NDMP_DATA_GET_STATE 0x400
#define NDMP_DATA_START_BACKUP 0x401
#define NDMP_DATA_START_RECOVER 0x402
#define NDMP_DATA_ABORT 0x403
#define NDMP_DATA_GET_ENV 0x404
#define NDMP_DATA_STOP 0x407
#define NDMP_DATA_LISTEN 0x409
#define NDMP_DATA_CONNECT 0x40a
#define NDMP_NOTIFY_DATA_HALTED 0x501
#define NDMP_NOTIFY_CONNECTED 0x502
#define NDMP_NOTIFY_MOVER_HALTED 0x503
#define NDMP_NOTIFY_MOVER_PAUSED 0x504
#define NDMP_NOTIFY_DATA_READ 0x505
#define NDMP_LOG_FILE 0x602
#define NDMP_LOG_MESSAGE 0x603
#define NDMP_FH_ADD_FILE 0x703
#define NDMP_FH_ADD_DIR 0x704
#define NDMP_FH_ADD_NODE 0x705
#define NDMP_CONNECT_OPEN 0x900
#define NDMP_CONNECT_CLIENT_AUTH 0x901
#define NDMP_CONNECT_CLOSE 0x902
#define NDMP_CONNECT_SERVER_AUTH 0x903
#define NDMP_MOVER_GET_STATE 0xa00
#define NDMP_MOVER_LISTEN 0xa01
#define NDMP_MOVER_CONTINUE 0xa02
#define NDMP_MOVER_ABORT 0xa03
#define NDMP_MOVER_STOP 0xa04
#define NDMP_MOVER_SET_WINDOW 0xa05
#define NDMP_MOVER_READ 0xa06
#define NDMP_MOVER_CLOSE 0xa07
#define NDMP_MOVER_SET_RECORD_SIZE 0xa08
#define NDMP_MOVER_CONNECT 0xa09
static const value_string msg_vals[] = {
{NDMP_CONFIG_GET_HOST_INFO, "CONFIG_GET_HOST_INFO"},
{NDMP_CONFIG_GET_CONNECTION_TYPE, "CONFIG_GET_CONNECTION_TYPE"},
{NDMP_CONFIG_GET_AUTH_ATTR, "CONFIG_GET_AUTH_ATTR"},
{NDMP_CONFIG_GET_BUTYPE_INFO, "CONFIG_GET_BUTYPE_INFO"},
{NDMP_CONFIG_GET_FS_INFO, "CONFIG_GET_FS_INFO"},
{NDMP_CONFIG_GET_TAPE_INFO, "CONFIG_GET_TAPE_INFO"},
{NDMP_CONFIG_GET_SCSI_INFO, "CONFIG_GET_SCSI_INFO"},
{NDMP_CONFIG_GET_SERVER_INFO, "CONFIG_GET_SERVER_INFO"},
{NDMP_SCSI_OPEN, "SCSI_OPEN"},
{NDMP_SCSI_CLOSE, "SCSI_CLOSE"},
{NDMP_SCSI_GET_STATE, "SCSI_GET_STATE"},
{NDMP_SCSI_SET_TARGET, "SCSI_SET_TARGET"},
{NDMP_SCSI_RESET_DEVICE, "SCSI_RESET_DEVICE"},
{NDMP_SCSI_RESET_BUS, "SCSI_RESET_BUS"},
{NDMP_SCSI_EXECUTE_CDB, "SCSI_EXECUTE_CDB"},
{NDMP_TAPE_OPEN, "TAPE_OPEN"},
{NDMP_TAPE_CLOSE, "TAPE_CLOSE"},
{NDMP_TAPE_GET_STATE, "TAPE_GET_STATE"},
{NDMP_TAPE_MTIO, "TAPE_MTIO"},
{NDMP_TAPE_WRITE, "TAPE_WRITE"},
{NDMP_TAPE_READ, "TAPE_READ"},
{NDMP_TAPE_EXECUTE_CDB, "TAPE_EXECUTE_CDB"},
{NDMP_DATA_GET_STATE, "DATA_GET_STATE"},
{NDMP_DATA_START_BACKUP, "DATA_START_BACKUP"},
{NDMP_DATA_START_RECOVER, "DATA_START_RECOVER"},
{NDMP_DATA_ABORT, "DATA_ABORT"},
{NDMP_DATA_GET_ENV, "DATA_GET_ENV"},
{NDMP_DATA_STOP, "DATA_STOP"},
{NDMP_DATA_LISTEN, "DATA_LISTEN"},
{NDMP_DATA_CONNECT, "DATA_CONNECT"},
{NDMP_NOTIFY_DATA_HALTED, "NOTIFY_DATA_HALTED"},
{NDMP_NOTIFY_CONNECTED, "NOTIFY_CONNECTED"},
{NDMP_NOTIFY_MOVER_HALTED, "NOTIFY_MOVER_HALTED"},
{NDMP_NOTIFY_MOVER_PAUSED, "NOTIFY_MOVER_PAUSED"},
{NDMP_NOTIFY_DATA_READ, "NOTIFY_DATA_READ"},
{NDMP_LOG_FILE, "LOG_FILE"},
{NDMP_LOG_MESSAGE, "LOG_MESSAGE"},
{NDMP_FH_ADD_FILE, "FH_ADD_FILE"},
{NDMP_FH_ADD_DIR, "FH_ADD_DIR"},
{NDMP_FH_ADD_NODE, "FH_ADD_NODE"},
{NDMP_CONNECT_OPEN, "CONNECT_OPEN"},
{NDMP_CONNECT_CLIENT_AUTH, "CONNECT_CLIENT_AUTH"},
{NDMP_CONNECT_CLOSE, "CONNECT_CLOSE"},
{NDMP_CONNECT_SERVER_AUTH, "CONNECT_SERVER_AUTH"},
{NDMP_MOVER_GET_STATE, "MOVER_GET_STATE"},
{NDMP_MOVER_LISTEN, "MOVER_LISTEN"},
{NDMP_MOVER_CONTINUE, "MOVER_CONTINUE"},
{NDMP_MOVER_ABORT, "MOVER_ABORT"},
{NDMP_MOVER_STOP, "MOVER_STOP"},
{NDMP_MOVER_SET_WINDOW, "MOVER_SET_WINDOW"},
{NDMP_MOVER_READ, "MOVER_READ"},
{NDMP_MOVER_CLOSE, "MOVER_CLOSE"},
{NDMP_MOVER_SET_RECORD_SIZE, "MOVER_SET_RECORD_SIZE"},
{NDMP_MOVER_CONNECT, "MOVER_CONNECT"},
{0, NULL}
};
static int
dissect_connect_open_request(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
/* version number */
proto_tree_add_item(tree, hf_ndmp_version, tvb, offset, 4, FALSE);
offset += 4;
return offset;
}
static int
dissect_error(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
/* error */
proto_tree_add_item(tree, hf_ndmp_error, tvb, offset, 4, FALSE);
offset += 4;
return offset;
}
typedef struct _ndmp_command {
guint32 cmd;
int (*request) (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
int (*response)(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
} ndmp_command;
static const ndmp_command ndmp_commands[] = {
{NDMP_CONFIG_GET_HOST_INFO, NULL,NULL},
{NDMP_CONFIG_GET_CONNECTION_TYPE, NULL,NULL},
{NDMP_CONFIG_GET_AUTH_ATTR, NULL,NULL},
{NDMP_CONFIG_GET_BUTYPE_INFO, NULL,NULL},
{NDMP_CONFIG_GET_FS_INFO, NULL,NULL},
{NDMP_CONFIG_GET_TAPE_INFO, NULL,NULL},
{NDMP_CONFIG_GET_SCSI_INFO, NULL,NULL},
{NDMP_CONFIG_GET_SERVER_INFO, NULL,NULL},
{NDMP_SCSI_OPEN, NULL,NULL},
{NDMP_SCSI_CLOSE, NULL,NULL},
{NDMP_SCSI_GET_STATE, NULL,NULL},
{NDMP_SCSI_SET_TARGET, NULL,NULL},
{NDMP_SCSI_RESET_DEVICE, NULL,NULL},
{NDMP_SCSI_RESET_BUS, NULL,NULL},
{NDMP_SCSI_EXECUTE_CDB, NULL,NULL},
{NDMP_TAPE_OPEN, NULL,NULL},
{NDMP_TAPE_CLOSE, NULL,NULL},
{NDMP_TAPE_GET_STATE, NULL,NULL},
{NDMP_TAPE_MTIO, NULL,NULL},
{NDMP_TAPE_WRITE, NULL,NULL},
{NDMP_TAPE_READ, NULL,NULL},
{NDMP_TAPE_EXECUTE_CDB, NULL,NULL},
{NDMP_DATA_GET_STATE, NULL,NULL},
{NDMP_DATA_START_BACKUP, NULL,NULL},
{NDMP_DATA_START_RECOVER, NULL,NULL},
{NDMP_DATA_ABORT, NULL,NULL},
{NDMP_DATA_GET_ENV, NULL,NULL},
{NDMP_DATA_STOP, NULL,NULL},
{NDMP_DATA_LISTEN, NULL,NULL},
{NDMP_DATA_CONNECT, NULL,NULL},
{NDMP_NOTIFY_DATA_HALTED, NULL,NULL},
{NDMP_NOTIFY_CONNECTED, NULL,NULL},
{NDMP_NOTIFY_MOVER_HALTED, NULL,NULL},
{NDMP_NOTIFY_MOVER_PAUSED, NULL,NULL},
{NDMP_NOTIFY_DATA_READ, NULL,NULL},
{NDMP_LOG_FILE, NULL,NULL},
{NDMP_LOG_MESSAGE, NULL,NULL},
{NDMP_FH_ADD_FILE, NULL,NULL},
{NDMP_FH_ADD_DIR, NULL,NULL},
{NDMP_FH_ADD_NODE, NULL,NULL},
{NDMP_CONNECT_OPEN, dissect_connect_open_request, dissect_error},
{NDMP_CONNECT_CLIENT_AUTH, NULL,NULL},
{NDMP_CONNECT_CLOSE, NULL,NULL},
{NDMP_CONNECT_SERVER_AUTH, NULL,NULL},
{NDMP_MOVER_GET_STATE, NULL,NULL},
{NDMP_MOVER_LISTEN, NULL,NULL},
{NDMP_MOVER_CONTINUE, NULL,NULL},
{NDMP_MOVER_ABORT, NULL,NULL},
{NDMP_MOVER_STOP, NULL,NULL},
{NDMP_MOVER_SET_WINDOW, NULL,NULL},
{NDMP_MOVER_READ, NULL,NULL},
{NDMP_MOVER_CLOSE, NULL,NULL},
{NDMP_MOVER_SET_RECORD_SIZE, NULL,NULL},
{NDMP_MOVER_CONNECT, NULL,NULL},
{0, NULL,NULL}
};
static int
dissect_ndmp_header(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree)
{
proto_item* item = NULL;
proto_tree* tree = NULL;
guint32 msgtype, msg;
if (parent_tree) {
item = proto_tree_add_item(tree, hf_ndmp_header, tvb,
offset, 24, FALSE);
tree = proto_item_add_subtree(item, ett_ndmp_header);
}
/* sequence number */
proto_tree_add_item(tree, hf_ndmp_sequence, tvb, offset, 4, FALSE);
offset += 4;
/* timestamp */
proto_tree_add_item(tree, hf_ndmp_timestamp, tvb, offset, 4, FALSE);
offset += 4;
/* Message Type */
msgtype = tvb_get_ntohl(tvb, offset);
proto_tree_add_item(tree, hf_ndmp_msgtype, tvb, offset, 4, FALSE);
offset += 4;
/* Message */
msg = tvb_get_ntohl(tvb, offset);
proto_tree_add_item(tree, hf_ndmp_msg, tvb, offset, 4, FALSE);
offset += 4;
/* Reply sequence number */
proto_tree_add_item(tree, hf_ndmp_reply_sequence, tvb, offset, 4, FALSE);
offset += 4;
/* error */
proto_tree_add_item(tree, hf_ndmp_error, tvb, offset, 4, FALSE);
offset += 4;
if (check_col(pinfo->cinfo, COL_INFO)){
col_clear(pinfo->cinfo, COL_INFO);
col_append_fstr(pinfo->cinfo, COL_INFO, "%s %s",
val_to_str(msg, msg_vals, "Unknown Message (0x%02x)"),
val_to_str(msgtype, msg_type_vals, "Unknown Type (0x%02x)")
);
}
return offset;
}
static int
dissect_ndmp_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
int i;
guint32 msg, msgtype;
msg=tvb_get_ntohl(tvb, offset+12);
msgtype=tvb_get_ntohl(tvb, offset+8);
offset=dissect_ndmp_header(tvb, offset, pinfo, tree);
for(i=0;ndmp_commands[i].cmd!=0;i++){
if(ndmp_commands[i].cmd==msg){
break;
}
}
if(ndmp_commands[i].cmd==0){
/* we do not know this message */
proto_tree_add_text(tree, tvb, offset, tvb_length_remaining(tvb, offset), "Unknown type of NDMP message: 0x%02x", msg);
offset+=tvb_length_remaining(tvb, offset);
return offset;
}
if(msgtype==NDMP_MESSAGE_REQUEST){
offset=ndmp_commands[i].request(tvb, offset, pinfo, tree);
} else {
offset=ndmp_commands[i].response(tvb, offset, pinfo, tree);
}
return offset;
}
static void
dissect_ndmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
int offset = 0;
guint32 size, available_bytes;
/* loop through the packet, dissecting multiple NDMP pdus*/
do {
available_bytes = tvb_length_remaining(tvb, offset);
/* size of this NDMP PDU */
size = tvb_get_ntohl(tvb, offset);
/* desegmentation */
if(ndmp_desegment){
if(pinfo->can_desegment
&& size>available_bytes) {
pinfo->desegment_offset = offset;
pinfo->desegment_len = size-available_bytes;
return;
}
}
/* the size of the current PDU */
proto_tree_add_item(tree, hf_ndmp_size, tvb, offset, 4, size);
offset += 4;
offset = dissect_ndmp_cmd(tvb, offset, pinfo, tree);
} while(offset<(int)tvb_reported_length(tvb));
}
void
proto_register_ndmp(void)
{
static hf_register_info hf_ndmp[] = {
{ &hf_ndmp_size, {
"Size", "ndmp.size", FT_UINT32, BASE_DEC,
NULL, 0, "Size of this NDMP PDU", HFILL }},
{ &hf_ndmp_header, {
"NDMP Header", "ndmp.header", FT_NONE, 0,
NULL, 0, "NDMP Header", HFILL }},
{ &hf_ndmp_sequence, {
"Sequence", "ndmp.sequence", FT_UINT32, BASE_DEC,
NULL, 0, "Sequence number for NDMP PDU", HFILL }},
{ &hf_ndmp_reply_sequence, {
"Reply Sequence", "ndmp.reply_sequence", FT_UINT32, BASE_DEC,
NULL, 0, "Reply Sequence number for NDMP PDU", HFILL }},
{ &hf_ndmp_timestamp, {
"Time", "ndmp.timestamp", FT_ABSOLUTE_TIME, BASE_NONE,
NULL, 0, "Timestamp for this NDMP PDU", HFILL }},
{ &hf_ndmp_msgtype, {
"Type", "ndmp.msg_type", FT_UINT32, BASE_DEC,
VALS(msg_type_vals), 0, "Is this a Request or Response?", HFILL }},
{ &hf_ndmp_msg, {
"Message", "ndmp.msg", FT_UINT32, BASE_DEC,
VALS(msg_vals), 0, "Type of NDMP PDU", HFILL }},
{ &hf_ndmp_error, {
"Error", "ndmp.error", FT_UINT32, BASE_DEC,
VALS(error_vals), 0, "Error code for this NDMP PDU", HFILL }},
{ &hf_ndmp_version, {
"Version", "ndmp.version", FT_UINT32, BASE_DEC,
NULL, 0, "Version of NDMP protocol", HFILL }},
};
static gint *ett[] = {
&ett_ndmp,
&ett_ndmp_header,
};
module_t *ndmp_module;
proto_ndmp = proto_register_protocol("Network Data Management Protocol", "NDMP", "ndmp");
proto_register_field_array(proto_ndmp, hf_ndmp, array_length(hf_ndmp));
proto_register_subtree_array(ett, array_length(ett));
/* desegmentation */
ndmp_module = prefs_register_protocol(proto_ndmp, NULL);
prefs_register_bool_preference(ndmp_module, "ndmp.desegment", "Desegment all NDMP messages spanning multiple TCP segments", "Whether the dissector should desegment NDMP over TCP PDUs or not", &ndmp_desegment);
}
void
proto_reg_handoff_ndmp(void)
{
dissector_handle_t ndmp_handle;
ndmp_handle = create_dissector_handle(dissect_ndmp, proto_ndmp);
dissector_add("tcp.port",TCP_PORT_NDMP, ndmp_handle);
}

View File

@ -1,7 +1,7 @@
/* packet-nisplus.c
* 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
* 2001 Ronnie Sahlberg <See AUTHORS for email>
*
* $Id: packet-nisplus.c,v 1.8 2001/09/14 07:10:05 guy Exp $
* $Id: packet-nisplus.c,v 1.9 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-nisplus.h
* 2001 Ronnie Sahlberg <rsahelber@bigpond.net.au>
* 2001 Ronnie Sahlberg <See AUTHORS for email>
*
* $Id: packet-nisplus.h,v 1.2 2001/06/12 06:31:14 guy Exp $
* $Id: packet-nisplus.h,v 1.3 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-nlm.c
* Routines for nlm dissection
*
* $Id: packet-nlm.c,v 1.21 2001/10/29 21:13:08 guy Exp $
* $Id: packet-nlm.c,v 1.22 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -9,7 +9,7 @@
*
* Copied from packet-mount.c
*
* 2001-JAN Ronnie Sahlberg <rsahlber@bigpond.net.au>
* 2001-JAN Ronnie Sahlberg <See AUTHORS for email>
* Updates to version 1 of the protocol.
* Added version 3 of the protocol.
* Added version 4 of the protocol.

View File

@ -1,7 +1,7 @@
/* packet-spray.c
* 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
* 2001 Ronnie Sahlberg <See AUTHORS for email>
*
* $Id: packet-spray.c,v 1.5 2001/06/18 02:17:53 guy Exp $
* $Id: packet-spray.c,v 1.6 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-spray.h
* 2001 Ronnie Sahlberg <rsahelber@bigpond.net.au>
* 2001 Ronnie Sahlberg <See AUTHORS for email>
*
* $Id: packet-spray.h,v 1.2 2001/06/12 06:31:14 guy Exp $
* $Id: packet-spray.h,v 1.3 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,8 +1,8 @@
/* packet-stat.c
* Routines for async NSM stat callback dissection
* 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
* 2001 Ronnie Sahlberg <See AUTHORS for email>
*
* $Id: packet-stat-notify.c,v 1.7 2001/09/13 08:14:45 guy Exp $
* $Id: packet-stat-notify.c,v 1.8 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,8 +1,8 @@
/* packet-stat-notify.h
* Async callback to notify NSM servers of changes in client status
* 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
* 2001 Ronnie Sahlberg <See AUTHORS for email>
*
* $Id: packet-stat-notify.h,v 1.2 2001/06/12 06:31:14 guy Exp $
* $Id: packet-stat-notify.h,v 1.3 2001/12/23 21:36:57 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>

View File

@ -1,7 +1,7 @@
/* packet-stat.c
* Routines for stat dissection
*
* $Id: packet-stat.c,v 1.10 2001/06/18 02:17:53 guy Exp $
* $Id: packet-stat.c,v 1.11 2001/12/23 21:36:58 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -9,7 +9,7 @@
*
* Copied from packet-smb.c
*
* 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
* 2001 Ronnie Sahlberg <See AUTHORS for email>
* Added the dissectors for STAT protocol
*
* This program is free software; you can redistribute it and/or

View File

@ -1,7 +1,7 @@
/* packet-ypserv.c
* Routines for ypserv dissection
*
* $Id: packet-ypserv.c,v 1.17 2001/06/18 02:17:58 guy Exp $
* $Id: packet-ypserv.c,v 1.18 2001/12/23 21:36:58 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -9,7 +9,7 @@
*
* Copied from packet-smb.c
*
* 2001 Ronnie Sahlberg <rsahlber@bigpond.net.au>
* 2001 Ronnie Sahlberg <See AUTHORS for email>
* Added all remaining dissectors for this protocol
*
* This program is free software; you can redistribute it and/or