2 * Routines for fmp dissection
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version 2
13 * of the License, or (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 #include <epan/packet.h>
28 #include <epan/prefs.h>
29 #include "packet-fmp.h"
30 #include "packet-rpc.h"
33 static int hf_fmp_procedure
= -1;
34 static int hf_fmp_fsID
= -1;
35 static int hf_fmp_fsBlkSz
= -1;
36 static int hf_fmp_sessionHandle
= -1;
37 static int hf_fmp_fmpFHandle
= -1;
38 static int hf_fmp_msgNum
= -1;
39 static int hf_fmp_fileSize
= -1;
40 static int hf_fmp_cookie
= -1;
41 static int hf_fmp_firstLogBlk
= -1;
42 static int hf_fmp_numBlksReq
= -1;
44 static int proto_fmp
= -1;
45 static int hf_fmp_hostID
= -1;
46 static int hf_fmp_status
= -1;
47 static int hf_fmp_btime
= -1;
48 static int hf_fmp_time_sec
= -1;
49 static int hf_fmp_time_nsec
= -1;
50 static int hf_fmp_notifyPort
= -1;
51 static int hf_fmp_minBlks
= -1;
52 static int hf_fmp_eof
= -1;
53 static int hf_fmp_path
= -1;
54 static int hf_fmp_plugInID
= -1;
55 static int hf_fmp_plugInBuf
= -1;
56 static int hf_fmp_nfsFHandle
= -1;
57 static int hf_fmp_extentList_len
= -1;
58 static int hf_fmp_extent_state
= -1;
59 static int hf_fmp_numBlks
= -1;
60 static int hf_fmp_volID
= -1;
61 static int hf_fmp_startOffset
= -1;
62 static int hf_fmp_volHandle
= -1;
63 static int hf_fmp_devSignature
= -1;
64 static int hf_fmp_dskSigEnt_val
= -1;
65 static int hf_fmp_mount_path
= -1;
66 static int hf_fmp_sig_offset
= -1;
67 static int hf_fmp_os_major
= -1;
68 static int hf_fmp_os_minor
= -1;
69 static int hf_fmp_os_name
= -1;
70 static int hf_fmp_os_patch
= -1;
71 static int hf_fmp_os_build
= -1;
72 static int hf_fmp_server_version_string
= -1;
73 static int hf_fmp_description
= -1;
74 static int hf_fmp_nfsv3Attr_type
= -1;
75 static int hf_fmp_nfsv3Attr_mode
= -1;
76 static int hf_fmp_nfsv3Attr_nlink
= -1;
77 static int hf_fmp_nfsv3Attr_uid
= -1;
78 static int hf_fmp_nfsv3Attr_gid
= -1;
79 static int hf_fmp_nfsv3Attr_used
= -1;
80 static int hf_fmp_nfsv3Attr_rdev
= -1;
81 static int hf_fmp_nfsv3Attr_fsid
= -1;
82 static int hf_fmp_nfsv3Attr_fileid
= -1;
83 static int hf_fmp_cmd
= -1;
84 static int hf_fmp_topVolumeId
= -1;
85 static int hf_fmp_cursor
= -1;
86 static int hf_fmp_offset64
= -1;
87 static int hf_fmp_start_offset64
= -1;
88 static int hf_fmp_slice_size
= -1;
89 static int hf_fmp_volume
= -1;
90 static int hf_fmp_stripeSize
= -1;
91 static int hf_fmp_firstLogBlk64
=-1;
92 static int hf_fmp_native_protocol
= -1;
93 static int hf_fmp_encoding_mode
= -1;
94 static int hf_fmp_capability
= -1;
95 static int hf_fmp_devSerial_query_cmd
= -1;
96 static int hf_fmp_volume_desc
= -1;
97 static int hf_fmp_disk_identifier
= -1;
98 static int hf_fmp_volume_mgmt_type
= -1;
99 static int hf_fmp_notify_protocol
= -1;
100 static int hf_fmp_client_error_number
= -1;
101 /* Generated from convert_proto_tree_add_text.pl */
102 static int hf_fmp_cap_revoke_handle_list
= -1;
103 static int hf_fmp_length_of_volume_list
= -1;
104 static int hf_fmp_cap_unc_names
= -1;
105 static int hf_fmp_length_of_list
= -1;
106 static int hf_fmp_sigoffset
= -1;
107 static int hf_fmp_uid
= -1;
108 static int hf_fmp_fid
= -1;
109 static int hf_fmp_fsid
= -1;
110 static int hf_fmp_tid
= -1;
111 static int hf_fmp_cifsport
= -1;
112 static int hf_fmp_blockindex
= -1;
113 static int hf_fmp_number_of_disk
= -1;
114 static int hf_fmp_cap_cifsv2
= -1;
116 static gint ett_fmp
= -1;
117 static gint ett_fmp_timeval
= -1;
118 static gint ett_fmp_extList
= -1;
119 static gint ett_fmp_ext
= -1;
120 static gint ett_fmp_fileHandle
= -1;
121 static gint ett_capabilities
= -1;
122 static gint ett_HierVolumeDescription
= -1;
123 static gint ett_attrs
= -1;
125 static const value_string fmp_encoding_mode_vals
[] = {
126 {FMP_ASCII
, "ASCII"},
128 {FMP_UNICODE1
, "UNICODE"},
132 static gboolean fmp_fhandle_reqrep_matching
= FALSE
;
135 dissect_fmp_genString(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
137 proto_tree_add_item(tree
, hf_fmp_encoding_mode
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
140 if (try_val_to_str(tvb_get_ntohl(tvb
, offset
), fmp_encoding_mode_vals
) == NULL
)
143 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_path
,
150 get_fileHandleSrc_size(tvbuff_t
*tvb
, int offset
)
155 np
= (nativeProtocol
)tvb_get_ntohl(tvb
, offset
);
159 length
= 4 + FMP_MAX_PATH_LEN
;
162 length
= 8 + tvb_get_ntohl(tvb
, offset
+ 4);
168 length
= 8 + tvb_get_ntohl(tvb
, offset
+ 4);
176 length
= 8 + FMP_MAX_PATH_LEN
;
187 dissect_fmp_fileHandleSrc(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
192 proto_item
*fileHandleItem
;
193 proto_tree
*fileHandleTree
;
196 length
= get_fileHandleSrc_size(tvb
, offset
);
198 fileHandleItem
= proto_tree_add_text(tree
, tvb
, offset
, length
,
199 "Source File Handle");
200 fileHandleTree
= proto_item_add_subtree(fileHandleItem
,
203 np
= (nativeProtocol
)tvb_get_ntohl(tvb
, offset
);
204 proto_tree_add_item(fileHandleTree
, hf_fmp_native_protocol
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
209 offset
= dissect_rpc_string(tvb
, fileHandleTree
,
210 hf_fmp_mount_path
, offset
, NULL
);
214 offset
= dissect_rpc_data(tvb
, fileHandleTree
,
215 hf_fmp_nfsFHandle
, offset
);
219 proto_tree_add_item(fileHandleTree
, hf_fmp_fid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
222 proto_tree_add_item(fileHandleTree
, hf_fmp_tid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
225 proto_tree_add_item(fileHandleTree
, hf_fmp_uid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
230 offset
= dissect_rpc_string(tvb
, fileHandleTree
,
231 hf_fmp_fmpFHandle
, offset
, NULL
);
235 proto_tree_add_item(fileHandleTree
, hf_fmp_fsid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
240 offset
= dissect_fmp_genString(tvb
, offset
, fileHandleTree
);
244 offset
= dissect_fmp_genString(tvb
, offset
, fileHandleTree
);
248 proto_tree_add_item(fileHandleTree
, hf_fmp_fid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
251 proto_tree_add_item(fileHandleTree
, hf_fmp_tid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
254 proto_tree_add_item(fileHandleTree
, hf_fmp_uid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
257 proto_tree_add_item(fileHandleTree
, hf_fmp_cifsport
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
261 offset
= dissect_fmp_genString(tvb
, offset
, fileHandleTree
);
272 dissect_fmp_extentState(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
274 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_extent_state
,
281 dissect_fmp_extent(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
, proto_tree
*tree
, guint32 ext_num
)
286 extItem
= proto_tree_add_text(tree
, tvb
, offset
, 20 ,
287 "Extent (%u)", (guint32
) ext_num
);
289 extTree
= proto_item_add_subtree(extItem
, ett_fmp_ext
);
291 offset
= dissect_rpc_uint32(tvb
, extTree
, hf_fmp_firstLogBlk
,
293 offset
= dissect_rpc_uint32(tvb
, extTree
, hf_fmp_numBlks
,
295 offset
= dissect_rpc_uint32(tvb
, extTree
, hf_fmp_volID
, offset
);
296 offset
= dissect_rpc_uint32(tvb
, extTree
, hf_fmp_startOffset
,
298 offset
= dissect_fmp_extentState(tvb
, offset
, extTree
);
304 dissect_fmp_extentList(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
309 proto_item
*extListItem
;
310 proto_tree
*extListTree
;
313 numExtents
= tvb_get_ntohl(tvb
, offset
);
314 totalLength
= 4 + (20 * numExtents
);
316 extListItem
= proto_tree_add_text(tree
, tvb
, offset
, totalLength
,
318 extListTree
= proto_item_add_subtree(extListItem
, ett_fmp_extList
);
320 offset
= dissect_rpc_uint32(tvb
, extListTree
,
321 hf_fmp_extentList_len
, offset
);
323 for (i
= 0; i
< numExtents
; i
++) {
324 offset
= dissect_fmp_extent(tvb
, offset
, pinfo
, extListTree
, i
+1);
332 dissect_fmp_extentListEx(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
336 proto_item
*extListItem
;
337 proto_tree
*extListTree
;
340 numExtents
= tvb_get_ntohl(tvb
, offset
);
344 for (i
= 0; i
< numExtents
; i
++) {
345 extListItem
= proto_tree_add_text(tree
, tvb
, offset
, 28,
347 extListTree
= proto_item_add_subtree(extListItem
, ett_fmp_extList
);
350 offset
= dissect_rpc_uint64(tvb
,extListTree
, hf_fmp_firstLogBlk64
, offset
);
352 offset
= dissect_rpc_uint32(tvb
,extListTree
, hf_fmp_numBlksReq
,
355 offset
= dissect_rpc_uint32(tvb
,extListTree
, hf_fmp_volID
, offset
);
357 offset
= dissect_rpc_uint64(tvb
,extListTree
, hf_fmp_start_offset64
, offset
);
359 offset
= dissect_fmp_extentState(tvb
, offset
, extListTree
);
368 dissect_plugInID(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
374 proto_tree_add_item(tree
, hf_fmp_plugInID
, tvb
, offset
, FMP_PLUG_IN_ID_SZ
,
380 dissect_fmp_flushCmd(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
383 char msg
[MAX_MSG_SIZE
];
388 cmd
= tvb_get_ntohl(tvb
, offset
);
390 /* Initialize the message for an empty string */
393 for (i
= 0; cmd
!= 0 && i
< 32; i
++) {
397 if (cmd
& bitValue
) {
399 case FMP_COMMIT_SPECIFIED
:
400 g_strlcat(msg
, "COMMIT_SPECIFIED", MAX_MSG_SIZE
);
402 case FMP_RELEASE_SPECIFIED
:
403 g_strlcat(msg
, "RELEASE_SPECIFIED", MAX_MSG_SIZE
);
405 case FMP_RELEASE_ALL
:
406 g_strlcat(msg
, "RELEASE_ALL", MAX_MSG_SIZE
);
409 g_strlcat(msg
, "CLOSE_FILE", MAX_MSG_SIZE
);
411 case FMP_UPDATE_TIME
:
412 g_strlcat(msg
, "UPDATE_TIME", MAX_MSG_SIZE
);
414 case FMP_ACCESS_TIME
:
415 g_strlcat(msg
, "ACCESS_TIME", MAX_MSG_SIZE
);
418 g_strlcat(msg
, "UNKNOWN", MAX_MSG_SIZE
);
422 /* clear the bit that we processed */
425 /* add a "bitwise inclusive OR" symbol between cmds */
427 g_strlcat(msg
, " | ", MAX_MSG_SIZE
);
432 if (strlen(msg
) == 0) {
433 g_strlcpy(msg
, "No command specified", MAX_MSG_SIZE
);
436 proto_tree_add_text(tree
, tvb
, offset
, 4, "Cmd: %s", msg
);
443 dissect_InterpretVolMgtStuff(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
445 int length
, numdisks
, i
, j
;
447 numdisks
= tvb_get_ntohl(tvb
, offset
);
448 proto_tree_add_item(tree
, hf_fmp_number_of_disk
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
451 for (i
=0; i
<numdisks
; i
++) {
452 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_sig_offset
, offset
);
453 length
= tvb_get_ntohl(tvb
, offset
);
454 proto_tree_add_item(tree
, hf_fmp_length_of_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
457 for (j
=0; j
<length
; j
++) {
458 proto_tree_add_item(tree
, hf_fmp_sigoffset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
460 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_dskSigEnt_val
,
464 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_volID
, offset
);
473 dissect_fmp_capability(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
475 proto_tree_add_item(tree
, hf_fmp_capability
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
480 dissect_fmp_timeval(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
481 proto_tree
*tree
, int hf_time
, int hf_time_sec
,
487 proto_item
* time_item
;
488 proto_tree
* time_tree
;
490 ts
.secs
= tvb_get_ntohl(tvb
, offset
+0);
491 ts
.nsecs
= tvb_get_ntohl(tvb
, offset
+4);
493 time_item
= proto_tree_add_time(tree
, hf_time
, tvb
, offset
, 8, &ts
);
494 time_tree
= proto_item_add_subtree(time_item
, ett_fmp_timeval
);
496 proto_tree_add_uint(time_tree
, hf_time_sec
, tvb
, offset
, 4,
498 proto_tree_add_uint(time_tree
, hf_time_nsec
, tvb
, offset
+4, 4,
506 dissect_fmp_heartBeatIntv(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
510 proto_tree_add_text(tree
, tvb
, offset
, 8,
511 "Heart Beat Interval: %d.%d seconds",
512 tvb_get_ntohl(tvb
, offset
),
513 tvb_get_ntohl(tvb
, offset
+4));
520 dissect_fmp_status(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, int *rval
)
524 status
= (fmpStat
)tvb_get_ntohl(tvb
, offset
);
547 case FMP_NOTIFY_ERROR
:
548 case FMP_WRITER_LOST_BLK
:
549 case FMP_WRONG_MSG_NUM
:
550 case FMP_SESSION_LOST
:
551 case FMP_REQUEST_CANCELLED
:
554 case FMP_HOT_SESSION
:
557 case FMP_COLD_SESSION
:
560 case FMP_CLIENT_TERMINATED
:
563 case FMP_REQUEST_QUEUED
:
569 case FMP_WRITER_ZEROED_BLK
:
572 case FMP_WRONG_HANDLE
:
575 case FMP_DUPLICATE_OPEN
:
578 case FMP_PLUGIN_NOFUNC
:
585 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_status
, offset
);
590 dissect_fmp_devSerial(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
593 proto_tree_add_item(tree
, hf_fmp_devSerial_query_cmd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
596 proto_tree_add_item(tree
, hf_fmp_sigoffset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
599 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_devSignature
,
605 dissect_fmp_VolumeDescription(tvbuff_t
*tvb
, int offset
, proto_tree
* tree
)
610 fmpVolumeType volumeType
;
611 fmpDiskIdentifierType diskIdentifierType
;
613 volumeType
= (fmpVolumeType
)tvb_get_ntohl(tvb
, offset
);
614 ti
= proto_tree_add_item(tree
, hf_fmp_volume_desc
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
615 Hietree
= proto_item_add_subtree(ti
, ett_HierVolumeDescription
);
618 switch (volumeType
) {
620 case FMP_VOLUME_DISK
:
621 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volID
, offset
);
622 offset
+= 8; /* blockIndex64 */
623 diskIdentifierType
= (fmpDiskIdentifierType
)tvb_get_ntohl(tvb
, offset
);
624 proto_tree_add_item(Hietree
, hf_fmp_disk_identifier
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
627 switch (diskIdentifierType
) {
628 case FMP_DISK_IDENTIFIER_SIGNATURE
:
629 offset
= dissect_rpc_uint64(tvb
, Hietree
, hf_fmp_sig_offset
, offset
);
630 length
= tvb_get_ntohl(tvb
, offset
);
631 proto_tree_add_item(Hietree
, hf_fmp_length_of_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
634 for (i
=0; i
<length
; i
++) {
635 proto_tree_add_item(Hietree
, hf_fmp_sigoffset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
637 offset
= dissect_rpc_string(tvb
, Hietree
, hf_fmp_dskSigEnt_val
, offset
, NULL
);
643 case FMP_DISK_IDENTIFIER_SERIAL
:
644 dissect_fmp_devSerial(tvb
, offset
, NULL
, Hietree
);
649 case FMP_VOLUME_SLICE
:
650 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volID
, offset
);
652 offset
= dissect_rpc_uint64(tvb
, Hietree
, hf_fmp_offset64
, offset
);
654 offset
= dissect_rpc_uint64(tvb
, Hietree
, hf_fmp_slice_size
, offset
);
656 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volume
, offset
);
660 case FMP_VOLUME_STRIPE
:
661 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volID
, offset
);
663 offset
= dissect_rpc_uint64(tvb
, Hietree
, hf_fmp_stripeSize
, offset
);
664 length
= tvb_get_ntohl(tvb
, offset
);
665 proto_tree_add_item(Hietree
, hf_fmp_length_of_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
668 for (i
=0; i
<length
; i
++) {
669 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volume
, offset
); /* FIXME: Size or length not know */
674 case FMP_VOLUME_META
:
675 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volID
, offset
);
677 length
= tvb_get_ntohl(tvb
, offset
);
678 proto_tree_add_item(Hietree
, hf_fmp_length_of_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
680 for (i
=0; i
<length
; i
++) {
681 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volume
, offset
); /* FIXME: Size or length not know */
692 dissect_fmp_Hiervolume(tvbuff_t
*tvb
, int offset
, proto_tree
* tree
)
697 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_topVolumeId
, offset
);
698 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cursor
, offset
);
699 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
, offset
);
701 /* hierarchical description of volume. Each volume describes a
702 piece of the entire hierarchy and is guarenteed to only refer to
703 volumes that have already been described by the data structure up
704 to this point in time. In some extreme cases, the number of
705 volumes and their descriptions may be to large to fit in a single
706 RPC reply. In this case, the application may send getVolumeInfo
707 requests for the specific topVolumeId -- specifying the number of
708 volumes already recieved by the client, and the cookie. The
709 server is then responsible for sending another message containing
710 additional volumes. These RPCs exchanges may continue multiple
711 times, until the client has fetched the entire hierarchical
712 volume description. If the volume hierarchy changes duing a
713 multiple RPC sequence, the server will return an
714 FMP_VOLUME_CHANGED error, and the client must discard all
715 information already received and restart the request with
719 vollength
= tvb_get_ntohl(tvb
, offset
);
720 proto_tree_add_item(tree
, hf_fmp_length_of_volume_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
723 offset
= dissect_fmp_VolumeDescription(tvb
, offset
, tree
);
734 dissect_fmp_vmInfo(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
738 guint32 phyVolList_len
;
741 vmType
= tvb_get_ntohl(tvb
, offset
);
742 proto_tree_add_item(tree
, hf_fmp_volume_mgmt_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
745 case FMP_SERVER_BASED
:
749 phyVolList_len
= tvb_get_ntohl(tvb
, offset
);
753 * Loop through and print all of the devInfo
756 while (phyVolList_len
) {
758 dissect_fmp_devSerial(tvb
, offset
, pinfo
, tree
);
759 volIndex
= tvb_get_ntohl(tvb
, offset
);
760 proto_tree_add_text(tree
, tvb
, offset
, 4, "0x%x",
767 case FMP_THIRD_PARTY
:
768 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_volHandle
,
772 case FMP_CLIENT_BASED_DART
:
773 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_volHandle
,
777 case FMP_CLIENT_BASED_SIMPLE
:
779 * Decoding simpleVolInfo
781 offset
= dissect_fmp_devSerial(tvb
, offset
, pinfo
, tree
);
783 proto_tree_add_item(tree
, hf_fmp_blockindex
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
787 case FMP_DISK_SIGNATURE
:
788 offset
= dissect_InterpretVolMgtStuff(tvb
, offset
, tree
);
791 case FMP_HIERARCHICAL_VOLUME
:
792 dissect_fmp_Hiervolume(tvb
, offset
, tree
);
803 dissect_fmp_notifyProtocol(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
805 proto_tree_add_item(tree
, hf_fmp_notify_protocol
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
811 dissect_fmp_capabilities(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
816 ti
= proto_tree_add_text(tree
, tvb
, offset
, 4, "Capabilities");
818 capTree
= proto_item_add_subtree(ti
, ett_capabilities
);
820 proto_tree_add_item(capTree
, hf_fmp_cap_revoke_handle_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
821 proto_tree_add_item(capTree
, hf_fmp_cap_unc_names
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
822 proto_tree_add_item(capTree
, hf_fmp_cap_cifsv2
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
827 dissect_fmp_cerrInfo(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
831 proto_tree_add_item(tree
, hf_fmp_client_error_number
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
834 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
840 dissect_fmp_attrs(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
842 proto_tree
*attrstree
;
843 proto_tree
*attrsTree
;
845 attrstree
= proto_tree_add_text(tree
, tvb
, offset
, 84,
847 attrsTree
= proto_item_add_subtree(attrstree
,
849 offset
= dissect_rpc_uint32(tvb
, attrsTree
, hf_fmp_nfsv3Attr_type
, offset
);
850 offset
= dissect_rpc_uint32(tvb
, attrsTree
, hf_fmp_nfsv3Attr_mode
, offset
);
851 offset
= dissect_rpc_uint32(tvb
, attrsTree
, hf_fmp_nfsv3Attr_nlink
, offset
);
852 offset
= dissect_rpc_uint32(tvb
, attrsTree
, hf_fmp_nfsv3Attr_uid
, offset
);
853 offset
= dissect_rpc_uint32(tvb
, attrsTree
, hf_fmp_nfsv3Attr_gid
, offset
);
854 offset
= dissect_rpc_uint64(tvb
, attrsTree
, hf_fmp_fileSize
, offset
);
855 /* Here hf_fmp_fileSize is used in
858 offset
= dissect_rpc_uint64(tvb
, attrsTree
, hf_fmp_nfsv3Attr_used
, offset
);
859 offset
= dissect_rpc_uint64(tvb
, attrsTree
, hf_fmp_nfsv3Attr_rdev
, offset
);
860 offset
= dissect_rpc_uint64(tvb
, attrsTree
, hf_fmp_nfsv3Attr_fsid
, offset
);
861 offset
= dissect_rpc_uint64(tvb
, attrsTree
, hf_fmp_nfsv3Attr_fileid
, offset
);
862 proto_tree_add_text(tree
, tvb
, offset
, 8,"atime: %d.%d seconds",
863 tvb_get_ntohl(tvb
, offset
),tvb_get_ntohl(tvb
, offset
+4));
865 proto_tree_add_text(tree
, tvb
, offset
, 8,"mtime: %d.%d seconds",
866 tvb_get_ntohl(tvb
, offset
),tvb_get_ntohl(tvb
, offset
+4));
868 proto_tree_add_text(tree
, tvb
, offset
, 8,"ctime: %d.%d seconds",
869 tvb_get_ntohl(tvb
, offset
),tvb_get_ntohl(tvb
, offset
+4));
877 dissect_FMP_SessionCreate_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
878 proto_tree
*tree
, void* data _U_
)
880 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_hostID
,
882 offset
= dissect_fmp_timeval(tvb
, offset
, pinfo
, tree
, hf_fmp_btime
,
883 hf_fmp_time_sec
, hf_fmp_time_nsec
);
884 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_notifyPort
,
890 dissect_FMP_SessionCreate_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
891 proto_tree
*tree
, void* data _U_
)
895 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
897 offset
= dissect_rpc_data(tvb
, tree
,
898 hf_fmp_sessionHandle
, offset
);
899 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_hostID
,
901 offset
= dissect_fmp_timeval(tvb
, offset
, pinfo
, tree
,
902 hf_fmp_btime
, hf_fmp_time_sec
,
904 offset
= dissect_fmp_heartBeatIntv(tvb
, offset
, pinfo
, tree
);
911 dissect_FMP_HeartBeat_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
912 proto_tree
*tree
, void* data _U_
)
914 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
921 dissect_FMP_HeartBeat_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
922 proto_tree
*tree
, void* data _U_
)
925 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
930 dissect_FMP_Mount_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
931 proto_tree
*tree
, void* data _U_
)
933 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
935 offset
= dissect_fmp_capability(tvb
, offset
, tree
);
936 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
941 dissect_FMP_Mount_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
942 proto_tree
*tree
, void* data _U_
)
946 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
948 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
950 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsBlkSz
,
952 offset
= dissect_fmp_vmInfo(tvb
, offset
, pinfo
, tree
);
959 dissect_FMP_Open_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
960 proto_tree
*tree
, void* data _U_
)
962 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
964 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
969 dissect_FMP_Open_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
970 proto_tree
*tree
, void* data _U_
)
974 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
976 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
,
978 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
980 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
983 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
990 dissect_FMP_Close_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
991 proto_tree
*tree
, void* data _U_
)
993 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
994 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
999 dissect_FMP_Close_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1000 proto_tree
*tree
, void* data _U_
)
1004 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1006 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1014 dissect_FMP_OpenGetMap_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1016 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
1019 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1020 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_firstLogBlk
,
1022 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1024 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1029 dissect_FMP_OpenGetMap_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
1030 proto_tree
*tree
, void* data _U_
)
1034 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1036 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
,
1038 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1040 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1042 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1044 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
1046 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1053 dissect_FMP_OpenAllocSpace_request(tvbuff_t
*tvb
, int offset
,
1054 packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1056 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
1058 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1059 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_firstLogBlk
,
1061 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1063 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1068 dissect_FMP_OpenAllocSpace_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
1069 proto_tree
*tree
, void* data _U_
)
1073 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1075 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
,
1077 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1079 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1081 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1083 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
1085 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1091 dissect_FMP_GetMap_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1092 proto_tree
*tree
, void* data _U_
)
1094 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1095 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1096 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_firstLogBlk
,
1098 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1100 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1105 dissect_FMP_GetMap_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
1106 proto_tree
*tree
, void* data _U_
)
1110 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1112 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1114 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1116 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1118 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1125 dissect_FMP_AllocSpace_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1126 proto_tree
*tree
, void* data _U_
)
1128 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1129 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1130 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_firstLogBlk
,
1132 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1134 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1139 dissect_FMP_AllocSpace_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
1140 proto_tree
*tree
, void* data _U_
)
1144 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1146 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1148 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1150 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1152 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1159 dissect_FMP_Flush_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
1160 proto_tree
*tree
, void* data _U_
)
1162 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1163 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1164 offset
= dissect_fmp_flushCmd(tvb
, offset
, tree
);
1165 offset
= dissect_rpc_uint64(tvb
,tree
, hf_fmp_eof
, offset
);
1166 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1171 dissect_FMP_Flush_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1172 proto_tree
*tree
, void* data _U_
)
1176 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1178 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1185 dissect_FMP_CancelReq_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1186 proto_tree
*tree
, void* data _U_
)
1188 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1189 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1190 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
, offset
);
1195 dissect_FMP_CancelReq_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1196 proto_tree
*tree
, void* data _U_
)
1200 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1202 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1209 dissect_FMP_PlugIn_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1210 proto_tree
*tree
, void* data _U_
)
1212 offset
= dissect_plugInID(tvb
, offset
, tree
);
1213 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_plugInBuf
, offset
);
1218 dissect_FMP_PlugIn_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1219 proto_tree
*tree
, void* data _U_
)
1223 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1225 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_plugInBuf
,
1232 dissect_FMP_SessionTerminate_request(tvbuff_t
*tvb
, int offset
,
1233 packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1235 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
1241 dissect_FMP_SessionTerminate_reply(tvbuff_t
*tvb
, int offset
,
1242 packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1246 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1251 dissect_FMP_SessionCreateEx_request(tvbuff_t
*tvb
, int offset
,packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1254 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_hostID
,
1256 offset
= dissect_fmp_timeval(tvb
, offset
, pinfo
,tree
, hf_fmp_btime
,
1257 hf_fmp_time_sec
, hf_fmp_time_nsec
);
1258 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_notifyPort
,
1260 offset
= dissect_fmp_notifyProtocol(tvb
, offset
, tree
);
1262 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_major
,
1264 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_minor
,
1267 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_os_name
,
1270 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_patch
,
1273 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_build
,
1276 offset
= dissect_fmp_capabilities(tvb
, offset
, tree
);
1283 dissect_FMP_SessionCreateEx_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1288 offset
= dissect_fmp_status(tvb
, offset
, tree
, &rval
);
1290 offset
= dissect_rpc_data(tvb
, tree
,
1291 hf_fmp_sessionHandle
, offset
);
1292 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_hostID
,
1294 offset
= dissect_fmp_timeval(tvb
, offset
, pinfo
,tree
,
1295 hf_fmp_btime
, hf_fmp_time_sec
,
1297 offset
= dissect_fmp_heartBeatIntv(tvb
, offset
, pinfo
, tree
);
1299 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_major
,
1302 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_minor
,
1305 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_server_version_string
,
1308 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_patch
,
1311 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_build
,
1314 offset
= dissect_fmp_capabilities(tvb
, offset
, tree
);
1322 dissect_FMP_ReportClientError_request(tvbuff_t
*tvb
, int offset
,
1323 packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1325 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_description
,
1328 offset
= dissect_fmp_cerrInfo(tvb
, offset
, tree
);
1333 dissect_FMP_ReportClientError_reply(tvbuff_t
*tvb
, int offset
,
1334 packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1337 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1343 dissect_FMP_GetAttr_request(tvbuff_t
*tvb
, int offset
,
1344 packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1346 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1348 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1355 dissect_FMP_GetAttr_reply(tvbuff_t
*tvb
, int offset
,
1356 packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1359 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1361 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1363 offset
= dissect_fmp_attrs(tvb
, offset
, tree
);
1370 dissect_FMP_OpenGetAttr_request(tvbuff_t
*tvb
, int offset
,
1371 packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1374 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
1377 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1384 dissect_FMP_OpenGetAttr_reply(tvbuff_t
*tvb
, int offset
,
1385 packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1389 offset
= dissect_fmp_status(tvb
, offset
, tree
, &rval
);
1392 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1393 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1394 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
, offset
);
1395 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
, offset
);
1396 offset
= dissect_fmp_attrs(tvb
, offset
, tree
);
1405 dissect_FMP_FlushGetAttr_request(tvbuff_t
*tvb
, int offset
,
1406 packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1409 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1410 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1411 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cmd
, offset
);
1412 offset
= dissect_rpc_uint64(tvb
,tree
, hf_fmp_eof
, offset
);
1414 proto_tree_add_text(tree
, tvb
, offset
, 8,"mtime: %d.%d seconds",
1415 tvb_get_ntohl(tvb
, offset
),tvb_get_ntohl(tvb
, offset
+4));
1417 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1424 dissect_FMP_FlushGetAttr_reply(tvbuff_t
*tvb
, int offset
,
1425 packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1429 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1431 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1433 offset
= dissect_fmp_attrs(tvb
, offset
, tree
);
1441 dissect_FMP_GetVolumeInfo_request(tvbuff_t
*tvb
, int offset
,
1442 packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1444 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_topVolumeId
, offset
);
1445 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cursor
, offset
);
1446 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
, offset
);
1453 dissect_FMP_GetVolumeInfo_reply(tvbuff_t
*tvb
, int offset
,
1454 packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1458 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1460 /* FIXME: I don't know size of this volumes */
1461 offset
= dissect_fmp_Hiervolume(tvb
,offset
, tree
);
1468 dissect_FMP_OpenGetMapEx_request(tvbuff_t
*tvb
, int offset
,
1469 packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1471 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
1473 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1474 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_firstLogBlk64
, offset
);
1475 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1477 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1483 dissect_FMP_OpenGetMapEx_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1484 proto_tree
*tree
, void* data _U_
)
1487 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1489 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
,
1491 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1493 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1495 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1497 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
1499 offset
= dissect_fmp_extentListEx(tvb
, offset
, pinfo
, tree
);
1507 dissect_FMP_OpenAllocSpaceEx_request(tvbuff_t
*tvb
, int offset
,
1508 packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1510 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
1512 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1513 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_firstLogBlk64
, offset
);
1514 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1516 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1522 dissect_FMP_OpenAllocSpaceEx_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
1523 proto_tree
*tree
, void* data _U_
)
1527 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1529 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
,
1531 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1533 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1535 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1537 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
1539 offset
= dissect_fmp_extentListEx(tvb
, offset
, pinfo
, tree
);
1545 dissect_FMP_GetMapEx_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1546 proto_tree
*tree
, void* data _U_
)
1548 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1549 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1550 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_firstLogBlk64
, offset
);
1551 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1553 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1559 dissect_FMP_GetMapEx_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
1560 proto_tree
*tree
, void* data _U_
)
1564 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1566 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1568 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1570 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1572 offset
= dissect_fmp_extentListEx(tvb
, offset
, pinfo
, tree
);
1580 dissect_FMP_AllocSpaceEx_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1581 proto_tree
*tree
, void* data _U_
)
1583 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1584 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1585 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_firstLogBlk64
, offset
);
1586 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1588 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1594 dissect_FMP_AllocSpaceEx_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
1595 proto_tree
*tree
, void* data _U_
)
1599 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1601 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1603 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1605 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1607 offset
= dissect_fmp_extentListEx(tvb
, offset
, pinfo
, tree
);
1614 dissect_FMP_FlushEx_request(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
1615 proto_tree
*tree
, void* data _U_
)
1617 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1618 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1619 offset
= dissect_fmp_flushCmd(tvb
, offset
, tree
);
1620 offset
= dissect_rpc_uint64(tvb
,tree
, hf_fmp_eof
, offset
);
1621 offset
= dissect_fmp_extentListEx(tvb
, offset
, pinfo
, tree
);
1626 dissect_FMP_FlushEx_reply(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
1627 proto_tree
*tree
, void* data _U_
)
1631 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1633 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1639 * proc number, "proc name", dissect_request, dissect_reply
1640 * NULL as function pointer means: type of arguments is "void".
1642 static const vsff fmp3_proc
[] = {
1646 dissect_FMP_SessionCreate_request
,
1647 dissect_FMP_SessionCreate_reply
},
1651 dissect_FMP_HeartBeat_request
,
1652 dissect_FMP_HeartBeat_reply
},
1656 dissect_FMP_Mount_request
,
1657 dissect_FMP_Mount_reply
},
1661 dissect_FMP_Open_request
,
1662 dissect_FMP_Open_reply
},
1666 dissect_FMP_Close_request
,
1667 dissect_FMP_Close_reply
},
1671 dissect_FMP_OpenGetMap_request
,
1672 dissect_FMP_OpenGetMap_reply
},
1676 dissect_FMP_OpenAllocSpace_request
,
1677 dissect_FMP_OpenAllocSpace_reply
},
1681 dissect_FMP_GetMap_request
,
1682 dissect_FMP_GetMap_reply
},
1686 dissect_FMP_AllocSpace_request
,
1687 dissect_FMP_AllocSpace_reply
},
1691 dissect_FMP_Flush_request
,
1692 dissect_FMP_Flush_reply
},
1696 dissect_FMP_CancelReq_request
,
1697 dissect_FMP_CancelReq_reply
},
1701 dissect_FMP_PlugIn_request
,
1702 dissect_FMP_PlugIn_reply
},
1706 dissect_FMP_SessionTerminate_request
,
1707 dissect_FMP_SessionTerminate_reply
},
1711 dissect_FMP_SessionCreateEx_request
,
1712 dissect_FMP_SessionCreateEx_reply
},
1715 "ReportClientError",
1716 dissect_FMP_ReportClientError_request
,
1717 dissect_FMP_ReportClientError_reply
},
1721 dissect_FMP_GetAttr_request
,
1722 dissect_FMP_GetAttr_reply
},
1725 "Open Get Attribute",
1726 dissect_FMP_OpenGetAttr_request
,
1727 dissect_FMP_OpenGetAttr_reply
},
1730 "Flush Get Attribute",
1731 dissect_FMP_FlushGetAttr_request
,
1732 dissect_FMP_FlushGetAttr_reply
},
1736 dissect_FMP_OpenGetMapEx_request
,
1737 dissect_FMP_OpenGetMapEx_reply
},
1741 dissect_FMP_OpenAllocSpaceEx_request
,
1742 dissect_FMP_OpenAllocSpaceEx_reply
},
1746 dissect_FMP_GetMapEx_request
,
1747 dissect_FMP_GetMapEx_reply
},
1751 dissect_FMP_AllocSpaceEx_request
,
1752 dissect_FMP_AllocSpaceEx_reply
},
1756 dissect_FMP_FlushEx_request
,
1757 dissect_FMP_FlushEx_reply
},
1762 dissect_FMP_FlushGetAttrEx_request
,
1763 dissect_FMP_FlushGetAttrEx_reply
},
1769 dissect_FMP_GetVolumeInfo_request
,
1770 dissect_FMP_GetVolumeInfo_reply
},
1773 {0 , NULL
, NULL
, NULL
}
1778 static const value_string fmp_proc_vals
[] = {
1780 { 1, "SessionCreate" },
1785 { 6, "OpenGetMap" },
1786 { 7, "OpenAllocSpace" },
1788 { 9, "AllocSpace " },
1790 { 11, "CancelReq" },
1792 { 13, "SessionTerminate" },
1793 { 14, "SessionCreateEx" },
1794 { 15, "ReportClientError" },
1796 { 17, "OpenGetAttr" },
1797 { 18, "FlushGetAttr"},
1798 { 19, "OpenGetMapEx"},
1799 { 20, "OpenAllocSpaceEx"},
1801 { 22, "AllocSpaceEx"},
1803 { 24, "FlushGetAttrEx"},
1804 { 25, "GetVolumeInfo"},
1809 static const value_string fmp_status_vals
[] = {
1814 { 22, "INVALIDARG"},
1816 { 79, "QUEUE_FULL"},
1817 {500, "WRONG_MSG_NUM"},
1818 {501, "SESSION_LOST"},
1819 {502, "HOT_SESSION"},
1820 {503, "COLD_SESSION"},
1821 {504, "CLIENT_TERMINATED"},
1822 {505, "WRITER_LOST_BLK"},
1823 {506, "FMP_REQUEST_QUEUED"},
1824 {507, "FMP_FALL_BACK"},
1825 {508, "REQUEST_CANCELLED"},
1826 {509, "WRITER_ZEROED_BLK"},
1827 {510, "NOTIFY_ERROR"},
1828 {511, "FMP_WRONG_HANDLE"},
1829 {512, "DUPLICATE_OPEN"},
1830 {600, "PLUGIN_NOFUNC"},
1835 static const value_string fmp_extentState_vals
[] = {
1842 static const value_string fmp_native_protocol_vals
[] = {
1847 {FMP_FS_ONLY
, "FS_ONLY"},
1848 {FMP_SHARE
, "SHARE"},
1849 {FMP_MOUNT
, "MOUNT"},
1850 {FMP_CIFSV2
, "CIFSV2"},
1855 static const value_string fmp_volume_mgmt_capability_vals
[] = {
1856 {FMP_SERVER_BASED
, "SERVER_BASED"},
1857 {FMP_THIRD_PARTY
, "THIRD_PARTY"},
1858 {FMP_CLIENT_BASED_DART
, "CLIENT_BASED_DART"},
1859 {FMP_CLIENT_BASED_SIMPLE
, "CLIENT_BASED_SIMPLE"},
1860 {FMP_HIERARCHICAL_VOLUME
, "FMP_HIERARCHICAL_VOLUME"},
1864 static const value_string fmp_query_cmd_vals
[] = {
1865 {FMP_SCSI_INQUIRY
, "SCSI_INQUIRY"},
1866 {FMP_DART_STAMP
, "DART_STAMP"},
1870 static const value_string fmp_volume_desc_vals
[] = {
1871 {FMP_VOLUME_DISK
, "DISK"},
1872 {FMP_VOLUME_SLICE
, "SLICE"},
1873 {FMP_VOLUME_STRIPE
, "STRIPE"},
1874 {FMP_VOLUME_META
, "META"},
1875 {FMP_VOLUME_SLICE
, "SLICE"},
1876 {FMP_VOLUME_SLICE
, "SLICE"},
1880 static const value_string fmp_disk_identifier_vals
[] = {
1881 {FMP_DISK_IDENTIFIER_SIGNATURE
, "SIGNATURE"},
1882 {FMP_DISK_IDENTIFIER_SERIAL
, "SERIAL"},
1886 static const value_string fmp_notify_protocol_vals
[] = {
1892 static const value_string fmp_volume_mgmt_type_vals
[] = {
1893 {FMP_SERVER_BASED
, "SERVER_BASED"},
1894 {FMP_THIRD_PARTY
, "THIRD_PARTY"},
1895 {FMP_CLIENT_BASED_DART
, "CLIENT_BASED_DART"},
1896 {FMP_CLIENT_BASED_SIMPLE
, "CLIENT_BASED_SIMPLE"},
1897 {FMP_DISK_SIGNATURE
, "DISK_SIGNATURE"},
1898 {FMP_HIERARCHICAL_VOLUME
, "HIERARCHICAL_VOLUME"},
1902 static const value_string fmp_client_error_number_vals
[] = {
1903 {FMP_CE_GENERIC
, "FMP_CE_GENERIC"},
1904 {FMP_CE_DISK_ERROR
, "FMP_CE_DISK_ERROR"},
1909 proto_register_fmp(void)
1911 static hf_register_info hf
[] = {
1912 { &hf_fmp_procedure
,
1913 { "Procedure", "fmp.procedure",
1914 FT_UINT32
, BASE_DEC
, VALS(fmp_proc_vals
),
1915 0, NULL
, HFILL
}}, /* New addition */
1918 { "Host ID", "fmp.hostID",
1919 FT_STRING
, BASE_NONE
, NULL
, 0,
1923 { "Boot Time", "fmp.btime",
1924 FT_ABSOLUTE_TIME
, ABSOLUTE_TIME_LOCAL
, NULL
, 0,
1925 "Machine Boot Time", HFILL
}},
1928 { "seconds", "fmp.btime.sec",
1929 FT_UINT32
, BASE_DEC
, NULL
, 0,
1932 { &hf_fmp_time_nsec
,
1933 { "nanoseconds", "fmp.btime.nsec",
1934 FT_UINT32
, BASE_DEC
, NULL
, 0,
1937 { &hf_fmp_notifyPort
,
1938 { "Notify Port", "fmp.notifyPort",
1939 FT_UINT32
, BASE_DEC
, NULL
, 0,
1942 { &hf_fmp_sessionHandle
,
1943 { "Session Handle", "fmp.sessHandle",
1944 FT_BYTES
, BASE_NONE
, NULL
, 0,
1947 { &hf_fmp_fmpFHandle
,
1948 { "FMP File Handle", "fmp.fmpFHandle",
1949 FT_BYTES
, BASE_NONE
, NULL
, 0,
1953 { &hf_fmp_nfsFHandle
,
1954 { "NFS File Handle", "fmp.nfsFHandle",
1955 FT_BYTES
, BASE_NONE
, NULL
, 0,
1959 { "File System ID", "fmp.fsID",
1960 FT_UINT32
, BASE_HEX
, NULL
, 0,
1964 { "Status", "fmp.status",
1965 FT_UINT32
, BASE_DEC
, VALS(fmp_status_vals
), 0,
1966 "Reply Status", HFILL
}},
1969 { "File System Block Size", "fmp.fsBlkSz",
1970 FT_UINT32
, BASE_DEC
, NULL
, 0,
1973 { &hf_fmp_volHandle
,
1974 { "Volume Handle", "fmp.volHandle",
1975 FT_STRING
, BASE_NONE
, NULL
, 0,
1978 { &hf_fmp_dskSigEnt_val
,
1979 { "Celerra Signature", "fmp.dsi.ds.dsList.dskSigLst_val.dse.dskSigEnt_val",
1980 FT_STRING
, BASE_NONE
, NULL
, 0,
1983 { &hf_fmp_devSignature
,
1984 { "Signature DATA", "fmp.devSig",
1985 FT_STRING
, BASE_NONE
, NULL
, 0,
1988 { &hf_fmp_mount_path
,
1989 { "Native Protocol: PATH", "fmp.mount_path",
1990 FT_STRING
, BASE_NONE
, NULL
, 0,
1991 "Absolute path from the root on the server side", HFILL
}},
1993 { &hf_fmp_sig_offset
,
1994 { "Sig Offset", "fmp.dsi.ds.sig_offset",
1995 FT_UINT64
, BASE_DEC
, NULL
, 0,
1998 { &hf_fmp_numBlksReq
,
1999 { "Extent Length", "fmp.numBlksReq",
2000 FT_UINT32
, BASE_DEC
, NULL
, 0,
2004 { "Minimum Blocks to Grant", "fmp.minBlks",
2005 FT_UINT32
, BASE_DEC
, NULL
, 0,
2009 { "Message Number", "fmp.msgNum",
2010 FT_UINT32
, BASE_DEC
, NULL
, 0,
2014 { "Cookie", "fmp.cookie",
2015 FT_UINT32
, BASE_HEX
, NULL
, 0,
2016 "Cookie for FMP_REQUEST_QUEUED Resp", HFILL
}},
2019 { "File Size", "fmp.fileSize",
2020 FT_UINT64
, BASE_DEC
, NULL
, 0,
2023 { &hf_fmp_extentList_len
,
2024 { "Extent List Length", "fmp.extentList_len",
2025 FT_UINT32
, BASE_DEC
, NULL
, 0,
2028 { &hf_fmp_extent_state
,
2029 { "Extent State", "fmp.extentState",
2030 FT_UINT32
,BASE_DEC
, VALS(fmp_extentState_vals
), 0,
2033 { &hf_fmp_firstLogBlk
,
2034 { "First Logical File Block", "fmp.firstLogBlk",
2035 FT_UINT32
, BASE_DEC
, NULL
, 0,
2039 { "Number of Blocks", "fmp.numBlks",
2040 FT_UINT32
, BASE_DEC
, NULL
, 0,
2044 { "Volume ID inside DART", "fmp.volID",
2045 FT_UINT32
, BASE_HEX
, NULL
, 0,
2048 { &hf_fmp_startOffset
,
2049 { "Start Offset", "fmp.startOffset",
2050 FT_UINT32
, BASE_DEC
, NULL
, 0,
2053 { &hf_fmp_start_offset64
,
2054 { "Start offset", "fmp.start_offset64",
2055 FT_UINT64
, BASE_DEC
, NULL
, 0,
2056 "Start Offset of extentEx", HFILL
}},
2060 FT_UINT64
, BASE_DEC
, NULL
, 0,
2061 "End Of File", HFILL
}},
2064 { "Plug In Cmd ID", "fmp.plugInID",
2065 FT_BYTES
, BASE_NONE
, NULL
, 0,
2068 { &hf_fmp_plugInBuf
,
2069 { "Plug In Args", "fmp.plugIn",
2070 FT_BYTES
, BASE_NONE
, NULL
, 0,
2074 { "OS Major", "fmp.os_major",
2075 FT_UINT32
, BASE_DEC
, NULL
, 0,
2079 { "OS Minor", "fmp.os_minor",
2080 FT_UINT32
, BASE_DEC
, NULL
, 0,
2084 { "OS Name", "fmp.os_name",
2085 FT_STRING
, BASE_NONE
, NULL
, 0,
2089 { "Mount Path", "fmp.Path",
2090 FT_STRING
, BASE_NONE
, NULL
, 0,
2094 { "OS Path", "fmp.os_patch",
2095 FT_UINT32
, BASE_DEC
, NULL
, 0,
2099 { "OS Build", "fmp.os_build",
2100 FT_UINT32
, BASE_DEC
, NULL
, 0,
2103 { &hf_fmp_server_version_string
,
2104 { "Server Version String", "fmp.server_version_string",
2105 FT_STRING
, BASE_NONE
, NULL
, 0,
2108 { &hf_fmp_description
,
2109 { "Error Description", "fmp.description",
2110 FT_STRING
, BASE_NONE
, NULL
, 0,
2111 "Client Error Description", HFILL
}},
2113 { &hf_fmp_nfsv3Attr_type
,
2114 { "Type", "fmp.nfsv3Attr_type",
2115 FT_UINT32
, BASE_DEC
, NULL
, 0,
2116 "NFSV3 Attr Type", HFILL
}},
2118 { &hf_fmp_nfsv3Attr_mode
,
2119 { "Mode", "fmp.nfsv3Attr_mod",
2120 FT_UINT32
, BASE_DEC
, NULL
, 0,
2123 { &hf_fmp_nfsv3Attr_nlink
,
2124 { "nlink", "fmp.nfsv3Attr_nlink",
2125 FT_UINT32
, BASE_DEC
, NULL
, 0,
2128 { &hf_fmp_nfsv3Attr_uid
,
2129 { "uid", "fmp.nfsv3Attr_uid",
2130 FT_UINT32
, BASE_DEC
, NULL
, 0,
2133 { &hf_fmp_nfsv3Attr_gid
,
2134 { "gid", "fmp.nfsv3Attr_gid",
2135 FT_UINT32
, BASE_DEC
, NULL
, 0,
2138 /* for nfsv3Attr_size use hf_fmp_fileSize */
2139 { &hf_fmp_nfsv3Attr_used
,
2140 { "Used", "fmp.nfsv3Attr_used",
2141 FT_UINT64
, BASE_DEC
, NULL
, 0,
2144 { &hf_fmp_nfsv3Attr_rdev
,
2145 { "rdev", "fmp.nfsv3Attr_rdev",
2146 FT_UINT64
, BASE_DEC
, NULL
, 0,
2149 { &hf_fmp_nfsv3Attr_fsid
,
2150 { "fsid", "fmp.nfsv3Attr_fsid",
2151 FT_UINT64
, BASE_DEC
, NULL
, 0,
2154 { &hf_fmp_nfsv3Attr_fileid
,
2155 { "File ID", "fmp.nfsv3Attr_fileid",
2156 FT_UINT64
, BASE_DEC
, NULL
, 0,
2160 { "Command", "fmp.cmd",
2161 FT_UINT32
, BASE_DEC
, NULL
, 0,
2164 { &hf_fmp_topVolumeId
,
2165 { "Top Volume ID", "fmp.topVolumeId",
2166 FT_UINT32
, BASE_HEX
, NULL
, 0,
2170 { "number of volumes", "fmp.cursor",
2171 FT_UINT32
, BASE_DEC
, NULL
, 0,
2175 { "offset", "fmp.offset64",
2176 FT_UINT64
, BASE_DEC
, NULL
, 0,
2179 { &hf_fmp_slice_size
,
2180 { "size of the slice", "fmp.slice_size",
2181 FT_UINT64
, BASE_DEC
, NULL
, 0,
2185 { "Volume ID's", "fmp.volume",
2186 FT_UINT32
, BASE_HEX
, NULL
, 0,
2189 { &hf_fmp_stripeSize
,
2190 { "size of the stripe", "fmp.stripeSize",
2191 FT_UINT64
, BASE_DEC
, NULL
, 0,
2194 { &hf_fmp_firstLogBlk64
,
2195 { "First Logical Block", "fmp.firstLogBlk64",
2196 FT_UINT64
, BASE_DEC
, NULL
, 0,
2199 { &hf_fmp_native_protocol
,
2200 { "Native Protocol", "fmp.native_protocol",
2201 FT_UINT32
, BASE_DEC
, VALS(fmp_native_protocol_vals
), 0,
2204 { &hf_fmp_encoding_mode
,
2205 { "Encoding Mode", "fmp.encoding_mode",
2206 FT_UINT32
, BASE_DEC
, VALS(fmp_encoding_mode_vals
), 0,
2209 { &hf_fmp_capability
,
2210 { "Volume Mgmt Capability", "fmp.capability",
2211 FT_UINT32
, BASE_DEC
, VALS(fmp_volume_mgmt_capability_vals
), 0,
2214 { &hf_fmp_devSerial_query_cmd
,
2215 { "Query Command", "fmp.devSerial.query_cmd",
2216 FT_UINT32
, BASE_DEC
, VALS(fmp_query_cmd_vals
), 0,
2219 { &hf_fmp_volume_desc
,
2220 { "VOLUME", "fmp.volume_desc",
2221 FT_UINT32
, BASE_DEC
, VALS(fmp_volume_desc_vals
), 0,
2224 { &hf_fmp_disk_identifier
,
2225 { "DISK IDENTIFIER", "fmp.disk_identifier",
2226 FT_UINT32
, BASE_DEC
, VALS(fmp_disk_identifier_vals
), 0,
2229 { &hf_fmp_volume_mgmt_type
,
2230 { "Volume Mgmt Type", "fmp.volume_mgmt_type",
2231 FT_UINT32
, BASE_DEC
, VALS(fmp_volume_mgmt_type_vals
), 0,
2234 { &hf_fmp_notify_protocol
,
2235 { "Protocol", "fmp.notify_protocol",
2236 FT_UINT32
, BASE_DEC
, VALS(fmp_notify_protocol_vals
), 0,
2239 { &hf_fmp_client_error_number
,
2240 { "CLIENT Error Number", "fmp.client_error_number",
2241 FT_UINT32
, BASE_DEC
, VALS(fmp_client_error_number_vals
), 0,
2244 /* Generated from convert_proto_tree_add_text.pl */
2245 { &hf_fmp_fid
, { "fid", "fmp.fid", FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2246 { &hf_fmp_tid
, { "tid", "fmp.tid", FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2247 { &hf_fmp_uid
, { "uid", "fmp.uid", FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2248 { &hf_fmp_fsid
, { "FsID", "fmp.fsid", FT_INT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2249 { &hf_fmp_cifsport
, { "cifsPort", "fmp.cifsport", FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2250 { &hf_fmp_number_of_disk
, { "Number of Disk", "fmp.number_of_disk", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2251 { &hf_fmp_length_of_list
, { "Length of List", "fmp.length_of_list", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2252 { &hf_fmp_sigoffset
, { "sigOffset", "fmp.sigoffset", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
}},
2253 { &hf_fmp_length_of_volume_list
, { "Length of volume List", "fmp.length_of_volume_list", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2254 { &hf_fmp_blockindex
, { "blockIndex", "fmp.blockindex", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
}},
2255 { &hf_fmp_cap_revoke_handle_list
, { "CAP_REVOKE_HANDLE_LIST", "fmp.cap_revoke_handle_list", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), FMP_CAP_REVOKE_HANDLE_LIST
, NULL
, HFILL
}},
2256 { &hf_fmp_cap_unc_names
, { "CAP_UNC_NAMES", "fmp.cap_unc_names", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), FMP_CAP_UNC_NAMES
, NULL
, HFILL
}},
2257 { &hf_fmp_cap_cifsv2
, { "CAP_CIFSV2", "fmp.cap_cifsv2", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), FMP_CAP_CIFSV2
, NULL
, HFILL
}},
2260 static gint
*ett
[] = {
2265 &ett_fmp_fileHandle
,
2267 &ett_HierVolumeDescription
,
2271 module_t
*fmp_module
;
2272 proto_fmp
= proto_register_protocol("File Mapping Protocol", "FMP", "fmp");
2274 proto_register_field_array(proto_fmp
, hf
, array_length(hf
));
2275 proto_register_subtree_array(ett
, array_length(ett
));
2277 fmp_module
=prefs_register_protocol(proto_fmp
, NULL
);
2279 prefs_register_bool_preference(fmp_module
, "fhandle_find_both_reqrep",
2280 "Fhandle filters finds both request/response",
2281 "With this option display filters for fmp fhandle a RPC call,"
2282 " even if the actual fhandle is only present in one of the packets",
2283 &fmp_fhandle_reqrep_matching
);
2288 proto_reg_handoff_fmp(void)
2290 /* Register the protocol as RPC */
2291 rpc_init_prog(proto_fmp
, FMP_PROGRAM
, ett_fmp
);
2293 /* Register the procedure tables */
2294 rpc_init_proc_table(FMP_PROGRAM
, FMP_VERSION_3
, fmp3_proc
, hf_fmp_procedure
);