2 * Routines for fmp dissection
4 * Wireshark - Network traffic analyzer
5 * By Gerald Combs <gerald@wireshark.org>
6 * Copyright 1998 Gerald Combs
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 #include <epan/packet.h>
26 #include <epan/prefs.h>
27 #include "packet-fmp.h"
28 #include "packet-rpc.h"
30 void proto_register_fmp(void);
31 void proto_reg_handoff_fmp(void);
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 = -1;
103 static int hf_fmp_cap_revoke_handle_list = -1;
104 static int hf_fmp_length_of_volume_list = -1;
105 static int hf_fmp_cap_unc_names = -1;
106 static int hf_fmp_length_of_list = -1;
107 static int hf_fmp_sigoffset = -1;
108 static int hf_fmp_uid = -1;
109 static int hf_fmp_fid = -1;
110 static int hf_fmp_fsid = -1;
111 static int hf_fmp_tid = -1;
112 static int hf_fmp_cifsport = -1;
113 static int hf_fmp_blockindex = -1;
114 static int hf_fmp_number_of_disk = -1;
115 static int hf_fmp_cap_cifsv2 = -1;
116 static int hf_fmp_mtime = -1;
117 static int hf_fmp_atime = -1;
118 static int hf_fmp_ctime = -1;
119 static int hf_fmp_heartbeat_interval = -1;
120 static int hf_fmp_volindex = -1;
122 static gint ett_fmp = -1;
123 static gint ett_fmp_timeval = -1;
124 static gint ett_fmp_extList = -1;
125 static gint ett_fmp_ext = -1;
126 static gint ett_fmp_fileHandle = -1;
127 static gint ett_capabilities = -1;
128 static gint ett_HierVolumeDescription = -1;
129 static gint ett_attrs = -1;
131 static const value_string fmp_encoding_mode_vals[] = {
132 {FMP_ASCII, "ASCII"},
134 {FMP_UNICODE1, "UNICODE"},
138 static gboolean fmp_fhandle_reqrep_matching = FALSE;
141 dissect_fmp_genString(tvbuff_t *tvb, int offset, proto_tree *tree)
143 proto_tree_add_item(tree, hf_fmp_encoding_mode, tvb, offset, 4, ENC_BIG_ENDIAN);
146 if (try_val_to_str(tvb_get_ntohl(tvb, offset), fmp_encoding_mode_vals) == NULL)
149 offset = dissect_rpc_string(tvb, tree, hf_fmp_path,
156 get_fileHandleSrc_size(tvbuff_t *tvb, int offset)
161 np = (nativeProtocol)tvb_get_ntohl(tvb, offset);
165 length = 4 + FMP_MAX_PATH_LEN;
168 length = 8 + tvb_get_ntohl(tvb, offset + 4);
174 length = 8 + tvb_get_ntohl(tvb, offset + 4);
182 length = 8 + FMP_MAX_PATH_LEN;
193 dissect_fmp_fileHandleSrc(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
198 proto_tree *fileHandleTree;
201 length = get_fileHandleSrc_size(tvb, offset);
203 fileHandleTree = proto_tree_add_subtree(tree, tvb, offset, length,
204 ett_fmp_fileHandle, NULL, "Source File Handle");
206 np = (nativeProtocol)tvb_get_ntohl(tvb, offset);
207 proto_tree_add_item(fileHandleTree, hf_fmp_native_protocol, tvb, offset, 4, ENC_BIG_ENDIAN);
212 offset = dissect_rpc_string(tvb, fileHandleTree,
213 hf_fmp_mount_path, offset, NULL);
217 offset = dissect_rpc_data(tvb, fileHandleTree,
218 hf_fmp_nfsFHandle, offset);
222 proto_tree_add_item(fileHandleTree, hf_fmp_fid, tvb, offset, 2, ENC_BIG_ENDIAN);
225 proto_tree_add_item(fileHandleTree, hf_fmp_tid, tvb, offset, 2, ENC_BIG_ENDIAN);
228 proto_tree_add_item(fileHandleTree, hf_fmp_uid, tvb, offset, 2, ENC_BIG_ENDIAN);
233 offset = dissect_rpc_string(tvb, fileHandleTree,
234 hf_fmp_fmpFHandle, offset, NULL);
238 proto_tree_add_item(fileHandleTree, hf_fmp_fsid, tvb, offset, 4, ENC_BIG_ENDIAN);
243 offset = dissect_fmp_genString(tvb, offset, fileHandleTree);
247 offset = dissect_fmp_genString(tvb, offset, fileHandleTree);
251 proto_tree_add_item(fileHandleTree, hf_fmp_fid, tvb, offset, 2, ENC_BIG_ENDIAN);
254 proto_tree_add_item(fileHandleTree, hf_fmp_tid, tvb, offset, 2, ENC_BIG_ENDIAN);
257 proto_tree_add_item(fileHandleTree, hf_fmp_uid, tvb, offset, 2, ENC_BIG_ENDIAN);
260 proto_tree_add_item(fileHandleTree, hf_fmp_cifsport, tvb, offset, 2, ENC_BIG_ENDIAN);
264 offset = dissect_fmp_genString(tvb, offset, fileHandleTree);
275 dissect_fmp_extentState(tvbuff_t *tvb, int offset, proto_tree *tree)
277 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_extent_state,
284 dissect_fmp_extent(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, guint32 ext_num)
288 extTree = proto_tree_add_subtree_format(tree, tvb, offset, 20 ,
289 ett_fmp_ext, NULL, "Extent (%u)", (guint32) ext_num);
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_tree *extListTree;
312 numExtents = tvb_get_ntohl(tvb, offset);
313 totalLength = 4 + (20 * numExtents);
315 extListTree = proto_tree_add_subtree(tree, tvb, offset, totalLength,
316 ett_fmp_extList, NULL, "Extent List");
318 offset = dissect_rpc_uint32(tvb, extListTree,
319 hf_fmp_extentList_len, offset);
321 for (i = 0; i < numExtents; i++) {
322 offset = dissect_fmp_extent(tvb, offset, pinfo, extListTree, i+1);
330 dissect_fmp_extentListEx(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
334 proto_tree *extListTree;
337 numExtents = tvb_get_ntohl(tvb, offset);
341 for (i = 0; i < numExtents; i++) {
342 extListTree = proto_tree_add_subtree(tree, tvb, offset, 28,
343 ett_fmp_extList, NULL, "Extent List");
345 offset = dissect_rpc_uint64(tvb,extListTree , hf_fmp_firstLogBlk64, offset);
347 offset = dissect_rpc_uint32(tvb,extListTree , hf_fmp_numBlksReq,
350 offset = dissect_rpc_uint32(tvb,extListTree , hf_fmp_volID, offset);
352 offset = dissect_rpc_uint64(tvb,extListTree , hf_fmp_start_offset64, offset);
354 offset = dissect_fmp_extentState(tvb, offset, extListTree);
363 dissect_plugInID(tvbuff_t *tvb, int offset, proto_tree *tree)
369 proto_tree_add_item(tree, hf_fmp_plugInID, tvb, offset, FMP_PLUG_IN_ID_SZ,
375 dissect_fmp_flushCmd(tvbuff_t *tvb, int offset, proto_tree *tree)
378 char msg[MAX_MSG_SIZE];
383 cmd = tvb_get_ntohl(tvb, offset);
385 /* Initialize the message for an empty string */
388 for (i = 0; cmd != 0 && i < 32; i++) {
392 if (cmd & bitValue) {
394 case FMP_COMMIT_SPECIFIED:
395 g_strlcat(msg, "COMMIT_SPECIFIED", MAX_MSG_SIZE);
397 case FMP_RELEASE_SPECIFIED:
398 g_strlcat(msg, "RELEASE_SPECIFIED", MAX_MSG_SIZE);
400 case FMP_RELEASE_ALL:
401 g_strlcat(msg, "RELEASE_ALL", MAX_MSG_SIZE);
404 g_strlcat(msg, "CLOSE_FILE", MAX_MSG_SIZE);
406 case FMP_UPDATE_TIME:
407 g_strlcat(msg, "UPDATE_TIME", MAX_MSG_SIZE);
409 case FMP_ACCESS_TIME:
410 g_strlcat(msg, "ACCESS_TIME", MAX_MSG_SIZE);
413 g_strlcat(msg, "UNKNOWN", MAX_MSG_SIZE);
417 /* clear the bit that we processed */
420 /* add a "bitwise inclusive OR" symbol between cmds */
422 g_strlcat(msg, " | ", MAX_MSG_SIZE);
427 if (strlen(msg) == 0) {
428 g_strlcpy(msg, "No command specified", MAX_MSG_SIZE);
431 proto_tree_add_uint_format_value(tree, hf_fmp_cmd, tvb, offset, 4, cmd, "%s", msg);
438 dissect_InterpretVolMgtStuff(tvbuff_t *tvb, int offset, proto_tree *tree)
440 int length, numdisks, i, j;
442 numdisks = tvb_get_ntohl(tvb, offset);
443 proto_tree_add_item(tree, hf_fmp_number_of_disk, tvb, offset, 4, ENC_BIG_ENDIAN);
446 for (i=0; i<numdisks; i++) {
447 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_sig_offset, offset);
448 length = tvb_get_ntohl(tvb, offset);
449 proto_tree_add_item(tree, hf_fmp_length_of_list, tvb, offset, 4, ENC_BIG_ENDIAN);
452 for (j=0; j<length; j++) {
453 proto_tree_add_item(tree, hf_fmp_sigoffset, tvb, offset, 4, ENC_BIG_ENDIAN);
455 offset = dissect_rpc_string(tvb, tree, hf_fmp_dskSigEnt_val,
459 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_volID, offset);
468 dissect_fmp_capability(tvbuff_t *tvb, int offset, proto_tree *tree)
470 proto_tree_add_item(tree, hf_fmp_capability, tvb, offset, 4, ENC_BIG_ENDIAN);
475 dissect_fmp_timeval(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
476 proto_tree *tree, int hf_time, int hf_time_sec,
482 proto_item* time_item;
483 proto_tree* time_tree;
485 ts.secs = tvb_get_ntohl(tvb, offset+0);
486 ts.nsecs = tvb_get_ntohl(tvb, offset+4);
488 time_item = proto_tree_add_time(tree, hf_time, tvb, offset, 8, &ts);
489 time_tree = proto_item_add_subtree(time_item, ett_fmp_timeval);
491 proto_tree_add_uint(time_tree, hf_time_sec, tvb, offset, 4,
493 proto_tree_add_uint(time_tree, hf_time_nsec, tvb, offset+4, 4,
501 dissect_fmp_heartBeatIntv(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
504 proto_tree_add_item(tree, hf_fmp_heartbeat_interval, tvb, offset, 8, ENC_BIG_ENDIAN);
510 dissect_fmp_status(tvbuff_t *tvb, int offset, proto_tree *tree, int *rval)
514 status = (fmpStat)tvb_get_ntohl(tvb, offset);
537 case FMP_NOTIFY_ERROR:
538 case FMP_WRITER_LOST_BLK:
539 case FMP_WRONG_MSG_NUM:
540 case FMP_SESSION_LOST:
541 case FMP_REQUEST_CANCELLED:
544 case FMP_HOT_SESSION:
547 case FMP_COLD_SESSION:
550 case FMP_CLIENT_TERMINATED:
553 case FMP_REQUEST_QUEUED:
559 case FMP_WRITER_ZEROED_BLK:
562 case FMP_WRONG_HANDLE:
565 case FMP_DUPLICATE_OPEN:
568 case FMP_PLUGIN_NOFUNC:
575 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_status , offset);
580 dissect_fmp_devSerial(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
583 proto_tree_add_item(tree, hf_fmp_devSerial_query_cmd, tvb, offset, 4, ENC_BIG_ENDIAN);
586 proto_tree_add_item(tree, hf_fmp_sigoffset, tvb, offset, 4, ENC_BIG_ENDIAN);
589 offset = dissect_rpc_string(tvb, tree, hf_fmp_devSignature,
595 dissect_fmp_VolumeDescription(tvbuff_t *tvb, int offset, proto_tree * tree)
600 fmpVolumeType volumeType;
601 fmpDiskIdentifierType diskIdentifierType;
603 volumeType = (fmpVolumeType)tvb_get_ntohl(tvb, offset);
604 ti = proto_tree_add_item(tree, hf_fmp_volume_desc, tvb, offset, 4, ENC_BIG_ENDIAN);
605 Hietree = proto_item_add_subtree(ti, ett_HierVolumeDescription);
608 switch (volumeType) {
610 case FMP_VOLUME_DISK:
611 offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volID, offset);
612 offset += 8; /* blockIndex64 */
613 diskIdentifierType = (fmpDiskIdentifierType)tvb_get_ntohl(tvb, offset);
614 proto_tree_add_item(Hietree, hf_fmp_disk_identifier, tvb, offset, 4, ENC_BIG_ENDIAN);
617 switch (diskIdentifierType) {
618 case FMP_DISK_IDENTIFIER_SIGNATURE:
619 offset = dissect_rpc_uint64(tvb, Hietree, hf_fmp_sig_offset, offset);
620 length = tvb_get_ntohl(tvb, offset);
621 proto_tree_add_item(Hietree, hf_fmp_length_of_list, tvb, offset, 4, ENC_BIG_ENDIAN);
624 for (i=0; i<length; i++) {
625 proto_tree_add_item(Hietree, hf_fmp_sigoffset, tvb, offset, 4, ENC_BIG_ENDIAN);
627 offset = dissect_rpc_string(tvb, Hietree, hf_fmp_dskSigEnt_val, offset, NULL);
633 case FMP_DISK_IDENTIFIER_SERIAL:
634 dissect_fmp_devSerial(tvb, offset, NULL, Hietree);
639 case FMP_VOLUME_SLICE:
640 offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volID, offset);
642 offset = dissect_rpc_uint64(tvb, Hietree, hf_fmp_offset64, offset);
644 offset = dissect_rpc_uint64(tvb, Hietree, hf_fmp_slice_size, offset);
646 offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volume, offset);
650 case FMP_VOLUME_STRIPE:
651 offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volID, offset);
653 offset = dissect_rpc_uint64(tvb, Hietree, hf_fmp_stripeSize, offset);
654 length = tvb_get_ntohl(tvb, offset);
655 proto_tree_add_item(Hietree, hf_fmp_length_of_list, tvb, offset, 4, ENC_BIG_ENDIAN);
658 for (i=0; i<length; i++) {
659 offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volume, offset); /* FIXME: Size or length not know */
664 case FMP_VOLUME_META:
665 offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volID, offset);
667 length = tvb_get_ntohl(tvb, offset);
668 proto_tree_add_item(Hietree, hf_fmp_length_of_list, tvb, offset, 4, ENC_BIG_ENDIAN);
670 for (i=0; i<length; i++) {
671 offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volume, offset); /* FIXME: Size or length not know */
682 dissect_fmp_Hiervolume(tvbuff_t *tvb, int offset, proto_tree * tree)
687 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_topVolumeId, offset);
688 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cursor, offset);
689 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie, offset);
691 /* hierarchical description of volume. Each volume describes a
692 piece of the entire hierarchy and is guarenteed to only refer to
693 volumes that have already been described by the data structure up
694 to this point in time. In some extreme cases, the number of
695 volumes and their descriptions may be to large to fit in a single
696 RPC reply. In this case, the application may send getVolumeInfo
697 requests for the specific topVolumeId -- specifying the number of
698 volumes already recieved by the client, and the cookie. The
699 server is then responsible for sending another message containing
700 additional volumes. These RPCs exchanges may continue multiple
701 times, until the client has fetched the entire hierarchical
702 volume description. If the volume hierarchy changes duing a
703 multiple RPC sequence, the server will return an
704 FMP_VOLUME_CHANGED error, and the client must discard all
705 information already received and restart the request with
709 vollength = tvb_get_ntohl(tvb, offset);
710 proto_tree_add_item(tree, hf_fmp_length_of_volume_list, tvb, offset, 4, ENC_BIG_ENDIAN);
713 offset = dissect_fmp_VolumeDescription(tvb, offset, tree);
724 dissect_fmp_vmInfo(tvbuff_t *tvb, int offset, packet_info *pinfo,
728 guint32 phyVolList_len;
730 vmType = tvb_get_ntohl(tvb, offset);
731 proto_tree_add_item(tree, hf_fmp_volume_mgmt_type, tvb, offset, 4, ENC_BIG_ENDIAN);
734 case FMP_SERVER_BASED:
738 phyVolList_len = tvb_get_ntohl(tvb, offset);
742 * Loop through and print all of the devInfo
745 while (phyVolList_len) {
746 offset = dissect_fmp_devSerial(tvb, offset, pinfo, tree);
747 proto_tree_add_item(tree, hf_fmp_volindex, tvb, offset, 4, ENC_BIG_ENDIAN);
753 case FMP_THIRD_PARTY:
754 offset = dissect_rpc_string(tvb, tree, hf_fmp_volHandle,
758 case FMP_CLIENT_BASED_DART:
759 offset = dissect_rpc_string(tvb, tree, hf_fmp_volHandle,
763 case FMP_CLIENT_BASED_SIMPLE:
765 * Decoding simpleVolInfo
767 offset = dissect_fmp_devSerial(tvb, offset, pinfo, tree);
769 proto_tree_add_item(tree, hf_fmp_blockindex, tvb, offset, 4, ENC_BIG_ENDIAN);
773 case FMP_DISK_SIGNATURE:
774 offset = dissect_InterpretVolMgtStuff(tvb, offset, tree);
777 case FMP_HIERARCHICAL_VOLUME:
778 dissect_fmp_Hiervolume(tvb, offset, tree);
789 dissect_fmp_notifyProtocol(tvbuff_t *tvb, int offset, proto_tree *tree)
791 proto_tree_add_item(tree, hf_fmp_notify_protocol, tvb, offset, 4, ENC_BIG_ENDIAN);
797 dissect_fmp_capabilities(tvbuff_t *tvb, int offset, proto_tree *tree)
799 static const int *capabilities[] = {
800 &hf_fmp_cap_revoke_handle_list,
801 &hf_fmp_cap_unc_names,
806 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_fmp_cap, ett_capabilities,
807 capabilities, ENC_BIG_ENDIAN, BMT_NO_APPEND);
812 dissect_fmp_cerrInfo(tvbuff_t *tvb, int offset, proto_tree *tree)
816 proto_tree_add_item(tree, hf_fmp_client_error_number, tvb, offset, 4, ENC_BIG_ENDIAN);
819 offset = dissect_fmp_status(tvb, offset,tree, &rval);
825 dissect_fmp_attrs(tvbuff_t *tvb, int offset, proto_tree *tree)
827 proto_tree *attrsTree;
829 attrsTree = proto_tree_add_subtree(tree, tvb, offset, 84,
830 ett_attrs, NULL, "Attribute: ");
831 offset = dissect_rpc_uint32(tvb, attrsTree, hf_fmp_nfsv3Attr_type, offset);
832 offset = dissect_rpc_uint32(tvb, attrsTree, hf_fmp_nfsv3Attr_mode, offset);
833 offset = dissect_rpc_uint32(tvb, attrsTree, hf_fmp_nfsv3Attr_nlink, offset);
834 offset = dissect_rpc_uint32(tvb, attrsTree, hf_fmp_nfsv3Attr_uid, offset);
835 offset = dissect_rpc_uint32(tvb, attrsTree, hf_fmp_nfsv3Attr_gid, offset);
836 offset = dissect_rpc_uint64(tvb, attrsTree, hf_fmp_fileSize, offset);
837 /* Here hf_fmp_fileSize is used in
840 offset = dissect_rpc_uint64(tvb, attrsTree, hf_fmp_nfsv3Attr_used, offset);
841 offset = dissect_rpc_uint64(tvb, attrsTree, hf_fmp_nfsv3Attr_rdev, offset);
842 offset = dissect_rpc_uint64(tvb, attrsTree, hf_fmp_nfsv3Attr_fsid, offset);
843 offset = dissect_rpc_uint64(tvb, attrsTree, hf_fmp_nfsv3Attr_fileid, offset);
844 proto_tree_add_item(tree, hf_fmp_atime, tvb, offset, 8, ENC_BIG_ENDIAN);
846 proto_tree_add_item(tree, hf_fmp_mtime, tvb, offset, 8, ENC_BIG_ENDIAN);
848 proto_tree_add_item(tree, hf_fmp_ctime, tvb, offset, 8, ENC_BIG_ENDIAN);
856 dissect_FMP_SessionCreate_request(tvbuff_t *tvb, packet_info *pinfo,
857 proto_tree *tree, void* data _U_)
860 offset = dissect_rpc_string(tvb, tree, hf_fmp_hostID,
862 offset = dissect_fmp_timeval(tvb, offset, pinfo, tree, hf_fmp_btime,
863 hf_fmp_time_sec, hf_fmp_time_nsec);
864 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_notifyPort,
870 dissect_FMP_SessionCreate_reply(tvbuff_t *tvb, packet_info *pinfo,
871 proto_tree *tree, void* data _U_)
876 offset = dissect_fmp_status(tvb, offset,tree, &rval);
878 offset = dissect_rpc_data(tvb, tree,
879 hf_fmp_sessionHandle, offset);
880 offset = dissect_rpc_string(tvb, tree, hf_fmp_hostID,
882 offset = dissect_fmp_timeval(tvb, offset, pinfo, tree,
883 hf_fmp_btime, hf_fmp_time_sec,
885 offset = dissect_fmp_heartBeatIntv(tvb, offset, pinfo, tree);
892 dissect_FMP_HeartBeat_request(tvbuff_t *tvb, packet_info *pinfo _U_,
893 proto_tree *tree, void* data _U_)
895 return dissect_rpc_data(tvb, tree, hf_fmp_sessionHandle, 0);
899 dissect_FMP_HeartBeat_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
900 proto_tree *tree, void* data _U_)
904 return dissect_fmp_status(tvb, 0, tree, &rval);
908 dissect_FMP_Mount_request(tvbuff_t *tvb, packet_info *pinfo,
909 proto_tree *tree, void* data _U_)
912 offset = dissect_rpc_data(tvb, tree, hf_fmp_sessionHandle,
914 offset = dissect_fmp_capability(tvb, offset, tree);
915 offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
920 dissect_FMP_Mount_reply(tvbuff_t *tvb, packet_info *pinfo,
921 proto_tree *tree, void* data _U_)
926 offset = dissect_fmp_status(tvb, offset,tree, &rval);
928 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_fsID,
930 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_fsBlkSz,
932 offset = dissect_fmp_vmInfo(tvb, offset, pinfo, tree);
939 dissect_FMP_Open_request(tvbuff_t *tvb, packet_info *pinfo,
940 proto_tree *tree, void* data _U_)
943 offset = dissect_rpc_data(tvb, tree, hf_fmp_sessionHandle,
945 offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
950 dissect_FMP_Open_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
951 proto_tree *tree, void* data _U_)
956 offset = dissect_fmp_status(tvb, offset,tree, &rval);
958 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle,
960 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
962 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
965 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_fsID,
972 dissect_FMP_Close_request(tvbuff_t *tvb, packet_info *pinfo _U_,
973 proto_tree *tree, void* data _U_)
977 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle, offset);
978 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
983 dissect_FMP_Close_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
984 proto_tree *tree, void* data _U_)
989 offset = dissect_fmp_status(tvb, offset,tree, &rval);
991 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
999 dissect_FMP_OpenGetMap_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1002 offset = dissect_rpc_data(tvb, tree, hf_fmp_sessionHandle,
1005 offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1006 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_firstLogBlk,
1008 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_numBlksReq,
1010 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_minBlks, offset);
1015 dissect_FMP_OpenGetMap_reply(tvbuff_t *tvb, packet_info *pinfo,
1016 proto_tree *tree, void* data _U_)
1021 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1023 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle,
1025 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1027 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie,
1029 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1031 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_fsID,
1033 offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1040 dissect_FMP_OpenAllocSpace_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1043 offset = dissect_rpc_data(tvb, tree, hf_fmp_sessionHandle, offset);
1044 offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1045 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_firstLogBlk, offset);
1046 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_numBlksReq, offset);
1047 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_minBlks, offset);
1052 dissect_FMP_OpenAllocSpace_reply(tvbuff_t *tvb, packet_info *pinfo,
1053 proto_tree *tree, void* data _U_)
1058 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1060 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle,
1062 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1064 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie,
1066 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1068 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_fsID,
1070 offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1076 dissect_FMP_GetMap_request(tvbuff_t *tvb, packet_info *pinfo _U_,
1077 proto_tree *tree, void* data _U_)
1080 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle, offset);
1081 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1082 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_firstLogBlk,
1084 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_numBlksReq,
1086 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_minBlks, offset);
1091 dissect_FMP_GetMap_reply(tvbuff_t *tvb, packet_info *pinfo,
1092 proto_tree *tree, void* data _U_)
1097 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1099 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1101 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie,
1103 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1105 offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1112 dissect_FMP_AllocSpace_request(tvbuff_t *tvb, packet_info *pinfo _U_,
1113 proto_tree *tree, void* data _U_)
1116 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle, offset);
1117 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1118 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_firstLogBlk,
1120 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_numBlksReq,
1122 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_minBlks, offset);
1127 dissect_FMP_AllocSpace_reply(tvbuff_t *tvb, packet_info *pinfo,
1128 proto_tree *tree, void* data _U_)
1133 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1135 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1137 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie,
1139 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1141 offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1148 dissect_FMP_Flush_request(tvbuff_t *tvb, packet_info *pinfo,
1149 proto_tree *tree, void* data _U_)
1152 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle, offset);
1153 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1154 offset = dissect_fmp_flushCmd(tvb, offset, tree);
1155 offset = dissect_rpc_uint64(tvb,tree, hf_fmp_eof, offset);
1156 offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1161 dissect_FMP_Flush_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
1162 proto_tree *tree, void* data _U_)
1167 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1169 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1176 dissect_FMP_CancelReq_request(tvbuff_t *tvb, packet_info *pinfo _U_,
1177 proto_tree *tree, void* data _U_)
1180 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle, offset);
1181 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1182 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie, offset);
1187 dissect_FMP_CancelReq_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
1188 proto_tree *tree, void* data _U_)
1193 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1195 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1202 dissect_FMP_PlugIn_request(tvbuff_t *tvb, packet_info *pinfo _U_,
1203 proto_tree *tree, void* data _U_)
1206 offset = dissect_plugInID(tvb, offset, tree);
1207 offset = dissect_rpc_data(tvb, tree, hf_fmp_plugInBuf, offset);
1212 dissect_FMP_PlugIn_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
1213 proto_tree *tree, void* data _U_)
1218 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1220 offset = dissect_rpc_data(tvb, tree, hf_fmp_plugInBuf,
1227 dissect_FMP_SessionTerminate_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1229 return dissect_rpc_data(tvb, tree, hf_fmp_sessionHandle, 0);
1233 dissect_FMP_SessionTerminate_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1237 return dissect_fmp_status(tvb, 0,tree, &rval);
1241 dissect_FMP_SessionCreateEx_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1245 offset = dissect_rpc_string(tvb, tree, hf_fmp_hostID,
1247 offset = dissect_fmp_timeval(tvb, offset, pinfo ,tree, hf_fmp_btime,
1248 hf_fmp_time_sec, hf_fmp_time_nsec);
1249 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_notifyPort,
1251 offset = dissect_fmp_notifyProtocol(tvb, offset, tree);
1253 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_major,
1255 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_minor,
1258 offset = dissect_rpc_string(tvb, tree, hf_fmp_os_name,
1261 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_patch,
1264 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_build,
1267 offset = dissect_fmp_capabilities(tvb, offset, tree);
1274 dissect_FMP_SessionCreateEx_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1279 offset = dissect_fmp_status(tvb, offset, tree, &rval);
1281 offset = dissect_rpc_data(tvb, tree,
1282 hf_fmp_sessionHandle, offset);
1283 offset = dissect_rpc_string(tvb, tree, hf_fmp_hostID,
1285 offset = dissect_fmp_timeval(tvb, offset, pinfo ,tree,
1286 hf_fmp_btime, hf_fmp_time_sec,
1288 offset = dissect_fmp_heartBeatIntv(tvb, offset, pinfo , tree);
1290 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_major,
1293 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_minor,
1296 offset = dissect_rpc_string(tvb, tree, hf_fmp_server_version_string,
1299 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_patch,
1302 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_build,
1305 offset = dissect_fmp_capabilities(tvb, offset, tree);
1313 dissect_FMP_ReportClientError_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1316 offset = dissect_rpc_string(tvb, tree, hf_fmp_description,
1319 offset = dissect_fmp_cerrInfo(tvb, offset, tree);
1324 dissect_FMP_ReportClientError_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1328 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1334 dissect_FMP_GetAttr_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1337 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle, offset);
1339 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1346 dissect_FMP_GetAttr_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1350 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1352 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1354 offset = dissect_fmp_attrs(tvb, offset, tree);
1361 dissect_FMP_OpenGetAttr_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1365 offset = dissect_rpc_data(tvb, tree, hf_fmp_sessionHandle,
1368 offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1375 dissect_FMP_OpenGetAttr_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1380 offset = dissect_fmp_status(tvb, offset, tree, &rval);
1383 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle, offset);
1384 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1385 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize, offset);
1386 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_fsID, offset);
1387 offset = dissect_fmp_attrs(tvb, offset, tree);
1396 dissect_FMP_FlushGetAttr_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1400 offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1401 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1402 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cmd, offset);
1403 offset = dissect_rpc_uint64(tvb,tree, hf_fmp_eof, offset);
1405 proto_tree_add_item(tree, hf_fmp_mtime, tvb, offset, 8, ENC_BIG_ENDIAN);
1407 offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1414 dissect_FMP_FlushGetAttr_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1419 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1421 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1423 offset = dissect_fmp_attrs(tvb, offset, tree);
1431 dissect_FMP_GetVolumeInfo_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1434 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_topVolumeId, offset);
1435 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cursor, offset);
1436 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie, offset);
1443 dissect_FMP_GetVolumeInfo_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1448 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1450 /* FIXME: I don't know size of this volumes */
1451 offset = dissect_fmp_Hiervolume(tvb,offset, tree);
1458 dissect_FMP_OpenGetMapEx_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1461 offset = dissect_rpc_data(tvb, tree, hf_fmp_sessionHandle,
1463 offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1464 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_firstLogBlk64, offset);
1465 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_numBlksReq,
1467 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_minBlks, offset);
1473 dissect_FMP_OpenGetMapEx_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
1474 proto_tree *tree, void* data _U_)
1478 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1480 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle,
1482 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1484 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie,
1486 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1488 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_fsID,
1490 offset = dissect_fmp_extentListEx(tvb, offset, pinfo, tree);
1498 dissect_FMP_OpenAllocSpaceEx_request(tvbuff_t *tvb,
1499 packet_info *pinfo, proto_tree *tree, void* data _U_)
1502 offset = dissect_rpc_data(tvb , tree, hf_fmp_sessionHandle,
1504 offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1505 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_firstLogBlk64, offset);
1506 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_numBlksReq,
1508 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_minBlks, offset);
1514 dissect_FMP_OpenAllocSpaceEx_reply(tvbuff_t *tvb, packet_info *pinfo,
1515 proto_tree *tree, void* data _U_)
1520 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1522 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle,
1524 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1526 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie,
1528 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1530 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_fsID,
1532 offset = dissect_fmp_extentListEx(tvb, offset, pinfo, tree);
1538 dissect_FMP_GetMapEx_request(tvbuff_t *tvb, packet_info *pinfo _U_,
1539 proto_tree *tree, void* data _U_)
1542 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle, offset);
1543 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1544 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_firstLogBlk64, offset);
1545 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_numBlksReq,
1547 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_minBlks, offset);
1553 dissect_FMP_GetMapEx_reply(tvbuff_t *tvb, packet_info *pinfo,
1554 proto_tree *tree, void* data _U_)
1559 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1561 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1563 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie,
1565 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1567 offset = dissect_fmp_extentListEx(tvb, offset, pinfo, tree);
1575 dissect_FMP_AllocSpaceEx_request(tvbuff_t *tvb, packet_info *pinfo _U_,
1576 proto_tree *tree, void* data _U_)
1579 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle, offset);
1580 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1581 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_firstLogBlk64, offset);
1582 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_numBlksReq,
1584 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_minBlks, offset);
1590 dissect_FMP_AllocSpaceEx_reply(tvbuff_t *tvb, packet_info *pinfo,
1591 proto_tree *tree, void* data _U_)
1596 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1598 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1600 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie,
1602 offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1604 offset = dissect_fmp_extentListEx(tvb, offset, pinfo, tree);
1611 dissect_FMP_FlushEx_request(tvbuff_t *tvb, packet_info *pinfo,
1612 proto_tree *tree, void* data _U_)
1615 offset = dissect_rpc_data(tvb, tree, hf_fmp_fmpFHandle, offset);
1616 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1617 offset = dissect_fmp_flushCmd(tvb, offset, tree);
1618 offset = dissect_rpc_uint64(tvb,tree, hf_fmp_eof, offset);
1619 offset = dissect_fmp_extentListEx(tvb, offset, pinfo, tree);
1624 dissect_FMP_FlushEx_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
1625 proto_tree *tree, void* data _U_)
1630 offset = dissect_fmp_status(tvb, offset,tree, &rval);
1632 offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1638 * proc number, "proc name", dissect_request, dissect_reply
1640 static const vsff fmp3_proc[] = {
1644 dissect_rpc_void, },
1648 dissect_FMP_SessionCreate_request,
1649 dissect_FMP_SessionCreate_reply },
1653 dissect_FMP_HeartBeat_request,
1654 dissect_FMP_HeartBeat_reply },
1658 dissect_FMP_Mount_request,
1659 dissect_FMP_Mount_reply },
1663 dissect_FMP_Open_request,
1664 dissect_FMP_Open_reply },
1668 dissect_FMP_Close_request,
1669 dissect_FMP_Close_reply },
1673 dissect_FMP_OpenGetMap_request,
1674 dissect_FMP_OpenGetMap_reply },
1678 dissect_FMP_OpenAllocSpace_request,
1679 dissect_FMP_OpenAllocSpace_reply },
1683 dissect_FMP_GetMap_request,
1684 dissect_FMP_GetMap_reply },
1688 dissect_FMP_AllocSpace_request,
1689 dissect_FMP_AllocSpace_reply },
1693 dissect_FMP_Flush_request,
1694 dissect_FMP_Flush_reply },
1698 dissect_FMP_CancelReq_request,
1699 dissect_FMP_CancelReq_reply },
1703 dissect_FMP_PlugIn_request,
1704 dissect_FMP_PlugIn_reply },
1708 dissect_FMP_SessionTerminate_request,
1709 dissect_FMP_SessionTerminate_reply },
1713 dissect_FMP_SessionCreateEx_request,
1714 dissect_FMP_SessionCreateEx_reply },
1717 "ReportClientError",
1718 dissect_FMP_ReportClientError_request,
1719 dissect_FMP_ReportClientError_reply },
1723 dissect_FMP_GetAttr_request,
1724 dissect_FMP_GetAttr_reply },
1727 "Open Get Attribute",
1728 dissect_FMP_OpenGetAttr_request,
1729 dissect_FMP_OpenGetAttr_reply },
1732 "Flush Get Attribute",
1733 dissect_FMP_FlushGetAttr_request,
1734 dissect_FMP_FlushGetAttr_reply },
1738 dissect_FMP_OpenGetMapEx_request,
1739 dissect_FMP_OpenGetMapEx_reply },
1743 dissect_FMP_OpenAllocSpaceEx_request,
1744 dissect_FMP_OpenAllocSpaceEx_reply },
1748 dissect_FMP_GetMapEx_request,
1749 dissect_FMP_GetMapEx_reply },
1753 dissect_FMP_AllocSpaceEx_request,
1754 dissect_FMP_AllocSpaceEx_reply },
1758 dissect_FMP_FlushEx_request,
1759 dissect_FMP_FlushEx_reply },
1764 dissect_FMP_FlushGetAttrEx_request,
1765 dissect_FMP_FlushGetAttrEx_reply },
1771 dissect_FMP_GetVolumeInfo_request,
1772 dissect_FMP_GetVolumeInfo_reply },
1775 {0 , NULL , NULL , NULL }
1780 static const rpc_prog_vers_info fmp_vers_info[] = {
1781 { FMP_VERSION_3, fmp3_proc, &hf_fmp_procedure }
1785 static const value_string fmp_proc_vals[] = {
1787 { 1, "SessionCreate" },
1792 { 6, "OpenGetMap" },
1793 { 7, "OpenAllocSpace" },
1795 { 9, "AllocSpace " },
1797 { 11, "CancelReq" },
1799 { 13, "SessionTerminate" },
1800 { 14, "SessionCreateEx" },
1801 { 15, "ReportClientError" },
1803 { 17, "OpenGetAttr" },
1804 { 18, "FlushGetAttr"},
1805 { 19, "OpenGetMapEx"},
1806 { 20, "OpenAllocSpaceEx"},
1808 { 22, "AllocSpaceEx"},
1810 { 24, "FlushGetAttrEx"},
1811 { 25, "GetVolumeInfo"},
1816 static const value_string fmp_status_vals[] = {
1821 { 22, "INVALIDARG"},
1823 { 79, "QUEUE_FULL"},
1824 {500, "WRONG_MSG_NUM"},
1825 {501, "SESSION_LOST"},
1826 {502, "HOT_SESSION"},
1827 {503, "COLD_SESSION"},
1828 {504, "CLIENT_TERMINATED"},
1829 {505, "WRITER_LOST_BLK"},
1830 {506, "FMP_REQUEST_QUEUED"},
1831 {507, "FMP_FALL_BACK"},
1832 {508, "REQUEST_CANCELLED"},
1833 {509, "WRITER_ZEROED_BLK"},
1834 {510, "NOTIFY_ERROR"},
1835 {511, "FMP_WRONG_HANDLE"},
1836 {512, "DUPLICATE_OPEN"},
1837 {600, "PLUGIN_NOFUNC"},
1842 static const value_string fmp_extentState_vals[] = {
1849 static const value_string fmp_native_protocol_vals[] = {
1854 {FMP_FS_ONLY, "FS_ONLY"},
1855 {FMP_SHARE, "SHARE"},
1856 {FMP_MOUNT, "MOUNT"},
1857 {FMP_CIFSV2, "CIFSV2"},
1862 static const value_string fmp_volume_mgmt_capability_vals[] = {
1863 {FMP_SERVER_BASED, "SERVER_BASED"},
1864 {FMP_THIRD_PARTY, "THIRD_PARTY"},
1865 {FMP_CLIENT_BASED_DART, "CLIENT_BASED_DART"},
1866 {FMP_CLIENT_BASED_SIMPLE, "CLIENT_BASED_SIMPLE"},
1867 {FMP_HIERARCHICAL_VOLUME, "FMP_HIERARCHICAL_VOLUME"},
1871 static const value_string fmp_query_cmd_vals[] = {
1872 {FMP_SCSI_INQUIRY, "SCSI_INQUIRY"},
1873 {FMP_DART_STAMP, "DART_STAMP"},
1877 static const value_string fmp_volume_desc_vals[] = {
1878 {FMP_VOLUME_DISK, "DISK"},
1879 {FMP_VOLUME_SLICE, "SLICE"},
1880 {FMP_VOLUME_STRIPE, "STRIPE"},
1881 {FMP_VOLUME_META, "META"},
1882 {FMP_VOLUME_SLICE, "SLICE"},
1883 {FMP_VOLUME_SLICE, "SLICE"},
1887 static const value_string fmp_disk_identifier_vals[] = {
1888 {FMP_DISK_IDENTIFIER_SIGNATURE, "SIGNATURE"},
1889 {FMP_DISK_IDENTIFIER_SERIAL, "SERIAL"},
1893 static const value_string fmp_notify_protocol_vals[] = {
1899 static const value_string fmp_volume_mgmt_type_vals[] = {
1900 {FMP_SERVER_BASED, "SERVER_BASED"},
1901 {FMP_THIRD_PARTY, "THIRD_PARTY"},
1902 {FMP_CLIENT_BASED_DART, "CLIENT_BASED_DART"},
1903 {FMP_CLIENT_BASED_SIMPLE, "CLIENT_BASED_SIMPLE"},
1904 {FMP_DISK_SIGNATURE, "DISK_SIGNATURE"},
1905 {FMP_HIERARCHICAL_VOLUME, "HIERARCHICAL_VOLUME"},
1909 static const value_string fmp_client_error_number_vals[] = {
1910 {FMP_CE_GENERIC, "FMP_CE_GENERIC"},
1911 {FMP_CE_DISK_ERROR, "FMP_CE_DISK_ERROR"},
1916 proto_register_fmp(void)
1918 static hf_register_info hf[] = {
1919 { &hf_fmp_procedure,
1920 { "Procedure", "fmp.procedure",
1921 FT_UINT32, BASE_DEC, VALS(fmp_proc_vals),
1922 0, NULL, HFILL }}, /* New addition */
1925 { "Host ID", "fmp.hostID",
1926 FT_STRING, BASE_NONE, NULL, 0,
1930 { "Boot Time", "fmp.btime",
1931 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0,
1932 "Machine Boot Time", HFILL }},
1935 { "seconds", "fmp.btime.sec",
1936 FT_UINT32, BASE_DEC, NULL, 0,
1939 { &hf_fmp_time_nsec,
1940 { "nanoseconds", "fmp.btime.nsec",
1941 FT_UINT32, BASE_DEC, NULL, 0,
1944 { &hf_fmp_notifyPort,
1945 { "Notify Port", "fmp.notifyPort",
1946 FT_UINT32, BASE_DEC, NULL, 0,
1949 { &hf_fmp_sessionHandle,
1950 { "Session Handle", "fmp.sessHandle",
1951 FT_BYTES, BASE_NONE, NULL, 0,
1954 { &hf_fmp_fmpFHandle,
1955 { "FMP File Handle", "fmp.fmpFHandle",
1956 FT_BYTES, BASE_NONE, NULL, 0,
1960 { &hf_fmp_nfsFHandle,
1961 { "NFS File Handle", "fmp.nfsFHandle",
1962 FT_BYTES, BASE_NONE, NULL, 0,
1966 { "File System ID", "fmp.fsID",
1967 FT_UINT32, BASE_HEX, NULL, 0,
1971 { "Status", "fmp.status",
1972 FT_UINT32, BASE_DEC, VALS(fmp_status_vals), 0,
1973 "Reply Status", HFILL }},
1976 { "File System Block Size", "fmp.fsBlkSz",
1977 FT_UINT32, BASE_DEC, NULL, 0,
1980 { &hf_fmp_volHandle,
1981 { "Volume Handle", "fmp.volHandle",
1982 FT_STRING, BASE_NONE, NULL, 0,
1985 { &hf_fmp_dskSigEnt_val,
1986 { "Celerra Signature", "fmp.dsi.ds.dsList.dskSigLst_val.dse.dskSigEnt_val",
1987 FT_STRING, BASE_NONE, NULL, 0,
1990 { &hf_fmp_devSignature,
1991 { "Signature DATA", "fmp.devSig",
1992 FT_STRING, BASE_NONE, NULL, 0,
1995 { &hf_fmp_mount_path,
1996 { "Native Protocol: PATH", "fmp.mount_path",
1997 FT_STRING, BASE_NONE, NULL, 0,
1998 "Absolute path from the root on the server side", HFILL }},
2000 { &hf_fmp_sig_offset,
2001 { "Sig Offset", "fmp.dsi.ds.sig_offset",
2002 FT_UINT64, BASE_DEC, NULL, 0,
2005 { &hf_fmp_numBlksReq,
2006 { "Extent Length", "fmp.numBlksReq",
2007 FT_UINT32, BASE_DEC, NULL, 0,
2011 { "Minimum Blocks to Grant", "fmp.minBlks",
2012 FT_UINT32, BASE_DEC, NULL, 0,
2016 { "Message Number", "fmp.msgNum",
2017 FT_UINT32, BASE_DEC, NULL, 0,
2021 { "Cookie", "fmp.cookie",
2022 FT_UINT32, BASE_HEX, NULL, 0,
2023 "Cookie for FMP_REQUEST_QUEUED Resp", HFILL }},
2026 { "File Size", "fmp.fileSize",
2027 FT_UINT64, BASE_DEC, NULL, 0,
2030 { &hf_fmp_extentList_len,
2031 { "Extent List Length", "fmp.extentList_len",
2032 FT_UINT32, BASE_DEC, NULL, 0,
2035 { &hf_fmp_extent_state,
2036 { "Extent State", "fmp.extentState",
2037 FT_UINT32,BASE_DEC, VALS(fmp_extentState_vals), 0,
2040 { &hf_fmp_firstLogBlk,
2041 { "First Logical File Block", "fmp.firstLogBlk",
2042 FT_UINT32, BASE_DEC, NULL, 0,
2046 { "Number of Blocks", "fmp.numBlks",
2047 FT_UINT32, BASE_DEC, NULL, 0,
2051 { "Volume ID inside DART", "fmp.volID",
2052 FT_UINT32, BASE_HEX, NULL, 0,
2055 { &hf_fmp_startOffset,
2056 { "Start Offset", "fmp.startOffset",
2057 FT_UINT32, BASE_DEC, NULL, 0,
2060 { &hf_fmp_start_offset64,
2061 { "Start offset", "fmp.start_offset64",
2062 FT_UINT64, BASE_DEC, NULL, 0,
2063 "Start Offset of extentEx", HFILL }},
2067 FT_UINT64, BASE_DEC, NULL, 0,
2068 "End Of File", HFILL }},
2071 { "Plug In Cmd ID", "fmp.plugInID",
2072 FT_BYTES, BASE_NONE, NULL, 0,
2075 { &hf_fmp_plugInBuf,
2076 { "Plug In Args", "fmp.plugIn",
2077 FT_BYTES, BASE_NONE, NULL, 0,
2081 { "OS Major", "fmp.os_major",
2082 FT_UINT32, BASE_DEC, NULL, 0,
2086 { "OS Minor", "fmp.os_minor",
2087 FT_UINT32, BASE_DEC, NULL, 0,
2091 { "OS Name", "fmp.os_name",
2092 FT_STRING, BASE_NONE, NULL, 0,
2096 { "Mount Path", "fmp.Path",
2097 FT_STRING, BASE_NONE, NULL, 0,
2101 { "OS Path", "fmp.os_patch",
2102 FT_UINT32, BASE_DEC, NULL, 0,
2106 { "OS Build", "fmp.os_build",
2107 FT_UINT32, BASE_DEC, NULL, 0,
2110 { &hf_fmp_server_version_string,
2111 { "Server Version String", "fmp.server_version_string",
2112 FT_STRING, BASE_NONE, NULL, 0,
2115 { &hf_fmp_description,
2116 { "Error Description", "fmp.description",
2117 FT_STRING, BASE_NONE, NULL, 0,
2118 "Client Error Description", HFILL }},
2120 { &hf_fmp_nfsv3Attr_type,
2121 { "Type", "fmp.nfsv3Attr_type",
2122 FT_UINT32, BASE_DEC, NULL, 0,
2123 "NFSV3 Attr Type", HFILL }},
2125 { &hf_fmp_nfsv3Attr_mode,
2126 { "Mode", "fmp.nfsv3Attr_mod",
2127 FT_UINT32, BASE_DEC, NULL, 0,
2130 { &hf_fmp_nfsv3Attr_nlink,
2131 { "nlink", "fmp.nfsv3Attr_nlink",
2132 FT_UINT32, BASE_DEC, NULL, 0,
2135 { &hf_fmp_nfsv3Attr_uid,
2136 { "uid", "fmp.nfsv3Attr_uid",
2137 FT_UINT32, BASE_DEC, NULL, 0,
2140 { &hf_fmp_nfsv3Attr_gid,
2141 { "gid", "fmp.nfsv3Attr_gid",
2142 FT_UINT32, BASE_DEC, NULL, 0,
2145 /* for nfsv3Attr_size use hf_fmp_fileSize */
2146 { &hf_fmp_nfsv3Attr_used,
2147 { "Used", "fmp.nfsv3Attr_used",
2148 FT_UINT64, BASE_DEC, NULL, 0,
2151 { &hf_fmp_nfsv3Attr_rdev,
2152 { "rdev", "fmp.nfsv3Attr_rdev",
2153 FT_UINT64, BASE_DEC, NULL, 0,
2156 { &hf_fmp_nfsv3Attr_fsid,
2157 { "fsid", "fmp.nfsv3Attr_fsid",
2158 FT_UINT64, BASE_DEC, NULL, 0,
2161 { &hf_fmp_nfsv3Attr_fileid,
2162 { "File ID", "fmp.nfsv3Attr_fileid",
2163 FT_UINT64, BASE_DEC, NULL, 0,
2167 { "Command", "fmp.cmd",
2168 FT_UINT32, BASE_DEC, NULL, 0,
2171 { &hf_fmp_topVolumeId,
2172 { "Top Volume ID", "fmp.topVolumeId",
2173 FT_UINT32, BASE_HEX, NULL, 0,
2177 { "number of volumes", "fmp.cursor",
2178 FT_UINT32, BASE_DEC, NULL, 0,
2182 { "offset", "fmp.offset64",
2183 FT_UINT64, BASE_DEC, NULL, 0,
2186 { &hf_fmp_slice_size,
2187 { "size of the slice", "fmp.slice_size",
2188 FT_UINT64, BASE_DEC, NULL, 0,
2192 { "Volume ID's", "fmp.volume",
2193 FT_UINT32, BASE_HEX, NULL, 0,
2196 { &hf_fmp_stripeSize,
2197 { "size of the stripe", "fmp.stripeSize",
2198 FT_UINT64, BASE_DEC, NULL, 0,
2201 { &hf_fmp_firstLogBlk64,
2202 { "First Logical Block", "fmp.firstLogBlk64",
2203 FT_UINT64, BASE_DEC, NULL, 0,
2206 { &hf_fmp_native_protocol,
2207 { "Native Protocol", "fmp.native_protocol",
2208 FT_UINT32, BASE_DEC, VALS(fmp_native_protocol_vals), 0,
2211 { &hf_fmp_encoding_mode,
2212 { "Encoding Mode", "fmp.encoding_mode",
2213 FT_UINT32, BASE_DEC, VALS(fmp_encoding_mode_vals), 0,
2216 { &hf_fmp_capability,
2217 { "Volume Mgmt Capability", "fmp.capability",
2218 FT_UINT32, BASE_DEC, VALS(fmp_volume_mgmt_capability_vals), 0,
2221 { &hf_fmp_devSerial_query_cmd,
2222 { "Query Command", "fmp.devSerial.query_cmd",
2223 FT_UINT32, BASE_DEC, VALS(fmp_query_cmd_vals), 0,
2226 { &hf_fmp_volume_desc,
2227 { "VOLUME", "fmp.volume_desc",
2228 FT_UINT32, BASE_DEC, VALS(fmp_volume_desc_vals), 0,
2231 { &hf_fmp_disk_identifier,
2232 { "DISK IDENTIFIER", "fmp.disk_identifier",
2233 FT_UINT32, BASE_DEC, VALS(fmp_disk_identifier_vals), 0,
2236 { &hf_fmp_volume_mgmt_type,
2237 { "Volume Mgmt Type", "fmp.volume_mgmt_type",
2238 FT_UINT32, BASE_DEC, VALS(fmp_volume_mgmt_type_vals), 0,
2241 { &hf_fmp_notify_protocol,
2242 { "Protocol", "fmp.notify_protocol",
2243 FT_UINT32, BASE_DEC, VALS(fmp_notify_protocol_vals), 0,
2246 { &hf_fmp_client_error_number,
2247 { "CLIENT Error Number", "fmp.client_error_number",
2248 FT_UINT32, BASE_DEC, VALS(fmp_client_error_number_vals), 0,
2251 /* Generated from convert_proto_tree_add_text.pl */
2252 { &hf_fmp_fid, { "fid", "fmp.fid", FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2253 { &hf_fmp_tid, { "tid", "fmp.tid", FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2254 { &hf_fmp_uid, { "uid", "fmp.uid", FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2255 { &hf_fmp_fsid, { "FsID", "fmp.fsid", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2256 { &hf_fmp_cifsport, { "cifsPort", "fmp.cifsport", FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2257 { &hf_fmp_number_of_disk, { "Number of Disk", "fmp.number_of_disk", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2258 { &hf_fmp_length_of_list, { "Length of List", "fmp.length_of_list", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2259 { &hf_fmp_sigoffset, { "sigOffset", "fmp.sigoffset", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2260 { &hf_fmp_length_of_volume_list, { "Length of volume List", "fmp.length_of_volume_list", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2261 { &hf_fmp_blockindex, { "blockIndex", "fmp.blockindex", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2262 { &hf_fmp_cap, { "Capabilities", "fmp.cap", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2263 { &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 }},
2264 { &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 }},
2265 { &hf_fmp_cap_cifsv2, { "CAP_CIFSV2", "fmp.cap.cifsv2", FT_BOOLEAN, 32, TFS(&tfs_yes_no), FMP_CAP_CIFSV2, NULL, HFILL }},
2266 { &hf_fmp_mtime, { "mtime", "fmp.mtime", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2267 { &hf_fmp_atime, { "atime", "fmp.atime", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2268 { &hf_fmp_ctime, { "ctime", "fmp.ctime", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2269 { &hf_fmp_heartbeat_interval, { "Heartbeat interval", "fmp.heartbeat_interval", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2270 { &hf_fmp_volindex, { "volIndex", "fmp.volindex", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2273 static gint *ett[] = {
2278 &ett_fmp_fileHandle,
2280 &ett_HierVolumeDescription,
2284 module_t *fmp_module;
2285 proto_fmp = proto_register_protocol("File Mapping Protocol", "FMP", "fmp");
2287 proto_register_field_array(proto_fmp, hf, array_length(hf));
2288 proto_register_subtree_array(ett, array_length(ett));
2290 fmp_module=prefs_register_protocol(proto_fmp, NULL);
2292 prefs_register_bool_preference(fmp_module, "fhandle_find_both_reqrep",
2293 "Fhandle filters finds both request/response",
2294 "With this option display filters for fmp fhandle a RPC call,"
2295 " even if the actual fhandle is only present in one of the packets",
2296 &fmp_fhandle_reqrep_matching);
2301 proto_reg_handoff_fmp(void)
2303 /* Register the protocol as RPC */
2304 rpc_init_prog(proto_fmp, FMP_PROGRAM, ett_fmp,
2305 G_N_ELEMENTS(fmp_vers_info), fmp_vers_info);
2309 * Editor modelines - http://www.wireshark.org/tools/modelines.html
2314 * indent-tabs-mode: nil
2317 * vi: set shiftwidth=4 tabstop=8 expandtab:
2318 * :indentSize=4:tabSize=8:noTabs=true: