Coverage Report

Created: 2026-11-12 07:01

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-fmp.c
Line
Count
Source
1
/* packet-fmp.c
2
 * Routines for fmp dissection
3
 *
4
 * Wireshark - Network traffic analyzer
5
 * By Gerald Combs <gerald@wireshark.org>
6
 * Copyright 1998 Gerald Combs
7
 *
8
 * SPDX-License-Identifier: GPL-2.0-or-later
9
 */
10
11
#include "config.h"
12
13
#include <epan/packet.h>
14
#include <epan/prefs.h>
15
#include <epan/tfs.h>
16
#include "packet-fmp.h"
17
#include "packet-rpc.h"
18
19
void proto_register_fmp(void);
20
void proto_reg_handoff_fmp(void);
21
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;
32
33
static int proto_fmp;
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;
110
111
static int ett_fmp;
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;
119
120
static const value_string fmp_encoding_mode_vals[] = {
121
    {FMP_ASCII, "ASCII"},
122
    {FMP_UTF8, "UTF8"},
123
    {FMP_UNICODE1, "UNICODE"},
124
    {0,NULL}
125
};
126
127
static bool fmp_fhandle_reqrep_matching;
128
129
static int
130
dissect_fmp_genString(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *tree)
131
0
{
132
0
    uint32_t enc_mode = tvb_get_ntohl(tvb, offset);
133
134
0
    proto_tree_add_item(tree, hf_fmp_encoding_mode, tvb, offset, 4, ENC_BIG_ENDIAN);
135
0
    offset += 4;
136
137
0
    if (try_val_to_str(enc_mode, fmp_encoding_mode_vals) == NULL)
138
0
        return offset;
139
140
0
    offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_path,
141
0
                                offset, NULL);
142
143
0
    return offset;
144
0
}
145
146
static int
147
get_fileHandleSrc_size(tvbuff_t *tvb, int offset)
148
0
{
149
0
    int            length;
150
0
    nativeProtocol np;
151
152
0
    np = (nativeProtocol)tvb_get_ntohl(tvb, offset);
153
154
0
    switch (np) {
155
0
    case FMP_PATH:
156
0
        length =  4 + FMP_MAX_PATH_LEN;
157
0
        break;
158
0
    case FMP_NFS:
159
0
        length =  8 + tvb_get_ntohl(tvb, offset + 4);
160
0
        break;
161
0
    case FMP_CIFS:
162
0
        length =  10;
163
0
        break;
164
0
    case FMP_FMP:
165
0
        length =  8 + tvb_get_ntohl(tvb, offset + 4);
166
0
        break;
167
0
    case FMP_FS_ONLY:
168
0
        length =  8;
169
0
        break;
170
0
    case FMP_SHARE:
171
        /* FALLTHROUGH */
172
0
    case FMP_MOUNT:
173
0
        length =  8 + FMP_MAX_PATH_LEN;
174
0
        break;
175
0
    default:
176
0
        length =  4;
177
0
        break;
178
0
    }
179
180
0
    return length;
181
0
}
182
183
static int
184
dissect_fmp_fileHandleSrc(tvbuff_t *tvb, int offset, packet_info *pinfo,
185
                          proto_tree *tree)
186
0
{
187
0
    nativeProtocol      np;
188
189
0
    proto_tree *fileHandleTree;
190
0
    int         length;
191
192
0
    length = get_fileHandleSrc_size(tvb, offset);
193
194
0
    fileHandleTree = proto_tree_add_subtree(tree, tvb, offset, length,
195
0
                                          ett_fmp_fileHandle, NULL, "Source File Handle");
196
197
0
    np = (nativeProtocol)tvb_get_ntohl(tvb, offset);
198
0
    proto_tree_add_item(fileHandleTree, hf_fmp_native_protocol, tvb, offset, 4, ENC_BIG_ENDIAN);
199
0
    offset += 4;
200
201
0
    switch (np) {
202
0
    case FMP_PATH:
203
0
        offset = dissect_rpc_string(tvb, pinfo, fileHandleTree,
204
0
                                    hf_fmp_mount_path, offset, NULL);
205
0
        break;
206
207
0
    case FMP_NFS:
208
0
        offset = dissect_rpc_data(tvb, pinfo, fileHandleTree,
209
0
                                  hf_fmp_nfsFHandle, offset);
210
0
        break;
211
212
0
    case FMP_CIFS:
213
0
        proto_tree_add_item(fileHandleTree, hf_fmp_fid, tvb, offset, 2, ENC_BIG_ENDIAN);
214
0
        offset += 2;
215
216
0
        proto_tree_add_item(fileHandleTree, hf_fmp_tid, tvb, offset, 2, ENC_BIG_ENDIAN);
217
0
        offset += 2;
218
219
0
        proto_tree_add_item(fileHandleTree, hf_fmp_uid, tvb, offset, 2, ENC_BIG_ENDIAN);
220
0
        offset += 2;
221
0
        break;
222
223
0
    case FMP_FMP:
224
0
        offset = dissect_rpc_data(tvb, pinfo, fileHandleTree,
225
0
                                  hf_fmp_fmpFHandle, offset);
226
0
        break;
227
228
0
    case FMP_FS_ONLY:
229
0
        proto_tree_add_item(fileHandleTree, hf_fmp_fsid, tvb, offset, 4, ENC_BIG_ENDIAN);
230
0
        offset += 4;
231
0
        break;
232
233
0
    case FMP_SHARE:
234
0
        offset = dissect_fmp_genString(tvb, pinfo, offset, fileHandleTree);
235
0
        break;
236
237
0
    case FMP_MOUNT:
238
0
        offset = dissect_fmp_genString(tvb, pinfo, offset, fileHandleTree);
239
0
        break;
240
241
0
    case FMP_CIFSV2:
242
0
        proto_tree_add_item(fileHandleTree, hf_fmp_fid, tvb, offset, 2, ENC_BIG_ENDIAN);
243
0
        offset += 2;
244
245
0
        proto_tree_add_item(fileHandleTree, hf_fmp_tid, tvb, offset, 2, ENC_BIG_ENDIAN);
246
0
        offset += 2;
247
248
0
        proto_tree_add_item(fileHandleTree, hf_fmp_uid, tvb, offset, 2, ENC_BIG_ENDIAN);
249
0
        offset += 2;
250
251
0
        proto_tree_add_item(fileHandleTree, hf_fmp_cifsport, tvb, offset, 2, ENC_BIG_ENDIAN);
252
0
        offset += 2;
253
0
        break;
254
0
    case FMP_UNC:
255
0
        offset = dissect_fmp_genString(tvb, pinfo, offset, fileHandleTree);
256
0
        break;
257
258
0
    default:
259
0
        break;
260
0
    }
261
262
0
    return offset;
263
0
}
264
265
static int
266
dissect_fmp_extentState(tvbuff_t *tvb, int offset, proto_tree *tree)
267
0
{
268
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_extent_state,
269
0
                                offset);
270
271
0
    return offset;
272
0
}
273
274
static int
275
dissect_fmp_extent(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, uint32_t ext_num)
276
0
{
277
0
    proto_tree *extTree;
278
279
0
    extTree = proto_tree_add_subtree_format(tree, tvb, offset, 20 ,
280
0
                                  ett_fmp_ext, NULL, "Extent (%u)", (uint32_t) ext_num);
281
282
0
    offset = dissect_rpc_uint32(tvb,  extTree, hf_fmp_firstLogBlk,
283
0
                                offset);
284
0
    offset = dissect_rpc_uint32(tvb, extTree, hf_fmp_numBlks,
285
0
                                offset);
286
0
    offset = dissect_rpc_uint32(tvb, extTree, hf_fmp_volID, offset);
287
0
    offset = dissect_rpc_uint32(tvb, extTree, hf_fmp_startOffset,
288
0
                                offset);
289
0
    offset = dissect_fmp_extentState(tvb, offset, extTree);
290
291
0
    return offset;
292
0
}
293
294
static int
295
dissect_fmp_extentList(tvbuff_t *tvb, int offset, packet_info *pinfo,
296
                       proto_tree *tree)
297
0
{
298
0
    uint32_t    numExtents;
299
0
    uint32_t    totalLength;
300
0
    proto_tree *extListTree;
301
0
    uint32_t    i;
302
303
0
    numExtents = tvb_get_ntohl(tvb, offset);
304
0
    totalLength = 4 + (20 * numExtents);
305
306
0
    extListTree =  proto_tree_add_subtree(tree, tvb, offset, totalLength,
307
0
                                       ett_fmp_extList, NULL, "Extent List");
308
309
0
    offset = dissect_rpc_uint32(tvb, extListTree,
310
0
                                hf_fmp_extentList_len, offset);
311
312
0
    for (i = 0; i < numExtents; i++) {
313
0
        offset = dissect_fmp_extent(tvb, offset, pinfo, extListTree, i+1);
314
0
    }
315
316
0
    return offset;
317
0
}
318
319
320
static int
321
dissect_fmp_extentListEx(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
322
                         proto_tree *tree)
323
0
{
324
0
    uint32_t    numExtents;
325
0
    proto_tree *extListTree;
326
0
    uint32_t    i;
327
328
0
    numExtents = tvb_get_ntohl(tvb, offset);
329
330
0
    offset += 4;
331
332
0
    for (i = 0; i < numExtents; i++) {
333
0
        extListTree =  proto_tree_add_subtree(tree, tvb, offset, 28,
334
0
                                           ett_fmp_extList, NULL, "Extent List");
335
336
0
        offset = dissect_rpc_uint64(tvb,extListTree , hf_fmp_firstLogBlk64,  offset);
337
338
0
        offset = dissect_rpc_uint32(tvb,extListTree , hf_fmp_numBlksReq,
339
0
                                    offset);
340
341
0
        offset = dissect_rpc_uint32(tvb,extListTree , hf_fmp_volID, offset);
342
343
0
        offset = dissect_rpc_uint64(tvb,extListTree , hf_fmp_start_offset64, offset);
344
345
0
        offset = dissect_fmp_extentState(tvb, offset, extListTree);
346
347
0
    }
348
349
0
    return offset;
350
0
}
351
352
353
static int
354
dissect_plugInID(tvbuff_t *tvb, int offset, proto_tree *tree)
355
0
{
356
0
    if (!tree) {
357
0
        return offset;
358
0
    }
359
360
0
    proto_tree_add_item(tree, hf_fmp_plugInID, tvb, offset, FMP_PLUG_IN_ID_SZ,
361
0
                        ENC_NA);
362
0
    return offset;
363
0
}
364
365
static int
366
dissect_fmp_flushCmd(tvbuff_t *tvb, int offset,  proto_tree *tree)
367
0
{
368
0
    uint32_t cmd;
369
0
    char    msg[MAX_MSG_SIZE];
370
0
    uint32_t bitValue;
371
0
    int     i;
372
373
0
    if (tree) {
374
0
        cmd = tvb_get_ntohl(tvb, offset);
375
376
        /* Initialize the message for an empty string */
377
0
        msg[0] = '\0';
378
379
0
        for (i = 0; cmd != 0 && i < 32; i++) {
380
381
0
            bitValue = 1U << i;
382
383
0
            if (cmd & bitValue) {
384
0
                switch (bitValue) {
385
0
                case FMP_COMMIT_SPECIFIED:
386
0
                    (void) g_strlcat(msg, "COMMIT_SPECIFIED", MAX_MSG_SIZE);
387
0
                    break;
388
0
                case FMP_RELEASE_SPECIFIED:
389
0
                    (void) g_strlcat(msg, "RELEASE_SPECIFIED", MAX_MSG_SIZE);
390
0
                    break;
391
0
                case FMP_RELEASE_ALL:
392
0
                    (void) g_strlcat(msg, "RELEASE_ALL", MAX_MSG_SIZE);
393
0
                    break;
394
0
                case FMP_CLOSE_FILE:
395
0
                    (void) g_strlcat(msg, "CLOSE_FILE", MAX_MSG_SIZE);
396
0
                    break;
397
0
                case FMP_UPDATE_TIME:
398
0
                    (void) g_strlcat(msg, "UPDATE_TIME", MAX_MSG_SIZE);
399
0
                    break;
400
0
                case FMP_ACCESS_TIME:
401
0
                    (void) g_strlcat(msg, "ACCESS_TIME", MAX_MSG_SIZE);
402
0
                    break;
403
0
                default:
404
0
                    (void) g_strlcat(msg, "UNKNOWN", MAX_MSG_SIZE);
405
0
                    break;
406
0
                }
407
408
                /* clear the bit that we processed */
409
0
                cmd &= ~bitValue;
410
411
                /* add a "bitwise inclusive OR" symbol between cmds */
412
0
                if (cmd) {
413
0
                    (void) g_strlcat(msg, " | ", MAX_MSG_SIZE);
414
0
                }
415
0
            }
416
0
        }
417
418
0
        if (strlen(msg) == 0) {
419
0
            (void) g_strlcpy(msg, "No command specified", MAX_MSG_SIZE);
420
0
        }
421
422
0
        proto_tree_add_uint_format_value(tree, hf_fmp_cmd, tvb, offset, 4, cmd, "%s", msg);
423
0
    }
424
0
    offset += 4;
425
0
    return offset;
426
0
}
427
428
static int
429
dissect_InterpretVolMgtStuff(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *tree)
430
0
{
431
0
    unsigned length, numdisks, i, j;
432
433
0
    proto_tree_add_item_ret_uint(tree, hf_fmp_number_of_disk, tvb, offset, 4, ENC_BIG_ENDIAN, &numdisks);
434
0
    offset += 4;
435
436
0
    for (i=0; i<numdisks; i++) {
437
0
        offset = dissect_rpc_uint64(tvb, tree, hf_fmp_sig_offset, offset);
438
0
        proto_tree_add_item_ret_uint(tree, hf_fmp_length_of_list, tvb, offset, 4, ENC_BIG_ENDIAN, &length);
439
0
        offset += 4;
440
441
0
        for (j=0; j<length; j++) {
442
0
            proto_tree_add_item(tree, hf_fmp_sigoffset, tvb, offset, 4, ENC_BIG_ENDIAN);
443
0
            offset += 4;
444
0
            offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_dskSigEnt_val,
445
0
                                        offset, NULL);
446
447
0
        }
448
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_volID, offset);
449
450
0
    }
451
0
    return offset;
452
453
454
0
}
455
456
static int
457
dissect_fmp_capability(tvbuff_t *tvb, int offset, proto_tree *tree)
458
0
{
459
0
    proto_tree_add_item(tree, hf_fmp_capability, tvb, offset, 4, ENC_BIG_ENDIAN);
460
0
    return offset+4;
461
0
}
462
463
static int
464
dissect_fmp_timeval(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
465
                    proto_tree *tree, int hf_time, int hf_time_sec,
466
                    int hf_time_nsec)
467
0
{
468
0
    if (tree) {
469
0
        nstime_t ts;
470
471
0
        proto_item* time_item;
472
0
        proto_tree* time_tree;
473
474
0
        ts.secs = tvb_get_ntohl(tvb, offset+0);
475
0
        ts.nsecs = tvb_get_ntohl(tvb, offset+4);
476
477
0
        time_item = proto_tree_add_time(tree, hf_time, tvb, offset, 8, &ts);
478
0
        time_tree = proto_item_add_subtree(time_item, ett_fmp_timeval);
479
480
0
        proto_tree_add_uint(time_tree, hf_time_sec, tvb, offset, 4,
481
0
                            (uint32_t) ts.secs);
482
0
        proto_tree_add_uint(time_tree, hf_time_nsec, tvb, offset+4, 4,
483
0
                            ts.nsecs);
484
0
    }
485
0
    offset += 8;
486
0
    return offset;
487
0
}
488
489
static int
490
dissect_fmp_heartBeatIntv(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
491
                          proto_tree *tree)
492
0
{
493
0
    proto_tree_add_item(tree, hf_fmp_heartbeat_interval, tvb, offset, 8, ENC_BIG_ENDIAN);
494
0
    offset += 8;
495
0
    return offset;
496
0
}
497
498
static int
499
dissect_fmp_status(tvbuff_t *tvb, int offset, proto_tree *tree, int *rval)
500
0
{
501
0
    fmpStat status;
502
503
0
    status = (fmpStat)tvb_get_ntohl(tvb, offset);
504
505
0
    switch (status) {
506
0
    case FMP_OK:
507
0
        *rval = 0;
508
0
        break;
509
0
    case FMP_IOERROR:
510
0
        *rval = 1;
511
0
        break;
512
0
    case FMP_NOMEM:
513
0
        *rval = 1;
514
0
        break;
515
0
    case FMP_NOACCESS:
516
0
        *rval = 1;
517
0
        break;
518
0
    case FMP_INVALIDARG:
519
520
0
        *rval = 1;
521
0
        break;
522
0
    case FMP_FSFULL:
523
0
        *rval = 0;
524
0
        break;
525
0
    case FMP_QUEUE_FULL:
526
0
    case FMP_NOTIFY_ERROR:
527
0
    case FMP_WRITER_LOST_BLK:
528
0
    case FMP_WRONG_MSG_NUM:
529
0
    case FMP_SESSION_LOST:
530
0
    case FMP_REQUEST_CANCELLED:
531
0
        *rval = 1;
532
0
        break;
533
0
    case FMP_HOT_SESSION:
534
0
        *rval = 0;
535
0
        break;
536
0
    case FMP_COLD_SESSION:
537
0
        *rval = 0;
538
0
        break;
539
0
    case FMP_CLIENT_TERMINATED:
540
0
        *rval = 0;
541
0
        break;
542
0
    case FMP_REQUEST_QUEUED:
543
0
        *rval = 0;
544
0
        break;
545
0
    case FMP_FALL_BACK:
546
0
        *rval = 0;
547
0
        break;
548
0
    case FMP_WRITER_ZEROED_BLK:
549
0
        *rval = 0;
550
0
        break;
551
0
    case FMP_WRONG_HANDLE:
552
0
        *rval = 0;
553
0
        break;
554
0
    case FMP_DUPLICATE_OPEN:
555
0
        *rval = 1;
556
0
        break;
557
0
    case FMP_PLUGIN_NOFUNC:
558
0
        *rval = 1;
559
0
        break;
560
0
    default:
561
0
        *rval = 1;
562
0
        break;
563
0
    }
564
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_status , offset);
565
0
    return offset;
566
0
}
567
568
static int
569
dissect_fmp_devSerial(tvbuff_t *tvb, int offset, packet_info *pinfo,
570
                      proto_tree *tree)
571
0
{
572
0
    proto_tree_add_item(tree, hf_fmp_devSerial_query_cmd, tvb, offset, 4, ENC_BIG_ENDIAN);
573
0
    offset += 4;
574
575
0
    proto_tree_add_item(tree, hf_fmp_sigoffset, tvb, offset, 4, ENC_BIG_ENDIAN);
576
0
    offset += 4;
577
578
0
    offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_devSignature,
579
0
                                offset, NULL);
580
0
    return offset;
581
0
}
582
583
static int
584
dissect_fmp_VolumeDescription(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree * tree)
585
0
{
586
0
    unsigned               i,length;
587
0
    proto_tree            *Hietree;
588
0
    proto_item            *ti;
589
0
    fmpVolumeType          volumeType;
590
0
    fmpDiskIdentifierType  diskIdentifierType;
591
592
0
    volumeType = (fmpVolumeType)tvb_get_ntohl(tvb, offset);
593
0
    ti = proto_tree_add_item(tree, hf_fmp_volume_desc, tvb, offset, 4, ENC_BIG_ENDIAN);
594
0
    Hietree = proto_item_add_subtree(ti, ett_HierVolumeDescription);
595
0
    offset += 4;
596
597
0
    switch (volumeType) {
598
599
0
    case FMP_VOLUME_DISK:
600
0
        offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volID, offset);
601
0
        offset += 8; /* blockIndex64 */
602
0
        diskIdentifierType = (fmpDiskIdentifierType)tvb_get_ntohl(tvb, offset);
603
0
        proto_tree_add_item(Hietree, hf_fmp_disk_identifier, tvb, offset, 4, ENC_BIG_ENDIAN);
604
0
        offset += 4;
605
606
0
        switch (diskIdentifierType) {
607
0
        case FMP_DISK_IDENTIFIER_SIGNATURE:
608
0
            offset = dissect_rpc_uint64(tvb, Hietree, hf_fmp_sig_offset,  offset);
609
0
            proto_tree_add_item_ret_uint(Hietree, hf_fmp_length_of_list, tvb, offset, 4, ENC_BIG_ENDIAN, &length);
610
0
            offset += 4;
611
612
0
            for (i=0; i<length; i++) {
613
0
                proto_tree_add_item(Hietree, hf_fmp_sigoffset, tvb, offset, 4, ENC_BIG_ENDIAN);
614
0
                offset += 4;
615
0
                offset = dissect_rpc_string(tvb, pinfo, Hietree, hf_fmp_dskSigEnt_val,  offset, NULL);
616
617
618
0
            }
619
0
            break;
620
621
0
        case FMP_DISK_IDENTIFIER_SERIAL:
622
0
            offset = dissect_fmp_devSerial(tvb, offset, pinfo, Hietree);
623
0
            break;
624
0
        }
625
626
0
        break;
627
0
    case FMP_VOLUME_SLICE:
628
0
        offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volID, offset);
629
630
0
        offset = dissect_rpc_uint64(tvb, Hietree, hf_fmp_offset64, offset);
631
632
0
        offset = dissect_rpc_uint64(tvb, Hietree, hf_fmp_slice_size, offset);
633
634
0
        offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volume, offset);
635
636
0
        break;
637
638
0
    case FMP_VOLUME_STRIPE:
639
0
        offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volID, offset);
640
641
0
        offset = dissect_rpc_uint64(tvb, Hietree, hf_fmp_stripeSize, offset);
642
0
        proto_tree_add_item_ret_uint(Hietree, hf_fmp_length_of_list, tvb, offset, 4, ENC_BIG_ENDIAN, &length);
643
0
        offset += 4;
644
645
0
        for (i=0; i<length; i++) {
646
0
            offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volume, offset); /* FIXME: Size or length not know */
647
648
0
        }
649
0
        break;
650
651
0
    case FMP_VOLUME_META:
652
0
        offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volID, offset);
653
654
0
        proto_tree_add_item_ret_uint(Hietree, hf_fmp_length_of_list, tvb, offset, 4, ENC_BIG_ENDIAN, &length);
655
0
        offset += 4;
656
0
        for (i=0; i<length; i++) {
657
0
            offset = dissect_rpc_uint32(tvb, Hietree, hf_fmp_volume, offset); /* FIXME: Size or length not know */
658
0
        }
659
0
        break;
660
0
    default:
661
0
        break;
662
0
    }
663
0
    return offset;
664
0
}
665
666
667
static int
668
dissect_fmp_Hiervolume(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree * tree)
669
0
{
670
0
    unsigned vollength;
671
672
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_topVolumeId, offset);
673
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cursor, offset);
674
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie, offset);
675
676
    /* hierarchical description of volume.  Each volume describes a
677
       piece of the entire hierarchy and is guaranteed to only refer to
678
       volumes that have already been described by the data structure up
679
       to this point in time.  In some extreme cases, the number of
680
       volumes and their descriptions may be to large to fit in a single
681
       RPC reply.  In this case, the application may send getVolumeInfo
682
       requests for the specific topVolumeId -- specifying the number of
683
       volumes already received by the client, and the cookie.  The
684
       server is then responsible for sending another message containing
685
       additional volumes.  These RPCs exchanges may continue multiple
686
       times, until the client has fetched the entire hierarchical
687
       volume description.  If the volume hierarchy changes during a
688
       multiple RPC sequence, the server will return an
689
       FMP_VOLUME_CHANGED error, and the client must discard all
690
       information already received and restart the request with
691
       FMP_Mount.
692
    */
693
694
0
    proto_tree_add_item_ret_uint(tree, hf_fmp_length_of_volume_list, tvb, offset, 4, ENC_BIG_ENDIAN, &vollength);
695
0
    offset += 4;
696
0
    while (vollength) {
697
0
        offset =  dissect_fmp_VolumeDescription(tvb, pinfo, offset, tree);
698
0
        vollength--;
699
0
    }
700
701
0
    return offset;
702
703
0
}
704
705
706
707
static int
708
dissect_fmp_vmInfo(tvbuff_t *tvb, int offset, packet_info *pinfo,
709
                   proto_tree *tree)
710
0
{
711
0
    int     vmType;
712
0
    uint32_t phyVolList_len;
713
714
0
    vmType = tvb_get_ntohl(tvb, offset);
715
0
    proto_tree_add_item(tree, hf_fmp_volume_mgmt_type, tvb, offset, 4, ENC_BIG_ENDIAN);
716
0
    offset += 4;
717
718
0
    switch (vmType) {
719
0
    case FMP_SERVER_BASED:
720
        /*
721
         * Need to finish
722
         */
723
0
        phyVolList_len = tvb_get_ntohl(tvb, offset);
724
0
        offset += 4;
725
726
        /*
727
         * Loop through and print all of the devInfo
728
         * structures.
729
         */
730
0
        while (phyVolList_len) {
731
0
            offset = dissect_fmp_devSerial(tvb, offset, pinfo, tree);
732
0
            proto_tree_add_item(tree, hf_fmp_volindex, tvb, offset, 4, ENC_BIG_ENDIAN);
733
0
            offset += 4;
734
0
            phyVolList_len--;
735
0
        }
736
0
        break;
737
738
0
    case FMP_THIRD_PARTY:
739
0
        offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_volHandle,
740
0
                                    offset, NULL);
741
0
        break;
742
743
0
    case FMP_CLIENT_BASED_DART:
744
0
        offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_volHandle,
745
0
                                    offset, NULL);
746
0
        break;
747
748
0
    case FMP_CLIENT_BASED_SIMPLE:
749
        /*
750
         * Decoding simpleVolInfo
751
         */
752
0
        offset = dissect_fmp_devSerial(tvb, offset, pinfo, tree);
753
754
0
        proto_tree_add_item(tree, hf_fmp_blockindex, tvb, offset, 4, ENC_BIG_ENDIAN);
755
0
        offset += 4;
756
0
        break;
757
758
0
    case FMP_DISK_SIGNATURE:
759
0
        offset = dissect_InterpretVolMgtStuff(tvb, pinfo, offset, tree);
760
0
        break;
761
762
0
    case FMP_HIERARCHICAL_VOLUME:
763
0
        offset = dissect_fmp_Hiervolume(tvb, pinfo, offset, tree);
764
0
        break;
765
766
0
    default:
767
0
        break;
768
0
    }
769
770
0
    return offset;
771
0
}
772
773
static int
774
dissect_fmp_notifyProtocol(tvbuff_t *tvb, int offset, proto_tree *tree)
775
0
{
776
0
    proto_tree_add_item(tree, hf_fmp_notify_protocol, tvb, offset, 4, ENC_BIG_ENDIAN);
777
0
    return (offset+4);
778
0
}
779
780
781
static int
782
dissect_fmp_capabilities(tvbuff_t *tvb, int offset, proto_tree *tree)
783
0
{
784
0
    static int * const capabilities[] = {
785
0
        &hf_fmp_cap_revoke_handle_list,
786
0
        &hf_fmp_cap_unc_names,
787
0
        &hf_fmp_cap_cifsv2,
788
0
        NULL
789
0
    };
790
791
0
    proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_fmp_cap, ett_capabilities,
792
0
                        capabilities, ENC_BIG_ENDIAN, BMT_NO_APPEND);
793
0
    return (offset+4);
794
0
}
795
796
static int
797
dissect_fmp_cerrInfo(tvbuff_t *tvb, int offset, proto_tree *tree)
798
0
{
799
0
    int            rval;
800
801
0
    proto_tree_add_item(tree, hf_fmp_client_error_number, tvb, offset, 4, ENC_BIG_ENDIAN);
802
0
    offset += 4;
803
804
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
805
806
0
    return offset;
807
0
}
808
809
static int
810
dissect_fmp_attrs(tvbuff_t *tvb, int offset, proto_tree *tree)
811
0
{
812
0
    proto_tree *attrsTree;
813
814
0
    attrsTree =  proto_tree_add_subtree(tree, tvb, offset, 84,
815
0
                                     ett_attrs, NULL, "Attribute: ");
816
0
    offset = dissect_rpc_uint32(tvb, attrsTree, hf_fmp_nfsv3Attr_type, offset);
817
0
    offset = dissect_rpc_uint32(tvb, attrsTree, hf_fmp_nfsv3Attr_mode, offset);
818
0
    offset = dissect_rpc_uint32(tvb, attrsTree, hf_fmp_nfsv3Attr_nlink, offset);
819
0
    offset = dissect_rpc_uint32(tvb, attrsTree, hf_fmp_nfsv3Attr_uid, offset);
820
0
    offset = dissect_rpc_uint32(tvb, attrsTree, hf_fmp_nfsv3Attr_gid, offset);
821
0
    offset = dissect_rpc_uint64(tvb, attrsTree, hf_fmp_fileSize, offset);
822
    /* Here hf_fmp_fileSize is used in
823
     * place of size
824
     */
825
0
    offset = dissect_rpc_uint64(tvb, attrsTree, hf_fmp_nfsv3Attr_used,   offset);
826
0
    offset = dissect_rpc_uint64(tvb, attrsTree, hf_fmp_nfsv3Attr_rdev,   offset);
827
0
    offset = dissect_rpc_uint64(tvb, attrsTree, hf_fmp_nfsv3Attr_fsid,   offset);
828
0
    offset = dissect_rpc_uint64(tvb, attrsTree, hf_fmp_nfsv3Attr_fileid, offset);
829
0
    proto_tree_add_item(tree, hf_fmp_atime, tvb, offset, 8, ENC_BIG_ENDIAN);
830
0
    offset +=8;
831
0
    proto_tree_add_item(tree, hf_fmp_mtime, tvb, offset, 8, ENC_BIG_ENDIAN);
832
0
    offset +=8;
833
0
    proto_tree_add_item(tree, hf_fmp_ctime, tvb, offset, 8, ENC_BIG_ENDIAN);
834
0
    offset +=8;
835
0
    return offset;
836
0
}
837
838
839
840
static int
841
dissect_FMP_SessionCreate_request(tvbuff_t *tvb, packet_info *pinfo,
842
                                  proto_tree *tree, void* data _U_)
843
0
{
844
0
    unsigned offset = 0;
845
0
    offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_hostID,
846
0
                                offset, NULL);
847
0
    offset = dissect_fmp_timeval(tvb, offset, pinfo, tree, hf_fmp_btime,
848
0
                                 hf_fmp_time_sec, hf_fmp_time_nsec);
849
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_notifyPort,
850
0
                                offset);
851
0
    return offset;
852
0
}
853
854
static int
855
dissect_FMP_SessionCreate_reply(tvbuff_t *tvb, packet_info *pinfo,
856
                                proto_tree *tree, void* data _U_)
857
0
{
858
0
    int rval;
859
0
    unsigned offset = 0;
860
861
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
862
0
    if (rval == 0) {
863
0
        offset = dissect_rpc_data(tvb, pinfo, tree,
864
0
                                  hf_fmp_sessionHandle, offset);
865
0
        offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_hostID,
866
0
                                    offset, NULL);
867
0
        offset = dissect_fmp_timeval(tvb, offset, pinfo, tree,
868
0
                                     hf_fmp_btime, hf_fmp_time_sec,
869
0
                                     hf_fmp_time_nsec);
870
0
        offset = dissect_fmp_heartBeatIntv(tvb, offset, pinfo, tree);
871
0
    }
872
873
0
    return offset;
874
0
}
875
876
static int
877
dissect_FMP_HeartBeat_request(tvbuff_t *tvb, packet_info *pinfo,
878
                              proto_tree *tree, void* data _U_)
879
0
{
880
0
    return dissect_rpc_data(tvb, pinfo, tree, hf_fmp_sessionHandle, 0);
881
0
}
882
883
static int
884
dissect_FMP_HeartBeat_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
885
                            proto_tree *tree, void* data _U_)
886
0
{
887
0
    int rval;
888
889
0
    return dissect_fmp_status(tvb, 0, tree, &rval);
890
0
}
891
892
static int
893
dissect_FMP_Mount_request(tvbuff_t *tvb, packet_info *pinfo,
894
                          proto_tree *tree, void* data _U_)
895
0
{
896
0
    unsigned offset = 0;
897
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_sessionHandle,
898
0
                              offset);
899
0
    offset = dissect_fmp_capability(tvb, offset, tree);
900
0
    offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
901
0
    return offset;
902
0
}
903
904
static int
905
dissect_FMP_Mount_reply(tvbuff_t *tvb, packet_info *pinfo,
906
                        proto_tree *tree, void* data _U_)
907
0
{
908
0
    int rval;
909
0
    unsigned offset = 0;
910
911
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
912
0
    if (rval == 0) {
913
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_fsID,
914
0
                                    offset);
915
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_fsBlkSz,
916
0
                                    offset);
917
0
        offset = dissect_fmp_vmInfo(tvb, offset, pinfo, tree);
918
0
    }
919
920
0
    return offset;
921
0
}
922
923
static int
924
dissect_FMP_Open_request(tvbuff_t *tvb, packet_info *pinfo,
925
                         proto_tree *tree, void* data _U_)
926
0
{
927
0
    unsigned offset = 0;
928
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_sessionHandle,
929
0
                              offset);
930
0
    offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
931
0
    return offset;
932
0
}
933
934
static int
935
dissect_FMP_Open_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
936
                       proto_tree *tree, void* data _U_)
937
0
{
938
0
    int rval;
939
0
    unsigned offset = 0;
940
941
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
942
0
    if (rval == 0) {
943
0
        offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle,
944
0
                                  offset);
945
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_msgNum,
946
0
                                    offset);
947
0
        offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
948
0
                                    offset);
949
950
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_fsID,
951
0
                                    offset);
952
0
    }
953
0
    return offset;
954
0
}
955
956
static int
957
dissect_FMP_Close_request(tvbuff_t *tvb, packet_info *pinfo,
958
                          proto_tree *tree, void* data _U_)
959
0
{
960
0
    unsigned offset = 0;
961
962
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle, offset);
963
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
964
0
    return offset;
965
0
}
966
967
static int
968
dissect_FMP_Close_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
969
                        proto_tree *tree, void* data _U_)
970
0
{
971
0
    int rval;
972
0
    unsigned offset = 0;
973
974
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
975
0
    if (rval == 0) {
976
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_msgNum,
977
0
                                    offset);
978
0
    }
979
980
0
    return offset;
981
0
}
982
983
static int
984
dissect_FMP_OpenGetMap_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
985
0
{
986
0
    unsigned offset = 0;
987
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_sessionHandle,
988
0
                              offset);
989
990
0
    offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
991
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_firstLogBlk,
992
0
                                offset);
993
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_numBlksReq,
994
0
                                offset);
995
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_minBlks, offset);
996
0
    return offset;
997
0
}
998
999
static int
1000
dissect_FMP_OpenGetMap_reply(tvbuff_t *tvb, packet_info *pinfo,
1001
                             proto_tree *tree, void* data _U_)
1002
0
{
1003
0
    int rval;
1004
0
    unsigned offset = 0;
1005
1006
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1007
0
    if (rval == 0) {
1008
0
        offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle,
1009
0
                                  offset);
1010
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_msgNum,
1011
0
                                    offset);
1012
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_cookie,
1013
0
                                    offset);
1014
0
        offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1015
0
                                    offset);
1016
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_fsID,
1017
0
                                    offset);
1018
0
        offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1019
0
    }
1020
1021
0
    return offset;
1022
0
}
1023
1024
static int
1025
dissect_FMP_OpenAllocSpace_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1026
0
{
1027
0
    unsigned offset = 0;
1028
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_sessionHandle, offset);
1029
0
    offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1030
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_firstLogBlk, offset);
1031
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_numBlksReq, offset);
1032
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_minBlks, offset);
1033
0
    return offset;
1034
0
}
1035
1036
static int
1037
dissect_FMP_OpenAllocSpace_reply(tvbuff_t *tvb, packet_info *pinfo,
1038
                                 proto_tree *tree, void* data _U_)
1039
0
{
1040
0
    int rval;
1041
0
    unsigned offset = 0;
1042
1043
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1044
0
    if (rval == 0) {
1045
0
        offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle,
1046
0
                                  offset);
1047
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_msgNum,
1048
0
                                    offset);
1049
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_cookie,
1050
0
                                    offset);
1051
0
        offset = dissect_rpc_uint64(tvb,  tree, hf_fmp_fileSize,
1052
0
                                    offset);
1053
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_fsID,
1054
0
                                    offset);
1055
0
        offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1056
0
    }
1057
0
    return offset;
1058
0
}
1059
1060
static int
1061
dissect_FMP_GetMap_request(tvbuff_t *tvb, packet_info *pinfo,
1062
                           proto_tree *tree, void* data _U_)
1063
0
{
1064
0
    unsigned offset = 0;
1065
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle, offset);
1066
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_msgNum, offset);
1067
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_firstLogBlk,
1068
0
                                offset);
1069
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_numBlksReq,
1070
0
                                offset);
1071
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_minBlks, offset);
1072
0
    return offset;
1073
0
}
1074
1075
static int
1076
dissect_FMP_GetMap_reply(tvbuff_t *tvb, packet_info *pinfo,
1077
                         proto_tree *tree, void* data _U_)
1078
0
{
1079
0
    int rval;
1080
0
    unsigned offset = 0;
1081
1082
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1083
0
    if (rval == 0) {
1084
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_msgNum,
1085
0
                                    offset);
1086
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_cookie,
1087
0
                                    offset);
1088
0
        offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1089
0
                                    offset);
1090
0
        offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1091
0
    }
1092
1093
0
    return offset;
1094
0
}
1095
1096
static int
1097
dissect_FMP_AllocSpace_request(tvbuff_t *tvb, packet_info *pinfo,
1098
                               proto_tree *tree, void* data _U_)
1099
0
{
1100
0
    unsigned offset = 0;
1101
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle, offset);
1102
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1103
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_firstLogBlk,
1104
0
                                offset);
1105
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_numBlksReq,
1106
0
                                offset);
1107
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_minBlks, offset);
1108
0
    return offset;
1109
0
}
1110
1111
static int
1112
dissect_FMP_AllocSpace_reply(tvbuff_t *tvb, packet_info *pinfo,
1113
                             proto_tree *tree, void* data _U_)
1114
0
{
1115
0
    int rval;
1116
0
    unsigned offset = 0;
1117
1118
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1119
0
    if (rval == 0) {
1120
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1121
0
                                    offset);
1122
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie,
1123
0
                                    offset);
1124
0
        offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1125
0
                                    offset);
1126
0
        offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1127
0
    }
1128
1129
0
    return offset;
1130
0
}
1131
1132
static int
1133
dissect_FMP_Flush_request(tvbuff_t *tvb, packet_info *pinfo,
1134
                          proto_tree *tree, void* data _U_)
1135
0
{
1136
0
    unsigned offset = 0;
1137
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle, offset);
1138
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1139
0
    offset = dissect_fmp_flushCmd(tvb, offset, tree);
1140
0
    offset = dissect_rpc_uint64(tvb,tree, hf_fmp_eof, offset);
1141
0
    offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1142
0
    return offset;
1143
0
}
1144
1145
static int
1146
dissect_FMP_Flush_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
1147
                        proto_tree *tree, void* data _U_)
1148
0
{
1149
0
    int rval;
1150
0
    unsigned offset = 0;
1151
1152
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1153
0
    if (rval == 0) {
1154
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1155
0
                                    offset);
1156
0
    }
1157
0
    return offset;
1158
0
}
1159
1160
static int
1161
dissect_FMP_CancelReq_request(tvbuff_t *tvb, packet_info *pinfo,
1162
                              proto_tree *tree, void* data _U_)
1163
0
{
1164
0
    unsigned offset = 0;
1165
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle, offset);
1166
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1167
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie, offset);
1168
0
    return offset;
1169
0
}
1170
1171
static int
1172
dissect_FMP_CancelReq_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
1173
                            proto_tree *tree, void* data _U_)
1174
0
{
1175
0
    int rval;
1176
0
    unsigned offset = 0;
1177
1178
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1179
0
    if (rval == 0) {
1180
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1181
0
                                    offset);
1182
0
    }
1183
0
    return offset;
1184
0
}
1185
1186
static int
1187
dissect_FMP_PlugIn_request(tvbuff_t *tvb, packet_info *pinfo,
1188
                           proto_tree *tree, void* data _U_)
1189
0
{
1190
0
    unsigned offset = 0;
1191
0
    offset = dissect_plugInID(tvb, offset, tree);
1192
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_plugInBuf, offset);
1193
0
    return offset;
1194
0
}
1195
1196
static int
1197
dissect_FMP_PlugIn_reply(tvbuff_t *tvb, packet_info *pinfo,
1198
                         proto_tree *tree, void* data _U_)
1199
0
{
1200
0
    int rval;
1201
0
    unsigned offset = 0;
1202
1203
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1204
0
    if (rval == 0) {
1205
0
        offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_plugInBuf,
1206
0
                                  offset);
1207
0
    }
1208
0
    return offset;
1209
0
}
1210
1211
static int
1212
dissect_FMP_SessionTerminate_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1213
0
{
1214
0
    return dissect_rpc_data(tvb, pinfo, tree, hf_fmp_sessionHandle, 0);
1215
0
}
1216
1217
static int
1218
dissect_FMP_SessionTerminate_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1219
0
{
1220
0
    int rval;
1221
1222
0
    return dissect_fmp_status(tvb, 0,tree, &rval);
1223
0
}
1224
1225
static int
1226
dissect_FMP_SessionCreateEx_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1227
0
{
1228
0
    unsigned offset = 0;
1229
1230
0
    offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_hostID,
1231
0
                                offset, NULL);
1232
0
    offset = dissect_fmp_timeval(tvb, offset, pinfo ,tree, hf_fmp_btime,
1233
0
                                 hf_fmp_time_sec, hf_fmp_time_nsec);
1234
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_notifyPort,
1235
0
                                offset);
1236
0
    offset = dissect_fmp_notifyProtocol(tvb, offset, tree);
1237
1238
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_major,
1239
0
                                offset);
1240
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_minor,
1241
0
                                offset);
1242
1243
0
    offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_os_name,
1244
0
                                offset, NULL);
1245
1246
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_patch,
1247
0
                                offset);
1248
1249
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_build,
1250
0
                                offset);
1251
1252
0
    offset = dissect_fmp_capabilities(tvb, offset, tree);
1253
1254
0
    return offset;
