2 * Routines for fmp dissection
4 * Wireshark - Network traffic analyzer
5 * By Gerald Combs <gerald@wireshark.org>
6 * Copyright 1998 Gerald Combs
8 * SPDX-License-Identifier: GPL-2.0-or-later
13 #include <epan/packet.h>
14 #include <epan/prefs.h>
16 #include "packet-fmp.h"
17 #include "packet-rpc.h"
19 void proto_register_fmp(void);
20 void proto_reg_handoff_fmp(void);
22 static int hf_fmp_procedure
;
23 static int hf_fmp_fsID
;
24 static int hf_fmp_fsBlkSz
;
25 static int hf_fmp_sessionHandle
;
26 static int hf_fmp_fmpFHandle
;
27 static int hf_fmp_msgNum
;
28 static int hf_fmp_fileSize
;
29 static int hf_fmp_cookie
;
30 static int hf_fmp_firstLogBlk
;
31 static int hf_fmp_numBlksReq
;
34 static int hf_fmp_hostID
;
35 static int hf_fmp_status
;
36 static int hf_fmp_btime
;
37 static int hf_fmp_time_sec
;
38 static int hf_fmp_time_nsec
;
39 static int hf_fmp_notifyPort
;
40 static int hf_fmp_minBlks
;
41 static int hf_fmp_eof
;
42 static int hf_fmp_path
;
43 static int hf_fmp_plugInID
;
44 static int hf_fmp_plugInBuf
;
45 static int hf_fmp_nfsFHandle
;
46 static int hf_fmp_extentList_len
;
47 static int hf_fmp_extent_state
;
48 static int hf_fmp_numBlks
;
49 static int hf_fmp_volID
;
50 static int hf_fmp_startOffset
;
51 static int hf_fmp_volHandle
;
52 static int hf_fmp_devSignature
;
53 static int hf_fmp_dskSigEnt_val
;
54 static int hf_fmp_mount_path
;
55 static int hf_fmp_sig_offset
;
56 static int hf_fmp_os_major
;
57 static int hf_fmp_os_minor
;
58 static int hf_fmp_os_name
;
59 static int hf_fmp_os_patch
;
60 static int hf_fmp_os_build
;
61 static int hf_fmp_server_version_string
;
62 static int hf_fmp_description
;
63 static int hf_fmp_nfsv3Attr_type
;
64 static int hf_fmp_nfsv3Attr_mode
;
65 static int hf_fmp_nfsv3Attr_nlink
;
66 static int hf_fmp_nfsv3Attr_uid
;
67 static int hf_fmp_nfsv3Attr_gid
;
68 static int hf_fmp_nfsv3Attr_used
;
69 static int hf_fmp_nfsv3Attr_rdev
;
70 static int hf_fmp_nfsv3Attr_fsid
;
71 static int hf_fmp_nfsv3Attr_fileid
;
72 static int hf_fmp_cmd
;
73 static int hf_fmp_topVolumeId
;
74 static int hf_fmp_cursor
;
75 static int hf_fmp_offset64
;
76 static int hf_fmp_start_offset64
;
77 static int hf_fmp_slice_size
;
78 static int hf_fmp_volume
;
79 static int hf_fmp_stripeSize
;
80 static int hf_fmp_firstLogBlk64
;
81 static int hf_fmp_native_protocol
;
82 static int hf_fmp_encoding_mode
;
83 static int hf_fmp_capability
;
84 static int hf_fmp_devSerial_query_cmd
;
85 static int hf_fmp_volume_desc
;
86 static int hf_fmp_disk_identifier
;
87 static int hf_fmp_volume_mgmt_type
;
88 static int hf_fmp_notify_protocol
;
89 static int hf_fmp_client_error_number
;
90 /* Generated from convert_proto_tree_add_text.pl */
91 static int hf_fmp_cap
;
92 static int hf_fmp_cap_revoke_handle_list
;
93 static int hf_fmp_length_of_volume_list
;
94 static int hf_fmp_cap_unc_names
;
95 static int hf_fmp_length_of_list
;
96 static int hf_fmp_sigoffset
;
97 static int hf_fmp_uid
;
98 static int hf_fmp_fid
;
99 static int hf_fmp_fsid
;
100 static int hf_fmp_tid
;
101 static int hf_fmp_cifsport
;
102 static int hf_fmp_blockindex
;
103 static int hf_fmp_number_of_disk
;
104 static int hf_fmp_cap_cifsv2
;
105 static int hf_fmp_mtime
;
106 static int hf_fmp_atime
;
107 static int hf_fmp_ctime
;
108 static int hf_fmp_heartbeat_interval
;
109 static int hf_fmp_volindex
;
112 static int ett_fmp_timeval
;
113 static int ett_fmp_extList
;
114 static int ett_fmp_ext
;
115 static int ett_fmp_fileHandle
;
116 static int ett_capabilities
;
117 static int ett_HierVolumeDescription
;
118 static int ett_attrs
;
120 static const value_string fmp_encoding_mode_vals
[] = {
121 {FMP_ASCII
, "ASCII"},
123 {FMP_UNICODE1
, "UNICODE"},
127 static bool fmp_fhandle_reqrep_matching
;
130 dissect_fmp_genString(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
132 proto_tree_add_item(tree
, hf_fmp_encoding_mode
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
135 if (try_val_to_str(tvb_get_ntohl(tvb
, offset
), fmp_encoding_mode_vals
) == NULL
)
138 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_path
,
145 get_fileHandleSrc_size(tvbuff_t
*tvb
, int offset
)
150 np
= (nativeProtocol
)tvb_get_ntohl(tvb
, offset
);
154 length
= 4 + FMP_MAX_PATH_LEN
;
157 length
= 8 + tvb_get_ntohl(tvb
, offset
+ 4);
163 length
= 8 + tvb_get_ntohl(tvb
, offset
+ 4);
171 length
= 8 + FMP_MAX_PATH_LEN
;
182 dissect_fmp_fileHandleSrc(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
187 proto_tree
*fileHandleTree
;
190 length
= get_fileHandleSrc_size(tvb
, offset
);
192 fileHandleTree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
,
193 ett_fmp_fileHandle
, NULL
, "Source File Handle");
195 np
= (nativeProtocol
)tvb_get_ntohl(tvb
, offset
);
196 proto_tree_add_item(fileHandleTree
, hf_fmp_native_protocol
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
201 offset
= dissect_rpc_string(tvb
, fileHandleTree
,
202 hf_fmp_mount_path
, offset
, NULL
);
206 offset
= dissect_rpc_data(tvb
, fileHandleTree
,
207 hf_fmp_nfsFHandle
, offset
);
211 proto_tree_add_item(fileHandleTree
, hf_fmp_fid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
214 proto_tree_add_item(fileHandleTree
, hf_fmp_tid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
217 proto_tree_add_item(fileHandleTree
, hf_fmp_uid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
222 offset
= dissect_rpc_string(tvb
, fileHandleTree
,
223 hf_fmp_fmpFHandle
, offset
, NULL
);
227 proto_tree_add_item(fileHandleTree
, hf_fmp_fsid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
232 offset
= dissect_fmp_genString(tvb
, offset
, fileHandleTree
);
236 offset
= dissect_fmp_genString(tvb
, offset
, fileHandleTree
);
240 proto_tree_add_item(fileHandleTree
, hf_fmp_fid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
243 proto_tree_add_item(fileHandleTree
, hf_fmp_tid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
246 proto_tree_add_item(fileHandleTree
, hf_fmp_uid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
249 proto_tree_add_item(fileHandleTree
, hf_fmp_cifsport
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
253 offset
= dissect_fmp_genString(tvb
, offset
, fileHandleTree
);
264 dissect_fmp_extentState(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
266 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_extent_state
,
273 dissect_fmp_extent(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
, proto_tree
*tree
, uint32_t ext_num
)
277 extTree
= proto_tree_add_subtree_format(tree
, tvb
, offset
, 20 ,
278 ett_fmp_ext
, NULL
, "Extent (%u)", (uint32_t) ext_num
);
280 offset
= dissect_rpc_uint32(tvb
, extTree
, hf_fmp_firstLogBlk
,
282 offset
= dissect_rpc_uint32(tvb
, extTree
, hf_fmp_numBlks
,
284 offset
= dissect_rpc_uint32(tvb
, extTree
, hf_fmp_volID
, offset
);
285 offset
= dissect_rpc_uint32(tvb
, extTree
, hf_fmp_startOffset
,
287 offset
= dissect_fmp_extentState(tvb
, offset
, extTree
);
293 dissect_fmp_extentList(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
297 uint32_t totalLength
;
298 proto_tree
*extListTree
;
301 numExtents
= tvb_get_ntohl(tvb
, offset
);
302 totalLength
= 4 + (20 * numExtents
);
304 extListTree
= proto_tree_add_subtree(tree
, tvb
, offset
, totalLength
,
305 ett_fmp_extList
, NULL
, "Extent List");
307 offset
= dissect_rpc_uint32(tvb
, extListTree
,
308 hf_fmp_extentList_len
, offset
);
310 for (i
= 0; i
< numExtents
; i
++) {
311 offset
= dissect_fmp_extent(tvb
, offset
, pinfo
, extListTree
, i
+1);
319 dissect_fmp_extentListEx(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
323 proto_tree
*extListTree
;
326 numExtents
= tvb_get_ntohl(tvb
, offset
);
330 for (i
= 0; i
< numExtents
; i
++) {
331 extListTree
= proto_tree_add_subtree(tree
, tvb
, offset
, 28,
332 ett_fmp_extList
, NULL
, "Extent List");
334 offset
= dissect_rpc_uint64(tvb
,extListTree
, hf_fmp_firstLogBlk64
, offset
);
336 offset
= dissect_rpc_uint32(tvb
,extListTree
, hf_fmp_numBlksReq
,
339 offset
= dissect_rpc_uint32(tvb
,extListTree
, hf_fmp_volID
, offset
);
341 offset
= dissect_rpc_uint64(tvb
,extListTree
, hf_fmp_start_offset64
, offset
);
343 offset
= dissect_fmp_extentState(tvb
, offset
, extListTree
);
352 dissect_plugInID(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
358 proto_tree_add_item(tree
, hf_fmp_plugInID
, tvb
, offset
, FMP_PLUG_IN_ID_SZ
,
364 dissect_fmp_flushCmd(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
367 char msg
[MAX_MSG_SIZE
];
372 cmd
= tvb_get_ntohl(tvb
, offset
);
374 /* Initialize the message for an empty string */
377 for (i
= 0; cmd
!= 0 && i
< 32; i
++) {
381 if (cmd
& bitValue
) {
383 case FMP_COMMIT_SPECIFIED
:
384 (void) g_strlcat(msg
, "COMMIT_SPECIFIED", MAX_MSG_SIZE
);
386 case FMP_RELEASE_SPECIFIED
:
387 (void) g_strlcat(msg
, "RELEASE_SPECIFIED", MAX_MSG_SIZE
);
389 case FMP_RELEASE_ALL
:
390 (void) g_strlcat(msg
, "RELEASE_ALL", MAX_MSG_SIZE
);
393 (void) g_strlcat(msg
, "CLOSE_FILE", MAX_MSG_SIZE
);
395 case FMP_UPDATE_TIME
:
396 (void) g_strlcat(msg
, "UPDATE_TIME", MAX_MSG_SIZE
);
398 case FMP_ACCESS_TIME
:
399 (void) g_strlcat(msg
, "ACCESS_TIME", MAX_MSG_SIZE
);
402 (void) g_strlcat(msg
, "UNKNOWN", MAX_MSG_SIZE
);
406 /* clear the bit that we processed */
409 /* add a "bitwise inclusive OR" symbol between cmds */
411 (void) g_strlcat(msg
, " | ", MAX_MSG_SIZE
);
416 if (strlen(msg
) == 0) {
417 (void) g_strlcpy(msg
, "No command specified", MAX_MSG_SIZE
);
420 proto_tree_add_uint_format_value(tree
, hf_fmp_cmd
, tvb
, offset
, 4, cmd
, "%s", msg
);
427 dissect_InterpretVolMgtStuff(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
429 int length
, numdisks
, i
, j
;
431 numdisks
= tvb_get_ntohl(tvb
, offset
);
432 proto_tree_add_item(tree
, hf_fmp_number_of_disk
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
435 for (i
=0; i
<numdisks
; i
++) {
436 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_sig_offset
, offset
);
437 length
= tvb_get_ntohl(tvb
, offset
);
438 proto_tree_add_item(tree
, hf_fmp_length_of_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
441 for (j
=0; j
<length
; j
++) {
442 proto_tree_add_item(tree
, hf_fmp_sigoffset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
444 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_dskSigEnt_val
,
448 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_volID
, offset
);
457 dissect_fmp_capability(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
459 proto_tree_add_item(tree
, hf_fmp_capability
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
464 dissect_fmp_timeval(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
465 proto_tree
*tree
, int hf_time
, int hf_time_sec
,
471 proto_item
* time_item
;
472 proto_tree
* time_tree
;
474 ts
.secs
= tvb_get_ntohl(tvb
, offset
+0);
475 ts
.nsecs
= tvb_get_ntohl(tvb
, offset
+4);
477 time_item
= proto_tree_add_time(tree
, hf_time
, tvb
, offset
, 8, &ts
);
478 time_tree
= proto_item_add_subtree(time_item
, ett_fmp_timeval
);
480 proto_tree_add_uint(time_tree
, hf_time_sec
, tvb
, offset
, 4,
482 proto_tree_add_uint(time_tree
, hf_time_nsec
, tvb
, offset
+4, 4,
490 dissect_fmp_heartBeatIntv(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
493 proto_tree_add_item(tree
, hf_fmp_heartbeat_interval
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
499 dissect_fmp_status(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, int *rval
)
503 status
= (fmpStat
)tvb_get_ntohl(tvb
, offset
);
526 case FMP_NOTIFY_ERROR
:
527 case FMP_WRITER_LOST_BLK
:
528 case FMP_WRONG_MSG_NUM
:
529 case FMP_SESSION_LOST
:
530 case FMP_REQUEST_CANCELLED
:
533 case FMP_HOT_SESSION
:
536 case FMP_COLD_SESSION
:
539 case FMP_CLIENT_TERMINATED
:
542 case FMP_REQUEST_QUEUED
:
548 case FMP_WRITER_ZEROED_BLK
:
551 case FMP_WRONG_HANDLE
:
554 case FMP_DUPLICATE_OPEN
:
557 case FMP_PLUGIN_NOFUNC
:
564 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_status
, offset
);
569 dissect_fmp_devSerial(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo _U_
,
572 proto_tree_add_item(tree
, hf_fmp_devSerial_query_cmd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
575 proto_tree_add_item(tree
, hf_fmp_sigoffset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
578 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_devSignature
,
584 dissect_fmp_VolumeDescription(tvbuff_t
*tvb
, int offset
, proto_tree
* tree
)
589 fmpVolumeType volumeType
;
590 fmpDiskIdentifierType diskIdentifierType
;
592 volumeType
= (fmpVolumeType
)tvb_get_ntohl(tvb
, offset
);
593 ti
= proto_tree_add_item(tree
, hf_fmp_volume_desc
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
594 Hietree
= proto_item_add_subtree(ti
, ett_HierVolumeDescription
);
597 switch (volumeType
) {
599 case FMP_VOLUME_DISK
:
600 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volID
, offset
);
601 offset
+= 8; /* blockIndex64 */
602 diskIdentifierType
= (fmpDiskIdentifierType
)tvb_get_ntohl(tvb
, offset
);
603 proto_tree_add_item(Hietree
, hf_fmp_disk_identifier
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
606 switch (diskIdentifierType
) {
607 case FMP_DISK_IDENTIFIER_SIGNATURE
:
608 offset
= dissect_rpc_uint64(tvb
, Hietree
, hf_fmp_sig_offset
, offset
);
609 length
= tvb_get_ntohl(tvb
, offset
);
610 proto_tree_add_item(Hietree
, hf_fmp_length_of_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
613 for (i
=0; i
<length
; i
++) {
614 proto_tree_add_item(Hietree
, hf_fmp_sigoffset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
616 offset
= dissect_rpc_string(tvb
, Hietree
, hf_fmp_dskSigEnt_val
, offset
, NULL
);
622 case FMP_DISK_IDENTIFIER_SERIAL
:
623 dissect_fmp_devSerial(tvb
, offset
, NULL
, Hietree
);
628 case FMP_VOLUME_SLICE
:
629 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volID
, offset
);
631 offset
= dissect_rpc_uint64(tvb
, Hietree
, hf_fmp_offset64
, offset
);
633 offset
= dissect_rpc_uint64(tvb
, Hietree
, hf_fmp_slice_size
, offset
);
635 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volume
, offset
);
639 case FMP_VOLUME_STRIPE
:
640 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volID
, offset
);
642 offset
= dissect_rpc_uint64(tvb
, Hietree
, hf_fmp_stripeSize
, offset
);
643 length
= tvb_get_ntohl(tvb
, offset
);
644 proto_tree_add_item(Hietree
, hf_fmp_length_of_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
647 for (i
=0; i
<length
; i
++) {
648 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volume
, offset
); /* FIXME: Size or length not know */
653 case FMP_VOLUME_META
:
654 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volID
, offset
);
656 length
= tvb_get_ntohl(tvb
, offset
);
657 proto_tree_add_item(Hietree
, hf_fmp_length_of_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
659 for (i
=0; i
<length
; i
++) {
660 offset
= dissect_rpc_uint32(tvb
, Hietree
, hf_fmp_volume
, offset
); /* FIXME: Size or length not know */
671 dissect_fmp_Hiervolume(tvbuff_t
*tvb
, int offset
, proto_tree
* tree
)
676 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_topVolumeId
, offset
);
677 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cursor
, offset
);
678 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
, offset
);
680 /* hierarchical description of volume. Each volume describes a
681 piece of the entire hierarchy and is guaranteed to only refer to
682 volumes that have already been described by the data structure up
683 to this point in time. In some extreme cases, the number of
684 volumes and their descriptions may be to large to fit in a single
685 RPC reply. In this case, the application may send getVolumeInfo
686 requests for the specific topVolumeId -- specifying the number of
687 volumes already received by the client, and the cookie. The
688 server is then responsible for sending another message containing
689 additional volumes. These RPCs exchanges may continue multiple
690 times, until the client has fetched the entire hierarchical
691 volume description. If the volume hierarchy changes duing a
692 multiple RPC sequence, the server will return an
693 FMP_VOLUME_CHANGED error, and the client must discard all
694 information already received and restart the request with
698 vollength
= tvb_get_ntohl(tvb
, offset
);
699 proto_tree_add_item(tree
, hf_fmp_length_of_volume_list
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
702 offset
= dissect_fmp_VolumeDescription(tvb
, offset
, tree
);
713 dissect_fmp_vmInfo(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
,
717 uint32_t phyVolList_len
;
719 vmType
= tvb_get_ntohl(tvb
, offset
);
720 proto_tree_add_item(tree
, hf_fmp_volume_mgmt_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
723 case FMP_SERVER_BASED
:
727 phyVolList_len
= tvb_get_ntohl(tvb
, offset
);
731 * Loop through and print all of the devInfo
734 while (phyVolList_len
) {
735 offset
= dissect_fmp_devSerial(tvb
, offset
, pinfo
, tree
);
736 proto_tree_add_item(tree
, hf_fmp_volindex
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
742 case FMP_THIRD_PARTY
:
743 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_volHandle
,
747 case FMP_CLIENT_BASED_DART
:
748 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_volHandle
,
752 case FMP_CLIENT_BASED_SIMPLE
:
754 * Decoding simpleVolInfo
756 offset
= dissect_fmp_devSerial(tvb
, offset
, pinfo
, tree
);
758 proto_tree_add_item(tree
, hf_fmp_blockindex
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
762 case FMP_DISK_SIGNATURE
:
763 offset
= dissect_InterpretVolMgtStuff(tvb
, offset
, tree
);
766 case FMP_HIERARCHICAL_VOLUME
:
767 dissect_fmp_Hiervolume(tvb
, offset
, tree
);
778 dissect_fmp_notifyProtocol(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
780 proto_tree_add_item(tree
, hf_fmp_notify_protocol
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
786 dissect_fmp_capabilities(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
788 static int * const capabilities
[] = {
789 &hf_fmp_cap_revoke_handle_list
,
790 &hf_fmp_cap_unc_names
,
795 proto_tree_add_bitmask_with_flags(tree
, tvb
, offset
, hf_fmp_cap
, ett_capabilities
,
796 capabilities
, ENC_BIG_ENDIAN
, BMT_NO_APPEND
);
801 dissect_fmp_cerrInfo(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
805 proto_tree_add_item(tree
, hf_fmp_client_error_number
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
808 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
814 dissect_fmp_attrs(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
)
816 proto_tree
*attrsTree
;
818 attrsTree
= proto_tree_add_subtree(tree
, tvb
, offset
, 84,
819 ett_attrs
, NULL
, "Attribute: ");
820 offset
= dissect_rpc_uint32(tvb
, attrsTree
, hf_fmp_nfsv3Attr_type
, offset
);
821 offset
= dissect_rpc_uint32(tvb
, attrsTree
, hf_fmp_nfsv3Attr_mode
, offset
);
822 offset
= dissect_rpc_uint32(tvb
, attrsTree
, hf_fmp_nfsv3Attr_nlink
, offset
);
823 offset
= dissect_rpc_uint32(tvb
, attrsTree
, hf_fmp_nfsv3Attr_uid
, offset
);
824 offset
= dissect_rpc_uint32(tvb
, attrsTree
, hf_fmp_nfsv3Attr_gid
, offset
);
825 offset
= dissect_rpc_uint64(tvb
, attrsTree
, hf_fmp_fileSize
, offset
);
826 /* Here hf_fmp_fileSize is used in
829 offset
= dissect_rpc_uint64(tvb
, attrsTree
, hf_fmp_nfsv3Attr_used
, offset
);
830 offset
= dissect_rpc_uint64(tvb
, attrsTree
, hf_fmp_nfsv3Attr_rdev
, offset
);
831 offset
= dissect_rpc_uint64(tvb
, attrsTree
, hf_fmp_nfsv3Attr_fsid
, offset
);
832 offset
= dissect_rpc_uint64(tvb
, attrsTree
, hf_fmp_nfsv3Attr_fileid
, offset
);
833 proto_tree_add_item(tree
, hf_fmp_atime
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
835 proto_tree_add_item(tree
, hf_fmp_mtime
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
837 proto_tree_add_item(tree
, hf_fmp_ctime
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
845 dissect_FMP_SessionCreate_request(tvbuff_t
*tvb
, packet_info
*pinfo
,
846 proto_tree
*tree
, void* data _U_
)
849 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_hostID
,
851 offset
= dissect_fmp_timeval(tvb
, offset
, pinfo
, tree
, hf_fmp_btime
,
852 hf_fmp_time_sec
, hf_fmp_time_nsec
);
853 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_notifyPort
,
859 dissect_FMP_SessionCreate_reply(tvbuff_t
*tvb
, packet_info
*pinfo
,
860 proto_tree
*tree
, void* data _U_
)
865 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
867 offset
= dissect_rpc_data(tvb
, tree
,
868 hf_fmp_sessionHandle
, offset
);
869 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_hostID
,
871 offset
= dissect_fmp_timeval(tvb
, offset
, pinfo
, tree
,
872 hf_fmp_btime
, hf_fmp_time_sec
,
874 offset
= dissect_fmp_heartBeatIntv(tvb
, offset
, pinfo
, tree
);
881 dissect_FMP_HeartBeat_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
882 proto_tree
*tree
, void* data _U_
)
884 return dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
, 0);
888 dissect_FMP_HeartBeat_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
889 proto_tree
*tree
, void* data _U_
)
893 return dissect_fmp_status(tvb
, 0, tree
, &rval
);
897 dissect_FMP_Mount_request(tvbuff_t
*tvb
, packet_info
*pinfo
,
898 proto_tree
*tree
, void* data _U_
)
901 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
903 offset
= dissect_fmp_capability(tvb
, offset
, tree
);
904 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
909 dissect_FMP_Mount_reply(tvbuff_t
*tvb
, packet_info
*pinfo
,
910 proto_tree
*tree
, void* data _U_
)
915 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
917 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
919 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsBlkSz
,
921 offset
= dissect_fmp_vmInfo(tvb
, offset
, pinfo
, tree
);
928 dissect_FMP_Open_request(tvbuff_t
*tvb
, packet_info
*pinfo
,
929 proto_tree
*tree
, void* data _U_
)
932 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
934 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
939 dissect_FMP_Open_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
940 proto_tree
*tree
, void* data _U_
)
945 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
947 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
,
949 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
951 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
954 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
961 dissect_FMP_Close_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
962 proto_tree
*tree
, void* data _U_
)
966 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
967 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
972 dissect_FMP_Close_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
973 proto_tree
*tree
, void* data _U_
)
978 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
980 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
988 dissect_FMP_OpenGetMap_request(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
991 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
994 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
995 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_firstLogBlk
,
997 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
999 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1004 dissect_FMP_OpenGetMap_reply(tvbuff_t
*tvb
, packet_info
*pinfo
,
1005 proto_tree
*tree
, void* data _U_
)
1010 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1012 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
,
1014 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1016 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1018 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1020 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
1022 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1029 dissect_FMP_OpenAllocSpace_request(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1032 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
, offset
);
1033 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1034 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_firstLogBlk
, offset
);
1035 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
, offset
);
1036 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1041 dissect_FMP_OpenAllocSpace_reply(tvbuff_t
*tvb
, packet_info
*pinfo
,
1042 proto_tree
*tree
, void* data _U_
)
1047 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1049 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
,
1051 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1053 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1055 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1057 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
1059 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1065 dissect_FMP_GetMap_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
1066 proto_tree
*tree
, void* data _U_
)
1069 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1070 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1071 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_firstLogBlk
,
1073 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1075 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1080 dissect_FMP_GetMap_reply(tvbuff_t
*tvb
, packet_info
*pinfo
,
1081 proto_tree
*tree
, void* data _U_
)
1086 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1088 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1090 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1092 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1094 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1101 dissect_FMP_AllocSpace_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
1102 proto_tree
*tree
, void* data _U_
)
1105 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1106 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1107 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_firstLogBlk
,
1109 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1111 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1116 dissect_FMP_AllocSpace_reply(tvbuff_t
*tvb
, packet_info
*pinfo
,
1117 proto_tree
*tree
, void* data _U_
)
1122 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1124 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1126 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1128 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1130 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1137 dissect_FMP_Flush_request(tvbuff_t
*tvb
, packet_info
*pinfo
,
1138 proto_tree
*tree
, void* data _U_
)
1141 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1142 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1143 offset
= dissect_fmp_flushCmd(tvb
, offset
, tree
);
1144 offset
= dissect_rpc_uint64(tvb
,tree
, hf_fmp_eof
, offset
);
1145 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1150 dissect_FMP_Flush_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
1151 proto_tree
*tree
, void* data _U_
)
1156 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1158 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1165 dissect_FMP_CancelReq_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
1166 proto_tree
*tree
, void* data _U_
)
1169 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1170 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1171 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
, offset
);
1176 dissect_FMP_CancelReq_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
1177 proto_tree
*tree
, void* data _U_
)
1182 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1184 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1191 dissect_FMP_PlugIn_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
1192 proto_tree
*tree
, void* data _U_
)
1195 offset
= dissect_plugInID(tvb
, offset
, tree
);
1196 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_plugInBuf
, offset
);
1201 dissect_FMP_PlugIn_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
1202 proto_tree
*tree
, void* data _U_
)
1207 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1209 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_plugInBuf
,
1216 dissect_FMP_SessionTerminate_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1218 return dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
, 0);
1222 dissect_FMP_SessionTerminate_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1226 return dissect_fmp_status(tvb
, 0,tree
, &rval
);
1230 dissect_FMP_SessionCreateEx_request(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1234 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_hostID
,
1236 offset
= dissect_fmp_timeval(tvb
, offset
, pinfo
,tree
, hf_fmp_btime
,
1237 hf_fmp_time_sec
, hf_fmp_time_nsec
);
1238 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_notifyPort
,
1240 offset
= dissect_fmp_notifyProtocol(tvb
, offset
, tree
);
1242 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_major
,
1244 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_minor
,
1247 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_os_name
,
1250 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_patch
,
1253 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_build
,
1256 offset
= dissect_fmp_capabilities(tvb
, offset
, tree
);
1263 dissect_FMP_SessionCreateEx_reply(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1268 offset
= dissect_fmp_status(tvb
, offset
, tree
, &rval
);
1270 offset
= dissect_rpc_data(tvb
, tree
,
1271 hf_fmp_sessionHandle
, offset
);
1272 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_hostID
,
1274 offset
= dissect_fmp_timeval(tvb
, offset
, pinfo
,tree
,
1275 hf_fmp_btime
, hf_fmp_time_sec
,
1277 offset
= dissect_fmp_heartBeatIntv(tvb
, offset
, pinfo
, tree
);
1279 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_major
,
1282 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_minor
,
1285 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_server_version_string
,
1288 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_patch
,
1291 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_os_build
,
1294 offset
= dissect_fmp_capabilities(tvb
, offset
, tree
);
1302 dissect_FMP_ReportClientError_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1305 offset
= dissect_rpc_string(tvb
, tree
, hf_fmp_description
,
1308 offset
= dissect_fmp_cerrInfo(tvb
, offset
, tree
);
1313 dissect_FMP_ReportClientError_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1317 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1323 dissect_FMP_GetAttr_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1326 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1328 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1335 dissect_FMP_GetAttr_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1339 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1341 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1343 offset
= dissect_fmp_attrs(tvb
, offset
, tree
);
1350 dissect_FMP_OpenGetAttr_request(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1354 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
1357 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1364 dissect_FMP_OpenGetAttr_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1369 offset
= dissect_fmp_status(tvb
, offset
, tree
, &rval
);
1372 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1373 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1374 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
, offset
);
1375 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
, offset
);
1376 offset
= dissect_fmp_attrs(tvb
, offset
, tree
);
1385 dissect_FMP_FlushGetAttr_request(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1389 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1390 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1391 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cmd
, offset
);
1392 offset
= dissect_rpc_uint64(tvb
,tree
, hf_fmp_eof
, offset
);
1394 proto_tree_add_item(tree
, hf_fmp_mtime
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
1396 offset
= dissect_fmp_extentList(tvb
, offset
, pinfo
, tree
);
1403 dissect_FMP_FlushGetAttr_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1408 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1410 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1412 offset
= dissect_fmp_attrs(tvb
, offset
, tree
);
1420 dissect_FMP_GetVolumeInfo_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1423 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_topVolumeId
, offset
);
1424 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cursor
, offset
);
1425 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
, offset
);
1432 dissect_FMP_GetVolumeInfo_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
1437 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1439 /* FIXME: I don't know size of this volumes */
1440 offset
= dissect_fmp_Hiervolume(tvb
,offset
, tree
);
1447 dissect_FMP_OpenGetMapEx_request(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1450 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
1452 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1453 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_firstLogBlk64
, offset
);
1454 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1456 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1462 dissect_FMP_OpenGetMapEx_reply(tvbuff_t
*tvb
, packet_info
*pinfo
,
1463 proto_tree
*tree
, void* data _U_
)
1467 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1469 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
,
1471 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1473 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1475 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1477 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
1479 offset
= dissect_fmp_extentListEx(tvb
, offset
, pinfo
, tree
);
1487 dissect_FMP_OpenAllocSpaceEx_request(tvbuff_t
*tvb
,
1488 packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
1491 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_sessionHandle
,
1493 offset
= dissect_fmp_fileHandleSrc(tvb
, offset
, pinfo
, tree
);
1494 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_firstLogBlk64
, offset
);
1495 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1497 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1503 dissect_FMP_OpenAllocSpaceEx_reply(tvbuff_t
*tvb
, packet_info
*pinfo
,
1504 proto_tree
*tree
, void* data _U_
)
1509 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1511 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
,
1513 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1515 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1517 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1519 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_fsID
,
1521 offset
= dissect_fmp_extentListEx(tvb
, offset
, pinfo
, tree
);
1527 dissect_FMP_GetMapEx_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
1528 proto_tree
*tree
, void* data _U_
)
1531 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1532 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1533 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_firstLogBlk64
, offset
);
1534 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1536 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1542 dissect_FMP_GetMapEx_reply(tvbuff_t
*tvb
, packet_info
*pinfo
,
1543 proto_tree
*tree
, void* data _U_
)
1548 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1550 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1552 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1554 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1556 offset
= dissect_fmp_extentListEx(tvb
, offset
, pinfo
, tree
);
1564 dissect_FMP_AllocSpaceEx_request(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
1565 proto_tree
*tree
, void* data _U_
)
1568 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1569 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1570 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_firstLogBlk64
, offset
);
1571 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_numBlksReq
,
1573 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_minBlks
, offset
);
1579 dissect_FMP_AllocSpaceEx_reply(tvbuff_t
*tvb
, packet_info
*pinfo
,
1580 proto_tree
*tree
, void* data _U_
)
1585 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1587 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1589 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_cookie
,
1591 offset
= dissect_rpc_uint64(tvb
, tree
, hf_fmp_fileSize
,
1593 offset
= dissect_fmp_extentListEx(tvb
, offset
, pinfo
, tree
);
1600 dissect_FMP_FlushEx_request(tvbuff_t
*tvb
, packet_info
*pinfo
,
1601 proto_tree
*tree
, void* data _U_
)
1604 offset
= dissect_rpc_data(tvb
, tree
, hf_fmp_fmpFHandle
, offset
);
1605 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
, offset
);
1606 offset
= dissect_fmp_flushCmd(tvb
, offset
, tree
);
1607 offset
= dissect_rpc_uint64(tvb
,tree
, hf_fmp_eof
, offset
);
1608 offset
= dissect_fmp_extentListEx(tvb
, offset
, pinfo
, tree
);
1613 dissect_FMP_FlushEx_reply(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
1614 proto_tree
*tree
, void* data _U_
)
1619 offset
= dissect_fmp_status(tvb
, offset
,tree
, &rval
);
1621 offset
= dissect_rpc_uint32(tvb
, tree
, hf_fmp_msgNum
,
1627 * proc number, "proc name", dissect_request, dissect_reply
1629 static const vsff fmp3_proc
[] = {
1633 dissect_rpc_void
, },
1637 dissect_FMP_SessionCreate_request
,
1638 dissect_FMP_SessionCreate_reply
},
1642 dissect_FMP_HeartBeat_request
,
1643 dissect_FMP_HeartBeat_reply
},
1647 dissect_FMP_Mount_request
,
1648 dissect_FMP_Mount_reply
},
1652 dissect_FMP_Open_request
,
1653 dissect_FMP_Open_reply
},
1657 dissect_FMP_Close_request
,
1658 dissect_FMP_Close_reply
},
1662 dissect_FMP_OpenGetMap_request
,
1663 dissect_FMP_OpenGetMap_reply
},
1667 dissect_FMP_OpenAllocSpace_request
,
1668 dissect_FMP_OpenAllocSpace_reply
},
1672 dissect_FMP_GetMap_request
,
1673 dissect_FMP_GetMap_reply
},
1677 dissect_FMP_AllocSpace_request
,
1678 dissect_FMP_AllocSpace_reply
},
1682 dissect_FMP_Flush_request
,
1683 dissect_FMP_Flush_reply
},
1687 dissect_FMP_CancelReq_request
,
1688 dissect_FMP_CancelReq_reply
},
1692 dissect_FMP_PlugIn_request
,
1693 dissect_FMP_PlugIn_reply
},
1697 dissect_FMP_SessionTerminate_request
,
1698 dissect_FMP_SessionTerminate_reply
},
1702 dissect_FMP_SessionCreateEx_request
,
1703 dissect_FMP_SessionCreateEx_reply
},
1706 "ReportClientError",
1707 dissect_FMP_ReportClientError_request
,
1708 dissect_FMP_ReportClientError_reply
},
1712 dissect_FMP_GetAttr_request
,
1713 dissect_FMP_GetAttr_reply
},
1716 "Open Get Attribute",
1717 dissect_FMP_OpenGetAttr_request
,
1718 dissect_FMP_OpenGetAttr_reply
},
1721 "Flush Get Attribute",
1722 dissect_FMP_FlushGetAttr_request
,
1723 dissect_FMP_FlushGetAttr_reply
},
1727 dissect_FMP_OpenGetMapEx_request
,
1728 dissect_FMP_OpenGetMapEx_reply
},
1732 dissect_FMP_OpenAllocSpaceEx_request
,
1733 dissect_FMP_OpenAllocSpaceEx_reply
},
1737 dissect_FMP_GetMapEx_request
,
1738 dissect_FMP_GetMapEx_reply
},
1742 dissect_FMP_AllocSpaceEx_request
,
1743 dissect_FMP_AllocSpaceEx_reply
},
1747 dissect_FMP_FlushEx_request
,
1748 dissect_FMP_FlushEx_reply
},
1753 dissect_FMP_FlushGetAttrEx_request
,
1754 dissect_FMP_FlushGetAttrEx_reply
},
1760 dissect_FMP_GetVolumeInfo_request
,
1761 dissect_FMP_GetVolumeInfo_reply
},
1764 {0 , NULL
, NULL
, NULL
}
1769 static const rpc_prog_vers_info fmp_vers_info
[] = {
1770 { FMP_VERSION_3
, fmp3_proc
, &hf_fmp_procedure
}
1774 static const value_string fmp_proc_vals
[] = {
1776 { 1, "SessionCreate" },
1781 { 6, "OpenGetMap" },
1782 { 7, "OpenAllocSpace" },
1784 { 9, "AllocSpace " },
1786 { 11, "CancelReq" },
1788 { 13, "SessionTerminate" },
1789 { 14, "SessionCreateEx" },
1790 { 15, "ReportClientError" },
1792 { 17, "OpenGetAttr" },
1793 { 18, "FlushGetAttr"},
1794 { 19, "OpenGetMapEx"},
1795 { 20, "OpenAllocSpaceEx"},
1797 { 22, "AllocSpaceEx"},
1799 { 24, "FlushGetAttrEx"},
1800 { 25, "GetVolumeInfo"},
1805 static const value_string fmp_status_vals
[] = {
1810 { 22, "INVALIDARG"},
1812 { 79, "QUEUE_FULL"},
1813 {500, "WRONG_MSG_NUM"},
1814 {501, "SESSION_LOST"},
1815 {502, "HOT_SESSION"},
1816 {503, "COLD_SESSION"},
1817 {504, "CLIENT_TERMINATED"},
1818 {505, "WRITER_LOST_BLK"},
1819 {506, "FMP_REQUEST_QUEUED"},
1820 {507, "FMP_FALL_BACK"},
1821 {508, "REQUEST_CANCELLED"},
1822 {509, "WRITER_ZEROED_BLK"},
1823 {510, "NOTIFY_ERROR"},
1824 {511, "FMP_WRONG_HANDLE"},
1825 {512, "DUPLICATE_OPEN"},
1826 {600, "PLUGIN_NOFUNC"},
1831 static const value_string fmp_extentState_vals
[] = {
1838 static const value_string fmp_native_protocol_vals
[] = {
1843 {FMP_FS_ONLY
, "FS_ONLY"},
1844 {FMP_SHARE
, "SHARE"},
1845 {FMP_MOUNT
, "MOUNT"},
1846 {FMP_CIFSV2
, "CIFSV2"},
1851 static const value_string fmp_volume_mgmt_capability_vals
[] = {
1852 {FMP_SERVER_BASED
, "SERVER_BASED"},
1853 {FMP_THIRD_PARTY
, "THIRD_PARTY"},
1854 {FMP_CLIENT_BASED_DART
, "CLIENT_BASED_DART"},
1855 {FMP_CLIENT_BASED_SIMPLE
, "CLIENT_BASED_SIMPLE"},
1856 {FMP_HIERARCHICAL_VOLUME
, "FMP_HIERARCHICAL_VOLUME"},
1860 static const value_string fmp_query_cmd_vals
[] = {
1861 {FMP_SCSI_INQUIRY
, "SCSI_INQUIRY"},
1862 {FMP_DART_STAMP
, "DART_STAMP"},
1866 static const value_string fmp_volume_desc_vals
[] = {
1867 {FMP_VOLUME_DISK
, "DISK"},
1868 {FMP_VOLUME_SLICE
, "SLICE"},
1869 {FMP_VOLUME_STRIPE
, "STRIPE"},
1870 {FMP_VOLUME_META
, "META"},
1871 {FMP_VOLUME_SLICE
, "SLICE"},
1872 {FMP_VOLUME_SLICE
, "SLICE"},
1876 static const value_string fmp_disk_identifier_vals
[] = {
1877 {FMP_DISK_IDENTIFIER_SIGNATURE
, "SIGNATURE"},
1878 {FMP_DISK_IDENTIFIER_SERIAL
, "SERIAL"},
1882 static const value_string fmp_notify_protocol_vals
[] = {
1888 static const value_string fmp_volume_mgmt_type_vals
[] = {
1889 {FMP_SERVER_BASED
, "SERVER_BASED"},
1890 {FMP_THIRD_PARTY
, "THIRD_PARTY"},
1891 {FMP_CLIENT_BASED_DART
, "CLIENT_BASED_DART"},
1892 {FMP_CLIENT_BASED_SIMPLE
, "CLIENT_BASED_SIMPLE"},
1893 {FMP_DISK_SIGNATURE
, "DISK_SIGNATURE"},
1894 {FMP_HIERARCHICAL_VOLUME
, "HIERARCHICAL_VOLUME"},
1898 static const value_string fmp_client_error_number_vals
[] = {
1899 {FMP_CE_GENERIC
, "FMP_CE_GENERIC"},
1900 {FMP_CE_DISK_ERROR
, "FMP_CE_DISK_ERROR"},
1905 proto_register_fmp(void)
1907 static hf_register_info hf
[] = {
1908 { &hf_fmp_procedure
,
1909 { "Procedure", "fmp.procedure",
1910 FT_UINT32
, BASE_DEC
, VALS(fmp_proc_vals
),
1911 0, NULL
, HFILL
}}, /* New addition */
1914 { "Host ID", "fmp.hostID",
1915 FT_STRING
, BASE_NONE
, NULL
, 0,
1919 { "Boot Time", "fmp.btime",
1920 FT_ABSOLUTE_TIME
, ABSOLUTE_TIME_LOCAL
, NULL
, 0,
1921 "Machine Boot Time", HFILL
}},
1924 { "seconds", "fmp.btime.sec",
1925 FT_UINT32
, BASE_DEC
, NULL
, 0,
1928 { &hf_fmp_time_nsec
,
1929 { "nanoseconds", "fmp.btime.nsec",
1930 FT_UINT32
, BASE_DEC
, NULL
, 0,
1933 { &hf_fmp_notifyPort
,
1934 { "Notify Port", "fmp.notifyPort",
1935 FT_UINT32
, BASE_DEC
, NULL
, 0,
1938 { &hf_fmp_sessionHandle
,
1939 { "Session Handle", "fmp.sessHandle",
1940 FT_BYTES
, BASE_NONE
, NULL
, 0,
1943 { &hf_fmp_fmpFHandle
,
1944 { "FMP File Handle", "fmp.fmpFHandle",
1945 FT_BYTES
, BASE_NONE
, NULL
, 0,
1949 { &hf_fmp_nfsFHandle
,
1950 { "NFS File Handle", "fmp.nfsFHandle",
1951 FT_BYTES
, BASE_NONE
, NULL
, 0,
1955 { "File System ID", "fmp.fsID",
1956 FT_UINT32
, BASE_HEX
, NULL
, 0,
1960 { "Status", "fmp.status",
1961 FT_UINT32
, BASE_DEC
, VALS(fmp_status_vals
), 0,
1962 "Reply Status", HFILL
}},
1965 { "File System Block Size", "fmp.fsBlkSz",
1966 FT_UINT32
, BASE_DEC
, NULL
, 0,
1969 { &hf_fmp_volHandle
,
1970 { "Volume Handle", "fmp.volHandle",
1971 FT_STRING
, BASE_NONE
, NULL
, 0,
1974 { &hf_fmp_dskSigEnt_val
,
1975 { "Celerra Signature", "fmp.dsi.ds.dsList.dskSigLst_val.dse.dskSigEnt_val",
1976 FT_STRING
, BASE_NONE
, NULL
, 0,
1979 { &hf_fmp_devSignature
,
1980 { "Signature DATA", "fmp.devSig",
1981 FT_STRING
, BASE_NONE
, NULL
, 0,
1984 { &hf_fmp_mount_path
,
1985 { "Native Protocol: PATH", "fmp.mount_path",
1986 FT_STRING
, BASE_NONE
, NULL
, 0,
1987 "Absolute path from the root on the server side", HFILL
}},
1989 { &hf_fmp_sig_offset
,
1990 { "Sig Offset", "fmp.dsi.ds.sig_offset",
1991 FT_UINT64
, BASE_DEC
, NULL
, 0,
1994 { &hf_fmp_numBlksReq
,
1995 { "Extent Length", "fmp.numBlksReq",
1996 FT_UINT32
, BASE_DEC
, NULL
, 0,
2000 { "Minimum Blocks to Grant", "fmp.minBlks",
2001 FT_UINT32
, BASE_DEC
, NULL
, 0,
2005 { "Message Number", "fmp.msgNum",
2006 FT_UINT32
, BASE_DEC
, NULL
, 0,
2010 { "Cookie", "fmp.cookie",
2011 FT_UINT32
, BASE_HEX
, NULL
, 0,
2012 "Cookie for FMP_REQUEST_QUEUED Resp", HFILL
}},
2015 { "File Size", "fmp.fileSize",
2016 FT_UINT64
, BASE_DEC
, NULL
, 0,
2019 { &hf_fmp_extentList_len
,
2020 { "Extent List Length", "fmp.extentList_len",
2021 FT_UINT32
, BASE_DEC
, NULL
, 0,
2024 { &hf_fmp_extent_state
,
2025 { "Extent State", "fmp.extentState",
2026 FT_UINT32
,BASE_DEC
, VALS(fmp_extentState_vals
), 0,
2029 { &hf_fmp_firstLogBlk
,
2030 { "First Logical File Block", "fmp.firstLogBlk",
2031 FT_UINT32
, BASE_DEC
, NULL
, 0,
2035 { "Number of Blocks", "fmp.numBlks",
2036 FT_UINT32
, BASE_DEC
, NULL
, 0,
2040 { "Volume ID inside DART", "fmp.volID",
2041 FT_UINT32
, BASE_HEX
, NULL
, 0,
2044 { &hf_fmp_startOffset
,
2045 { "Start Offset", "fmp.startOffset",
2046 FT_UINT32
, BASE_DEC
, NULL
, 0,
2049 { &hf_fmp_start_offset64
,
2050 { "Start offset", "fmp.start_offset64",
2051 FT_UINT64
, BASE_DEC
, NULL
, 0,
2052 "Start Offset of extentEx", HFILL
}},
2056 FT_UINT64
, BASE_DEC
, NULL
, 0,
2057 "End Of File", HFILL
}},
2060 { "Plug In Cmd ID", "fmp.plugInID",
2061 FT_BYTES
, BASE_NONE
, NULL
, 0,
2064 { &hf_fmp_plugInBuf
,
2065 { "Plug In Args", "fmp.plugIn",
2066 FT_BYTES
, BASE_NONE
, NULL
, 0,
2070 { "OS Major", "fmp.os_major",
2071 FT_UINT32
, BASE_DEC
, NULL
, 0,
2075 { "OS Minor", "fmp.os_minor",
2076 FT_UINT32
, BASE_DEC
, NULL
, 0,
2080 { "OS Name", "fmp.os_name",
2081 FT_STRING
, BASE_NONE
, NULL
, 0,
2085 { "Mount Path", "fmp.Path",
2086 FT_STRING
, BASE_NONE
, NULL
, 0,
2090 { "OS Path", "fmp.os_patch",
2091 FT_UINT32
, BASE_DEC
, NULL
, 0,
2095 { "OS Build", "fmp.os_build",
2096 FT_UINT32
, BASE_DEC
, NULL
, 0,
2099 { &hf_fmp_server_version_string
,
2100 { "Server Version String", "fmp.server_version_string",
2101 FT_STRING
, BASE_NONE
, NULL
, 0,
2104 { &hf_fmp_description
,
2105 { "Error Description", "fmp.description",
2106 FT_STRING
, BASE_NONE
, NULL
, 0,
2107 "Client Error Description", HFILL
}},
2109 { &hf_fmp_nfsv3Attr_type
,
2110 { "Type", "fmp.nfsv3Attr_type",
2111 FT_UINT32
, BASE_DEC
, NULL
, 0,
2112 "NFSV3 Attr Type", HFILL
}},
2114 { &hf_fmp_nfsv3Attr_mode
,
2115 { "Mode", "fmp.nfsv3Attr_mod",
2116 FT_UINT32
, BASE_DEC
, NULL
, 0,
2119 { &hf_fmp_nfsv3Attr_nlink
,
2120 { "nlink", "fmp.nfsv3Attr_nlink",
2121 FT_UINT32
, BASE_DEC
, NULL
, 0,
2124 { &hf_fmp_nfsv3Attr_uid
,
2125 { "uid", "fmp.nfsv3Attr_uid",
2126 FT_UINT32
, BASE_DEC
, NULL
, 0,
2129 { &hf_fmp_nfsv3Attr_gid
,
2130 { "gid", "fmp.nfsv3Attr_gid",
2131 FT_UINT32
, BASE_DEC
, NULL
, 0,
2134 /* for nfsv3Attr_size use hf_fmp_fileSize */
2135 { &hf_fmp_nfsv3Attr_used
,
2136 { "Used", "fmp.nfsv3Attr_used",
2137 FT_UINT64
, BASE_DEC
, NULL
, 0,
2140 { &hf_fmp_nfsv3Attr_rdev
,
2141 { "rdev", "fmp.nfsv3Attr_rdev",
2142 FT_UINT64
, BASE_DEC
, NULL
, 0,
2145 { &hf_fmp_nfsv3Attr_fsid
,
2146 { "fsid", "fmp.nfsv3Attr_fsid",
2147 FT_UINT64
, BASE_DEC
, NULL
, 0,
2150 { &hf_fmp_nfsv3Attr_fileid
,
2151 { "File ID", "fmp.nfsv3Attr_fileid",
2152 FT_UINT64
, BASE_DEC
, NULL
, 0,
2156 { "Command", "fmp.cmd",
2157 FT_UINT32
, BASE_DEC
, NULL
, 0,
2160 { &hf_fmp_topVolumeId
,
2161 { "Top Volume ID", "fmp.topVolumeId",
2162 FT_UINT32
, BASE_HEX
, NULL
, 0,
2166 { "number of volumes", "fmp.cursor",
2167 FT_UINT32
, BASE_DEC
, NULL
, 0,
2171 { "offset", "fmp.offset64",
2172 FT_UINT64
, BASE_DEC
, NULL
, 0,
2175 { &hf_fmp_slice_size
,
2176 { "size of the slice", "fmp.slice_size",
2177 FT_UINT64
, BASE_DEC
, NULL
, 0,
2181 { "Volume ID's", "fmp.volume",
2182 FT_UINT32
, BASE_HEX
, NULL
, 0,
2185 { &hf_fmp_stripeSize
,
2186 { "size of the stripe", "fmp.stripeSize",
2187 FT_UINT64
, BASE_DEC
, NULL
, 0,
2190 { &hf_fmp_firstLogBlk64
,
2191 { "First Logical Block", "fmp.firstLogBlk64",
2192 FT_UINT64
, BASE_DEC
, NULL
, 0,
2195 { &hf_fmp_native_protocol
,
2196 { "Native Protocol", "fmp.native_protocol",
2197 FT_UINT32
, BASE_DEC
, VALS(fmp_native_protocol_vals
), 0,
2200 { &hf_fmp_encoding_mode
,
2201 { "Encoding Mode", "fmp.encoding_mode",
2202 FT_UINT32
, BASE_DEC
, VALS(fmp_encoding_mode_vals
), 0,
2205 { &hf_fmp_capability
,
2206 { "Volume Mgmt Capability", "fmp.capability",
2207 FT_UINT32
, BASE_DEC
, VALS(fmp_volume_mgmt_capability_vals
), 0,
2210 { &hf_fmp_devSerial_query_cmd
,
2211 { "Query Command", "fmp.devSerial.query_cmd",
2212 FT_UINT32
, BASE_DEC
, VALS(fmp_query_cmd_vals
), 0,
2215 { &hf_fmp_volume_desc
,
2216 { "VOLUME", "fmp.volume_desc",
2217 FT_UINT32
, BASE_DEC
, VALS(fmp_volume_desc_vals
), 0,
2220 { &hf_fmp_disk_identifier
,
2221 { "DISK IDENTIFIER", "fmp.disk_identifier",
2222 FT_UINT32
, BASE_DEC
, VALS(fmp_disk_identifier_vals
), 0,
2225 { &hf_fmp_volume_mgmt_type
,
2226 { "Volume Mgmt Type", "fmp.volume_mgmt_type",
2227 FT_UINT32
, BASE_DEC
, VALS(fmp_volume_mgmt_type_vals
), 0,
2230 { &hf_fmp_notify_protocol
,
2231 { "Protocol", "fmp.notify_protocol",
2232 FT_UINT32
, BASE_DEC
, VALS(fmp_notify_protocol_vals
), 0,
2235 { &hf_fmp_client_error_number
,
2236 { "CLIENT Error Number", "fmp.client_error_number",
2237 FT_UINT32
, BASE_DEC
, VALS(fmp_client_error_number_vals
), 0,
2240 /* Generated from convert_proto_tree_add_text.pl */
2241 { &hf_fmp_fid
, { "fid", "fmp.fid", FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2242 { &hf_fmp_tid
, { "tid", "fmp.tid", FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2243 { &hf_fmp_uid
, { "uid", "fmp.uid", FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2244 { &hf_fmp_fsid
, { "FsID", "fmp.fsid", FT_INT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2245 { &hf_fmp_cifsport
, { "cifsPort", "fmp.cifsport", FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2246 { &hf_fmp_number_of_disk
, { "Number of Disk", "fmp.number_of_disk", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2247 { &hf_fmp_length_of_list
, { "Length of List", "fmp.length_of_list", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2248 { &hf_fmp_sigoffset
, { "sigOffset", "fmp.sigoffset", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
}},
2249 { &hf_fmp_length_of_volume_list
, { "Length of volume List", "fmp.length_of_volume_list", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}},
2250 { &hf_fmp_blockindex
, { "blockIndex", "fmp.blockindex", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
}},
2251 { &hf_fmp_cap
, { "Capabilities", "fmp.cap", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
}},
2252 { &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
}},
2253 { &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
}},
2254 { &hf_fmp_cap_cifsv2
, { "CAP_CIFSV2", "fmp.cap.cifsv2", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), FMP_CAP_CIFSV2
, NULL
, HFILL
}},
2255 { &hf_fmp_mtime
, { "mtime", "fmp.mtime", FT_RELATIVE_TIME
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
2256 { &hf_fmp_atime
, { "atime", "fmp.atime", FT_RELATIVE_TIME
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
2257 { &hf_fmp_ctime
, { "ctime", "fmp.ctime", FT_RELATIVE_TIME
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
2258 { &hf_fmp_heartbeat_interval
, { "Heartbeat interval", "fmp.heartbeat_interval", FT_RELATIVE_TIME
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
2259 { &hf_fmp_volindex
, { "volIndex", "fmp.volindex", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
}},
2262 static int *ett
[] = {
2267 &ett_fmp_fileHandle
,
2269 &ett_HierVolumeDescription
,
2273 module_t
*fmp_module
;
2274 proto_fmp
= proto_register_protocol("File Mapping Protocol", "FMP", "fmp");
2276 proto_register_field_array(proto_fmp
, hf
, array_length(hf
));
2277 proto_register_subtree_array(ett
, array_length(ett
));
2279 fmp_module
=prefs_register_protocol(proto_fmp
, NULL
);
2281 prefs_register_bool_preference(fmp_module
, "fhandle_find_both_reqrep",
2282 "Fhandle filters finds both request/response",
2283 "With this option display filters for fmp fhandle a RPC call,"
2284 " even if the actual fhandle is only present in one of the packets",
2285 &fmp_fhandle_reqrep_matching
);
2290 proto_reg_handoff_fmp(void)
2292 /* Register the protocol as RPC */
2293 rpc_init_prog(proto_fmp
, FMP_PROGRAM
, ett_fmp
,
2294 G_N_ELEMENTS(fmp_vers_info
), fmp_vers_info
);
2298 * Editor modelines - https://www.wireshark.org/tools/modelines.html
2303 * indent-tabs-mode: nil
2306 * vi: set shiftwidth=4 tabstop=8 expandtab:
2307 * :indentSize=4:tabSize=8:noTabs=true: