diff options
author | Volodymyr Khomenko <Volodymyr_Khomenko@DellTeam.com> | 2017-02-27 15:06:23 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2017-02-28 05:23:34 +0000 |
commit | 606f941e7f9f67f7851c6eb285ca30175aad0344 (patch) | |
tree | 06d715e9b6652f4068f4311d8f3657ba23382b3c /epan/dissectors/packet-rsvd.c | |
parent | 4ef0fa2f15b0d389e05ff94024f194702ddf42f9 (diff) |
RSVDv2 support - 2nd stage
Improved META_OPERATION_START (CreateSnapshot, ApplySnapshot)
Added VHDSET_QUERY_INFORMATION (SnapshotEntry)
Added DELETE_SNAPSHOT
Minor fixes:
RSVD Status field of RSVD header shown as NT_STATUS
Using more structural names for RSVDv2 hf_
Change-Id: I0199527a2de819796c7b34b663df73547f32d2fd
Ping-Bug: 11232
Reviewed-on: https://code.wireshark.org/review/20300
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-rsvd.c')
-rw-r--r-- | epan/dissectors/packet-rsvd.c | 322 |
1 files changed, 288 insertions, 34 deletions
diff --git a/epan/dissectors/packet-rsvd.c b/epan/dissectors/packet-rsvd.c index 35d12029bc..02640ecbb6 100644 --- a/epan/dissectors/packet-rsvd.c +++ b/epan/dissectors/packet-rsvd.c @@ -31,6 +31,7 @@ #include <epan/conversation.h> #include <epan/packet.h> #include "packet-smb-common.h" +#include "packet-windows-common.h" #include "packet-scsi.h" void proto_reg_handoff_rsvd(void); @@ -86,19 +87,37 @@ static int hf_svhdx_tunnel_safe_virtual_size = -1; static int hf_svhdx_tunnel_transaction_id = -1; static int hf_svhdx_tunnel_meta_operation_type = -1; static int hf_svhdx_tunnel_padding = -1; -static int hf_svhdx_tunnel_new_size = -1; -static int hf_svhdx_tunnel_expand_only_flag = -1; -static int hf_svhdx_tunnel_allow_unsafe_virt_size_flag = -1; -static int hf_svhdx_tunnel_shrink_to_minimum_safe_size_flag = -1; +static int hf_svhdx_tunnel_resize_new_size = -1; +static int hf_svhdx_tunnel_resize_expand_only_flag = -1; +static int hf_svhdx_tunnel_resize_allow_unsafe_virt_size_flag = -1; +static int hf_svhdx_tunnel_resize_shrink_to_minimum_safe_size_flag = -1; static int hf_svhdx_tunnel_meta_operation_start_reserved = -1; -static int hf_svhdx_tunnel_current_progress = -1; -static int hf_svhdx_tunnel_complete_value = -1; -static int hf_svhdx_tunnel_dst_vhdset_name_len = -1; -static int hf_svhdx_tunnel_dst_vhdset_name = -1; +static int hf_svhdx_tunnel_snapshot_type = -1; +static int hf_svhdx_tunnel_snapshot_id = -1; +static int hf_svhdx_tunnel_create_snapshot_flags = -1; +static int hf_svhdx_tunnel_create_snapshot_flag_enable_change_tracking = -1; +static int hf_svhdx_tunnel_create_snapshot_stage1 = -1; +static int hf_svhdx_tunnel_create_snapshot_stage2 = -1; +static int hf_svhdx_tunnel_create_snapshot_stage3 = -1; +static int hf_svhdx_tunnel_create_snapshot_stage4 = -1; +static int hf_svhdx_tunnel_create_snapshot_stage5 = -1; +static int hf_svhdx_tunnel_create_snapshot_stage6 = -1; +static int hf_svhdx_tunnel_create_snapshot_parameters_payload_size = -1; +static int hf_svhdx_tunnel_convert_dst_vhdset_name_len = -1; +static int hf_svhdx_tunnel_convert_dst_vhdset_name = -1; +static int hf_svhdx_tunnel_delete_snapshot_persist_reference = -1; +static int hf_svhdx_tunnel_meta_op_query_progress_current_progress = -1; +static int hf_svhdx_tunnel_meta_op_query_progress_complete_value = -1; +static int hf_svhdx_tunnel_vhdset_information_type = -1; +static int hf_svhdx_tunnel_vhdset_snapshot_creation_time = -1; +static int hf_svhdx_tunnel_vhdset_is_valid_snapshot = -1; +static int hf_svhdx_tunnel_vhdset_parent_snapshot_id = -1; +static int hf_svhdx_tunnel_vhdset_log_file_id = -1; static gint ett_rsvd = -1; static gint ett_svhdx_tunnel_op_header = -1; static gint ett_svhdx_tunnel_scsi_request = -1; +static gint ett_rsvd_create_snapshot_flags = -1; static const value_string rsvd_operation_code_vals[] = { { 0x02001001, "RSVD_TUNNEL_GET_INITIAL_INFO" }, @@ -587,9 +606,33 @@ static const value_string rsvd_meta_operation_type_vals[] = { { 0, NULL } }; +static const value_string svhdx_snapshot_type_vals[] = { + { 0x01, "SvhdxSnapshotTypeVM" }, + { 0x03, "SvhdxSnapshotTypeCDP" }, + { 0x04, "SvhdxSnapshotTypeWriteable" }, + { 0, NULL } +}; + +static const value_string svhdx_snapshot_stage_vals[] = { + { 0x00, "SvhdxSnapshotStageInvalid" }, + { 0x01, "SvhdxSnapshotStageInitialize" }, + { 0x02, "SvhdxSnapshotStageBlockIO" }, + { 0x03, "SvhdxSnapshotStageSwitchObjectStore" }, + { 0x04, "SvhdxSnapshotStageUnblockIO" }, + { 0x05, "SvhdxSnapshotStageFinalize" }, + { 0, NULL } +}; + +#define SVHDX_SNAPSHOT_DISK_FLAG_ENABLE_CHANGE_TRACKING 0x00000001 + static int dissect_RSVD2_META_OPERATION_START(tvbuff_t *tvb, proto_tree *parent_tree, int offset, gint16 len, gboolean request) { + static const int * meta_operation_create_snapshot_flags[] = { + &hf_svhdx_tunnel_create_snapshot_flag_enable_change_tracking, + NULL + }; + guint32 operation_type = 0; guint32 length = 0; proto_tree *gfi_sub_tree; @@ -611,24 +654,63 @@ dissect_RSVD2_META_OPERATION_START(tvbuff_t *tvb, proto_tree *parent_tree, int o switch (operation_type) { case 0x00: /* SvhdxMetaOperationTypeResize */ - proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_new_size, tvb, offset, 8, ENC_LITTLE_ENDIAN); + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_resize_new_size, tvb, offset, 8, ENC_LITTLE_ENDIAN); offset += 8; - proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_expand_only_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_resize_expand_only_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset += 1; - proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_allow_unsafe_virt_size_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_resize_allow_unsafe_virt_size_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset += 1; - proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_shrink_to_minimum_safe_size_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_resize_shrink_to_minimum_safe_size_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset += 1; proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_meta_operation_start_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset += 1; break; + case 0x01: /* SvhdxMetaOperationTypeCreateSnapshot */ + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_snapshot_type, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_bitmask(gfi_sub_tree, tvb, offset, hf_svhdx_tunnel_create_snapshot_flags, + ett_rsvd_create_snapshot_flags, meta_operation_create_snapshot_flags, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_create_snapshot_stage1, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_create_snapshot_stage2, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_create_snapshot_stage3, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_create_snapshot_stage4, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_create_snapshot_stage5, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_create_snapshot_stage6, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_snapshot_id, tvb, offset, 16, ENC_LITTLE_ENDIAN); + offset += 16; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_create_snapshot_parameters_payload_size, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + break; + case 0x02: /* SvhdxMetaOperationTypeOptimize */ + /* No Data, field MUST be empty */ + break; + case 0x03: /* SvhdxMetaOperationTypeExtractVHD */ + /* TODO */ + break; case 0x04: /* SvhdxMetaOperationTypeConvertToVHDSet */ length = tvb_get_letohl(tvb, offset); - proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_dst_vhdset_name_len, tvb, offset, 4, ENC_LITTLE_ENDIAN); + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_convert_dst_vhdset_name_len, tvb, offset, 4, ENC_LITTLE_ENDIAN); offset += 4; if (length) { @@ -639,14 +721,19 @@ dissect_RSVD2_META_OPERATION_START(tvbuff_t *tvb, proto_tree *parent_tree, int o name = get_unicode_or_ascii_string(tvb, &offset, TRUE, &length, TRUE, TRUE, &bc); if (name) { - proto_tree_add_string(gfi_sub_tree, hf_svhdx_tunnel_dst_vhdset_name, tvb, + proto_tree_add_string(gfi_sub_tree, hf_svhdx_tunnel_convert_dst_vhdset_name, tvb, offset, length, name); } } break; - default: - /* TODO: implement other types of meta operations */ + case 0x05: /* SvhdxMetaOperationTypeApplySnapshot */ + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_snapshot_type, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_snapshot_id, tvb, offset, 16, ENC_LITTLE_ENDIAN); + offset += 16; + break; } } @@ -669,16 +756,106 @@ dissect_RSVD2_META_OPERATION_QUERY_PROGRESS(tvbuff_t *tvb, if (status == 0) { /* If status is not successful, RSVD response buffer is filled by data from request buffer and we should not parse output structure */ gfi_sub_tree = proto_tree_add_subtree(parent_tree, tvb, offset, len, ett_svhdx_tunnel_op_header, &gfi_sub_item, "RSVD_TUNNEL_META_OPERATION_QUERY_PROGRESS_RESPONSE"); - proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_current_progress, tvb, offset, 8, ENC_LITTLE_ENDIAN); + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_meta_op_query_progress_current_progress, tvb, offset, 8, ENC_LITTLE_ENDIAN); offset += 8; - proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_complete_value, tvb, offset, 8, ENC_LITTLE_ENDIAN); + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_meta_op_query_progress_complete_value, tvb, offset, 8, ENC_LITTLE_ENDIAN); offset += 8; } } return offset; } +static const value_string svhdx_vhdset_information_type_vals[] = { + { 0x02, "SvhdxVHDSetInformationTypeSnapshotList" }, + { 0x05, "SvhdxVHDSetInformationTypeSnapshotEntry" }, + { 0x08, "SvhdxVHDSetInformationTypeOptimizeNeeded" }, + { 0x09, "SvhdxVHDSetInformationTypeCdpSnapshotRoot" }, + { 0x0A, "SvhdxVHDSetInformationTypeCdpSnapshotActiveList" }, + { 0x0C, "SvhdxVHDSetInformationTypeCdpSnapshotInactiveList" }, + { 0, NULL } +}; +static int +dissect_RSVD2_VHDSET_QUERY_INFORMATION(tvbuff_t *tvb, proto_tree *parent_tree, int offset, gint16 len, gboolean request) +{ + proto_tree *gfi_sub_tree; + proto_item *gfi_sub_item; + + if (request) { + gfi_sub_tree = proto_tree_add_subtree(parent_tree, tvb, offset, len, ett_svhdx_tunnel_op_header, &gfi_sub_item, "RSVD_TUNNEL_VHDSET_QUERY_INFORMATION_REQUEST"); + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_vhdset_information_type, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_snapshot_type, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_snapshot_id, tvb, offset, 16, ENC_LITTLE_ENDIAN); + offset += 16; + } else { + guint32 vhdset_info_type = tvb_get_letohl(tvb, offset); + switch (vhdset_info_type) { + case 0x02: /* SvhdxVHDSetInformationTypeSnapshotList */ + gfi_sub_tree = proto_tree_add_subtree(parent_tree, tvb, offset, len, ett_svhdx_tunnel_op_header, &gfi_sub_item, "RSVD_TUNNEL_VHDSET_QUERY_INFORMATION_SNAPSHOT_LIST_RESPONSE"); + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_vhdset_information_type, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + /* TODO: make full dissection */ + + break; + case 0x05: /* SvhdxVHDSetInformationTypeSnapshotEntry */ + gfi_sub_tree = proto_tree_add_subtree(parent_tree, tvb, offset, len, ett_svhdx_tunnel_op_header, &gfi_sub_item, "RSVD_TUNNEL_VHDSET_QUERY_INFORMATION_SNAPSHOT_ENTRY_RESPONSE"); + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_vhdset_information_type, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_padding, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + offset = dissect_nt_64bit_time(tvb, gfi_sub_tree, offset, hf_svhdx_tunnel_vhdset_snapshot_creation_time); + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_snapshot_type, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_vhdset_is_valid_snapshot, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_snapshot_id, tvb, offset, 16, ENC_LITTLE_ENDIAN); + offset += 16; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_vhdset_parent_snapshot_id, tvb, offset, 16, ENC_LITTLE_ENDIAN); + offset += 16; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_vhdset_log_file_id, tvb, offset, 16, ENC_LITTLE_ENDIAN); + offset += 16; + + break; + } + } + return offset; +} + +static int +dissect_RSVD2_DELETE_SNAPSHOT(tvbuff_t *tvb, proto_tree *parent_tree, int offset, gint16 len, gboolean request) +{ + proto_tree *gfi_sub_tree; + proto_item *gfi_sub_item; + + if (request) { + gfi_sub_tree = proto_tree_add_subtree(parent_tree, tvb, offset, len, ett_svhdx_tunnel_op_header, &gfi_sub_item, "RSVD_TUNNEL_DELETE_SNAPSHOT_REQUEST"); + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_snapshot_id, tvb, offset, 16, ENC_LITTLE_ENDIAN); + offset += 16; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_delete_snapshot_persist_reference, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + + proto_tree_add_item(gfi_sub_tree, hf_svhdx_tunnel_snapshot_type, tvb, offset, 4, ENC_LITTLE_ENDIAN); + offset += 4; + } + return offset; +} + static int dissect_RSVD2_QUERY_SAFE_SIZE(tvbuff_t *tvb, proto_tree *parent_tree, int offset, gint16 len, gboolean request) { @@ -805,6 +982,14 @@ dissect_rsvd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void *d offset += dissect_RSVD2_META_OPERATION_QUERY_PROGRESS(tvb, rsvd_tree, offset, len - offset, request, status); break; + case 0x02002005: + offset += dissect_RSVD2_VHDSET_QUERY_INFORMATION(tvb, rsvd_tree, offset, len - offset, request); + break; + + case 0x02002006: + offset += dissect_RSVD2_DELETE_SNAPSHOT(tvb, rsvd_tree, offset, len - offset, request); + break; + case 0x0200200D: offset += dissect_RSVD2_QUERY_SAFE_SIZE(tvb, rsvd_tree, offset, len - offset, request); break; @@ -836,8 +1021,9 @@ proto_register_rsvd(void) VALS(rsvd_operation_code_vals), 0, "Operation Code", HFILL }}, { &hf_svhdx_status, - { "Status", "rsvd.svhdx_status", FT_UINT32, BASE_HEX, - NULL, 0, NULL, HFILL }}, + { "Status", "rsvd.svhdx_status", FT_UINT32, BASE_HEX | BASE_EXT_STRING, + &NT_errors_ext, 0, NULL, HFILL }}, + { &hf_svhdx_request_id, { "RequestId", "rsvd.svhdx_request_id", FT_UINT64, BASE_HEX, @@ -1017,22 +1203,22 @@ proto_register_rsvd(void) VALS(rsvd_meta_operation_type_vals), 0, "Type of meta-operation", HFILL }}, { &hf_svhdx_tunnel_padding, - { "Padding", "rsvd.svhdx_meta_operation.padding", FT_UINT32, BASE_DEC, + { "Padding", "rsvd.svhdx_padding", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_svhdx_tunnel_new_size, + { &hf_svhdx_tunnel_resize_new_size, { "NewSize", "rsvd.svhdx_meta_operation.new_size", FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_svhdx_tunnel_expand_only_flag, + { &hf_svhdx_tunnel_resize_expand_only_flag, { "ExpandOnly", "rsvd.svhdx_meta_operation.expand_only", FT_BOOLEAN, 8, NULL, 0, "Indicates that shared virtual disk size can only expand", HFILL }}, - { &hf_svhdx_tunnel_allow_unsafe_virt_size_flag, + { &hf_svhdx_tunnel_resize_allow_unsafe_virt_size_flag, { "AllowUnsafeVirtualSize", "rsvd.svhdx_meta_operation.allow_unsafe_virt_size", FT_BOOLEAN, 8, NULL, 0, "Indicates that the shared virtual disk size can be less than the data it currently contains", HFILL }}, - { &hf_svhdx_tunnel_shrink_to_minimum_safe_size_flag, + { &hf_svhdx_tunnel_resize_shrink_to_minimum_safe_size_flag, { "ShrinkToMinimumSafeSize", "rsvd.svhdx_meta_operation.shrink_to_minimum_safe_size", FT_BOOLEAN, 8, NULL, 0, "Indicates that the shared virtual disk size can be shrunk to the data it currently contains", HFILL }}, @@ -1040,28 +1226,96 @@ proto_register_rsvd(void) { "Reserved", "rsvd.svhdx_meta_operation.reserved", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_svhdx_tunnel_current_progress, - { "CurrentProgressValue", "rsvd.svhdx_meta_operation.current_progress", FT_UINT64, BASE_DEC, + { &hf_svhdx_tunnel_snapshot_type, + { "SnapshotType", "rsvd.svhdx_snapshot_type", FT_UINT32, BASE_HEX, + VALS(svhdx_snapshot_type_vals), 0, "Type of snapshot", HFILL }}, + + { &hf_svhdx_tunnel_snapshot_id, + { "SnapshotId", "rsvd.svhdx_snapshot_id", FT_GUID, BASE_NONE, + NULL, 0, NULL, HFILL }}, + + { &hf_svhdx_tunnel_create_snapshot_flags, + { "Flags", "rsvd.svhdx_meta_operation.create_snapshot_flags", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }}, - { &hf_svhdx_tunnel_complete_value, - { "CompleteValue", "rsvd.svhdx_meta_operation.complete_value", FT_UINT64, BASE_DEC, + { &hf_svhdx_tunnel_create_snapshot_flag_enable_change_tracking, + { "SVHDX_SNAPSHOT_DISK_FLAG_ENABLE_CHANGE_TRACKING", "rsvd.svhdx_meta_operation.create_snapshot_flag_enable_change_tracking", FT_BOOLEAN, 32, + NULL, SVHDX_SNAPSHOT_DISK_FLAG_ENABLE_CHANGE_TRACKING, "Change tracking to be enabled when snapshot is taken", HFILL }}, + + { &hf_svhdx_tunnel_create_snapshot_stage1, + { "Stage1", "rsvd.svhdx_meta_operation.create_snapshot_stage1", FT_UINT32, BASE_HEX, + VALS(svhdx_snapshot_stage_vals), 0, "The first stage", HFILL }}, + + { &hf_svhdx_tunnel_create_snapshot_stage2, + { "Stage2", "rsvd.svhdx_meta_operation.create_snapshot_stage2", FT_UINT32, BASE_HEX, + VALS(svhdx_snapshot_stage_vals), 0, "The second stage", HFILL }}, + + { &hf_svhdx_tunnel_create_snapshot_stage3, + { "Stage3", "rsvd.svhdx_meta_operation.create_snapshot_stage3", FT_UINT32, BASE_HEX, + VALS(svhdx_snapshot_stage_vals), 0, "The third stage", HFILL }}, + + { &hf_svhdx_tunnel_create_snapshot_stage4, + { "Stage4", "rsvd.svhdx_meta_operation.create_snapshot_stage4", FT_UINT32, BASE_HEX, + VALS(svhdx_snapshot_stage_vals), 0, "The fourth stage", HFILL }}, + + { &hf_svhdx_tunnel_create_snapshot_stage5, + { "Stage5", "rsvd.svhdx_meta_operation.create_snapshot_stage5", FT_UINT32, BASE_HEX, + VALS(svhdx_snapshot_stage_vals), 0, "The fifth stage", HFILL }}, + + { &hf_svhdx_tunnel_create_snapshot_stage6, + { "Stage6", "rsvd.svhdx_meta_operation.create_snapshot_stage6", FT_UINT32, BASE_HEX, + VALS(svhdx_snapshot_stage_vals), 0, "The sixth stage", HFILL }}, + + { &hf_svhdx_tunnel_create_snapshot_parameters_payload_size, + { "ParametersPayloadSize", "rsvd.svhdx_meta_operation.create_snapshot_params_payload_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_svhdx_tunnel_dst_vhdset_name_len, + { &hf_svhdx_tunnel_convert_dst_vhdset_name_len, { "DestinationVhdSetNameLength", "rsvd.svhdx_meta_operation.dst_vhdset_name_len", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, - { &hf_svhdx_tunnel_dst_vhdset_name, + { &hf_svhdx_tunnel_convert_dst_vhdset_name, { "DestinationVhdSetName", "rsvd.svhdx_meta_operation.dst_vhdset_name", FT_STRING, BASE_NONE, - NULL, 0, "Name for the new VHD set be created", HFILL } - }, + NULL, 0, "Name for the new VHD set be created", HFILL }}, + + { &hf_svhdx_tunnel_delete_snapshot_persist_reference, + { "PersistReference", "rsvd.svhdx_delete_snapshot_persist_reference", FT_BOOLEAN, 4, + NULL, 0, "Indicate if the snapshot needs to be persisted", HFILL }}, + + { &hf_svhdx_tunnel_meta_op_query_progress_current_progress, + { "CurrentProgressValue", "rsvd.svhdx_query_progress.current_progress", FT_UINT64, BASE_DEC, + NULL, 0, NULL, HFILL }}, + + { &hf_svhdx_tunnel_meta_op_query_progress_complete_value, + { "CompleteValue", "rsvd.svhdx_query_progress.complete_value", FT_UINT64, BASE_DEC, + NULL, 0, NULL, HFILL }}, + + { &hf_svhdx_tunnel_vhdset_information_type, + { "VHDSetInformationType", "rsvd.svhdx_vhdset_information_type", FT_UINT32, BASE_HEX, + VALS(svhdx_vhdset_information_type_vals), 0, "The information type requested", HFILL }}, + + { &hf_svhdx_tunnel_vhdset_snapshot_creation_time, + { "SnapshotCreationTime", "rsvd.svhdx_vhdset_snapshot_creation_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time when this object was created", HFILL }}, + + { &hf_svhdx_tunnel_vhdset_is_valid_snapshot, + { "IsValidSnapshot", "rsvd.svhdx_vhdset_is_valid_snapshot", FT_BOOLEAN, 4, + NULL, 0, "Set to 1 when the snapshot is valid", HFILL }}, + + { &hf_svhdx_tunnel_vhdset_parent_snapshot_id, + { "ParentSnapshotId", "rsvd.svhdx_vhdxset_parent_snapshot_id", FT_GUID, BASE_NONE, + NULL, 0, NULL, HFILL }}, + + { &hf_svhdx_tunnel_vhdset_log_file_id, + { "LogFileId", "rsvd.svhdx_vhdxset_log_file_id", FT_GUID, BASE_NONE, + NULL, 0, NULL, HFILL }} }; static gint *ett[] = { &ett_rsvd, &ett_svhdx_tunnel_op_header, - &ett_svhdx_tunnel_scsi_request + &ett_svhdx_tunnel_scsi_request, + &ett_rsvd_create_snapshot_flags }; proto_rsvd = proto_register_protocol("Remote Shared Virtual Disk", |