1255
0
}
1256
1257
1258
static int
1259
dissect_FMP_SessionCreateEx_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1260
0
{
1261
0
    int rval;
1262
0
    unsigned offset = 0;
1263
1264
0
    offset = dissect_fmp_status(tvb, offset, tree, &rval);
1265
0
    if (rval == 0) {
1266
0
        offset = dissect_rpc_data(tvb, pinfo, tree,
1267
0
                                  hf_fmp_sessionHandle, offset);
1268
0
        offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_hostID,
1269
0
                                    offset, NULL);
1270
0
        offset = dissect_fmp_timeval(tvb, offset, pinfo ,tree,
1271
0
                                     hf_fmp_btime, hf_fmp_time_sec,
1272
0
                                     hf_fmp_time_nsec);
1273
0
        offset = dissect_fmp_heartBeatIntv(tvb, offset, pinfo , tree);
1274
1275
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_major,
1276
0
                                    offset);
1277
1278
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_minor,
1279
0
                                    offset);
1280
1281
0
        offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_server_version_string,
1282
0
                                    offset, NULL);
1283
1284
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_patch,
1285
0
                                    offset);
1286
1287
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_os_build,
1288
0
                                    offset);
1289
1290
0
        offset = dissect_fmp_capabilities(tvb, offset, tree);
1291
0
    }
1292
1293
0
    return offset;
1294
0
}
1295
1296
1297
static int
1298
dissect_FMP_ReportClientError_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1299
0
{
1300
0
    unsigned offset = 0;
1301
0
    offset = dissect_rpc_string(tvb, pinfo, tree, hf_fmp_description,
1302
0
                                offset, NULL);
1303
1304
0
    offset = dissect_fmp_cerrInfo(tvb, offset, tree);
1305
0
    return offset;
1306
0
}
1307
1308
static int
1309
dissect_FMP_ReportClientError_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1310
0
{
1311
0
    int rval;
1312
0
    unsigned offset = 0;
1313
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1314
1315
0
    return offset;
1316
0
}
1317
1318
static int
1319
dissect_FMP_GetAttr_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1320
0
{
1321
0
    unsigned offset = 0;
1322
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle, offset);
1323
1324
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1325
1326
0
    return offset;
1327
0
}
1328
1329
1330
static int
1331
dissect_FMP_GetAttr_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1332
0
{
1333
0
    int rval;
1334
0
    unsigned offset = 0;
1335
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1336
0
    if (rval == 0) {
1337
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1338
1339
0
        offset = dissect_fmp_attrs(tvb, offset, tree);
1340
0
    }
1341
1342
0
    return offset;
1343
0
}
1344
1345
static int
1346
dissect_FMP_OpenGetAttr_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1347
0
{
1348
0
    unsigned offset = 0;
1349
1350
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_sessionHandle,
1351
0
                              offset);
1352
1353
0
    offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1354
1355
0
    return offset;
1356
0
}
1357
1358
1359
static int
1360
dissect_FMP_OpenGetAttr_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1361
0
{
1362
0
    int rval;
1363
0
    unsigned offset = 0;
1364
1365
0
    offset = dissect_fmp_status(tvb, offset, tree, &rval);
1366
1367
0
    if (rval == 0) {
1368
0
        offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle, offset);
1369
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1370
0
        offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize, offset);
1371
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_fsID, offset);
1372
0
        offset = dissect_fmp_attrs(tvb, offset, tree);
1373
0
    }
1374
1375
1376
0
    return offset;
1377
0
}
1378
1379
1380
static int
1381
dissect_FMP_FlushGetAttr_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1382
0
{
1383
0
    unsigned offset = 0;
1384
1385
0
    offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1386
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1387
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cmd, offset);
1388
0
    offset = dissect_rpc_uint64(tvb,tree, hf_fmp_eof, offset);
1389
1390
0
    proto_tree_add_item(tree, hf_fmp_mtime, tvb, offset, 8, ENC_BIG_ENDIAN);
1391
0
    offset += 8;
1392
0
    offset = dissect_fmp_extentList(tvb, offset, pinfo, tree);
1393
1394
0
    return offset;
1395
0
}
1396
1397
1398
static int
1399
dissect_FMP_FlushGetAttr_reply(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1400
0
{
1401
0
    int rval;
1402
0
    unsigned offset = 0;
1403
1404
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1405
0
    if (rval == 0) {
1406
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1407
1408
0
        offset = dissect_fmp_attrs(tvb, offset, tree);
1409
0
    }
1410
1411
0
    return offset;
1412
0
}
1413
1414
1415
static int
1416
dissect_FMP_GetVolumeInfo_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
1417
0
{
1418
0
    unsigned offset = 0;
1419
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_topVolumeId, offset);
1420
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cursor, offset);
1421
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie, offset);
1422
0
    return offset;
1423
0
}
1424
1425
1426
1427
static int
1428
dissect_FMP_GetVolumeInfo_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1429
0
{
1430
0
    int rval;
1431
0
    unsigned offset = 0;
1432
1433
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1434
0
    if (rval == 0) {
1435
        /* FIXME: I don't know size of this volumes */
1436
0
        offset = dissect_fmp_Hiervolume(tvb, pinfo, offset, tree);
1437
0
    }
1438
0
    return offset;
1439
1440
0
}
1441
1442
static int
1443
dissect_FMP_OpenGetMapEx_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1444
0
{
1445
0
    unsigned offset = 0;
1446
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_sessionHandle,
1447
0
                              offset);
1448
0
    offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1449
0
    offset = dissect_rpc_uint64(tvb, tree, hf_fmp_firstLogBlk64,  offset);
1450
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_numBlksReq,
1451
0
                                offset);
1452
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_minBlks, offset);
1453
0
    return offset;
1454
0
}
1455
1456
1457
static int
1458
dissect_FMP_OpenGetMapEx_reply(tvbuff_t *tvb, packet_info *pinfo,
1459
                               proto_tree *tree, void* data _U_)
1460
0
{
1461
0
    int rval;
1462
0
    unsigned offset = 0;
1463
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1464
0
    if (rval == 0) {
1465
0
        offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle,
1466
0
                                  offset);
1467
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_msgNum,
1468
0
                                    offset);
1469
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_cookie,
1470
0
                                    offset);
1471
0
        offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1472
0
                                    offset);
1473
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_fsID,
1474
0
                                    offset);
1475
0
        offset = dissect_fmp_extentListEx(tvb, offset, pinfo, tree);
1476
0
    }
1477
1478
0
    return offset;
1479
0
}
1480
1481
1482
static int
1483
dissect_FMP_OpenAllocSpaceEx_request(tvbuff_t *tvb,
1484
                                     packet_info *pinfo, proto_tree *tree, void* data _U_)
1485
0
{
1486
0
    unsigned offset = 0;
1487
0
    offset = dissect_rpc_data(tvb , pinfo, tree, hf_fmp_sessionHandle,
1488
0
                              offset);
1489
0
    offset = dissect_fmp_fileHandleSrc(tvb, offset, pinfo, tree);
1490
0
    offset = dissect_rpc_uint64(tvb, tree, hf_fmp_firstLogBlk64,  offset);
1491
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_numBlksReq,
1492
0
                                offset);
1493
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_minBlks, offset);
1494
0
    return offset;
1495
0
}
1496
1497
1498
static int
1499
dissect_FMP_OpenAllocSpaceEx_reply(tvbuff_t *tvb, packet_info *pinfo,
1500
                                   proto_tree *tree, void* data _U_)
1501
0
{
1502
0
    int rval;
1503
0
    unsigned offset = 0;
1504
1505
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1506
0
    if (rval == 0) {
1507
0
        offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle,
1508
0
                                  offset);
1509
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_msgNum,
1510
0
                                    offset);
1511
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_cookie,
1512
0
                                    offset);
1513
0
        offset = dissect_rpc_uint64(tvb,  tree, hf_fmp_fileSize,
1514
0
                                    offset);
1515
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_fsID,
1516
0
                                    offset);
1517
0
        offset = dissect_fmp_extentListEx(tvb, offset, pinfo, tree);
1518
0
    }
1519
0
    return offset;
1520
0
}
1521
1522
static int
1523
dissect_FMP_GetMapEx_request(tvbuff_t *tvb, packet_info *pinfo,
1524
                             proto_tree *tree, void* data _U_)
1525
0
{
1526
0
    unsigned offset = 0;
1527
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle, offset);
1528
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_msgNum, offset);
1529
0
    offset = dissect_rpc_uint64(tvb, tree, hf_fmp_firstLogBlk64,  offset);
1530
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_numBlksReq,
1531
0
                                offset);
1532
0
    offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_minBlks, offset);
1533
0
    return offset;
1534
0
}
1535
1536
1537
static int
1538
dissect_FMP_GetMapEx_reply(tvbuff_t *tvb, packet_info *pinfo,
1539
                           proto_tree *tree, void* data _U_)
1540
0
{
1541
0
    int rval;
1542
0
    unsigned offset = 0;
1543
1544
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1545
0
    if (rval == 0) {
1546
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_msgNum,
1547
0
                                    offset);
1548
0
        offset = dissect_rpc_uint32(tvb,  tree, hf_fmp_cookie,
1549
0
                                    offset);
1550
0
        offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1551
0
                                    offset);
1552
0
        offset = dissect_fmp_extentListEx(tvb, offset, pinfo, tree);
1553
0
    }
1554
1555
0
    return offset;
1556
0
}
1557
1558
1559
static int
1560
dissect_FMP_AllocSpaceEx_request(tvbuff_t *tvb, packet_info *pinfo,
1561
                                 proto_tree *tree, void* data _U_)
1562
0
{
1563
0
    unsigned offset = 0;
1564
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle, offset);
1565
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1566
0
    offset = dissect_rpc_uint64(tvb, tree, hf_fmp_firstLogBlk64,  offset);
1567
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_numBlksReq,
1568
0
                                offset);
1569
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_minBlks, offset);
1570
0
    return offset;
1571
0
}
1572
1573
1574
static int
1575
dissect_FMP_AllocSpaceEx_reply(tvbuff_t *tvb, packet_info *pinfo,
1576
                               proto_tree *tree, void* data _U_)
1577
0
{
1578
0
    int rval;
1579
0
    unsigned offset = 0;
1580
1581
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1582
0
    if (rval == 0) {
1583
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1584
0
                                    offset);
1585
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_cookie,
1586
0
                                    offset);
1587
0
        offset = dissect_rpc_uint64(tvb, tree, hf_fmp_fileSize,
1588
0
                                    offset);
1589
0
        offset = dissect_fmp_extentListEx(tvb, offset, pinfo, tree);
1590
0
    }
1591
1592
0
    return offset;
1593
0
}
1594
1595
static int
1596
dissect_FMP_FlushEx_request(tvbuff_t *tvb, packet_info *pinfo,
1597
                            proto_tree *tree, void* data _U_)
1598
0
{
1599
0
    unsigned offset = 0;
1600
0
    offset = dissect_rpc_data(tvb, pinfo, tree, hf_fmp_fmpFHandle, offset);
1601
0
    offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum, offset);
1602
0
    offset = dissect_fmp_flushCmd(tvb, offset, tree);
1603
0
    offset = dissect_rpc_uint64(tvb,tree, hf_fmp_eof, offset);
1604
0
    offset = dissect_fmp_extentListEx(tvb, offset, pinfo, tree);
1605
0
    return offset;
1606
0
}
1607
1608
static int
1609
dissect_FMP_FlushEx_reply(tvbuff_t *tvb, packet_info *pinfo _U_,
1610
                          proto_tree *tree, void* data _U_)
1611
0
{
1612
0
    int rval;
1613
0
    unsigned offset = 0;
1614
1615
0
    offset = dissect_fmp_status(tvb, offset,tree, &rval);
1616
0
    if (rval == 0) {
1617
0
        offset = dissect_rpc_uint32(tvb, tree, hf_fmp_msgNum,
1618
0
                                    offset);
1619
0
    }
1620
0
    return offset;
1621
0
}
1622
/*
1623
 * proc number, "proc name", dissect_request, dissect_reply
1624
 */
1625
static const vsff fmp3_proc[] = {
1626
    { 0,
1627
      "NULL",
1628
      dissect_rpc_void,
1629
      dissect_rpc_void, },
1630
1631
    { 1,
1632
      "SessionCreate",
1633
      dissect_FMP_SessionCreate_request,
1634
      dissect_FMP_SessionCreate_reply },
1635
1636
    { 2,
1637
      "HeartBeat",
1638
      dissect_FMP_HeartBeat_request,
1639
      dissect_FMP_HeartBeat_reply },
1640
1641
    { 3,
1642
      "Mount",
1643
      dissect_FMP_Mount_request,
1644
      dissect_FMP_Mount_reply },
1645
1646
    { 4,
1647
      "Open",
1648
      dissect_FMP_Open_request,
1649
      dissect_FMP_Open_reply },
1650
1651
    { 5,
1652
      "Close",
1653
      dissect_FMP_Close_request,
1654
      dissect_FMP_Close_reply },
1655
1656
    { 6,
1657
      "OpenGetMap",
1658
      dissect_FMP_OpenGetMap_request,
1659
      dissect_FMP_OpenGetMap_reply },
1660
1661
    { 7,
1662
      "OpenAllocSpace",
1663
      dissect_FMP_OpenAllocSpace_request,
1664
      dissect_FMP_OpenAllocSpace_reply },
1665
1666
    { 8,
1667
      "GetMap",
1668
      dissect_FMP_GetMap_request,
1669
      dissect_FMP_GetMap_reply },
1670
1671
    { 9,
1672
      "AllocSpace",
1673
      dissect_FMP_AllocSpace_request,
1674
      dissect_FMP_AllocSpace_reply },
1675
1676
    { 10,
1677
      "Flush",
1678
      dissect_FMP_Flush_request,
1679
      dissect_FMP_Flush_reply },
1680
1681
    { 11,
1682
      "CancelReq",
1683
      dissect_FMP_CancelReq_request,
1684
      dissect_FMP_CancelReq_reply },
1685
1686
    { 12,
1687
      "PlugIn",
1688
      dissect_FMP_PlugIn_request,
1689
      dissect_FMP_PlugIn_reply },
1690
1691
    { 13,
1692
      "SessionTerminate",
1693
      dissect_FMP_SessionTerminate_request,
1694
      dissect_FMP_SessionTerminate_reply },
1695
1696
    { 14,
1697
      "SessionCreateEx",
1698
      dissect_FMP_SessionCreateEx_request,
1699
      dissect_FMP_SessionCreateEx_reply },
1700
1701
    { 15,
1702
      "ReportClientError",
1703
      dissect_FMP_ReportClientError_request,
1704
      dissect_FMP_ReportClientError_reply },
1705
1706
    { 16           ,
1707
      "Get Attribute",
1708
      dissect_FMP_GetAttr_request,
1709
      dissect_FMP_GetAttr_reply },
1710
1711
    { 17               ,
1712
      "Open Get Attribute",
1713
      dissect_FMP_OpenGetAttr_request,
1714
      dissect_FMP_OpenGetAttr_reply },
1715
1716
    { 18               ,
1717
      "Flush Get Attribute",
1718
      dissect_FMP_FlushGetAttr_request,
1719
      dissect_FMP_FlushGetAttr_reply },
1720
1721
    { 19               ,
1722
      "OpenGetMapEx",
1723
      dissect_FMP_OpenGetMapEx_request,
1724
      dissect_FMP_OpenGetMapEx_reply },
1725
1726
    { 20               ,
1727
      "OpenAllocSpaceEx",
1728
      dissect_FMP_OpenAllocSpaceEx_request,
1729
      dissect_FMP_OpenAllocSpaceEx_reply },
1730
1731
    { 21               ,
1732
      "GetMapEx",
1733
      dissect_FMP_GetMapEx_request,
1734
      dissect_FMP_GetMapEx_reply },
1735
1736
    { 22               ,
1737
      "AllocSpaceEx",
1738
      dissect_FMP_AllocSpaceEx_request,
1739
      dissect_FMP_AllocSpaceEx_reply },
1740
1741
    { 23               ,
1742
      "FMP_FlushEx",
1743
      dissect_FMP_FlushEx_request,
1744
      dissect_FMP_FlushEx_reply },
1745
#if 0
1746
1747
    { 24               ,
1748
      "FlushGetAttrEx",
1749
      dissect_FMP_FlushGetAttrEx_request,
1750
      dissect_FMP_FlushGetAttrEx_reply },
1751
1752
#endif
1753
1754
    { 25               ,
1755
      "GetVolumeInfo",
1756
      dissect_FMP_GetVolumeInfo_request,
1757
      dissect_FMP_GetVolumeInfo_reply },
1758
1759
1760
    {0 , NULL , NULL , NULL }
1761
1762
};
1763
1764
1765
static const rpc_prog_vers_info fmp_vers_info[] = {
1766
    { FMP_VERSION_3, fmp3_proc, &hf_fmp_procedure }
1767
};
1768
1769
1770
static const value_string fmp_proc_vals[] = {
1771
    {  0, "NULL" },
1772
    {  1, "SessionCreate" },
1773
    {  2, "HeartBeat" },
1774
    {  3, "Mount" },
1775
    {  4, "Open" },
1776
    {  5, "Close" },
1777
    {  6, "OpenGetMap" },
1778
    {  7, "OpenAllocSpace" },
1779
    {  8, "GetMap" },
1780
    {  9, "AllocSpace " },
1781
    { 10, "Flush" },
1782
    { 11, "CancelReq" },
1783
    { 12, "PlugIn" },
1784
    { 13, "SessionTerminate" },
1785
    { 14, "SessionCreateEx" },
1786
    { 15, "ReportClientError" },
1787
    { 16, "GetAttr " },
1788
    { 17, "OpenGetAttr" },
1789
    { 18, "FlushGetAttr"},
1790
    { 19, "OpenGetMapEx"},
1791
    { 20, "OpenAllocSpaceEx"},
1792
    { 21, "GetMapEx"},
1793
    { 22, "AllocSpaceEx"},
1794
    { 23, "FlushEx"},
1795
    { 24, "FlushGetAttrEx"},
1796
    { 25, "GetVolumeInfo"},
1797
    { 0,NULL }
1798
};
1799
1800
1801
static const value_string fmp_status_vals[] = {
1802
    {  0, "OK"},
1803
    {  5, "IOERROR"},
1804
    { 12, "NOMEM"},
1805
    { 13, "NOACCESS"},
1806
    { 22, "INVALIDARG"},
1807
    { 28, "FSFULL"},
1808
    { 79, "QUEUE_FULL"},
1809
    {500, "WRONG_MSG_NUM"},
1810
    {501, "SESSION_LOST"},
1811
    {502, "HOT_SESSION"},
1812
    {503, "COLD_SESSION"},
1813
    {504, "CLIENT_TERMINATED"},
1814
    {505, "WRITER_LOST_BLK"},
1815
    {506, "FMP_REQUEST_QUEUED"},
1816
    {507, "FMP_FALL_BACK"},
1817
    {508, "REQUEST_CANCELLED"},
1818
    {509, "WRITER_ZEROED_BLK"},
1819
    {510, "NOTIFY_ERROR"},
1820
    {511, "FMP_WRONG_HANDLE"},
1821
    {512, "DUPLICATE_OPEN"},
1822
    {600, "PLUGIN_NOFUNC"},
1823
    {0,NULL}
1824
};
1825
1826
1827
static const value_string fmp_extentState_vals[] = {
1828
    {0,"VALID_DATA"},
1829
    {1,"INVALID_DATA"},
1830
    {2,"NONE_DATA"},
1831
    {0,NULL}
1832
};
1833
1834
static const value_string fmp_native_protocol_vals[] = {
1835
    {FMP_PATH, "PATH"},
1836
    {FMP_NFS, "NFS"},
1837
    {FMP_CIFS, "CIFS"},
1838
    {FMP_FMP, "FMP"},
1839
    {FMP_FS_ONLY, "FS_ONLY"},
1840
    {FMP_SHARE, "SHARE"},
1841
    {FMP_MOUNT, "MOUNT"},
1842
    {FMP_CIFSV2, "CIFSV2"},
1843
    {FMP_UNC,"UNC"},
1844
    {0,NULL}
1845
};
1846
1847
static const value_string fmp_volume_mgmt_capability_vals[] = {
1848
    {FMP_SERVER_BASED, "SERVER_BASED"},
1849
    {FMP_THIRD_PARTY, "THIRD_PARTY"},
1850
    {FMP_CLIENT_BASED_DART, "CLIENT_BASED_DART"},
1851
    {FMP_CLIENT_BASED_SIMPLE, "CLIENT_BASED_SIMPLE"},
1852
    {FMP_HIERARCHICAL_VOLUME, "FMP_HIERARCHICAL_VOLUME"},
1853
    {0,NULL}
1854
};
1855
1856
static const value_string fmp_query_cmd_vals[] = {
1857
    {FMP_SCSI_INQUIRY, "SCSI_INQUIRY"},
1858
    {FMP_DART_STAMP, "DART_STAMP"},
1859
    {0,NULL}
1860
};
1861
1862
static const value_string fmp_volume_desc_vals[] = {
1863
    {FMP_VOLUME_DISK, "DISK"},
1864
    {FMP_VOLUME_SLICE, "SLICE"},
1865
    {FMP_VOLUME_STRIPE, "STRIPE"},
1866
    {FMP_VOLUME_META, "META"},
1867
    {FMP_VOLUME_SLICE, "SLICE"},
1868
    {FMP_VOLUME_SLICE, "SLICE"},
1869
    {0,NULL}
1870
};
1871
1872
static const value_string fmp_disk_identifier_vals[] = {
1873
    {FMP_DISK_IDENTIFIER_SIGNATURE, "SIGNATURE"},
1874
    {FMP_DISK_IDENTIFIER_SERIAL, "SERIAL"},
1875
    {0,NULL}
1876
};
1877
1878
static const value_string fmp_notify_protocol_vals[] = {
1879
    {FMP_TCP, "TCP"},
1880
    {FMP_UDP, "UDP"},
1881
    {0,NULL}
1882
};
1883
1884
static const value_string fmp_volume_mgmt_type_vals[] = {
1885
    {FMP_SERVER_BASED, "SERVER_BASED"},
1886
    {FMP_THIRD_PARTY, "THIRD_PARTY"},
1887
    {FMP_CLIENT_BASED_DART, "CLIENT_BASED_DART"},
1888
    {FMP_CLIENT_BASED_SIMPLE, "CLIENT_BASED_SIMPLE"},
1889
    {FMP_DISK_SIGNATURE, "DISK_SIGNATURE"},
1890
    {FMP_HIERARCHICAL_VOLUME, "HIERARCHICAL_VOLUME"},
1891
    {0,NULL}
1892
};
1893
1894
static const value_string fmp_client_error_number_vals[] = {
1895
    {FMP_CE_GENERIC, "FMP_CE_GENERIC"},
1896
    {FMP_CE_DISK_ERROR, "FMP_CE_DISK_ERROR"},
1897
    {0,NULL}
1898
};
1899
1900
void
1901
proto_register_fmp(void)
1902
16
{
1903
16
    static hf_register_info hf[] = {
1904
16
        { &hf_fmp_procedure,
1905
16
          { "Procedure", "fmp.procedure",
1906
16
            FT_UINT32, BASE_DEC, VALS(fmp_proc_vals),
1907
16
            0, NULL, HFILL }},        /* New addition */
1908
1909
16
        { &hf_fmp_hostID,
1910
16
          { "Host ID", "fmp.hostID",
1911
16
            FT_STRING, BASE_NONE, NULL, 0,
1912
16
            NULL, HFILL }},
1913
1914
16
        { &hf_fmp_btime,
1915
16
          { "Boot Time", "fmp.btime",
1916
16
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0,
1917
16
            "Machine Boot Time", HFILL }},
1918
1919
16
        { &hf_fmp_time_sec,
1920
16
          { "seconds", "fmp.btime.sec",
1921
16
            FT_UINT32, BASE_DEC, NULL, 0,
1922
16
            NULL, HFILL }},
1923
1924
16
        { &hf_fmp_time_nsec,
1925
16
          { "nanoseconds", "fmp.btime.nsec",
1926
16
            FT_UINT32, BASE_DEC, NULL, 0,
1927
16
            NULL, HFILL }},
1928
1929
16
        { &hf_fmp_notifyPort,
1930
16
          { "Notify Port", "fmp.notifyPort",
1931
16
            FT_UINT32, BASE_DEC, NULL, 0,
1932
16
            NULL, HFILL }},
1933
1934
16
        { &hf_fmp_sessionHandle,
1935
16
          { "Session Handle", "fmp.sessHandle",
1936
16
            FT_BYTES, BASE_NONE, NULL, 0,
1937
16
            NULL, HFILL }},
1938
1939
16
        { &hf_fmp_fmpFHandle,
1940
16
          { "FMP File Handle", "fmp.fmpFHandle",
1941
16
            FT_BYTES, BASE_NONE, NULL, 0,
1942
16
            NULL,
1943
1944
16
                HFILL }},
1945
16
        { &hf_fmp_nfsFHandle,
1946
16
          { "NFS File Handle", "fmp.nfsFHandle",
1947
16
            FT_BYTES, BASE_NONE, NULL, 0,
1948
16
            NULL, HFILL }},
1949
1950
16
        { &hf_fmp_fsID,
1951
16
          { "File System ID", "fmp.fsID",
1952
16
            FT_UINT32, BASE_HEX, NULL, 0,
1953
16
            NULL, HFILL }},
1954
1955
16
        { &hf_fmp_status,
1956
16
          { "Status", "fmp.status",
1957
16
            FT_UINT32, BASE_DEC, VALS(fmp_status_vals), 0,
1958
16
            "Reply Status", HFILL }},
1959
1960
16
        { &hf_fmp_fsBlkSz,
1961
16
          { "File System Block Size", "fmp.fsBlkSz",
1962
16
            FT_UINT32, BASE_DEC, NULL, 0,
1963
16
            NULL, HFILL }},
1964
1965
16
        { &hf_fmp_volHandle,
1966
16
          { "Volume Handle", "fmp.volHandle",
1967
16
            FT_STRING, BASE_NONE, NULL, 0,
1968
16
            NULL, HFILL }},
1969
1970
16
        { &hf_fmp_dskSigEnt_val,
1971
16
          { "Celerra Signature", "fmp.dsi.ds.dsList.dskSigLst_val.dse.dskSigEnt_val",
1972
16
            FT_STRING, BASE_NONE, NULL, 0,
1973
16
            NULL, HFILL }},
1974
1975
16
        { &hf_fmp_devSignature,
1976
16
          { "Signature DATA", "fmp.devSig",
1977
16
            FT_STRING, BASE_NONE, NULL, 0,
1978
16
            NULL, HFILL }},
1979
1980
16
        { &hf_fmp_mount_path,
1981
16
          { "Native Protocol: PATH", "fmp.mount_path",
1982
16
            FT_STRING, BASE_NONE, NULL, 0,
1983
16
            "Absolute path from the root on the server side", HFILL }},
1984
1985
16
        { &hf_fmp_sig_offset,
1986
16
          { "Sig Offset", "fmp.dsi.ds.sig_offset",
1987
16
            FT_UINT64, BASE_DEC, NULL, 0,
1988
16
            NULL, HFILL }},
1989
1990
16
        { &hf_fmp_numBlksReq,
1991
16
          { "Extent Length", "fmp.numBlksReq",
1992
16
            FT_UINT32, BASE_DEC, NULL, 0,
1993
16
            NULL, HFILL }},
1994
1995
16
        { &hf_fmp_minBlks,
1996
16
          { "Minimum Blocks to Grant", "fmp.minBlks",
1997
16
            FT_UINT32, BASE_DEC, NULL, 0,
1998
16
            NULL, HFILL }},
1999
2000
16
        { &hf_fmp_msgNum,
2001
16
          { "Message Number", "fmp.msgNum",
2002
16
            FT_UINT32, BASE_DEC, NULL, 0,
2003
16
            NULL, HFILL }},
2004
2005
16
        { &hf_fmp_cookie,
2006
16
          { "Cookie", "fmp.cookie",
2007
16
            FT_UINT32, BASE_HEX, NULL, 0,
2008
16
            "Cookie for FMP_REQUEST_QUEUED Resp", HFILL }},
2009
2010
16
        { &hf_fmp_fileSize,
2011
16
          { "File Size", "fmp.fileSize",
2012
16
            FT_UINT64, BASE_DEC, NULL, 0,
2013
16
            NULL, HFILL }},
2014
2015
16
        { &hf_fmp_extentList_len,
2016
16
          { "Extent List Length", "fmp.extentList_len",
2017
16
            FT_UINT32, BASE_DEC, NULL, 0,
2018
16
            NULL, HFILL }},
2019
2020
16
        { &hf_fmp_extent_state,
2021
16
          { "Extent State", "fmp.extentState",
2022
16
            FT_UINT32,BASE_DEC, VALS(fmp_extentState_vals), 0,
2023
16
            NULL, HFILL }},
2024
2025
16
        { &hf_fmp_firstLogBlk,
2026
16
          { "First Logical File Block", "fmp.firstLogBlk",
2027
16
            FT_UINT32, BASE_DEC, NULL, 0,
2028
16
            NULL, HFILL }},
2029
2030
16
        { &hf_fmp_numBlks,
2031
16
          { "Number of Blocks", "fmp.numBlks",
2032
16
            FT_UINT32, BASE_DEC, NULL, 0,
2033
16
            NULL, HFILL }},
2034
2035
16
        { &hf_fmp_volID,
2036
16
          { "Volume ID inside DART", "fmp.volID",
2037
16
            FT_UINT32, BASE_HEX, NULL, 0,
2038
16
            NULL, HFILL }},
2039
2040
16
        { &hf_fmp_startOffset,
2041
16
          { "Start Offset", "fmp.startOffset",
2042
16
            FT_UINT32, BASE_DEC, NULL, 0,
2043
16
            NULL, HFILL }},
2044
2045
16
        { &hf_fmp_start_offset64,
2046
16
          { "Start offset", "fmp.start_offset64",
2047
16
            FT_UINT64, BASE_DEC, NULL, 0,
2048
16
            "Start Offset of extentEx", HFILL }},
2049
2050
16
        { &hf_fmp_eof,
2051
16
          { "EOF", "fmp.eof",
2052
16
            FT_UINT64, BASE_DEC, NULL, 0,
2053
16
            "End Of File", HFILL }},
2054
2055
16
        { &hf_fmp_plugInID,
2056
16
          { "Plug In Cmd ID", "fmp.plugInID",
2057
16
            FT_BYTES, BASE_NONE, NULL, 0,
2058
16
            NULL, HFILL }},
2059
2060
16
        { &hf_fmp_plugInBuf,
2061
16
          { "Plug In Args", "fmp.plugIn",
2062
16
            FT_BYTES, BASE_NONE, NULL, 0,
2063
16
            NULL, HFILL }},
2064
2065
16
        { &hf_fmp_os_major,
2066
16
          { "OS Major", "fmp.os_major",
2067
16
            FT_UINT32, BASE_DEC, NULL, 0,
2068
16
            NULL, HFILL }},
2069
2070
16
        { &hf_fmp_os_minor,
2071
16
          { "OS Minor", "fmp.os_minor",
2072
16
            FT_UINT32, BASE_DEC, NULL, 0,
2073
16
            NULL, HFILL }},
2074
2075
16
        { &hf_fmp_os_name,
2076
16
          { "OS Name", "fmp.os_name",
2077
16
            FT_STRING, BASE_NONE, NULL, 0,
2078
16
            NULL, HFILL }},
2079
2080
16
        { &hf_fmp_path,
2081
16
          { "Mount Path", "fmp.Path",
2082
16
            FT_STRING, BASE_NONE, NULL, 0,
2083
16
            NULL, HFILL }},
2084
2085
16
        { &hf_fmp_os_patch,
2086
16
          { "OS Path", "fmp.os_patch",
2087
16
            FT_UINT32, BASE_DEC, NULL, 0,
2088
16
            NULL, HFILL }},
2089
2090
16
        { &hf_fmp_os_build,
2091
16
          { "OS Build", "fmp.os_build",
2092
16
            FT_UINT32, BASE_DEC, NULL, 0,
2093
16
            NULL, HFILL }},
2094
2095
16
        { &hf_fmp_server_version_string,
2096
16
          { "Server Version String", "fmp.server_version_string",
2097
16
            FT_STRING, BASE_NONE, NULL, 0,
2098
16
            NULL, HFILL }},
2099
2100
16
        { &hf_fmp_description,
2101
16
          { "Error Description", "fmp.description",
2102
16
            FT_STRING, BASE_NONE, NULL, 0,
2103
16
            "Client Error Description", HFILL }},
2104
2105
16
        { &hf_fmp_nfsv3Attr_type,
2106
16
          { "Type", "fmp.nfsv3Attr_type",
2107
16
            FT_UINT32, BASE_DEC, NULL, 0,
2108
16
            "NFSV3 Attr Type", HFILL }},
2109
2110
16
        { &hf_fmp_nfsv3Attr_mode,
2111
16
          { "Mode", "fmp.nfsv3Attr_mod",
2112
16
            FT_UINT32, BASE_DEC, NULL, 0,
2113
16
            NULL, HFILL }},
2114
2115
16
        { &hf_fmp_nfsv3Attr_nlink,
2116
16
          { "nlink", "fmp.nfsv3Attr_nlink",
2117
16
            FT_UINT32, BASE_DEC, NULL, 0,
2118
16
            NULL, HFILL }},
2119
2120
16
        { &hf_fmp_nfsv3Attr_uid,
2121
16
          { "uid", "fmp.nfsv3Attr_uid",
2122
16
            FT_UINT32, BASE_DEC, NULL, 0,
2123
16
            NULL, HFILL }},
2124
2125
16
        { &hf_fmp_nfsv3Attr_gid,
2126
16
          { "gid", "fmp.nfsv3Attr_gid",
2127
16
            FT_UINT32, BASE_DEC, NULL, 0,
2128
16
            NULL, HFILL }},
2129
2130
        /* for nfsv3Attr_size use hf_fmp_fileSize */
2131
16
        { &hf_fmp_nfsv3Attr_used,
2132
16
          { "Used", "fmp.nfsv3Attr_used",
2133
16
            FT_UINT64, BASE_DEC, NULL, 0,
2134
16
            NULL, HFILL }},
2135
2136
16
        { &hf_fmp_nfsv3Attr_rdev,
2137
16
          { "rdev", "fmp.nfsv3Attr_rdev",
2138
16
            FT_UINT64, BASE_DEC, NULL, 0,
2139
16
            NULL, HFILL }},
2140
2141
16
        { &hf_fmp_nfsv3Attr_fsid,
2142
16
          { "fsid", "fmp.nfsv3Attr_fsid",
2143
16
            FT_UINT64, BASE_DEC, NULL, 0,
2144
16
            NULL, HFILL }},
2145
2146
16
        { &hf_fmp_nfsv3Attr_fileid,
2147
16
          { "File ID", "fmp.nfsv3Attr_fileid",
2148
16
            FT_UINT64, BASE_DEC, NULL, 0,
2149
16
            NULL, HFILL }},
2150
2151
16
        { &hf_fmp_cmd,
2152
16
          { "Command", "fmp.cmd",
2153
16
            FT_UINT32, BASE_DEC, NULL, 0,
2154
16
            NULL, HFILL }},
2155
2156
16
        { &hf_fmp_topVolumeId,
2157
16
          { "Top Volume ID", "fmp.topVolumeId",
2158
16
            FT_UINT32, BASE_HEX, NULL, 0,
2159
16
            NULL, HFILL }},
2160
2161
16
        { &hf_fmp_cursor,
2162
16
          { "number of volumes", "fmp.cursor",
2163
16
            FT_UINT32, BASE_DEC, NULL, 0,
2164
16
            NULL, HFILL }},
2165
2166
16
        { &hf_fmp_offset64,
2167
16
          { "offset", "fmp.offset64",
2168
16
            FT_UINT64, BASE_DEC, NULL, 0,
2169
16
            NULL, HFILL }},
2170
2171
16
        { &hf_fmp_slice_size,
2172
16
          { "size of the slice", "fmp.slice_size",
2173
16
            FT_UINT64, BASE_DEC, NULL, 0,
2174
16
            NULL, HFILL }},
2175
2176
16
        { &hf_fmp_volume,
2177
16
          { "Volume ID's", "fmp.volume",
2178
16
            FT_UINT32, BASE_HEX, NULL, 0,
2179
16
            NULL, HFILL }},
2180
2181
16
        { &hf_fmp_stripeSize,
2182
16
          { "size of the stripe", "fmp.stripeSize",
2183
16
            FT_UINT64, BASE_DEC, NULL, 0,
2184
16
            NULL, HFILL }},
2185
2186
16
        { &hf_fmp_firstLogBlk64,
2187
16
          { "First Logical Block", "fmp.firstLogBlk64",
2188
16
            FT_UINT64, BASE_DEC, NULL, 0,
2189
16
            NULL, HFILL }},
2190
2191
16
        { &hf_fmp_native_protocol,
2192
16
          { "Native Protocol", "fmp.native_protocol",
2193
16
            FT_UINT32, BASE_DEC, VALS(fmp_native_protocol_vals), 0,
2194
16
            NULL, HFILL }},
2195
2196
16
        { &hf_fmp_encoding_mode,
2197
16
          { "Encoding Mode", "fmp.encoding_mode",
2198
16
            FT_UINT32, BASE_DEC, VALS(fmp_encoding_mode_vals), 0,
2199
16
            NULL, HFILL }},
2200
2201
16
        { &hf_fmp_capability,
2202
16
          { "Volume Mgmt Capability", "fmp.capability",
2203
16
            FT_UINT32, BASE_DEC, VALS(fmp_volume_mgmt_capability_vals), 0,
2204
16
            NULL, HFILL }},
2205
2206
16
        { &hf_fmp_devSerial_query_cmd,
2207
16
          { "Query Command", "fmp.devSerial.query_cmd",
2208
16
            FT_UINT32, BASE_DEC, VALS(fmp_query_cmd_vals), 0,
2209
16
            NULL, HFILL }},
2210
2211
16
        { &hf_fmp_volume_desc,
2212
16
          { "VOLUME", "fmp.volume_desc",
2213
16
            FT_UINT32, BASE_DEC, VALS(fmp_volume_desc_vals), 0,
2214
16
            NULL, HFILL }},
2215
2216
16
        { &hf_fmp_disk_identifier,
2217
16
          { "DISK IDENTIFIER", "fmp.disk_identifier",
2218
16
            FT_UINT32, BASE_DEC, VALS(fmp_disk_identifier_vals), 0,
2219
16
            NULL, HFILL }},
2220
2221
16
        { &hf_fmp_volume_mgmt_type,
2222
16
          { "Volume Mgmt Type", "fmp.volume_mgmt_type",
2223
16
            FT_UINT32, BASE_DEC, VALS(fmp_volume_mgmt_type_vals), 0,
2224
16
            NULL, HFILL }},
2225
2226
16
        { &hf_fmp_notify_protocol,
2227
16
          { "Protocol", "fmp.notify_protocol",
2228
16
            FT_UINT32, BASE_DEC, VALS(fmp_notify_protocol_vals), 0,
2229
16
            NULL, HFILL }},
2230
2231
16
        { &hf_fmp_client_error_number,
2232
16
          { "CLIENT Error Number", "fmp.client_error_number",
2233
16
            FT_UINT32, BASE_DEC, VALS(fmp_client_error_number_vals), 0,
2234
16
            NULL, HFILL }},
2235
2236
      /* Generated from convert_proto_tree_add_text.pl */
2237
16
      { &hf_fmp_fid, { "fid", "fmp.fid", FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2238
16
      { &hf_fmp_tid, { "tid", "fmp.tid", FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2239
16
      { &hf_fmp_uid, { "uid", "fmp.uid", FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2240
16
      { &hf_fmp_fsid, { "FsID", "fmp.fsid", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2241
16
      { &hf_fmp_cifsport, { "cifsPort", "fmp.cifsport", FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2242
16
      { &hf_fmp_number_of_disk, { "Number of Disk", "fmp.number_of_disk", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2243
16
      { &hf_fmp_length_of_list, { "Length of List", "fmp.length_of_list", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2244
16
      { &hf_fmp_sigoffset, { "sigOffset", "fmp.sigoffset", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2245
16
      { &hf_fmp_length_of_volume_list, { "Length of volume List", "fmp.length_of_volume_list", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2246
16
      { &hf_fmp_blockindex, { "blockIndex", "fmp.blockindex", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2247
16
      { &hf_fmp_cap, { "Capabilities", "fmp.cap", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2248
16
      { &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 }},
2249
16
      { &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 }},
2250
16
      { &hf_fmp_cap_cifsv2, { "CAP_CIFSV2", "fmp.cap.cifsv2", FT_BOOLEAN, 32, TFS(&tfs_yes_no), FMP_CAP_CIFSV2, NULL, HFILL }},
2251
16
      { &hf_fmp_mtime, { "mtime", "fmp.mtime", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2252
16
      { &hf_fmp_atime, { "atime", "fmp.atime", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2253
16
      { &hf_fmp_ctime, { "ctime", "fmp.ctime", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2254
16
      { &hf_fmp_heartbeat_interval, { "Heartbeat interval", "fmp.heartbeat_interval", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2255
16
      { &hf_fmp_volindex, { "volIndex", "fmp.volindex", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2256
16
    };
2257
2258
16
    static int *ett[] = {
2259
16
        &ett_fmp,
2260
16
        &ett_fmp_timeval,
2261
16
        &ett_fmp_extList,
2262
16
        &ett_fmp_ext,
2263
16
        &ett_fmp_fileHandle,
2264
16
        &ett_capabilities,
2265
16
        &ett_HierVolumeDescription,
2266
16
        &ett_attrs
2267
16
    };
2268
2269
16
    module_t *fmp_module;
2270
16
    proto_fmp = proto_register_protocol("File Mapping Protocol", "FMP", "fmp");
2271
2272
16
    proto_register_field_array(proto_fmp, hf, array_length(hf));
2273
16
    proto_register_subtree_array(ett, array_length(ett));
2274
2275
16
    fmp_module=prefs_register_protocol(proto_fmp, NULL);
2276
2277
16
    prefs_register_bool_preference(fmp_module, "fhandle_find_both_reqrep",
2278
16
                                   "Fhandle filters finds both request/response",
2279
16
                                   "With this option display filters for fmp fhandle a RPC call,"
2280
16
                                   " even if the actual fhandle is only present in one of the packets",
2281
16
                                   &fmp_fhandle_reqrep_matching);
2282
2283
16
}
2284
2285
void
2286
proto_reg_handoff_fmp(void)
2287
16
{
2288
    /* Register the protocol as RPC */
2289
16
    rpc_init_prog(proto_fmp, FMP_PROGRAM, ett_fmp,
2290
                  G_N_ELEMENTS(fmp_vers_info), fmp_vers_info);
2291
16
}
2292
2293
/*
2294
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
2295
 *
2296
 * Local variables:
2297
 * c-basic-offset: 4
2298
 * tab-width: 8
2299
 * indent-tabs-mode: nil
2300
 * End:
2301
 *
2302
 * vi: set shiftwidth=4 tabstop=8 expandtab:
2303
 * :indentSize=4:tabSize=8:noTabs=true:
2304
 */