|
libaaruformat 1.0
Aaru Data Preservation Suite - Format Library
|
Header preceding a version 2 hierarchical deduplication table. More...
#include <aaruformat/structs/ddt.h>
Data Fields | |
| uint32_t | identifier |
| Block identifier, must be BlockType::DeDuplicationTable2. | |
| uint16_t | type |
| Data classification (DataType) for sectors referenced by this table. | |
| uint16_t | compression |
| Compression algorithm for this table body (CompressionType). | |
| uint8_t | levels |
| Total number of hierarchy levels (root depth); > 0. | |
| uint8_t | tableLevel |
| Zero-based level index of this table (0 = root, increases downward). | |
| uint64_t | previousLevelOffset |
| Absolute byte offset of the parent (previous) level table; 0 if root. | |
| uint16_t | negative |
| Leading negative LBA count; added to external L to build internal index. | |
| uint64_t | blocks |
| Total internal span (negative + usable + overflow) in logical sectors. | |
| uint16_t | overflow |
| Trailing dumped sectors beyond user area (overflow range), still mapped with entries. | |
| uint64_t | start |
| Base internal index covered by this table (used for secondary tables; currently informational). | |
| uint8_t | blockAlignmentShift |
| 2^blockAlignmentShift = block alignment boundary in bytes. | |
| uint8_t | dataShift |
| 2^dataShift = sectors represented per increment in blockIndex field. | |
| uint8_t | tableShift |
| 2^tableShift = number of logical sectors per primary entry (multi-level only; 0 for single-level or secondary tables). | |
| uint64_t | entries |
| Number of entries contained in (uncompressed) table payload. | |
| uint64_t | cmpLength |
| Compressed payload size in bytes. | |
| uint64_t | length |
| Uncompressed payload size in bytes. | |
| uint64_t | cmpCrc64 |
| CRC64-ECMA of compressed table payload. | |
| uint64_t | crc64 |
| CRC64-ECMA of uncompressed table payload. | |
Header preceding a version 2 hierarchical deduplication table.
Version 2 introduces multi-level tables to efficiently address very large images by subdividing the logical address space. Tables at higher levels partition regions; leaves contain direct (block, sector) entry mappings. Navigation uses tableLevel (0 = root) and levels (total depth).
Logical sector (LBA) mapping (actual implementation in decode_ddt_{single,multi}_level_v2):
Field roles:
Notes & current limitations:
Example (Compact Disc): Disc has 360000 user sectors. Lead-in captured as 15000 negative sectors and lead-out as 15000 overflow sectors. negative = 15000 overflow = 15000 user sectors = 360000 blocks (internal span) = negative + user + overflow = 390000 External LBA spans: -15000 .. 374999
| uint8_t DdtHeader2::blockAlignmentShift |
2^blockAlignmentShift = block alignment boundary in bytes.
Definition at line 154 of file ddt.h.
Referenced by aaruf_close_current_block(), aaruf_create(), aaruf_open(), decode_ddt_multi_level_v2(), decode_ddt_single_level_v2(), set_ddt_multi_level_v2(), set_ddt_single_level_v2(), set_ddt_tape(), write_aaru_json_block(), write_cached_secondary_ddt(), write_checksum_block(), write_cicm_block(), write_dumphw_block(), write_dvd_long_sector_blocks(), write_dvd_title_key_decrypted_block(), write_geometry_block(), write_index_block(), write_media_tags(), write_metadata_block(), write_mode2_subheaders_block(), write_sector_prefix(), write_sector_prefix_ddt(), write_sector_subchannel(), write_sector_suffix(), write_sector_suffix_ddt(), write_single_level_ddt(), write_tape_file_block(), write_tape_partition_block(), and write_tracks_block().
| uint64_t DdtHeader2::blocks |
Total internal span (negative + usable + overflow) in logical sectors.
Definition at line 150 of file ddt.h.
Referenced by aaruf_create(), aaruf_get_user_sectors(), aaruf_open(), process_ddt_v2(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), and write_tape_ddt().
| uint64_t DdtHeader2::cmpCrc64 |
CRC64-ECMA of compressed table payload.
Definition at line 161 of file ddt.h.
Referenced by aaruf_verify_image(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_primary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), and write_single_level_ddt().
| uint64_t DdtHeader2::cmpLength |
Compressed payload size in bytes.
Definition at line 159 of file ddt.h.
Referenced by aaruf_verify_image(), decode_ddt_multi_level_v2(), process_ddt_v2(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_primary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), write_single_level_ddt(), and write_tape_ddt().
| uint16_t DdtHeader2::compression |
Compression algorithm for this table body (CompressionType).
Definition at line 145 of file ddt.h.
Referenced by aaruf_create(), aaruf_verify_image(), decode_ddt_multi_level_v2(), process_ddt_v2(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_primary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), write_single_level_ddt(), and write_tape_ddt().
| uint64_t DdtHeader2::crc64 |
CRC64-ECMA of uncompressed table payload.
Definition at line 162 of file ddt.h.
Referenced by decode_ddt_multi_level_v2(), process_ddt_v2(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_primary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), and write_single_level_ddt().
| uint8_t DdtHeader2::dataShift |
2^dataShift = sectors represented per increment in blockIndex field.
Definition at line 155 of file ddt.h.
Referenced by aaruf_create(), aaruf_write_sector(), decode_ddt_multi_level_v2(), decode_ddt_single_level_v2(), set_ddt_multi_level_v2(), set_ddt_single_level_v2(), set_ddt_tape(), write_cached_secondary_ddt(), write_sector_prefix_ddt(), and write_sector_suffix_ddt().
| uint64_t DdtHeader2::entries |
Number of entries contained in (uncompressed) table payload.
Definition at line 158 of file ddt.h.
Referenced by aaruf_create(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_primary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), write_single_level_ddt(), and write_tape_ddt().
| uint32_t DdtHeader2::identifier |
Block identifier, must be BlockType::DeDuplicationTable2.
Definition at line 143 of file ddt.h.
Referenced by aaruf_create(), decode_ddt_multi_level_v2(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_primary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), write_single_level_ddt(), and write_tape_ddt().
| uint64_t DdtHeader2::length |
Uncompressed payload size in bytes.
Definition at line 160 of file ddt.h.
Referenced by decode_ddt_multi_level_v2(), process_ddt_v2(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_primary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), write_single_level_ddt(), and write_tape_ddt().
| uint8_t DdtHeader2::levels |
Total number of hierarchy levels (root depth); > 0.
Definition at line 146 of file ddt.h.
Referenced by aaruf_create(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), write_single_level_ddt(), and write_tape_ddt().
| uint16_t DdtHeader2::negative |
Leading negative LBA count; added to external L to build internal index.
Definition at line 149 of file ddt.h.
Referenced by aaruf_create(), aaruf_get_negative_sectors(), aaruf_read_sector(), aaruf_read_sector_long(), aaruf_read_sector_tag(), aaruf_write_sector(), aaruf_write_sector_long(), aaruf_write_sector_tag(), decode_ddt_multi_level_v2(), decode_ddt_single_level_v2(), process_ddt_v2(), set_ddt_multi_level_v2(), set_ddt_single_level_v2(), write_cached_secondary_ddt(), write_dvd_long_sector_blocks(), write_dvd_title_key_decrypted_block(), write_mode2_subheaders_block(), write_sector_prefix_ddt(), write_sector_subchannel(), write_sector_suffix_ddt(), and write_tape_ddt().
| uint16_t DdtHeader2::overflow |
Trailing dumped sectors beyond user area (overflow range), still mapped with entries.
Definition at line 151 of file ddt.h.
Referenced by aaruf_create(), aaruf_get_overflow_sectors(), aaruf_read_sector(), aaruf_read_sector_long(), aaruf_read_sector_tag(), aaruf_write_sector(), aaruf_write_sector_long(), aaruf_write_sector_tag(), process_ddt_v2(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_dvd_long_sector_blocks(), write_dvd_title_key_decrypted_block(), write_mode2_subheaders_block(), write_sector_prefix_ddt(), write_sector_subchannel(), write_sector_suffix_ddt(), and write_tape_ddt().
| uint64_t DdtHeader2::previousLevelOffset |
Absolute byte offset of the parent (previous) level table; 0 if root.
Definition at line 148 of file ddt.h.
Referenced by aaruf_create(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_single_level_ddt(), and write_tape_ddt().
| uint64_t DdtHeader2::start |
Base internal index covered by this table (used for secondary tables; currently informational).
Definition at line 153 of file ddt.h.
Referenced by aaruf_create(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), and write_tape_ddt().
| uint8_t DdtHeader2::tableLevel |
Zero-based level index of this table (0 = root, increases downward).
Definition at line 147 of file ddt.h.
Referenced by aaruf_create(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), write_single_level_ddt(), and write_tape_ddt().
| uint8_t DdtHeader2::tableShift |
2^tableShift = number of logical sectors per primary entry (multi-level only; 0 for single-level or secondary tables).
Definition at line 156 of file ddt.h.
Referenced by aaruf_create(), decode_ddt_entry_v2(), decode_ddt_multi_level_v2(), decode_ddt_single_level_v2(), set_ddt_entry_v2(), set_ddt_multi_level_v2(), set_ddt_single_level_v2(), write_cached_secondary_ddt(), write_primary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), write_single_level_ddt(), and write_tape_ddt().
| uint16_t DdtHeader2::type |
Data classification (DataType) for sectors referenced by this table.
Definition at line 144 of file ddt.h.
Referenced by aaruf_create(), decode_ddt_multi_level_v2(), set_ddt_multi_level_v2(), write_cached_secondary_ddt(), write_primary_ddt(), write_sector_prefix_ddt(), write_sector_suffix_ddt(), write_single_level_ddt(), and write_tape_ddt().